From ba3088c4bd22ddb8d2a5f93a02c96d612caf0271 Mon Sep 17 00:00:00 2001
From: Thomas Eichinger <thomas.eichinger1@gmail.com>
Date: Thu, 24 Apr 2014 16:25:24 +0200
Subject: [PATCH] added iot-lab_M3 and temporarily dropped telosb support;
 split patch.txt into separate patch files

---
 pkg/openwsn/Makefile                          |     5 +-
 pkg/openwsn/Makefile.include                  |     1 +
 pkg/openwsn/README.md                         |    28 +-
 pkg/openwsn/apply_patches.sh                  |    14 +
 pkg/openwsn/patch.txt                         | 38412 ----------------
 .../patches/02a-MAClow_IEEE802154.c.patch     |   Bin 0 -> 10561 bytes
 .../patches/02a-MAClow_IEEE802154.h.patch     |   Bin 0 -> 3023 bytes
 .../patches/02a-MAClow_IEEE802154E.c.patch    |   Bin 0 -> 67753 bytes
 .../patches/02a-MAClow_IEEE802154E.h.patch    |   Bin 0 -> 10500 bytes
 pkg/openwsn/patches/02a-MAClow_Makefile.patch |   Bin 0 -> 1319 bytes
 .../02a-MAClow_stupidmac_Makefile.patch       |   Bin 0 -> 531 bytes
 .../02a-MAClow_stupidmac_stupidmac.c.patch    |   Bin 0 -> 3894 bytes
 .../02a-MAClow_stupidmac_stupidmac.h.patch    |   Bin 0 -> 1230 bytes
 .../patches/02a-MAClow_topology.c.patch       |   Bin 0 -> 1715 bytes
 .../patches/02a-MAClow_topology.h.patch       |   Bin
 .../patches/02b-MAChigh_Makefile.patch        |   Bin 0 -> 1321 bytes
 .../patches/02b-MAChigh_neighbors.c.patch     |   Bin 0 -> 14774 bytes
 .../patches/02b-MAChigh_neighbors.h.patch     |   Bin 0 -> 3927 bytes
 pkg/openwsn/patches/02b-MAChigh_res.c.patch   |   Bin 0 -> 14675 bytes
 pkg/openwsn/patches/02b-MAChigh_res.h.patch   |   Bin 0 -> 1902 bytes
 .../patches/02b-MAChigh_schedule.c.patch      |   Bin 0 -> 18904 bytes
 .../patches/02b-MAChigh_schedule.h.patch      |   Bin 0 -> 6975 bytes
 pkg/openwsn/patches/03a-IPHC_Makefile.patch   |   Bin 0 -> 1315 bytes
 pkg/openwsn/patches/03a-IPHC_iphc.c.patch     |   Bin 0 -> 24912 bytes
 pkg/openwsn/patches/03a-IPHC_iphc.h.patch     |   Bin 0 -> 4003 bytes
 .../patches/03a-IPHC_openbridge.c.patch       |   Bin 0 -> 3953 bytes
 .../patches/03a-IPHC_openbridge.h.patch       |   Bin 0 -> 740 bytes
 pkg/openwsn/patches/03b-IPv6_Makefile.patch   |   Bin 0 -> 1315 bytes
 .../patches/03b-IPv6_forwarding.c.patch       |   Bin 0 -> 18996 bytes
 .../patches/03b-IPv6_forwarding.h.patch       |   Bin 0 -> 1455 bytes
 pkg/openwsn/patches/03b-IPv6_icmpv6.c.patch   |   Bin 0 -> 1122 bytes
 pkg/openwsn/patches/03b-IPv6_icmpv6.h.patch   |   Bin 0 -> 758 bytes
 .../patches/03b-IPv6_icmpv6echo.c.patch       |   Bin 0 -> 3201 bytes
 .../patches/03b-IPv6_icmpv6echo.h.patch       |   Bin 0 -> 1189 bytes
 .../patches/03b-IPv6_icmpv6rpl.c.patch        |   Bin 0 -> 13672 bytes
 .../patches/03b-IPv6_icmpv6rpl.h.patch        |   Bin 0 -> 3401 bytes
 pkg/openwsn/patches/04-TRAN_Makefile.patch    |   Bin 0 -> 1732 bytes
 pkg/openwsn/patches/04-TRAN_opencoap.c.patch  |   Bin 0 -> 14142 bytes
 pkg/openwsn/patches/04-TRAN_opencoap.h.patch  |   Bin 0 -> 8272 bytes
 pkg/openwsn/patches/04-TRAN_opentcp.c.patch   |   Bin 0 -> 13212 bytes
 pkg/openwsn/patches/04-TRAN_opentcp.h.patch   |   Bin 0 -> 2150 bytes
 pkg/openwsn/patches/04-TRAN_openudp.c.patch   |   Bin 0 -> 2263 bytes
 pkg/openwsn/patches/04-TRAN_openudp.h.patch   |   Bin 0 -> 1012 bytes
 pkg/openwsn/patches/04-TRAN_rsvp.c.patch      |   Bin 0 -> 1221 bytes
 pkg/openwsn/patches/04-TRAN_rsvp.h.patch      |   Bin 0 -> 440 bytes
 pkg/openwsn/patches/07-App_Makefile.patch     |   Bin 0 -> 1776 bytes
 pkg/openwsn/patches/07-App_heli_heli.c.patch  |   Bin
 pkg/openwsn/patches/07-App_heli_heli.h.patch  |   Bin 0 -> 1103 bytes
 pkg/openwsn/patches/07-App_heli_heli.py.patch |   Bin
 pkg/openwsn/patches/07-App_imu_imu.c.patch    |   Bin 0 -> 718 bytes
 pkg/openwsn/patches/07-App_imu_imu.h.patch    |   Bin 0 -> 716 bytes
 pkg/openwsn/patches/07-App_imu_imu.py.patch   |   Bin
 .../07-App_layerdebug_layerdebug.c.patch      |   Bin 0 -> 7696 bytes
 .../07-App_layerdebug_layerdebug.h.patch      |   Bin 0 -> 370 bytes
 .../patches/07-App_ohlone_Makefile.patch      |   Bin 0 -> 1334 bytes
 .../patches/07-App_ohlone_ohlone.c.patch      |   Bin 0 -> 2688 bytes
 .../patches/07-App_ohlone_ohlone.h.patch      |   Bin 0 -> 1764 bytes
 .../07-App_ohlone_ohlone_webpages.c.patch     |   Bin 0 -> 702 bytes
 .../07-App_ohlone_ohlone_webpages.h.patch     |   Bin 0 -> 698 bytes
 pkg/openwsn/patches/07-App_rex_rex.c.patch    |   Bin 0 -> 4404 bytes
 pkg/openwsn/patches/07-App_rex_rex.h.patch    |   Bin 0 -> 327 bytes
 .../patches/07-App_rheli_rheli.c.patch        |   Bin 0 -> 2416 bytes
 .../patches/07-App_rheli_rheli.h.patch        |   Bin 0 -> 346 bytes
 .../patches/07-App_rinfo_Makefile.patch       |   Bin 0 -> 1332 bytes
 .../patches/07-App_rinfo_rinfo.c.patch        |   Bin 0 -> 3356 bytes
 .../patches/07-App_rinfo_rinfo.h.patch        |   Bin 0 -> 628 bytes
 .../patches/07-App_rleds_rleds.c.patch        |   Bin 0 -> 3663 bytes
 .../patches/07-App_rleds_rleds.h.patch        |   Bin 0 -> 631 bytes
 pkg/openwsn/patches/07-App_rreg_rreg.c.patch  |   Bin 0 -> 6004 bytes
 pkg/openwsn/patches/07-App_rreg_rreg.h.patch  |   Bin 0 -> 338 bytes
 .../patches/07-App_rrube_rrube.c.patch        |   Bin 0 -> 4738 bytes
 .../patches/07-App_rrube_rrube.h.patch        |   Bin 0 -> 346 bytes
 pkg/openwsn/patches/07-App_rt_rt.c.patch      |   Bin 0 -> 4505 bytes
 pkg/openwsn/patches/07-App_rt_rt.h.patch      |   Bin 0 -> 322 bytes
 .../patches/07-App_rwellknown_Makefile.patch  |   Bin 0 -> 1342 bytes
 .../07-App_rwellknown_rwellknown.c.patch      |   Bin 0 -> 4232 bytes
 .../07-App_rwellknown_rwellknown.h.patch      |   Bin 0 -> 680 bytes
 pkg/openwsn/patches/07-App_rxl1_rxl1.c.patch  |   Bin 0 -> 4314 bytes
 pkg/openwsn/patches/07-App_rxl1_rxl1.h.patch  |   Bin 0 -> 338 bytes
 .../patches/07-App_tcpecho_Makefile.patch     |   Bin 0 -> 1336 bytes
 .../patches/07-App_tcpecho_tcpecho.c.patch    |   Bin 0 -> 1388 bytes
 .../patches/07-App_tcpecho_tcpecho.h.patch    |   Bin 0 -> 1076 bytes
 .../patches/07-App_tcpinject_Makefile.patch   |   Bin 0 -> 1340 bytes
 .../07-App_tcpinject_tcpinject.c.patch        |   Bin 0 -> 2961 bytes
 .../07-App_tcpinject_tcpinject.h.patch        |   Bin 0 -> 1703 bytes
 .../patches/07-App_tcpprint_Makefile.patch    |   Bin 0 -> 1338 bytes
 .../patches/07-App_tcpprint_tcpprint.c.patch  |   Bin 0 -> 1045 bytes
 .../patches/07-App_tcpprint_tcpprint.h.patch  |   Bin 0 -> 1109 bytes
 .../patches/07-App_udpecho_Makefile.patch     |   Bin 0 -> 1336 bytes
 .../patches/07-App_udpecho_udpecho.c.patch    |   Bin 0 -> 1281 bytes
 .../patches/07-App_udpecho_udpecho.h.patch    |   Bin 0 -> 933 bytes
 .../patches/07-App_udpecho_udpecho.py.patch   |   Bin 0 -> 2113 bytes
 .../patches/07-App_udpinject_Makefile.patch   |   Bin 0 -> 1340 bytes
 .../07-App_udpinject_udpinject.c.patch        |   Bin 0 -> 1487 bytes
 .../07-App_udpinject_udpinject.h.patch        |   Bin 0 -> 1025 bytes
 .../patches/07-App_udplatency_Makefile.patch  |   Bin 0 -> 1342 bytes
 .../07-App_udplatency_udplatency.c.patch      |   Bin 0 -> 7332 bytes
 .../07-App_udplatency_udplatency.h.patch      |   Bin 0 -> 1673 bytes
 .../patches/07-App_udpprint_Makefile.patch    |   Bin 0 -> 1338 bytes
 .../patches/07-App_udpprint_udpprint.c.patch  |   Bin 0 -> 1151 bytes
 .../patches/07-App_udpprint_udpprint.h.patch  |   Bin 0 -> 949 bytes
 .../patches/07-App_udprand_Makefile.patch     |   Bin 0 -> 1336 bytes
 .../patches/07-App_udprand_udprand.c.patch    |   Bin 0 -> 3254 bytes
 .../patches/07-App_udprand_udprand.h.patch    |   Bin 0 -> 1050 bytes
 .../patches/07-App_udpstorm_Makefile.patch    |   Bin 0 -> 1338 bytes
 .../patches/07-App_udpstorm_udpstorm.c.patch  |   Bin 0 -> 5734 bytes
 .../patches/07-App_udpstorm_udpstorm.h.patch  |   Bin 0 -> 659 bytes
 pkg/openwsn/patches/Makefile.patch            |   Bin 0 -> 2074 bytes
 pkg/openwsn/patches/Systick.c.patch           |   Bin 0 -> 368 bytes
 pkg/openwsn/patches/Systick.h.patch           |   Bin 0 -> 303 bytes
 pkg/openwsn/patches/at86rf231.h.patch         |   Bin 0 -> 24775 bytes
 pkg/openwsn/patches/board_info.h.patch        |   Bin 0 -> 3418 bytes
 pkg/openwsn/patches/board_ow.c.patch          |   Bin 0 -> 3509 bytes
 pkg/openwsn/patches/board_ow.h.patch          |   Bin 0 -> 1965 bytes
 .../patches/cross-layers_Makefile.patch       |   Bin 0 -> 1323 bytes
 .../patches/cross-layers_idmanager.c.patch    |   Bin 0 -> 13766 bytes
 .../patches/cross-layers_idmanager.h.patch    |   Bin 0 -> 2237 bytes
 .../patches/cross-layers_openqueue.c.patch    |   Bin 0 -> 3493 bytes
 .../patches/cross-layers_openqueue.h.patch    |   Bin 0 -> 2098 bytes
 .../patches/cross-layers_openrandom.c.patch   |   Bin 0 -> 1693 bytes
 .../patches/cross-layers_openrandom.h.patch   |   Bin 0 -> 1226 bytes
 .../cross-layers_packetfunctions.c.patch      |   Bin 0 -> 4864 bytes
 .../cross-layers_packetfunctions.h.patch      |   Bin 0 -> 415 bytes
 pkg/openwsn/patches/debugpins.c.patch         |   Bin 0 -> 1330 bytes
 pkg/openwsn/patches/debugpins.h.patch         |   Bin 0 -> 2423 bytes
 pkg/openwsn/patches/eui64.c.patch             |   Bin 0 -> 1256 bytes
 pkg/openwsn/patches/eui64.h.patch             |   Bin 0 -> 937 bytes
 pkg/openwsn/patches/exti.c.patch              |   Bin 0 -> 484 bytes
 pkg/openwsn/patches/gpio.c.patch              |   Bin 0 -> 1504 bytes
 pkg/openwsn/patches/gpio.h.patch              |   Bin 0 -> 533 bytes
 pkg/openwsn/patches/isr.c.patch               |   Bin 0 -> 1693 bytes
 pkg/openwsn/patches/leds_ow.c.patch           |   Bin 0 -> 3946 bytes
 pkg/openwsn/patches/leds_ow.h.patch           |   Bin 0 -> 2461 bytes
 pkg/openwsn/patches/nvic.c.patch              |   Bin 0 -> 5022 bytes
 pkg/openwsn/patches/nvic.h.patch              |   Bin 0 -> 972 bytes
 pkg/openwsn/patches/openhdlc.c.patch          |   Bin
 pkg/openwsn/patches/openhdlc.h.patch          |   Bin 0 -> 343 bytes
 pkg/openwsn/patches/openserial.c.patch        |   Bin 0 -> 39039 bytes
 pkg/openwsn/patches/openserial.h.patch        |   Bin 0 -> 3847 bytes
 pkg/openwsn/patches/opentimers.c.patch        |   Bin 0 -> 9303 bytes
 pkg/openwsn/patches/opentimers.h.patch        |   Bin 0 -> 2082 bytes
 pkg/openwsn/patches/openwsn.c.patch           |   Bin 0 -> 4949 bytes
 pkg/openwsn/patches/openwsn.h.patch           |   Bin 0 -> 17260 bytes
 pkg/openwsn/patches/radio.c.patch             |   Bin 0 -> 13229 bytes
 pkg/openwsn/patches/radio.h.patch             |   Bin 0 -> 3313 bytes
 pkg/openwsn/patches/radiotimer.c.patch        |   Bin 0 -> 7856 bytes
 pkg/openwsn/patches/radiotimer.h.patch        |   Bin 0 -> 3241 bytes
 pkg/openwsn/patches/rcc.c.patch               |   Bin 0 -> 2635 bytes
 pkg/openwsn/patches/rcc.h.patch               |   Bin 0 -> 673 bytes
 pkg/openwsn/patches/scheduler.c.patch         |   Bin 0 -> 4816 bytes
 pkg/openwsn/patches/scheduler.h.patch         |   Bin 0 -> 1868 bytes
 pkg/openwsn/patches/spi.c.patch               |   Bin 0 -> 8853 bytes
 pkg/openwsn/patches/spi.h.patch               |   Bin 0 -> 1129 bytes
 pkg/openwsn/patches/stm32f10x_lib.h.patch     |   Bin 0 -> 3506 bytes
 pkg/openwsn/patches/uart_ow.c.patch           |   Bin 0 -> 4194 bytes
 pkg/openwsn/patches/uart_ow.h.patch           |   Bin 0 -> 2351 bytes
 pkg/openwsn/structure_changes.sh              |    85 +-
 157 files changed, 103 insertions(+), 38442 deletions(-)
 create mode 100644 pkg/openwsn/Makefile.include
 create mode 100644 pkg/openwsn/apply_patches.sh
 delete mode 100644 pkg/openwsn/patch.txt
 create mode 100644 pkg/openwsn/patches/02a-MAClow_IEEE802154.c.patch
 create mode 100644 pkg/openwsn/patches/02a-MAClow_IEEE802154.h.patch
 create mode 100644 pkg/openwsn/patches/02a-MAClow_IEEE802154E.c.patch
 create mode 100644 pkg/openwsn/patches/02a-MAClow_IEEE802154E.h.patch
 create mode 100644 pkg/openwsn/patches/02a-MAClow_Makefile.patch
 create mode 100644 pkg/openwsn/patches/02a-MAClow_stupidmac_Makefile.patch
 create mode 100644 pkg/openwsn/patches/02a-MAClow_stupidmac_stupidmac.c.patch
 create mode 100644 pkg/openwsn/patches/02a-MAClow_stupidmac_stupidmac.h.patch
 create mode 100644 pkg/openwsn/patches/02a-MAClow_topology.c.patch
 create mode 100644 pkg/openwsn/patches/02a-MAClow_topology.h.patch
 create mode 100644 pkg/openwsn/patches/02b-MAChigh_Makefile.patch
 create mode 100644 pkg/openwsn/patches/02b-MAChigh_neighbors.c.patch
 create mode 100644 pkg/openwsn/patches/02b-MAChigh_neighbors.h.patch
 create mode 100644 pkg/openwsn/patches/02b-MAChigh_res.c.patch
 create mode 100644 pkg/openwsn/patches/02b-MAChigh_res.h.patch
 create mode 100644 pkg/openwsn/patches/02b-MAChigh_schedule.c.patch
 create mode 100644 pkg/openwsn/patches/02b-MAChigh_schedule.h.patch
 create mode 100644 pkg/openwsn/patches/03a-IPHC_Makefile.patch
 create mode 100644 pkg/openwsn/patches/03a-IPHC_iphc.c.patch
 create mode 100644 pkg/openwsn/patches/03a-IPHC_iphc.h.patch
 create mode 100644 pkg/openwsn/patches/03a-IPHC_openbridge.c.patch
 create mode 100644 pkg/openwsn/patches/03a-IPHC_openbridge.h.patch
 create mode 100644 pkg/openwsn/patches/03b-IPv6_Makefile.patch
 create mode 100644 pkg/openwsn/patches/03b-IPv6_forwarding.c.patch
 create mode 100644 pkg/openwsn/patches/03b-IPv6_forwarding.h.patch
 create mode 100644 pkg/openwsn/patches/03b-IPv6_icmpv6.c.patch
 create mode 100644 pkg/openwsn/patches/03b-IPv6_icmpv6.h.patch
 create mode 100644 pkg/openwsn/patches/03b-IPv6_icmpv6echo.c.patch
 create mode 100644 pkg/openwsn/patches/03b-IPv6_icmpv6echo.h.patch
 create mode 100644 pkg/openwsn/patches/03b-IPv6_icmpv6rpl.c.patch
 create mode 100644 pkg/openwsn/patches/03b-IPv6_icmpv6rpl.h.patch
 create mode 100644 pkg/openwsn/patches/04-TRAN_Makefile.patch
 create mode 100644 pkg/openwsn/patches/04-TRAN_opencoap.c.patch
 create mode 100644 pkg/openwsn/patches/04-TRAN_opencoap.h.patch
 create mode 100644 pkg/openwsn/patches/04-TRAN_opentcp.c.patch
 create mode 100644 pkg/openwsn/patches/04-TRAN_opentcp.h.patch
 create mode 100644 pkg/openwsn/patches/04-TRAN_openudp.c.patch
 create mode 100644 pkg/openwsn/patches/04-TRAN_openudp.h.patch
 create mode 100644 pkg/openwsn/patches/04-TRAN_rsvp.c.patch
 create mode 100644 pkg/openwsn/patches/04-TRAN_rsvp.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_heli_heli.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_heli_heli.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_heli_heli.py.patch
 create mode 100644 pkg/openwsn/patches/07-App_imu_imu.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_imu_imu.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_imu_imu.py.patch
 create mode 100644 pkg/openwsn/patches/07-App_layerdebug_layerdebug.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_layerdebug_layerdebug.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_ohlone_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_ohlone_ohlone.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_ohlone_ohlone.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_ohlone_ohlone_webpages.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_ohlone_ohlone_webpages.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_rex_rex.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_rex_rex.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_rheli_rheli.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_rheli_rheli.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_rinfo_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_rinfo_rinfo.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_rinfo_rinfo.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_rleds_rleds.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_rleds_rleds.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_rreg_rreg.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_rreg_rreg.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_rrube_rrube.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_rrube_rrube.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_rt_rt.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_rt_rt.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_rwellknown_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_rwellknown_rwellknown.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_rwellknown_rwellknown.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_rxl1_rxl1.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_rxl1_rxl1.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_tcpecho_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_tcpecho_tcpecho.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_tcpecho_tcpecho.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_tcpinject_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_tcpinject_tcpinject.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_tcpinject_tcpinject.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_tcpprint_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_tcpprint_tcpprint.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_tcpprint_tcpprint.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpecho_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpecho_udpecho.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpecho_udpecho.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpecho_udpecho.py.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpinject_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpinject_udpinject.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpinject_udpinject.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_udplatency_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_udplatency_udplatency.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_udplatency_udplatency.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpprint_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpprint_udpprint.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpprint_udpprint.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_udprand_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_udprand_udprand.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_udprand_udprand.h.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpstorm_Makefile.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpstorm_udpstorm.c.patch
 create mode 100644 pkg/openwsn/patches/07-App_udpstorm_udpstorm.h.patch
 create mode 100644 pkg/openwsn/patches/Makefile.patch
 create mode 100644 pkg/openwsn/patches/Systick.c.patch
 create mode 100644 pkg/openwsn/patches/Systick.h.patch
 create mode 100644 pkg/openwsn/patches/at86rf231.h.patch
 create mode 100644 pkg/openwsn/patches/board_info.h.patch
 create mode 100644 pkg/openwsn/patches/board_ow.c.patch
 create mode 100644 pkg/openwsn/patches/board_ow.h.patch
 create mode 100644 pkg/openwsn/patches/cross-layers_Makefile.patch
 create mode 100644 pkg/openwsn/patches/cross-layers_idmanager.c.patch
 create mode 100644 pkg/openwsn/patches/cross-layers_idmanager.h.patch
 create mode 100644 pkg/openwsn/patches/cross-layers_openqueue.c.patch
 create mode 100644 pkg/openwsn/patches/cross-layers_openqueue.h.patch
 create mode 100644 pkg/openwsn/patches/cross-layers_openrandom.c.patch
 create mode 100644 pkg/openwsn/patches/cross-layers_openrandom.h.patch
 create mode 100644 pkg/openwsn/patches/cross-layers_packetfunctions.c.patch
 create mode 100644 pkg/openwsn/patches/cross-layers_packetfunctions.h.patch
 create mode 100644 pkg/openwsn/patches/debugpins.c.patch
 create mode 100644 pkg/openwsn/patches/debugpins.h.patch
 create mode 100644 pkg/openwsn/patches/eui64.c.patch
 create mode 100644 pkg/openwsn/patches/eui64.h.patch
 create mode 100644 pkg/openwsn/patches/exti.c.patch
 create mode 100644 pkg/openwsn/patches/gpio.c.patch
 create mode 100644 pkg/openwsn/patches/gpio.h.patch
 create mode 100644 pkg/openwsn/patches/isr.c.patch
 create mode 100644 pkg/openwsn/patches/leds_ow.c.patch
 create mode 100644 pkg/openwsn/patches/leds_ow.h.patch
 create mode 100644 pkg/openwsn/patches/nvic.c.patch
 create mode 100644 pkg/openwsn/patches/nvic.h.patch
 create mode 100644 pkg/openwsn/patches/openhdlc.c.patch
 create mode 100644 pkg/openwsn/patches/openhdlc.h.patch
 create mode 100644 pkg/openwsn/patches/openserial.c.patch
 create mode 100644 pkg/openwsn/patches/openserial.h.patch
 create mode 100644 pkg/openwsn/patches/opentimers.c.patch
 create mode 100644 pkg/openwsn/patches/opentimers.h.patch
 create mode 100644 pkg/openwsn/patches/openwsn.c.patch
 create mode 100644 pkg/openwsn/patches/openwsn.h.patch
 create mode 100644 pkg/openwsn/patches/radio.c.patch
 create mode 100644 pkg/openwsn/patches/radio.h.patch
 create mode 100644 pkg/openwsn/patches/radiotimer.c.patch
 create mode 100644 pkg/openwsn/patches/radiotimer.h.patch
 create mode 100644 pkg/openwsn/patches/rcc.c.patch
 create mode 100644 pkg/openwsn/patches/rcc.h.patch
 create mode 100644 pkg/openwsn/patches/scheduler.c.patch
 create mode 100644 pkg/openwsn/patches/scheduler.h.patch
 create mode 100644 pkg/openwsn/patches/spi.c.patch
 create mode 100644 pkg/openwsn/patches/spi.h.patch
 create mode 100644 pkg/openwsn/patches/stm32f10x_lib.h.patch
 create mode 100644 pkg/openwsn/patches/uart_ow.c.patch
 create mode 100644 pkg/openwsn/patches/uart_ow.h.patch
 mode change 100755 => 100644 pkg/openwsn/structure_changes.sh

diff --git a/pkg/openwsn/Makefile b/pkg/openwsn/Makefile
index d11a230bb8..bb584e2a7b 100644
--- a/pkg/openwsn/Makefile
+++ b/pkg/openwsn/Makefile
@@ -21,13 +21,14 @@ endif
 .PHONY: all clean
 
 all: $(CURDIR)/$(PKG_NAME)-$(PKG_VERSION)/
+	$(info *INFO* Building OpenWSN pkg)
 	make -C $(CURDIR)/$(PKG_NAME)-$(PKG_VERSION)
 
 $(CURDIR)/$(PKG_NAME)-$(PKG_VERSION)/: $(CURDIR)/$(PKG_NAME)-$(PKG_VERSION).$(PKG_EXT)
 	$(AD)rm -rf $(CURDIR)/$(PKG_NAME)-$(PKG_VERSION)
-	$(AD)$(UNPACK) $< -d $(PKG_NAME)-$(PKG_VERSION)
+	$(AD)$(UNPACK) -q $< -d $(PKG_NAME)-$(PKG_VERSION)
 	$(AD)cd $@ && sh ../structure_changes.sh
-	$(AD)cd $@ && patch -p0 -N -i ../patch.txt
+	$(AD)cd $@ && sh ../apply_patches.sh
 
 $(CURDIR)/$(PKG_NAME)-$(PKG_VERSION).$(PKG_EXT):
 	# Get PKG_VERSION of package from PKG_URL
diff --git a/pkg/openwsn/Makefile.include b/pkg/openwsn/Makefile.include
new file mode 100644
index 0000000000..0bf5c69c22
--- /dev/null
+++ b/pkg/openwsn/Makefile.include
@@ -0,0 +1 @@
+export INCLUDES += -I${RIOTBASE}/drivers/include/
diff --git a/pkg/openwsn/README.md b/pkg/openwsn/README.md
index 15ef36f405..5d52db1d5c 100644
--- a/pkg/openwsn/README.md
+++ b/pkg/openwsn/README.md
@@ -1,8 +1,32 @@
+# OpenWSN on RIOT
+
+This port of OpenWSN to RIOT is based on release RB-1.4 with backported support
+for the iot-lab_M3 board from the develop branch.
+
 # Compatibility
 
-This port of the openwsn stack is compatible with the TelosB board only for now.
+This port of the openwsn stack is compatible with the iot-lab_M3 board only for now.
+The TelosB board support was temporarily dropped but will return soon again.
 The hardware dependency will be reduced in the future and thous running on more
 hardware platforms.
 
+# Usage
+
 A test can be found in the [projects repository](https://github.com/RIOT-OS/projects/)
-named ```test_openwsn_pkg``` with an example ```Makefile```.
\ No newline at end of file
+named ```test_openwsn_pkg``` with an example ```Makefile```.
+
+Build using
+```Bash
+$> export BOARD=iot-lab_M3
+$> export PORT=/dev/ttyTHEPORTOFYOURIOTLAB
+$> make -B clean flash
+```
+
+To use OpenWSN with RIOT it has to be added to the used packages variable
+```Makefile
+USEPKG += openwsn
+```
+
+On the first build the archive will be fetched, patched and built.
+**WARNING** A call of `make clean` also cleans the OpenWSN tree right now so
+changes to the source code will be lost in the next build.
diff --git a/pkg/openwsn/apply_patches.sh b/pkg/openwsn/apply_patches.sh
new file mode 100644
index 0000000000..773c47d4c6
--- /dev/null
+++ b/pkg/openwsn/apply_patches.sh
@@ -0,0 +1,14 @@
+#!/usr/bin/env sh
+
+set -o nounset                              # Treat unset variables as an error
+
+if [[ $QUIET == "1" ]]; then
+    for i in `ls ../patches`; do
+        patch -p1 -N -i ../patches/$i > /dev/null
+    done
+else
+    for i in `ls ../patches`; do
+        patch -p1 -N -i ../patches/$i
+    done
+fi
+exit 0
diff --git a/pkg/openwsn/patch.txt b/pkg/openwsn/patch.txt
deleted file mode 100644
index 0828c6f171..0000000000
--- a/pkg/openwsn/patch.txt
+++ /dev/null
@@ -1,38412 +0,0 @@
-diff -crB openwsn/02a-MAClow/IEEE802154.c ../../../sys/net/openwsn/02a-MAClow/IEEE802154.c
-*** openwsn/02a-MAClow/IEEE802154.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02a-MAClow/IEEE802154.c	Wed Jan 15 13:48:26 2014
-***************
-*** 1,220 ****
-! #include "openwsn.h"
-! #include "IEEE802154.h"
-! #include "packetfunctions.h"
-! #include "idmanager.h"
-! #include "openserial.h"
-! #include "topology.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! /**
-! \brief Prepend the IEEE802.15.4 MAC header to a (to be transmitted) packet.
-! 
-! Note that we are writing the field from the end of the header to the beginning.
-! 
-! \param msg             [in,out] The message to append the header to.
-! \param frameType       [in]     Type of IEEE802.15.4 frame.
-! \param securityEnabled [in]     Is security enabled on this frame?
-! \param nextHop         [in]     Address of the next hop
-! */
-! void ieee802154_prependHeader(OpenQueueEntry_t* msg,
-!                               uint8_t           frameType,
-!                               bool              securityEnabled,
-!                               uint8_t           sequenceNumber,
-!                               open_addr_t*      nextHop) {
-!    uint8_t temp_8b;
-!    
-!    // previousHop address (always 64-bit)
-!    packetfunctions_writeAddress(msg,idmanager_getMyID(ADDR_64B),LITTLE_ENDIAN);
-!    // nextHop address
-!    if (packetfunctions_isBroadcastMulticast(nextHop)) {
-!       //broadcast address is always 16-bit
-!       packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!       *((uint8_t*)(msg->payload)) = 0xFF;
-!       packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!       *((uint8_t*)(msg->payload)) = 0xFF;
-!    } else {
-!       switch (nextHop->type) {
-!          case ADDR_16B:
-!          case ADDR_64B:
-!             packetfunctions_writeAddress(msg,nextHop,LITTLE_ENDIAN);
-!             break;
-!          default:
-!             openserial_printCritical(COMPONENT_IEEE802154,ERR_WRONG_ADDR_TYPE,
-!                                   (errorparameter_t)nextHop->type,
-!                                   (errorparameter_t)1);
-!       }
-!       
-!    }
-!    // destpan
-!    packetfunctions_writeAddress(msg,idmanager_getMyID(ADDR_PANID),LITTLE_ENDIAN);
-!    //dsn
-!    packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!    *((uint8_t*)(msg->payload)) = sequenceNumber;
-!    //fcf (2nd byte)
-!    packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!    temp_8b              = 0;
-!    if (packetfunctions_isBroadcastMulticast(nextHop)) {
-!       temp_8b          |= IEEE154_ADDR_SHORT              << IEEE154_FCF_DEST_ADDR_MODE;
-!    } else {
-!       switch (nextHop->type) {
-!          case ADDR_16B:
-!             temp_8b    |= IEEE154_ADDR_SHORT              << IEEE154_FCF_DEST_ADDR_MODE;
-!             break;
-!          case ADDR_64B:
-!             temp_8b    |= IEEE154_ADDR_EXT                << IEEE154_FCF_DEST_ADDR_MODE;
-!             break;
-!          // no need for a default, since it would have been caught above.
-!       }
-!    }
-!    temp_8b             |= IEEE154_ADDR_EXT                << IEEE154_FCF_SRC_ADDR_MODE;
-!    *((uint8_t*)(msg->payload)) = temp_8b;
-!    //fcf (1st byte)
-!    packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!    temp_8b              = 0;
-!    temp_8b             |= frameType                       << IEEE154_FCF_FRAME_TYPE;
-!    temp_8b             |= securityEnabled                 << IEEE154_FCF_SECURITY_ENABLED;
-!    temp_8b             |= IEEE154_PENDING_NO_FRAMEPENDING << IEEE154_FCF_FRAME_PENDING;
-!    if (frameType==IEEE154_TYPE_ACK || packetfunctions_isBroadcastMulticast(nextHop)) {
-!       temp_8b          |= IEEE154_ACK_NO_ACK_REQ          << IEEE154_FCF_ACK_REQ;
-!    } else {
-!       temp_8b          |= IEEE154_ACK_YES_ACK_REQ         << IEEE154_FCF_ACK_REQ;
-!    }
-!    temp_8b             |= IEEE154_PANID_COMPRESSED        << IEEE154_FCF_INTRAPAN;
-!    *((uint8_t*)(msg->payload)) = temp_8b;
-! }
-! 
-! /**
-! \brief Retreieve the IEEE802.15.4 MAC header from a (just received) packet.
-! 
-! Note We are writing the fields from the begnning of the header to the end.
-! 
-! \param msg               [in,out] The message just received.
-! \param ieee802514_header [out]    The internal header to write the data to.
-! */
-! void ieee802154_retrieveHeader(OpenQueueEntry_t*      msg,
-!                                ieee802154_header_iht* ieee802514_header) {
-!    uint8_t temp_8b;
-!    
-!    // by default, let's assume the header is not valid, in case we leave this
-!    // function because the packet ends up being shorter than the header.
-!    ieee802514_header->valid=FALSE;
-!    
-!    ieee802514_header->headerLength = 0;
-!    // fcf, byte 1
-!    if (ieee802514_header->headerLength>msg->length) { return; } // no more to read!
-!    temp_8b = *((uint8_t*)(msg->payload)+ieee802514_header->headerLength);
-!    ieee802514_header->frameType         = (temp_8b >> IEEE154_FCF_FRAME_TYPE      ) & 0x07;//3b
-!    ieee802514_header->securityEnabled   = (temp_8b >> IEEE154_FCF_SECURITY_ENABLED) & 0x01;//1b
-!    ieee802514_header->framePending      = (temp_8b >> IEEE154_FCF_FRAME_PENDING   ) & 0x01;//1b
-!    ieee802514_header->ackRequested      = (temp_8b >> IEEE154_FCF_ACK_REQ         ) & 0x01;//1b
-!    ieee802514_header->panIDCompression  = (temp_8b >> IEEE154_FCF_INTRAPAN        ) & 0x01;//1b
-!    ieee802514_header->headerLength += 1;
-!    // fcf, byte 2
-!    if (ieee802514_header->headerLength>msg->length) { return; } // no more to read!
-!    temp_8b = *((uint8_t*)(msg->payload)+ieee802514_header->headerLength);
-!    switch ( (temp_8b >> IEEE154_FCF_DEST_ADDR_MODE ) & 0x03 ) {
-!       case IEEE154_ADDR_NONE:
-!          ieee802514_header->dest.type = ADDR_NONE;
-!          break;
-!       case IEEE154_ADDR_SHORT:
-!          ieee802514_header->dest.type = ADDR_16B;
-!          break;
-!       case IEEE154_ADDR_EXT:
-!          ieee802514_header->dest.type = ADDR_64B;
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IEEE802154,ERR_IEEE154_UNSUPPORTED,
-!                                (errorparameter_t)1,
-!                                (errorparameter_t)(temp_8b >> IEEE154_FCF_DEST_ADDR_MODE ) & 0x03);
-!          return; // this is an invalid packet, return
-!    }
-!    switch ( (temp_8b >> IEEE154_FCF_SRC_ADDR_MODE ) & 0x03 ) {
-!       case IEEE154_ADDR_NONE:
-!          ieee802514_header->src.type = ADDR_NONE;
-!          break;
-!       case IEEE154_ADDR_SHORT:
-!          ieee802514_header->src.type = ADDR_16B;
-!          break;
-!       case IEEE154_ADDR_EXT:
-!          ieee802514_header->src.type = ADDR_64B;
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IEEE802154,ERR_IEEE154_UNSUPPORTED,
-!                                (errorparameter_t)2,
-!                                (errorparameter_t)(temp_8b >> IEEE154_FCF_SRC_ADDR_MODE ) & 0x03);
-!          return; // this is an invalid packet, return
-!    }
-!    ieee802514_header->headerLength += 1;
-!    // sequenceNumber
-!    if (ieee802514_header->headerLength>msg->length) { return; } // no more to read!
-!    ieee802514_header->dsn  = *((uint8_t*)(msg->payload)+ieee802514_header->headerLength);
-!    ieee802514_header->headerLength += 1;
-!    // panID
-!    if (ieee802514_header->headerLength>msg->length) { return; } // no more to read!
-!    packetfunctions_readAddress(((uint8_t*)(msg->payload)+ieee802514_header->headerLength),
-!                                ADDR_PANID,
-!                                &ieee802514_header->panid,
-!                                LITTLE_ENDIAN);
-!    ieee802514_header->headerLength += 2;
-!    // dest
-!    if (ieee802514_header->headerLength>msg->length) { return; } // no more to read!
-!    switch (ieee802514_header->dest.type) {
-!       case ADDR_NONE:
-!          break;
-!       case ADDR_16B:
-!          packetfunctions_readAddress(
-!              ((uint8_t*)(msg->payload)+ieee802514_header->headerLength),
-!              ADDR_16B,
-!              &ieee802514_header->dest,
-!              LITTLE_ENDIAN
-!          );
-!          ieee802514_header->headerLength += 2;
-!          if (ieee802514_header->headerLength>msg->length) {  return; } // no more to read!
-!          break;
-!       case ADDR_64B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload)+ieee802514_header->headerLength),
-!                                      ADDR_64B,
-!                                      &ieee802514_header->dest,
-!                                      LITTLE_ENDIAN);
-!          ieee802514_header->headerLength += 8;
-!          if (ieee802514_header->headerLength>msg->length) {  return; } // no more to read!
-!          break;
-!       // no need for a default, since case would have been caught above
-!    }
-!    //src
-!    switch (ieee802514_header->src.type) {
-!       case ADDR_NONE:
-!          break;
-!       case ADDR_16B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload)+ieee802514_header->headerLength),
-!                                      ADDR_16B,
-!                                      &ieee802514_header->src,
-!                                      LITTLE_ENDIAN);
-!          ieee802514_header->headerLength += 2;
-!          if (ieee802514_header->headerLength>msg->length) {  return; } // no more to read!
-!          break;
-!       case ADDR_64B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload)+ieee802514_header->headerLength),
-!                                      ADDR_64B,
-!                                      &ieee802514_header->src,
-!                                      LITTLE_ENDIAN);
-!          ieee802514_header->headerLength += 8;
-!          if (ieee802514_header->headerLength>msg->length) {  return; } // no more to read!
-!          break;
-!       // no need for a default, since case would have been caught above
-!    }
-!    // apply topology filter
-!    if (topology_isAcceptablePacket(ieee802514_header)==FALSE) {
-!       // the topology filter does accept this packet, return
-!       return;
-!    }
-!    // if you reach this, the header is valid
-!    ieee802514_header->valid=TRUE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,244 ----
-! #include "openwsn.h"
-! #include "IEEE802154.h"
-! #include "packetfunctions.h"
-! #include "idmanager.h"
-! #include "openserial.h"
-! #include "topology.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! /**
-! \brief Prepend the IEEE802.15.4 MAC header to a (to be transmitted) packet.
-! 
-! Note that we are writing the field from the end of the header to the beginning.
-! 
-! \param[in,out] msg              The message to append the header to.
-! \param[in]     frameType        Type of IEEE802.15.4 frame.
-! \param[in]     ielistpresent    Is the IE list present�
-! \param[in]     frameVersion     IEEE802.15.4 frame version.
-! \param[in]     securityEnabled  Is security enabled on this frame?
-! \param[in]     sequenceNumber   Sequence number of this frame.
-! \param[in]     nextHop          Address of the next hop
-! */
-! void ieee802154_prependHeader(OpenQueueEntry_t* msg,
-!                               uint8_t           frameType,
-!                               uint8_t           ielistpresent,
-!                               uint8_t           frameversion,
-!                               bool              securityEnabled,
-!                               uint8_t           sequenceNumber,
-!                               open_addr_t*      nextHop) {
-!    uint8_t temp_8b;
-!    
-!    //General IEs here (those that are carried in all packets) -- None by now.
-!    
-!    // previousHop address (always 64-bit)
-!    packetfunctions_writeAddress(msg,idmanager_getMyID(ADDR_64B),OW_LITTLE_ENDIAN);
-!    // nextHop address
-!    if (packetfunctions_isBroadcastMulticast(nextHop)) {
-!       //broadcast address is always 16-bit
-!       packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!       *((uint8_t*)(msg->payload)) = 0xFF;
-!       packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!       *((uint8_t*)(msg->payload)) = 0xFF;
-!    } else {
-!       switch (nextHop->type) {
-!          case ADDR_16B:
-!          case ADDR_64B:
-!             packetfunctions_writeAddress(msg,nextHop,OW_LITTLE_ENDIAN);
-!             break;
-!          default:
-!             openserial_printCritical(COMPONENT_IEEE802154,ERR_WRONG_ADDR_TYPE,
-!                                   (errorparameter_t)nextHop->type,
-!                                   (errorparameter_t)1);
-!       }
-!       
-!    }
-!    // destpan
-!    packetfunctions_writeAddress(msg,idmanager_getMyID(ADDR_PANID),OW_LITTLE_ENDIAN);
-!    //dsn
-!    packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!    *((uint8_t*)(msg->payload)) = sequenceNumber;
-!    //fcf (2nd byte)
-!    packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!    temp_8b              = 0;
-!    if (packetfunctions_isBroadcastMulticast(nextHop)) {
-!       temp_8b          |= IEEE154_ADDR_SHORT              << IEEE154_FCF_DEST_ADDR_MODE;
-!    } else {
-!       switch (nextHop->type) {
-!          case ADDR_16B:
-!             temp_8b    |= IEEE154_ADDR_SHORT              << IEEE154_FCF_DEST_ADDR_MODE;
-!             break;
-!          case ADDR_64B:
-!             temp_8b    |= IEEE154_ADDR_EXT                << IEEE154_FCF_DEST_ADDR_MODE;
-!             break;
-!          // no need for a default, since it would have been caught above.
-!       }
-!    }
-!    temp_8b             |= IEEE154_ADDR_EXT                << IEEE154_FCF_SRC_ADDR_MODE;
-!    //poipoi xv IE list present
-!    temp_8b             |= ielistpresent                   << IEEE154_FCF_IELIST_PRESENT;
-!    temp_8b             |= frameversion                    << IEEE154_FCF_FRAME_VERSION;
-!      
-!    *((uint8_t*)(msg->payload)) = temp_8b;
-!    //fcf (1st byte)
-!    packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!    temp_8b              = 0;
-!    temp_8b             |= frameType                       << IEEE154_FCF_FRAME_TYPE;
-!    temp_8b             |= securityEnabled                 << IEEE154_FCF_SECURITY_ENABLED;
-!    temp_8b             |= IEEE154_PENDING_NO_FRAMEPENDING << IEEE154_FCF_FRAME_PENDING;
-!    if (frameType==IEEE154_TYPE_ACK || packetfunctions_isBroadcastMulticast(nextHop)) {
-!       temp_8b          |= IEEE154_ACK_NO_ACK_REQ          << IEEE154_FCF_ACK_REQ;
-!    } else {
-!       temp_8b          |= IEEE154_ACK_YES_ACK_REQ         << IEEE154_FCF_ACK_REQ;
-!    }
-!    temp_8b             |= IEEE154_PANID_COMPRESSED        << IEEE154_FCF_INTRAPAN;
-!    *((uint8_t*)(msg->payload)) = temp_8b;
-! }
-! 
-! /**
-! \brief Retreieve the IEEE802.15.4 MAC header from a (just received) packet.
-! 
-! Note We are writing the fields from the begnning of the header to the end.
-! 
-! \param[in,out] msg            The message just received.
-! \param[out] ieee802514_header The internal header to write the data to.
-! */
-! void ieee802154_retrieveHeader(OpenQueueEntry_t*      msg,
-!                                ieee802154_header_iht* ieee802514_header) {
-!    uint8_t temp_8b;
-!    
-!    // by default, let's assume the header is not valid, in case we leave this
-!    // function because the packet ends up being shorter than the header.
-!    ieee802514_header->valid=FALSE;
-!    
-!    ieee802514_header->headerLength = 0;
-!    // fcf, byte 1
-!    if (ieee802514_header->headerLength>msg->length) { return; } // no more to read!
-!    temp_8b = *((uint8_t*)(msg->payload)+ieee802514_header->headerLength);
-!    ieee802514_header->frameType         = (temp_8b >> IEEE154_FCF_FRAME_TYPE      ) & 0x07;//3b
-!    ieee802514_header->securityEnabled   = (temp_8b >> IEEE154_FCF_SECURITY_ENABLED) & 0x01;//1b
-!    ieee802514_header->framePending      = (temp_8b >> IEEE154_FCF_FRAME_PENDING   ) & 0x01;//1b
-!    ieee802514_header->ackRequested      = (temp_8b >> IEEE154_FCF_ACK_REQ         ) & 0x01;//1b
-!    ieee802514_header->panIDCompression  = (temp_8b >> IEEE154_FCF_INTRAPAN        ) & 0x01;//1b
-!    ieee802514_header->headerLength += 1;
-!    // fcf, byte 2
-!    if (ieee802514_header->headerLength>msg->length) { return; } // no more to read!
-!    temp_8b = *((uint8_t*)(msg->payload)+ieee802514_header->headerLength);
-!    //poipoi xv IE list present
-!    ieee802514_header->ieListPresent  = (temp_8b >> IEEE154_FCF_IELIST_PRESENT     ) & 0x01;//1b
-!    ieee802514_header->frameVersion   = (temp_8b >> IEEE154_FCF_FRAME_VERSION      ) & 0x03;//2b
-! 
-!    if (ieee802514_header->ieListPresent==TRUE && ieee802514_header->frameVersion!=IEEE154_FRAMEVERSION){
-!        return; //invalid packet accordint to p.64 IEEE15.4e
-!    }
-!    
-!    switch ( (temp_8b >> IEEE154_FCF_DEST_ADDR_MODE ) & 0x03 ) {
-!       case IEEE154_ADDR_NONE:
-!          ieee802514_header->dest.type = ADDR_NONE;
-!          break;
-!       case IEEE154_ADDR_SHORT:
-!          ieee802514_header->dest.type = ADDR_16B;
-!          break;
-!       case IEEE154_ADDR_EXT:
-!          ieee802514_header->dest.type = ADDR_64B;
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IEEE802154,ERR_IEEE154_UNSUPPORTED,
-!                                (errorparameter_t)1,
-!                                (errorparameter_t)(temp_8b >> IEEE154_FCF_DEST_ADDR_MODE ) & 0x03);
-!          return; // this is an invalid packet, return
-!    }
-!    switch ( (temp_8b >> IEEE154_FCF_SRC_ADDR_MODE ) & 0x03 ) {
-!       case IEEE154_ADDR_NONE:
-!          ieee802514_header->src.type = ADDR_NONE;
-!          break;
-!       case IEEE154_ADDR_SHORT:
-!          ieee802514_header->src.type = ADDR_16B;
-!          break;
-!       case IEEE154_ADDR_EXT:
-!          ieee802514_header->src.type = ADDR_64B;
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IEEE802154,ERR_IEEE154_UNSUPPORTED,
-!                                (errorparameter_t)2,
-!                                (errorparameter_t)(temp_8b >> IEEE154_FCF_SRC_ADDR_MODE ) & 0x03);
-!          return; // this is an invalid packet, return
-!    }
-!    ieee802514_header->headerLength += 1;
-!    // sequenceNumber
-!    if (ieee802514_header->headerLength>msg->length) { return; } // no more to read!
-!    ieee802514_header->dsn  = *((uint8_t*)(msg->payload)+ieee802514_header->headerLength);
-!    ieee802514_header->headerLength += 1;
-!    // panID
-!    if (ieee802514_header->headerLength>msg->length) { return; } // no more to read!
-!    packetfunctions_readAddress(((uint8_t*)(msg->payload)+ieee802514_header->headerLength),
-!                                ADDR_PANID,
-!                                &ieee802514_header->panid,
-!                                OW_LITTLE_ENDIAN);
-!    ieee802514_header->headerLength += 2;
-!    // dest
-!    if (ieee802514_header->headerLength>msg->length) { return; } // no more to read!
-!    switch (ieee802514_header->dest.type) {
-!       case ADDR_NONE:
-!          break;
-!       case ADDR_16B:
-!          packetfunctions_readAddress(
-!              ((uint8_t*)(msg->payload)+ieee802514_header->headerLength),
-!              ADDR_16B,
-!              &ieee802514_header->dest,
-!              OW_LITTLE_ENDIAN
-!          );
-!          ieee802514_header->headerLength += 2;
-!          if (ieee802514_header->headerLength>msg->length) {  return; } // no more to read!
-!          break;
-!       case ADDR_64B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload)+ieee802514_header->headerLength),
-!                                      ADDR_64B,
-!                                      &ieee802514_header->dest,
-!                                      OW_LITTLE_ENDIAN);
-!          ieee802514_header->headerLength += 8;
-!          if (ieee802514_header->headerLength>msg->length) {  return; } // no more to read!
-!          break;
-!       // no need for a default, since case would have been caught above
-!    }
-!    //src
-!    switch (ieee802514_header->src.type) {
-!       case ADDR_NONE:
-!          break;
-!       case ADDR_16B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload)+ieee802514_header->headerLength),
-!                                      ADDR_16B,
-!                                      &ieee802514_header->src,
-!                                      OW_LITTLE_ENDIAN);
-!          ieee802514_header->headerLength += 2;
-!          if (ieee802514_header->headerLength>msg->length) {  return; } // no more to read!
-!          break;
-!       case ADDR_64B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload)+ieee802514_header->headerLength),
-!                                      ADDR_64B,
-!                                      &ieee802514_header->src,
-!                                      OW_LITTLE_ENDIAN);
-!          ieee802514_header->headerLength += 8;
-!          if (ieee802514_header->headerLength>msg->length) {  return; } // no more to read!
-!          break;
-!       // no need for a default, since case would have been caught above
-!    }
-!    
-!    if (ieee802514_header->ieListPresent==TRUE && ieee802514_header->frameVersion!=IEEE154_FRAMEVERSION){
-!        return; //invalid packet accordint to p.64 IEEE15.4e
-!    }
-!    
-!    // apply topology filter
-!    if (topology_isAcceptablePacket(ieee802514_header)==FALSE) {
-!       // the topology filter does accept this packet, return
-!       return;
-!    }
-!    // if you reach this, the header is valid
-!    ieee802514_header->valid=TRUE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/02a-MAClow/IEEE802154.h ../../../sys/net/openwsn/02a-MAClow/IEEE802154.h
-*** openwsn/02a-MAClow/IEEE802154.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02a-MAClow/IEEE802154.h	Wed Jan 15 13:48:26 2014
-***************
-*** 1,94 ****
-! #ifndef __IEEE802154_H
-! #define __IEEE802154_H
-! 
-! /**
-! \addtogroup helpers
-! \{
-! \addtogroup IEEE802154
-! \{
-! */
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! enum IEEE802154_fcf_enums {
-!    IEEE154_FCF_FRAME_TYPE              = 0,
-!    IEEE154_FCF_SECURITY_ENABLED        = 3,
-!    IEEE154_FCF_FRAME_PENDING           = 4,
-!    IEEE154_FCF_ACK_REQ                 = 5,
-!    IEEE154_FCF_INTRAPAN                = 6,
-!    IEEE154_FCF_DEST_ADDR_MODE          = 2,
-!    IEEE154_FCF_SRC_ADDR_MODE           = 6,
-! };
-! 
-! enum IEEE802154_fcf_type_enums {
-!    IEEE154_TYPE_BEACON                 = 0,
-!    IEEE154_TYPE_DATA                   = 1,
-!    IEEE154_TYPE_ACK                    = 2,
-!    IEEE154_TYPE_CMD                    = 3,
-!    IEEE154_TYPE_UNDEFINED              = 5,
-! };
-! 
-! enum IEEE802154_fcf_sec_enums {
-!    IEEE154_SEC_NO_SECURITY             = 0,
-!    IEEE154_SEC_YES_SECURITY            = 1,
-! };
-! 
-! enum IEEE802154_fcf_pending_enums {
-!    IEEE154_PENDING_NO_FRAMEPENDING     = 0,
-!    IEEE154_PENDING_YES_FRAMEPENDING    = 1,
-! };
-! 
-! enum IEEE802154_fcf_ack_enums {
-!    IEEE154_ACK_NO_ACK_REQ              = 0,
-!    IEEE154_ACK_YES_ACK_REQ             = 1,
-! };
-! 
-! enum IEEE802154_fcf_panid_enums {
-!    IEEE154_PANID_UNCOMPRESSED          = 0,
-!    IEEE154_PANID_COMPRESSED            = 1,
-! };
-! 
-! enum IEEE802154_fcf_addr_mode_enums {
-!    IEEE154_ADDR_NONE                   = 0,
-!    IEEE154_ADDR_SHORT                  = 2,
-!    IEEE154_ADDR_EXT                    = 3,
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    bool        valid;
-!    uint8_t     headerLength;    //including the length field
-!    uint8_t     frameType;
-!    bool        securityEnabled;
-!    bool        framePending;
-!    bool        ackRequested;
-!    bool        panIDCompression;
-!    uint8_t     dsn;
-!    open_addr_t panid;
-!    open_addr_t dest;
-!    open_addr_t src;
-! } ieee802154_header_iht; //iht for "internal header type"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void ieee802154_prependHeader  (OpenQueueEntry_t*      msg,
-!                                 uint8_t                frameType,
-!                                 bool                   securityEnabled,
-!                                 uint8_t                sequenceNumber,
-!                                 open_addr_t*           nextHop);
-! void ieee802154_retrieveHeader (OpenQueueEntry_t*      msg,
-!                                 ieee802154_header_iht* ieee802514_header);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
---- 1,113 ----
-! #ifndef __IEEE802154_H
-! #define __IEEE802154_H
-! 
-! /**
-! \addtogroup MAClow
-! \{
-! \addtogroup IEEE802154
-! \{
-! */
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! enum IEEE802154_fcf_enums {
-!    IEEE154_FCF_FRAME_TYPE              = 0,
-!    IEEE154_FCF_SECURITY_ENABLED        = 3,
-!    IEEE154_FCF_FRAME_PENDING           = 4,
-!    IEEE154_FCF_ACK_REQ                 = 5,
-!    IEEE154_FCF_INTRAPAN                = 6,
-!    IEEE154_FCF_IELIST_PRESENT          = 1,
-!    IEEE154_FCF_DEST_ADDR_MODE          = 2,
-!    IEEE154_FCF_FRAME_VERSION           = 4,
-!    IEEE154_FCF_SRC_ADDR_MODE           = 6,
-! };
-! 
-! 
-! enum IEEE802154_fcf_frameversion_enums {
-!    IEEE154_FRAMEVERSION_2003           = 0, //ieee154-2003
-!    IEEE154_FRAMEVERSION_2006           = 1, //ieee154-2006
-!    IEEE154_FRAMEVERSION                = 2, //ieee154
-! };
-! 
-! enum IEEE802154_fcf_type_enums {
-!    IEEE154_TYPE_BEACON                 = 0,
-!    IEEE154_TYPE_DATA                   = 1,
-!    IEEE154_TYPE_ACK                    = 2,
-!    IEEE154_TYPE_CMD                    = 3,
-!    IEEE154_TYPE_UNDEFINED              = 5,
-! };
-! 
-! enum IEEE802154_fcf_sec_enums {
-!    IEEE154_SEC_NO_SECURITY             = 0,
-!    IEEE154_SEC_YES_SECURITY            = 1,
-! };
-! 
-! enum IEEE802154_fcf_ielist_enums {
-!    IEEE154_IELIST_NO                   = 0,
-!    IEEE154_IELIST_YES                  = 1,
-! };
-! 
-! enum IEEE802154_fcf_pending_enums {
-!    IEEE154_PENDING_NO_FRAMEPENDING     = 0,
-!    IEEE154_PENDING_YES_FRAMEPENDING    = 1,
-! };
-! 
-! enum IEEE802154_fcf_ack_enums {
-!    IEEE154_ACK_NO_ACK_REQ              = 0,
-!    IEEE154_ACK_YES_ACK_REQ             = 1,
-! };
-! 
-! enum IEEE802154_fcf_panid_enums {
-!    IEEE154_PANID_UNCOMPRESSED          = 0,
-!    IEEE154_PANID_COMPRESSED            = 1,
-! };
-! 
-! enum IEEE802154_fcf_addr_mode_enums {
-!    IEEE154_ADDR_NONE                   = 0,
-!    IEEE154_ADDR_SHORT                  = 2,
-!    IEEE154_ADDR_EXT                    = 3,
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    bool        valid;
-!    uint8_t     headerLength;    //including the length field
-!    uint8_t     frameType;
-!    bool        securityEnabled;
-!    bool        framePending;
-!    bool        ackRequested;
-!    bool        panIDCompression;
-!    bool        ieListPresent;
-!    uint8_t     frameVersion;
-!    uint8_t     dsn;
-!    open_addr_t panid;
-!    open_addr_t dest;
-!    open_addr_t src;
-! } ieee802154_header_iht; //iht for "internal header type"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void ieee802154_prependHeader(OpenQueueEntry_t* msg,
-!                               uint8_t           frameType,
-!                               uint8_t           ielistpresent,
-!                               uint8_t           frameversion,
-!                               bool              securityEnabled,
-!                               uint8_t           sequenceNumber,
-!                               open_addr_t*      nextHop);
-! 
-! void ieee802154_retrieveHeader (OpenQueueEntry_t*      msg,
-!                                 ieee802154_header_iht* ieee802514_header);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
-diff -crB openwsn/02a-MAClow/IEEE802154E.c ../../../sys/net/openwsn/02a-MAClow/IEEE802154E.c
-*** openwsn/02a-MAClow/IEEE802154E.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02a-MAClow/IEEE802154E.c	Wed Jan 15 13:48:26 2014
-***************
-*** 1,1908 ****
-! #include "openwsn.h"
-! #include "IEEE802154E.h"
-! #include "radio.h"
-! #include "radiotimer.h"
-! #include "IEEE802154.h"
-! #include "openqueue.h"
-! #include "idmanager.h"
-! #include "openserial.h"
-! #include "schedule.h"
-! #include "packetfunctions.h"
-! #include "scheduler.h"
-! #include "leds.h"
-! #include "neighbors.h"
-! #include "debugpins.h"
-! #include "res.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    // misc
-!    asn_t              asn;                  // current absolute slot number
-!    slotOffset_t       slotOffset;           // current slot offset
-!    slotOffset_t       nextActiveSlotOffset; // next active slot offset
-!    PORT_TIMER_WIDTH   deSyncTimeout;        // how many slots left before looses sync
-!    bool               isSync;               // TRUE iff mote is synchronized to network
-!    // as shown on the chronogram
-!    ieee154e_state_t   state;                // state of the FSM
-!    OpenQueueEntry_t*  dataToSend;           // pointer to the data to send
-!    OpenQueueEntry_t*  dataReceived;         // pointer to the data received
-!    OpenQueueEntry_t*  ackToSend;            // pointer to the ack to send
-!    OpenQueueEntry_t*  ackReceived;          // pointer to the ack received
-!    PORT_TIMER_WIDTH   lastCapturedTime;     // last captured time
-!    PORT_TIMER_WIDTH   syncCapturedTime;     // captured time used to sync
-!    //channel hopping
-!    uint8_t            freq;                 // frequency of the current slot
-!    uint8_t            asnOffset;            // offset inside the frame
-! } ieee154e_vars_t;
-! 
-! ieee154e_vars_t ieee154e_vars;
-! 
-! typedef struct {
-!    PORT_TIMER_WIDTH          num_newSlot;
-!    PORT_TIMER_WIDTH          num_timer;
-!    PORT_TIMER_WIDTH          num_startOfFrame;
-!    PORT_TIMER_WIDTH          num_endOfFrame;
-! } ieee154e_dbg_t;
-! 
-! ieee154e_dbg_t ieee154e_dbg;
-! 
-! PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t                   numSyncPkt;    // how many times synchronized on a non-ACK packet
-!    uint8_t                   numSyncAck;    // how many times synchronized on an ACK
-!    PORT_SIGNED_INT_WIDTH     minCorrection; // minimum time correction
-!    PORT_SIGNED_INT_WIDTH     maxCorrection; // maximum time correction
-!    uint8_t                   numDeSync;     // number of times a desync happened
-! } ieee154e_stats_t;
-! PRAGMA(pack());
-! 
-! ieee154e_stats_t ieee154e_stats;
-! 
-! //=========================== prototypes ======================================
-! 
-! // SYNCHRONIZING
-! void     activity_synchronize_newSlot();
-! void     activity_synchronize_startOfFrame(PORT_TIMER_WIDTH capturedTime);
-! void     activity_synchronize_endOfFrame(PORT_TIMER_WIDTH capturedTime);
-! // TX
-! void     activity_ti1ORri1();
-! void     activity_ti2();
-! void     activity_tie1();
-! void     activity_ti3();
-! void     activity_tie2();
-! void     activity_ti4(PORT_TIMER_WIDTH capturedTime);
-! void     activity_tie3();
-! void     activity_ti5(PORT_TIMER_WIDTH capturedTime);
-! void     activity_ti6();
-! void     activity_tie4();
-! void     activity_ti7();
-! void     activity_tie5();
-! void     activity_ti8(PORT_TIMER_WIDTH capturedTime);
-! void     activity_tie6();
-! void     activity_ti9(PORT_TIMER_WIDTH capturedTime);
-! // RX
-! void     activity_ri2();
-! void     activity_rie1();
-! void     activity_ri3();
-! void     activity_rie2();
-! void     activity_ri4(PORT_TIMER_WIDTH capturedTime);
-! void     activity_rie3();
-! void     activity_ri5(PORT_TIMER_WIDTH capturedTime);
-! void     activity_ri6();
-! void     activity_rie4();
-! void     activity_ri7();
-! void     activity_rie5();
-! void     activity_ri8(PORT_TIMER_WIDTH capturedTime);
-! void     activity_rie6();
-! void     activity_ri9(PORT_TIMER_WIDTH capturedTime);
-! // frame validity check
-! bool     isValidAdv(ieee802154_header_iht*     ieee802514_header);
-! bool     isValidRxFrame(ieee802154_header_iht* ieee802514_header);
-! bool     isValidAck(ieee802154_header_iht*     ieee802514_header,
-!                     OpenQueueEntry_t*          packetSent);
-! // ASN handling
-! void     incrementAsnOffset();
-! void     asnWriteToAdv(OpenQueueEntry_t* advFrame);
-! void     asnStoreFromAdv(OpenQueueEntry_t* advFrame);
-! // synchronization
-! void     synchronizePacket(PORT_TIMER_WIDTH timeReceived);
-! void     synchronizeAck(PORT_SIGNED_INT_WIDTH timeCorrection);
-! void     changeIsSync(bool newIsSync);
-! // notifying upper layer
-! void     notif_sendDone(OpenQueueEntry_t* packetSent, error_t error);
-! void     notif_receive(OpenQueueEntry_t* packetReceived);
-! // statistics
-! void     resetStats();
-! void     updateStats(PORT_SIGNED_INT_WIDTH timeCorrection);
-! // misc
-! uint8_t  calculateFrequency(uint8_t channelOffset);
-! void     changeState(ieee154e_state_t newstate);
-! void     endSlot();
-! bool     debugPrint_asn();
-! bool     debugPrint_isSync();
-! 
-! //=========================== admin ===========================================
-! 
-! /**
-! \brief This function initializes this module.
-! 
-! Call this function once before any other function in this module, possibly
-! during boot-up.
-! */
-! void ieee154e_init() {
-!    
-!    // initialize variables
-!    memset(&ieee154e_vars,0,sizeof(ieee154e_vars_t));
-!    memset(&ieee154e_dbg,0,sizeof(ieee154e_dbg_t));
-!    
-!    if (idmanager_getIsDAGroot()==TRUE) {
-!       changeIsSync(TRUE);
-!    } else {
-!       changeIsSync(FALSE);
-!    }
-!    
-!    resetStats();
-!    ieee154e_stats.numDeSync                 = 0;
-!    
-!    // switch radio on
-!    radio_rfOn();
-!    
-!    // set callback functions for the radio
-!    radio_setOverflowCb(isr_ieee154e_newSlot);
-!    radio_setCompareCb(isr_ieee154e_timer);
-!    radio_setStartFrameCb(ieee154e_startOfFrame);
-!    radio_setEndFrameCb(ieee154e_endOfFrame);
-!    // have the radio start its timer
-!    radio_startTimer(TsSlotDuration);
-! }
-! 
-! //=========================== public ==========================================
-! 
-! /**
-! /brief Difference between some older ASN and the current ASN.
-! 
-! \param someASN [in] some ASN to compare to the current
-! 
-! \returns The ASN difference, or 0xffff if more than 65535 different
-! */
-! PORT_TIMER_WIDTH ieee154e_asnDiff(asn_t* someASN) {
-!    PORT_TIMER_WIDTH diff;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    if (ieee154e_vars.asn.byte4 != someASN->byte4) {
-!       ENABLE_INTERRUPTS();
-!       return (PORT_TIMER_WIDTH)0xFFFFFFFF;;
-!    }
-!    
-!    diff = 0;
-!    if (ieee154e_vars.asn.bytes2and3 == someASN->bytes2and3) {
-!       ENABLE_INTERRUPTS();
-!       return ieee154e_vars.asn.bytes0and1-someASN->bytes0and1;
-!    } else if (ieee154e_vars.asn.bytes2and3-someASN->bytes2and3==1) {
-!       diff  = ieee154e_vars.asn.bytes0and1;
-!       diff += 0xffff-someASN->bytes0and1;
-!       diff += 1;
-!    } else {
-!       diff = (PORT_TIMER_WIDTH)0xFFFFFFFF;;
-!    }
-!    ENABLE_INTERRUPTS();
-!    return diff;
-! }
-! 
-! //======= events
-! 
-! /**
-! \brief Indicates a new slot has just started.
-! 
-! This function executes in ISR mode, when the new slot timer fires.
-! */
-! void isr_ieee154e_newSlot() {
-!    radio_setTimerPeriod(TsSlotDuration);
-!    if (ieee154e_vars.isSync==FALSE) {
-!       activity_synchronize_newSlot();
-!    } else {
-!       activity_ti1ORri1();
-!    }
-!    ieee154e_dbg.num_newSlot++;
-! }
-! 
-! /**
-! \brief Indicates the FSM timer has fired.
-! 
-! This function executes in ISR mode, when the FSM timer fires.
-! */
-! void isr_ieee154e_timer() {
-!    switch (ieee154e_vars.state) {
-!       case S_TXDATAOFFSET:
-!          activity_ti2();
-!          break;
-!       case S_TXDATAPREPARE:
-!          activity_tie1();
-!          break;
-!       case S_TXDATAREADY:
-!          activity_ti3();
-!          break;
-!       case S_TXDATADELAY:
-!          activity_tie2();
-!          break;
-!       case S_TXDATA:
-!          activity_tie3();
-!          break;
-!       case S_RXACKOFFSET:
-!          activity_ti6();
-!          break;
-!       case S_RXACKPREPARE:
-!          activity_tie4();
-!          break;
-!       case S_RXACKREADY:
-!          activity_ti7();
-!          break;
-!       case S_RXACKLISTEN:
-!          activity_tie5();
-!          break;
-!       case S_RXACK:
-!          activity_tie6();
-!          break;
-!       case S_RXDATAOFFSET:
-!          activity_ri2(); 
-!          break;
-!       case S_RXDATAPREPARE:
-!          activity_rie1();
-!          break;
-!       case S_RXDATAREADY:
-!          activity_ri3();
-!          break;
-!       case S_RXDATALISTEN:
-!          activity_rie2();
-!          break;
-!       case S_RXDATA:
-!          activity_rie3();
-!          break;
-!       case S_TXACKOFFSET: 
-!          activity_ri6();
-!          break;
-!       case S_TXACKPREPARE:
-!          activity_rie4();
-!          break;
-!       case S_TXACKREADY:
-!          activity_ri7();
-!          break;
-!       case S_TXACKDELAY:
-!          activity_rie5();
-!          break;
-!       case S_TXACK:
-!          activity_rie6();
-!          break;
-!       default:
-!          // log the error
-!          openserial_printError(COMPONENT_IEEE802154E,ERR_WRONG_STATE_IN_TIMERFIRES,
-!                                (errorparameter_t)ieee154e_vars.state,
-!                                (errorparameter_t)ieee154e_vars.slotOffset);
-!          // abort
-!          endSlot();
-!          break;
-!    }
-!    ieee154e_dbg.num_timer++;
-! }
-! 
-! /**
-! \brief Indicates the radio just received the first byte of a packet.
-! 
-! This function executes in ISR mode.
-! */
-! void ieee154e_startOfFrame(PORT_TIMER_WIDTH capturedTime) {
-!    if (ieee154e_vars.isSync==FALSE) {
-!      activity_synchronize_startOfFrame(capturedTime);
-!    } else {
-!       switch (ieee154e_vars.state) {
-!          case S_TXDATADELAY:   
-!             activity_ti4(capturedTime);
-!             break;
-!          case S_RXACKREADY:
-!             /*
-!             It is possible to receive in this state for radio where there is no
-!             way of differentiated between "ready to listen" and "listening"
-!             (e.g. CC2420). We must therefore expect to the start of a packet in
-!             this "ready" state.
-!             */
-!             // no break!
-!          case S_RXACKLISTEN:
-!             activity_ti8(capturedTime);
-!             break;
-!          case S_RXDATAREADY:
-!             /*
-!             Similarly as above.
-!             */
-!             // no break!
-!          case S_RXDATALISTEN:
-!             activity_ri4(capturedTime);
-!             break;
-!          case S_TXACKDELAY:
-!             activity_ri8(capturedTime);
-!             break;
-!          default:
-!             // log the error
-!             openserial_printError(COMPONENT_IEEE802154E,ERR_WRONG_STATE_IN_NEWSLOT,
-!                                   (errorparameter_t)ieee154e_vars.state,
-!                                   (errorparameter_t)ieee154e_vars.slotOffset);
-!             // abort
-!             endSlot();
-!             break;
-!       }
-!    }
-!    ieee154e_dbg.num_startOfFrame++;
-! }
-! 
-! /**
-! \brief Indicates the radio just received the last byte of a packet.
-! 
-! This function executes in ISR mode.
-! */
-! void ieee154e_endOfFrame(PORT_TIMER_WIDTH capturedTime) {
-!    if (ieee154e_vars.isSync==FALSE) {
-!       activity_synchronize_endOfFrame(capturedTime);
-!    } else {
-!       switch (ieee154e_vars.state) {
-!          case S_TXDATA:
-!             activity_ti5(capturedTime);
-!             break;
-!          case S_RXACK:
-!             activity_ti9(capturedTime);
-!             break;
-!          case S_RXDATA:
-!             activity_ri5(capturedTime);
-!             break;
-!          case S_TXACK:
-!             activity_ri9(capturedTime);
-!             break;
-!          default:
-!             // log the error
-!             openserial_printError(COMPONENT_IEEE802154E,ERR_WRONG_STATE_IN_ENDOFFRAME,
-!                                   (errorparameter_t)ieee154e_vars.state,
-!                                   (errorparameter_t)ieee154e_vars.slotOffset);
-!             // abort
-!             endSlot();
-!             break;
-!       }
-!    }
-!    ieee154e_dbg.num_endOfFrame++;
-! }
-! 
-! //======= misc
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_asn() {
-!    asn_t output;
-!    output.byte4         =  ieee154e_vars.asn.byte4;
-!    output.bytes2and3    =  ieee154e_vars.asn.bytes2and3;
-!    output.bytes0and1    =  ieee154e_vars.asn.bytes0and1;
-!    openserial_printStatus(STATUS_ASN,(uint8_t*)&output,sizeof(output));
-!    return TRUE;
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_isSync() {
-!    uint8_t output=0;
-!    output = ieee154e_vars.isSync;
-!    openserial_printStatus(STATUS_ISSYNC,(uint8_t*)&output,sizeof(uint8_t));
-!    return TRUE;
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_macStats() {
-!    // send current stats over serial
-!    openserial_printStatus(STATUS_MACSTATS,(uint8_t*)&ieee154e_stats,sizeof(ieee154e_stats_t));
-!    return TRUE;
-! }
-! 
-! //=========================== private =========================================
-! 
-! //======= SYNCHRONIZING
-! 
-! port_INLINE void activity_synchronize_newSlot() {
-!    // I'm in the middle of receiving a packet
-!    if (ieee154e_vars.state==S_SYNCRX) {
-!       return;
-!    }
-!    
-!    // if this is the first time I call this function while not synchronized,
-!    // switch on the radio in Rx mode
-!    if (ieee154e_vars.state!=S_SYNCLISTEN) {
-!       // change state
-!       changeState(S_SYNCLISTEN);
-!       
-!       // turn off the radio (in case it wasn't yet)
-!       radio_rfOff();
-!       
-!       // configure the radio to listen to the default synchronizing channel
-!       radio_setFrequency(SYNCHRONIZING_CHANNEL);
-!       
-!       // update record of current channel
-!       ieee154e_vars.freq = SYNCHRONIZING_CHANNEL;
-!       
-!       // switch on the radio in Rx mode.
-!       radio_rxEnable();
-!       radio_rxNow();
-!    }
-!    
-!    // increment ASN (used only to schedule serial activity)
-!    incrementAsnOffset();
-!    
-!    // to be able to receive and transmist serial even when not synchronized
-!    // take turns every 8 slots sending and receiving
-!    if        ((ieee154e_vars.asn.bytes0and1&0x000f)==0x0000) {
-!       openserial_stop();
-!       openserial_startOutput();
-!    } else if ((ieee154e_vars.asn.bytes0and1&0x000f)==0x0008) {
-!       openserial_stop();
-!       openserial_startInput();
-!    }
-! }
-! 
-! port_INLINE void activity_synchronize_startOfFrame(PORT_TIMER_WIDTH capturedTime) {
-!    
-!    // don't care about packet if I'm not listening
-!    if (ieee154e_vars.state!=S_SYNCLISTEN) {
-!       return;
-!    }
-!    
-!    // change state
-!    changeState(S_SYNCRX);
-!    
-!    // stop the serial
-!    openserial_stop();
-!    
-!    // record the captured time 
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // record the captured time (for sync)
-!    ieee154e_vars.syncCapturedTime = capturedTime;
-! }
-! 
-! port_INLINE void activity_synchronize_endOfFrame(PORT_TIMER_WIDTH capturedTime) {
-!    ieee802154_header_iht ieee802514_header;
-!    
-!    // check state
-!    if (ieee154e_vars.state!=S_SYNCRX) {
-!       // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_WRONG_STATE_IN_ENDFRAME_SYNC,
-!                             (errorparameter_t)ieee154e_vars.state,
-!                             (errorparameter_t)0);
-!       // abort
-!       endSlot();
-!    }
-!    
-!    // change state
-!    changeState(S_SYNCPROC);
-!    
-!    // get a buffer to put the (received) frame in
-!    ieee154e_vars.dataReceived = openqueue_getFreePacketBuffer(COMPONENT_IEEE802154E);
-!    if (ieee154e_vars.dataReceived==NULL) {
-!       // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       // abort
-!       endSlot();
-!       return;
-!    }
-!    
-!    // declare ownership over that packet
-!    ieee154e_vars.dataReceived->creator = COMPONENT_IEEE802154E;
-!    ieee154e_vars.dataReceived->owner   = COMPONENT_IEEE802154E;
-!    
-!    /*
-!    The do-while loop that follows is a little parsing trick.
-!    Because it contains a while(0) condition, it gets executed only once.
-!    The behavior is:
-!    - if a break occurs inside the do{} body, the error code below the loop
-!      gets executed. This indicates something is wrong with the packet being 
-!      parsed.
-!    - if a return occurs inside the do{} body, the error code below the loop
-!      does not get executed. This indicates the received packet is correct.
-!    */
-!    do { // this "loop" is only executed once
-!       
-!       // retrieve the received data frame from the radio's Rx buffer
-!       ieee154e_vars.dataReceived->payload = &(ieee154e_vars.dataReceived->packet[FIRST_FRAME_BYTE]);
-!       radio_getReceivedFrame(       ieee154e_vars.dataReceived->payload,
-!                                    &ieee154e_vars.dataReceived->length,
-!                              sizeof(ieee154e_vars.dataReceived->packet),
-!                                    &ieee154e_vars.dataReceived->l1_rssi,
-!                                    &ieee154e_vars.dataReceived->l1_lqi,
-!                                    &ieee154e_vars.dataReceived->l1_crc);
-!       
-!       // break if packet too short
-!       if (ieee154e_vars.dataReceived->length<LENGTH_CRC || ieee154e_vars.dataReceived->length>LENGTH_IEEE154_MAX) {
-!          // break from the do-while loop and execute abort code below
-!           openserial_printError(COMPONENT_IEEE802154E,ERR_INVALIDPACKETFROMRADIO,
-!                             (errorparameter_t)0,
-!                             ieee154e_vars.dataReceived->length);
-!          break;
-!       }
-!       
-!       // toss CRC (2 last bytes)
-!       packetfunctions_tossFooter(   ieee154e_vars.dataReceived, LENGTH_CRC);
-!       
-!       // break if invalid CRC
-!       if (ieee154e_vars.dataReceived->l1_crc==FALSE) {
-!          // break from the do-while loop and execute abort code below
-!          break;
-!       }
-!       
-!       // parse the IEEE802.15.4 header (synchronize, end of frame)
-!       ieee802154_retrieveHeader(ieee154e_vars.dataReceived,&ieee802514_header);
-!       
-!       // break if invalid IEEE802.15.4 header
-!       if (ieee802514_header.valid==FALSE) {
-!          // break from the do-while loop and execute the clean-up code below
-!          break;
-!       }
-!       
-!       // store header details in packet buffer
-!       ieee154e_vars.dataReceived->l2_frameType = ieee802514_header.frameType;
-!       ieee154e_vars.dataReceived->l2_dsn       = ieee802514_header.dsn;
-!       memcpy(&(ieee154e_vars.dataReceived->l2_nextORpreviousHop),&(ieee802514_header.src),sizeof(open_addr_t));
-!       
-!       // toss the IEEE802.15.4 header
-!       packetfunctions_tossHeader(ieee154e_vars.dataReceived,ieee802514_header.headerLength);
-!       
-!       // break if invalid ADV
-!       if (isValidAdv(&ieee802514_header)==FALSE) {
-!          // break from the do-while loop and execute the clean-up code below
-!          break;
-!       }
-!       
-!       // turn off the radio
-!       radio_rfOff();
-!       
-!       // record the ASN from the ADV payload
-!       asnStoreFromAdv(ieee154e_vars.dataReceived);
-!       
-!       // toss the ADV payload
-!       packetfunctions_tossHeader(ieee154e_vars.dataReceived,ADV_PAYLOAD_LENGTH);
-!       
-!       // synchronize (for the first time) to the sender's ADV
-!       synchronizePacket(ieee154e_vars.syncCapturedTime);
-!       
-!       // declare synchronized
-!       changeIsSync(TRUE);
-!       
-!       // log the info
-!       openserial_printInfo(COMPONENT_IEEE802154E,ERR_SYNCHRONIZED,
-!                             (errorparameter_t)ieee154e_vars.slotOffset,
-!                             (errorparameter_t)0);
-!       
-!       // send received ADV up the stack so RES can update statistics (synchronizing)
-!       notif_receive(ieee154e_vars.dataReceived);
-!       
-!       // clear local variable
-!       ieee154e_vars.dataReceived = NULL;
-!       
-!       // official end of synchronization
-!       endSlot();
-!       
-!       // everything went well, return here not to execute the error code below
-!       return;
-!       
-!    } while (0);
-!    
-!    // free the (invalid) received data buffer so RAM memory can be recycled
-!    openqueue_freePacketBuffer(ieee154e_vars.dataReceived);
-!    
-!    // clear local variable
-!    ieee154e_vars.dataReceived = NULL;
-!    
-!    // return to listening state
-!    changeState(S_SYNCLISTEN);
-! }
-! 
-! //======= TX
-! 
-! port_INLINE void activity_ti1ORri1() {
-!    cellType_t  cellType;
-!    open_addr_t neighbor;
-!    uint8_t  i;
-!    
-!    // increment ASN (do this first so debug pins are in sync)
-!    incrementAsnOffset();
-!    
-!    // wiggle debug pins
-!    debugpins_slot_toggle();
-!    if (ieee154e_vars.slotOffset==0) {
-!       debugpins_frame_toggle();
-!    }
-!    
-!    // desynchronize if needed
-!    if (idmanager_getIsDAGroot()==FALSE) {
-!       ieee154e_vars.deSyncTimeout--;
-!       if (ieee154e_vars.deSyncTimeout==0) {
-!          // declare myself desynchronized
-!          changeIsSync(FALSE);
-!         
-!          // log the error
-!          openserial_printError(COMPONENT_IEEE802154E,ERR_DESYNCHRONIZED,
-!                                (errorparameter_t)ieee154e_vars.slotOffset,
-!                                (errorparameter_t)0);
-!             
-!          // update the statistics
-!          ieee154e_stats.numDeSync++;
-!             
-!          // abort
-!          endSlot();
-!          return;
-!       }
-!    }
-!    
-!    // if the previous slot took too long, we will not be in the right state
-!    if (ieee154e_vars.state!=S_SLEEP) {
-!       // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_WRONG_STATE_IN_STARTSLOT,
-!                             (errorparameter_t)ieee154e_vars.state,
-!                             (errorparameter_t)ieee154e_vars.slotOffset);
-!       // abort
-!       endSlot();
-!       return;
-!    }
-!    
-!    if (ieee154e_vars.slotOffset==ieee154e_vars.nextActiveSlotOffset) {
-!       // this is the next active slot
-!       
-!       // advance the schedule
-!       schedule_advanceSlot();
-!       
-!       // find the next one
-!       ieee154e_vars.nextActiveSlotOffset    = schedule_getNextActiveSlotOffset();
-!    } else {
-!       // this is NOT the next active slot, abort
-!       // stop using serial
-!       openserial_stop();
-!       // abort the slot
-!       endSlot();
-!       //start outputing serial
-!       openserial_startOutput();
-!       return;
-!    }
-!    
-!    // check the schedule to see what type of slot this is
-!    cellType = schedule_getType();
-!    switch (cellType) {
-!       case CELLTYPE_ADV:
-!          // stop using serial
-!          openserial_stop();
-!          // look for an ADV packet in the queue
-!          ieee154e_vars.dataToSend = openqueue_macGetAdvPacket();
-!          if (ieee154e_vars.dataToSend==NULL) {   // I will be listening for an ADV
-!             // change state
-!             changeState(S_RXDATAOFFSET);
-!             // arm rt1
-!             radiotimer_schedule(DURATION_rt1);
-!          } else {                                // I will be sending an ADV
-!             // change state
-!             changeState(S_TXDATAOFFSET);
-!             // change owner
-!             ieee154e_vars.dataToSend->owner = COMPONENT_IEEE802154E;
-!             // fill in the ASN field of the ADV
-!             asnWriteToAdv(ieee154e_vars.dataToSend);
-!             // record that I attempt to transmit this packet
-!             ieee154e_vars.dataToSend->l2_numTxAttempts++;
-!             // arm tt1
-!             radiotimer_schedule(DURATION_tt1);
-!          }
-!          break;
-!       case CELLTYPE_TXRX:
-!       case CELLTYPE_TX:
-!          // stop using serial
-!          openserial_stop();
-!          // check whether we can send
-!          if (schedule_getOkToSend()) {
-!             schedule_getNeighbor(&neighbor);
-!             ieee154e_vars.dataToSend = openqueue_macGetDataPacket(&neighbor);
-!          } else {
-!             ieee154e_vars.dataToSend = NULL;
-!          }
-!          if (ieee154e_vars.dataToSend!=NULL) {   // I have a packet to send
-!             // change state
-!             changeState(S_TXDATAOFFSET);
-!             // change owner
-!             ieee154e_vars.dataToSend->owner = COMPONENT_IEEE802154E;
-!             // record that I attempt to transmit this packet
-!             ieee154e_vars.dataToSend->l2_numTxAttempts++;
-!             // arm tt1
-!             radiotimer_schedule(DURATION_tt1);
-!          } else if (cellType==CELLTYPE_TX){
-!             // abort
-!             endSlot();
-!          }
-!          if (cellType==CELLTYPE_TX || 
-!              (cellType==CELLTYPE_TXRX && ieee154e_vars.dataToSend!=NULL)) {
-!             break;
-!          }
-!       case CELLTYPE_RX:
-!          // stop using serial
-!          openserial_stop();
-!          // change state
-!          changeState(S_RXDATAOFFSET);
-!          // arm rt1
-!          radiotimer_schedule(DURATION_rt1);
-!          break;
-!       case CELLTYPE_SERIALRX:
-!          // stop using serial
-!          openserial_stop();
-!          // abort the slot
-!          endSlot();
-!          //start inputting serial data
-!          openserial_startInput();
-!          //this is to emulate a set of serial input slots without having the slotted structure.
-!          radio_setTimerPeriod(TsSlotDuration*(NUMSERIALRX));
-!          
-!          //increase ASN by NUMSERIALRX-1 slots as at this slot is already incremented by 1
-!          for (i=0;i<NUMSERIALRX-1;i++){
-!             incrementAsnOffset();
-!          }
-!          break;
-!       case CELLTYPE_MORESERIALRX:
-!          // do nothing (not even endSlot())
-!          break;
-!       default:
-!          // stop using serial
-!          openserial_stop();
-!          // log the error
-!          openserial_printCritical(COMPONENT_IEEE802154E,ERR_WRONG_CELLTYPE,
-!                                (errorparameter_t)cellType,
-!                                (errorparameter_t)ieee154e_vars.slotOffset);
-!          // abort
-!          endSlot();
-!          break;
-!    }
-! }
-! 
-! port_INLINE void activity_ti2() {
-!    // change state
-!    changeState(S_TXDATAPREPARE);
-!    
-!    // calculate the frequency to transmit on
-!    ieee154e_vars.freq = calculateFrequency(schedule_getChannelOffset()); 
-!    
-!    // configure the radio for that frequency
-!    //radio_setFrequency(frequency);
-!    radio_setFrequency(ieee154e_vars.freq);
-!    
-!    // load the packet in the radio's Tx buffer
-!    radio_loadPacket(ieee154e_vars.dataToSend->payload,
-!                     ieee154e_vars.dataToSend->length);
-!    
-!    // enable the radio in Tx mode. This does not send the packet.
-!    radio_txEnable();
-!    
-!    // arm tt2
-!    radiotimer_schedule(DURATION_tt2);
-!    
-!    // change state
-!    changeState(S_TXDATAREADY);
-! }
-! 
-! port_INLINE void activity_tie1() {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_MAXTXDATAPREPARE_OVERFLOW,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ti3() {
-!    // change state
-!    changeState(S_TXDATADELAY);
-!    
-!    // arm tt3
-!    radiotimer_schedule(DURATION_tt3);
-!    
-!    // give the 'go' to transmit
-!    radio_txNow();
-! }
-! 
-! port_INLINE void activity_tie2() {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_WDRADIO_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ti4(PORT_TIMER_WIDTH capturedTime) {
-!    // change state
-!    changeState(S_TXDATA);
-!    
-!    // cancel tt3
-!    radiotimer_cancel();
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // arm tt4
-!    radiotimer_schedule(DURATION_tt4);
-! }
-! 
-! port_INLINE void activity_tie3() {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_WDDATADURATION_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ti5(PORT_TIMER_WIDTH capturedTime) {
-!    bool listenForAck;
-!    
-!    // change state
-!    changeState(S_RXACKOFFSET);
-!    
-!    // cancel tt4
-!    radiotimer_cancel();
-!    
-!    // turn off the radio
-!    radio_rfOff();
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // decides whether to listen for an ACK
-!    if (packetfunctions_isBroadcastMulticast(&ieee154e_vars.dataToSend->l2_nextORpreviousHop)==TRUE) {
-!       listenForAck = FALSE;
-!    } else {
-!       listenForAck = TRUE;
-!    }
-!    
-!    if (listenForAck==TRUE) {
-!       // arm tt5
-!       radiotimer_schedule(DURATION_tt5);
-!    } else {
-!       // indicate succesful Tx to schedule to keep statistics
-!       schedule_indicateTx(&ieee154e_vars.asn,TRUE);
-!       // indicate to upper later the packet was sent successfully
-!       notif_sendDone(ieee154e_vars.dataToSend,E_SUCCESS);
-!       // reset local variable
-!       ieee154e_vars.dataToSend = NULL;
-!       // abort
-!       endSlot();
-!    }
-! }
-! 
-! port_INLINE void activity_ti6() {
-!    // change state
-!    changeState(S_RXACKPREPARE);
-!    
-!    // calculate the frequency to transmit on
-!    ieee154e_vars.freq = calculateFrequency(schedule_getChannelOffset()); 
-!    
-!    // configure the radio for that frequency
-!    //radio_setFrequency(frequency);
-!    radio_setFrequency(ieee154e_vars.freq);
-!    
-!    // enable the radio in Rx mode. The radio is not actively listening yet.
-!    radio_rxEnable();
-!    
-!    // arm tt6
-!    radiotimer_schedule(DURATION_tt6);
-!    
-!    // change state
-!    changeState(S_RXACKREADY);
-! }
-! 
-! port_INLINE void activity_tie4() {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_MAXRXACKPREPARE_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ti7() {
-!    // change state
-!    changeState(S_RXACKLISTEN);
-!    
-!    // start listening
-!    radio_rxNow();
-!    
-!    // arm tt7
-!    radiotimer_schedule(DURATION_tt7);
-! }
-! 
-! port_INLINE void activity_tie5() {
-!    // indicate transmit failed to schedule to keep stats
-!    schedule_indicateTx(&ieee154e_vars.asn,FALSE);
-!    
-!    // decrement transmits left counter
-!    ieee154e_vars.dataToSend->l2_retriesLeft--;
-!    
-!    if (ieee154e_vars.dataToSend->l2_retriesLeft==0) {
-!       // indicate tx fail if no more retries left
-!       notif_sendDone(ieee154e_vars.dataToSend,E_FAIL);
-!    } else {
-!       // return packet to the virtual COMPONENT_RES_TO_IEEE802154E component
-!       ieee154e_vars.dataToSend->owner = COMPONENT_RES_TO_IEEE802154E;
-!    }
-!    
-!    // reset local variable
-!    ieee154e_vars.dataToSend = NULL;
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ti8(PORT_TIMER_WIDTH capturedTime) {
-!    // change state
-!    changeState(S_RXACK);
-!    
-!    // cancel tt7
-!    radiotimer_cancel();
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // arm tt8
-!    radiotimer_schedule(DURATION_tt8);
-! }
-! 
-! port_INLINE void activity_tie6() {
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ti9(PORT_TIMER_WIDTH capturedTime) {
-!    ieee802154_header_iht ieee802514_header;
-!    volatile PORT_SIGNED_INT_WIDTH  timeCorrection;
-!    uint8_t byte0;
-!    uint8_t byte1;
-!    
-!    // change state
-!    changeState(S_TXPROC);
-!    
-!    // cancel tt8
-!    radiotimer_cancel();
-!    
-!    // turn off the radio
-!    radio_rfOff();
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // get a buffer to put the (received) ACK in
-!    ieee154e_vars.ackReceived = openqueue_getFreePacketBuffer(COMPONENT_IEEE802154E);
-!    if (ieee154e_vars.ackReceived==NULL) {
-!       // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       // abort
-!       endSlot();
-!       return;
-!    }
-!    
-!    // declare ownership over that packet
-!    ieee154e_vars.ackReceived->creator = COMPONENT_IEEE802154E;
-!    ieee154e_vars.ackReceived->owner   = COMPONENT_IEEE802154E;
-!    
-!    /*
-!    The do-while loop that follows is a little parsing trick.
-!    Because it contains a while(0) condition, it gets executed only once.
-!    Below the do-while loop is some code to cleans up the ack variable.
-!    Anywhere in the do-while loop, a break statement can be called to jump to
-!    the clean up code early. If the loop ends without a break, the received
-!    packet was correct. If it got aborted early (through a break), the packet
-!    was faulty.
-!    */
-!    do { // this "loop" is only executed once
-!       
-!       // retrieve the received ack frame from the radio's Rx buffer
-!       ieee154e_vars.ackReceived->payload = &(ieee154e_vars.ackReceived->packet[FIRST_FRAME_BYTE]);
-!       radio_getReceivedFrame(       ieee154e_vars.ackReceived->payload,
-!                                    &ieee154e_vars.ackReceived->length,
-!                              sizeof(ieee154e_vars.ackReceived->packet),
-!                                    &ieee154e_vars.ackReceived->l1_rssi,
-!                                    &ieee154e_vars.ackReceived->l1_lqi,
-!                                    &ieee154e_vars.ackReceived->l1_crc);
-!       
-!       // break if wrong length
-!       if (ieee154e_vars.ackReceived->length<LENGTH_CRC || ieee154e_vars.ackReceived->length>LENGTH_IEEE154_MAX) {
-!          // break from the do-while loop and execute the clean-up code below
-!         openserial_printError(COMPONENT_IEEE802154E,ERR_INVALIDPACKETFROMRADIO,
-!                             (errorparameter_t)1,
-!                             ieee154e_vars.ackReceived->length);
-!         
-!          break;
-!       }
-!       
-!       // toss CRC (2 last bytes)
-!       packetfunctions_tossFooter(   ieee154e_vars.ackReceived, LENGTH_CRC);
-!    
-!       // break if invalid CRC
-!       if (ieee154e_vars.ackReceived->l1_crc==FALSE) {
-!          // break from the do-while loop and execute the clean-up code below
-!          break;
-!       }
-!       
-!       // parse the IEEE802.15.4 header (RX ACK)
-!       ieee802154_retrieveHeader(ieee154e_vars.ackReceived,&ieee802514_header);
-!       
-!       // break if invalid IEEE802.15.4 header
-!       if (ieee802514_header.valid==FALSE) {
-!          // break from the do-while loop and execute the clean-up code below
-!          break;
-!       }
-!       
-!       // store header details in packet buffer
-!       ieee154e_vars.ackReceived->l2_frameType  = ieee802514_header.frameType;
-!       ieee154e_vars.ackReceived->l2_dsn        = ieee802514_header.dsn;
-!       memcpy(&(ieee154e_vars.ackReceived->l2_nextORpreviousHop),&(ieee802514_header.src),sizeof(open_addr_t));
-!       
-!       // toss the IEEE802.15.4 header
-!       packetfunctions_tossHeader(ieee154e_vars.ackReceived,ieee802514_header.headerLength);
-!       
-!       // break if invalid ACK
-!       if (isValidAck(&ieee802514_header,ieee154e_vars.dataToSend)==FALSE) {
-!          // break from the do-while loop and execute the clean-up code below
-!          break;
-!       }
-!       
-!       // resynchronize if I'm not a DAGroot and ACK from preferred parent
-!       if (idmanager_getIsDAGroot()==FALSE &&
-!           neighbors_isPreferredParent(&(ieee154e_vars.ackReceived->l2_nextORpreviousHop)) ) {
-!          byte0 = ieee154e_vars.ackReceived->payload[0];
-!          byte1 = ieee154e_vars.ackReceived->payload[1];
-!          timeCorrection  = (PORT_SIGNED_INT_WIDTH)((PORT_TIMER_WIDTH)byte1<<8 | (PORT_TIMER_WIDTH)byte0);
-!          timeCorrection /=  US_PER_TICK;
-!          timeCorrection  = -timeCorrection;
-!          synchronizeAck(timeCorrection);
-!       }
-!       
-!       // inform schedule of successful transmission
-!       schedule_indicateTx(&ieee154e_vars.asn,TRUE);
-!       
-!       // inform upper layer
-!       notif_sendDone(ieee154e_vars.dataToSend,E_SUCCESS);
-!       ieee154e_vars.dataToSend = NULL;
-!       
-!       // in any case, execute the clean-up code below (processing of ACK done)
-!    } while (0);
-!    
-!    // free the received ack so corresponding RAM memory can be recycled
-!    openqueue_freePacketBuffer(ieee154e_vars.ackReceived);
-!    
-!    // clear local variable
-!    ieee154e_vars.ackReceived = NULL;
-!    
-!    // official end of Tx slot
-!    endSlot();
-! }
-! 
-! //======= RX
-! 
-! port_INLINE void activity_ri2() {
-! 	// change state
-!    changeState(S_RXDATAPREPARE);
-!    
-!    // calculate the frequency to transmit on
-!    ieee154e_vars.freq = calculateFrequency(schedule_getChannelOffset()); 
-!    
-!    // configure the radio for that frequency
-!    //radio_setFrequency(frequency);
-!    radio_setFrequency(ieee154e_vars.freq);
-!    
-!    // enable the radio in Rx mode. The radio does not actively listen yet.
-!    radio_rxEnable();
-!    
-!    
-!    // arm rt2
-!    radiotimer_schedule(DURATION_rt2);
-!        
-!    // change state
-!    changeState(S_RXDATAREADY);
-! }
-! 
-! port_INLINE void activity_rie1() {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_MAXRXDATAPREPARE_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri3() {
-!    // change state
-!    changeState(S_RXDATALISTEN);
-!    
-!    // give the 'go' to receive
-!    radio_rxNow();
-!    
-!    // arm rt3 
-!    radiotimer_schedule(DURATION_rt3);
-! }
-! 
-! port_INLINE void activity_rie2() {
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri4(PORT_TIMER_WIDTH capturedTime) {
-!    // change state
-!    changeState(S_RXDATA);
-!    
-!    // cancel rt3
-!    radiotimer_cancel();
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // record the captured time to sync
-!    ieee154e_vars.syncCapturedTime = capturedTime;
-!    
-!    // arm rt4
-!    radiotimer_schedule(DURATION_rt4);
-! }
-! 
-! port_INLINE void activity_rie3() {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_WDDATADURATION_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri5(PORT_TIMER_WIDTH capturedTime) {
-!    ieee802154_header_iht ieee802514_header;
-!    
-!    // change state
-!    changeState(S_TXACKOFFSET);
-!    
-!    // cancel rt4
-!    radiotimer_cancel();
-!    
-!    // turn off the radio
-!    radio_rfOff();
-!    
-!    // get a buffer to put the (received) data in
-!    ieee154e_vars.dataReceived = openqueue_getFreePacketBuffer(COMPONENT_IEEE802154E);
-!    if (ieee154e_vars.dataReceived==NULL) {
-!       // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       // abort
-!       endSlot();
-!       return;
-!    }
-!    
-!    // declare ownership over that packet
-!    ieee154e_vars.dataReceived->creator = COMPONENT_IEEE802154E;
-!    ieee154e_vars.dataReceived->owner   = COMPONENT_IEEE802154E;
-! 
-!    /*
-!    The do-while loop that follows is a little parsing trick.
-!    Because it contains a while(0) condition, it gets executed only once.
-!    The behavior is:
-!    - if a break occurs inside the do{} body, the error code below the loop
-!      gets executed. This indicates something is wrong with the packet being 
-!      parsed.
-!    - if a return occurs inside the do{} body, the error code below the loop
-!      does not get executed. This indicates the received packet is correct.
-!    */
-!    do { // this "loop" is only executed once
-!       
-!       // retrieve the received data frame from the radio's Rx buffer
-!       ieee154e_vars.dataReceived->payload = &(ieee154e_vars.dataReceived->packet[FIRST_FRAME_BYTE]);
-!       radio_getReceivedFrame(       ieee154e_vars.dataReceived->payload,
-!                                    &ieee154e_vars.dataReceived->length,
-!                              sizeof(ieee154e_vars.dataReceived->packet),
-!                                    &ieee154e_vars.dataReceived->l1_rssi,
-!                                    &ieee154e_vars.dataReceived->l1_lqi,
-!                                    &ieee154e_vars.dataReceived->l1_crc);
-!       
-!       // break if wrong length
-!       if (ieee154e_vars.dataReceived->length<LENGTH_CRC || ieee154e_vars.dataReceived->length>LENGTH_IEEE154_MAX ) {
-!          // jump to the error code below this do-while loop
-!         openserial_printError(COMPONENT_IEEE802154E,ERR_INVALIDPACKETFROMRADIO,
-!                             (errorparameter_t)2,
-!                             ieee154e_vars.dataReceived->length);
-!          break;
-!       }
-!       
-!       // toss CRC (2 last bytes)
-!       packetfunctions_tossFooter(   ieee154e_vars.dataReceived, LENGTH_CRC);
-!       
-!       // if CRC doesn't check, stop
-!       if (ieee154e_vars.dataReceived->l1_crc==FALSE) {
-!          // jump to the error code below this do-while loop
-!          break;
-!       }
-!       
-!       // parse the IEEE802.15.4 header (RX DATA)
-!       ieee802154_retrieveHeader(ieee154e_vars.dataReceived,&ieee802514_header);
-!       
-!       // break if invalid IEEE802.15.4 header
-!       if (ieee802514_header.valid==FALSE) {
-!          // break from the do-while loop and execute the clean-up code below
-!          break;
-!       }
-!       
-!       // store header details in packet buffer
-!       ieee154e_vars.dataReceived->l2_frameType = ieee802514_header.frameType;
-!       ieee154e_vars.dataReceived->l2_dsn       = ieee802514_header.dsn;
-!       memcpy(&(ieee154e_vars.dataReceived->l2_nextORpreviousHop),&(ieee802514_header.src),sizeof(open_addr_t));
-!       
-!       // toss the IEEE802.15.4 header
-!       packetfunctions_tossHeader(ieee154e_vars.dataReceived,ieee802514_header.headerLength);
-!       
-!       // if I just received a valid ADV, record the ASN and toss the ADV payload
-!       if (isValidAdv(&ieee802514_header)==TRUE) {
-!          if (idmanager_getIsDAGroot()==FALSE) {
-!             asnStoreFromAdv(ieee154e_vars.dataReceived);
-!          }
-!          // toss the ADV payload
-!          packetfunctions_tossHeader(ieee154e_vars.dataReceived,ADV_PAYLOAD_LENGTH);
-!       }
-!       
-!       // record the captured time
-!       ieee154e_vars.lastCapturedTime = capturedTime;
-!       
-!       // if I just received an invalid frame, stop
-!       if (isValidRxFrame(&ieee802514_header)==FALSE) {
-!          // jump to the error code below this do-while loop
-!          break;
-!       }
-!       
-!       // check if ack requested
-!       if (ieee802514_header.ackRequested==1) {
-!          // arm rt5
-!          radiotimer_schedule(DURATION_rt5);
-!       } else {
-!          // synchronize to the received packet iif I'm not a DAGroot and this is my preferred parent
-!          if (idmanager_getIsDAGroot()==FALSE && neighbors_isPreferredParent(&(ieee154e_vars.dataReceived->l2_nextORpreviousHop))) {
-!             synchronizePacket(ieee154e_vars.syncCapturedTime);
-!          }
-!          // indicate reception to upper layer (no ACK asked)
-!          notif_receive(ieee154e_vars.dataReceived);
-!          // reset local variable
-!          ieee154e_vars.dataReceived = NULL;
-!          // abort
-!          endSlot();
-!       }
-!       
-!       // everything went well, return here not to execute the error code below
-!       return;
-!       
-!    } while(0);
-!    
-!    // free the (invalid) received data so RAM memory can be recycled
-!    openqueue_freePacketBuffer(ieee154e_vars.dataReceived);
-!    
-!    // clear local variable
-!    ieee154e_vars.dataReceived = NULL;
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri6() {
-!    PORT_SIGNED_INT_WIDTH timeCorrection;
-!    
-!    // change state
-!    changeState(S_TXACKPREPARE);
-!    
-!    // get a buffer to put the ack to send in
-!    ieee154e_vars.ackToSend = openqueue_getFreePacketBuffer(COMPONENT_IEEE802154E);
-!    if (ieee154e_vars.ackToSend==NULL) {
-!       // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       // indicate we received a packet anyway (we don't want to loose any)
-!       notif_receive(ieee154e_vars.dataReceived);
-!       // free local variable
-!       ieee154e_vars.dataReceived = NULL;
-!       // abort
-!       endSlot();
-!       return;
-!    }
-!    
-!    // declare ownership over that packet
-!    ieee154e_vars.ackToSend->creator = COMPONENT_IEEE802154E;
-!    ieee154e_vars.ackToSend->owner   = COMPONENT_IEEE802154E;
-!    
-!    // calculate the time timeCorrection (this is the time when the packet arrive w.r.t the time it should be.
-!    timeCorrection = (PORT_SIGNED_INT_WIDTH)((PORT_SIGNED_INT_WIDTH)ieee154e_vars.syncCapturedTime-(PORT_SIGNED_INT_WIDTH)TsTxOffset);
-!    
-!    // add the payload to the ACK (i.e. the timeCorrection)
-!    packetfunctions_reserveHeaderSize(ieee154e_vars.ackToSend,sizeof(IEEE802154E_ACK_ht));
-!    timeCorrection  = -timeCorrection;
-!    timeCorrection *= US_PER_TICK;
-!    ieee154e_vars.ackToSend->payload[0] = (uint8_t)((((PORT_TIMER_WIDTH)timeCorrection)   ) & 0xff);
-!    ieee154e_vars.ackToSend->payload[1] = (uint8_t)((((PORT_TIMER_WIDTH)timeCorrection)>>8) & 0xff);
-!    
-!    // prepend the IEEE802.15.4 header to the ACK
-!    ieee154e_vars.ackToSend->l2_frameType = IEEE154_TYPE_ACK;
-!    ieee154e_vars.ackToSend->l2_dsn       = ieee154e_vars.dataReceived->l2_dsn;
-!    ieee802154_prependHeader(ieee154e_vars.ackToSend,
-!                             ieee154e_vars.ackToSend->l2_frameType,
-!                             IEEE154_SEC_NO_SECURITY,
-!                             ieee154e_vars.dataReceived->l2_dsn,
-!                             &(ieee154e_vars.dataReceived->l2_nextORpreviousHop)
-!                             );
-!    
-!    // space for 2-byte CRC
-!    packetfunctions_reserveFooterSize(ieee154e_vars.ackToSend,2);
-!    
-!     // calculate the frequency to transmit on
-!    ieee154e_vars.freq = calculateFrequency(schedule_getChannelOffset()); 
-!    
-!    // configure the radio for that frequency
-!    //radio_setFrequency(frequency);
-!    radio_setFrequency(ieee154e_vars.freq);
-!    
-!    // load the packet in the radio's Tx buffer
-!    radio_loadPacket(ieee154e_vars.ackToSend->payload,
-!                     ieee154e_vars.ackToSend->length);
-!    
-!    // enable the radio in Tx mode. This does not send that packet.
-!    radio_txEnable();
-!    
-!    // arm rt6
-!    radiotimer_schedule(DURATION_rt6);
-!    
-!    // change state
-!    changeState(S_TXACKREADY);
-! }
-! 
-! port_INLINE void activity_rie4() {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_MAXTXACKPREPARE_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri7() {
-!    // change state
-!    changeState(S_TXACKDELAY);
-!    
-!    // arm rt7
-!    radiotimer_schedule(DURATION_rt7);
-!    
-!    // give the 'go' to transmit
-!    radio_txNow();
-! }
-! 
-! port_INLINE void activity_rie5() {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_WDRADIOTX_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri8(PORT_TIMER_WIDTH capturedTime) {
-!    // change state
-!    changeState(S_TXACK);
-!    
-!    // cancel rt7
-!    radiotimer_cancel();
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // arm rt8
-!    radiotimer_schedule(DURATION_rt8);
-! }
-! 
-! port_INLINE void activity_rie6() {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_WDACKDURATION_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri9(PORT_TIMER_WIDTH capturedTime) {
-!    // change state
-!    changeState(S_RXPROC);
-!    
-!    // cancel rt8
-!    radiotimer_cancel();
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // free the ack we just sent so corresponding RAM memory can be recycled
-!    openqueue_freePacketBuffer(ieee154e_vars.ackToSend);
-!    
-!    // clear local variable
-!    ieee154e_vars.ackToSend = NULL;
-!    
-!    // synchronize to the received packet
-!    if (idmanager_getIsDAGroot()==FALSE && neighbors_isPreferredParent(&(ieee154e_vars.dataReceived->l2_nextORpreviousHop))) {
-!       synchronizePacket(ieee154e_vars.syncCapturedTime);
-!    }
-!    
-!    // inform upper layer of reception (after ACK sent)
-!    notif_receive(ieee154e_vars.dataReceived);
-!    
-!    // clear local variable
-!    ieee154e_vars.dataReceived = NULL;
-!    
-!    // official end of Rx slot
-!    endSlot();
-! }
-! 
-! //======= frame validity check
-! 
-! /**
-! \brief Decides whether the packet I just received is a valid ADV
-! 
-! \param [in] ieee802514_header IEEE802.15.4 header of the packet I just
-!             received.
-! 
-! A valid ADV frame satisfies the following conditions:
-! - its IEEE802.15.4 header is well formatted
-! - it's a BEACON frame
-! - it's sent to the my PANid
-! - its payload length is the expected ADV payload length
-! 
-! \returns TRUE if packet is a valid ADV, FALSE otherwise
-! */
-! port_INLINE bool isValidAdv(ieee802154_header_iht* ieee802514_header) {
-!    return ieee802514_header->valid==TRUE                                                         && \
-!           ieee802514_header->frameType==IEEE154_TYPE_BEACON                                      && \
-!           packetfunctions_sameAddress(&ieee802514_header->panid,idmanager_getMyID(ADDR_PANID))   && \
-!           ieee154e_vars.dataReceived->length==ADV_PAYLOAD_LENGTH;
-! }
-! 
-! /**
-! \brief Decides whether the packet I just received is valid received frame.
-! 
-! A valid Rx frame satisfies the following constraints:
-! - its IEEE802.15.4 header is well formatted
-! - it's a DATA of BEACON frame (i.e. not ACK and not COMMAND)
-! - it's sent on the same PANid as mine
-! - it's for me (unicast or broadcast)
-! 
-! \param [in] ieee802514_header IEEE802.15.4 header of the packet I just received
-! 
-! \returns TRUE if packet is valid received frame, FALSE otherwise
-! */
-! port_INLINE bool isValidRxFrame(ieee802154_header_iht* ieee802514_header) {
-!    return ieee802514_header->valid==TRUE                                                           && \
-!           (
-!              ieee802514_header->frameType==IEEE154_TYPE_DATA                   ||
-!              ieee802514_header->frameType==IEEE154_TYPE_BEACON
-!           )                                                                                        && \
-!           packetfunctions_sameAddress(&ieee802514_header->panid,idmanager_getMyID(ADDR_PANID))     && \
-!           (
-!              idmanager_isMyAddress(&ieee802514_header->dest)                   ||
-!              packetfunctions_isBroadcastMulticast(&ieee802514_header->dest)
-!           );
-! }
-! 
-! /**
-! \brief Decides whether the packet I just received is a valid ACK.
-! 
-! A packet is a valid ACK if it satisfies the following conditions:
-! - the IEEE802.15.4 header is valid
-! - the frame type is 'ACK'
-! - the sequence number in the ACK matches the sequence number of the packet sent
-! - the ACK contains my PANid
-! - the packet is unicast to me
-! - the packet comes from the neighbor I sent the data to
-! 
-! \param [in] ieee802514_header IEEE802.15.4 header of the packet I just received
-! \param [in] packetSent points to the packet I just sent
-! 
-! \returns TRUE if packet is a valid ACK, FALSE otherwise.
-! */
-! port_INLINE bool isValidAck(ieee802154_header_iht* ieee802514_header, OpenQueueEntry_t* packetSent) {
-!    /*
-!    return ieee802514_header->valid==TRUE                                                           && \
-!           ieee802514_header->frameType==IEEE154_TYPE_ACK                                           && \
-!           ieee802514_header->dsn==packetSent->l2_dsn                                               && \
-!           packetfunctions_sameAddress(&ieee802514_header->panid,idmanager_getMyID(ADDR_PANID))     && \
-!           idmanager_isMyAddress(&ieee802514_header->dest)                                          && \
-!           packetfunctions_sameAddress(&ieee802514_header->src,&packetSent->l2_nextORpreviousHop);
-!    */
-!    // poipoi don't check for seq num
-!    return ieee802514_header->valid==TRUE                                                           && \
-!           ieee802514_header->frameType==IEEE154_TYPE_ACK                                           && \
-!           packetfunctions_sameAddress(&ieee802514_header->panid,idmanager_getMyID(ADDR_PANID))     && \
-!           idmanager_isMyAddress(&ieee802514_header->dest)                                          && \
-!           packetfunctions_sameAddress(&ieee802514_header->src,&packetSent->l2_nextORpreviousHop);
-! }
-! 
-! //======= ASN handling
-! 
-! port_INLINE void incrementAsnOffset() {
-!    // increment the asn
-!    ieee154e_vars.asn.bytes0and1++;
-!    if (ieee154e_vars.asn.bytes0and1==0) {
-!       ieee154e_vars.asn.bytes2and3++;
-!       if (ieee154e_vars.asn.bytes2and3==0) {
-!          ieee154e_vars.asn.byte4++;
-!       }
-!    }
-!    // increment the offsets
-!    ieee154e_vars.slotOffset  = (ieee154e_vars.slotOffset+1)%schedule_getFrameLength();
-!    ieee154e_vars.asnOffset   = (ieee154e_vars.asnOffset+1)%16;
-! }
-! 
-! port_INLINE void asnWriteToAdv(OpenQueueEntry_t* advFrame) {
-!    advFrame->l2_payload[0]   = (ieee154e_vars.asn.bytes0and1     & 0xff);
-!    advFrame->l2_payload[1]   = (ieee154e_vars.asn.bytes0and1/256 & 0xff);
-!    advFrame->l2_payload[2]   = (ieee154e_vars.asn.bytes2and3     & 0xff);
-!    advFrame->l2_payload[3]   = (ieee154e_vars.asn.bytes2and3/256 & 0xff);
-!    advFrame->l2_payload[4]   =  ieee154e_vars.asn.byte4;
-! }
-! 
-! //from upper layer that want to send the ASN to compute timming or latency
-! void asnWriteToPkt(OpenQueueEntry_t* frame) {
-!    frame->payload[0]         = (ieee154e_vars.asn.bytes0and1     & 0xff);
-!    frame->payload[1]         = (ieee154e_vars.asn.bytes0and1/256 & 0xff);
-!    frame->payload[2]         = (ieee154e_vars.asn.bytes2and3     & 0xff);
-!    frame->payload[3]         = (ieee154e_vars.asn.bytes2and3/256 & 0xff);
-!    frame->payload[4]         =  ieee154e_vars.asn.byte4;
-! }
-! 
-! void asnWriteToSerial(uint8_t* array) {
-!    array[0]                  = (ieee154e_vars.asn.bytes0and1     & 0xff);
-!    array[1]                  = (ieee154e_vars.asn.bytes0and1/256 & 0xff);
-!    array[2]                  = (ieee154e_vars.asn.bytes2and3     & 0xff);
-!    array[3]                  = (ieee154e_vars.asn.bytes2and3/256 & 0xff);
-!    array[4]                  =  ieee154e_vars.asn.byte4;
-! }
-! 
-! 
-! port_INLINE void asnStoreFromAdv(OpenQueueEntry_t* advFrame) {
-!    
-!    // store the ASN
-!    ieee154e_vars.asn.bytes0and1   =     ieee154e_vars.dataReceived->payload[0]+
-!                                     256*ieee154e_vars.dataReceived->payload[1];
-!    ieee154e_vars.asn.bytes2and3   =     ieee154e_vars.dataReceived->payload[2]+
-!                                     256*ieee154e_vars.dataReceived->payload[3];
-!    ieee154e_vars.asn.byte4        =     ieee154e_vars.dataReceived->payload[4];
-!    
-!    // determine the current slotOffset
-!    /*
-!    Note: this is a bit of a hack. Normally, slotOffset=ASN%slotlength. But since
-!    the ADV is exchanged in slot 0, we know that we're currently at slotOffset==0
-!    */
-!    ieee154e_vars.slotOffset       = 0;
-!    schedule_syncSlotOffset(ieee154e_vars.slotOffset);
-!    ieee154e_vars.nextActiveSlotOffset = schedule_getNextActiveSlotOffset();
-!    
-!    /* 
-!    infer the asnOffset based on the fact that
-!    ieee154e_vars.freq = 11 + (asnOffset + channelOffset)%16 
-!    */
-!    ieee154e_vars.asnOffset = ieee154e_vars.freq - 11 - schedule_getChannelOffset();
-! }
-! 
-! //======= synchronization
-! 
-! void synchronizePacket(PORT_TIMER_WIDTH timeReceived) {
-!    PORT_SIGNED_INT_WIDTH  timeCorrection;
-!    PORT_TIMER_WIDTH newPeriod;
-!    PORT_TIMER_WIDTH currentValue;
-!    PORT_TIMER_WIDTH currentPeriod;
-!    // record the current timer value and period
-!    currentValue                   =  radio_getTimerValue();
-!    currentPeriod                  =  radio_getTimerPeriod();
-!    // calculate new period
-!    timeCorrection                 =  (PORT_SIGNED_INT_WIDTH)((PORT_SIGNED_INT_WIDTH)timeReceived-(PORT_SIGNED_INT_WIDTH)TsTxOffset);
-!    newPeriod                      =  TsSlotDuration;
-!    // detect whether I'm too close to the edge of the slot, in that case,
-!    // skip a slot and increase the temporary slot length to be 2 slots long
-!    if (currentValue<timeReceived || currentPeriod-currentValue<RESYNCHRONIZATIONGUARD) {
-!       newPeriod                  +=  TsSlotDuration;
-!       incrementAsnOffset();
-!    }
-!    newPeriod                      =  (PORT_TIMER_WIDTH)((PORT_SIGNED_INT_WIDTH)newPeriod+timeCorrection);
-!    // resynchronize by applying the new period
-!    radio_setTimerPeriod(newPeriod);
-!    // reset the de-synchronization timeout
-!    ieee154e_vars.deSyncTimeout    = DESYNCTIMEOUT;
-!    // log a large timeCorrection
-!    if (
-!          ieee154e_vars.isSync==TRUE &&
-!          (
-!             timeCorrection<-LIMITLARGETIMECORRECTION ||
-!             timeCorrection> LIMITLARGETIMECORRECTION
-!          )
-!       ) {
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_LARGE_TIMECORRECTION,
-!                             (errorparameter_t)timeCorrection,
-!                             (errorparameter_t)0);
-!    }
-!    // update the stats
-!    ieee154e_stats.numSyncPkt++;
-!    updateStats(timeCorrection);
-! }
-! 
-! void synchronizeAck(PORT_SIGNED_INT_WIDTH timeCorrection) {
-!    PORT_TIMER_WIDTH newPeriod;
-!    PORT_TIMER_WIDTH currentPeriod;
-!    // calculate new period
-!    currentPeriod                  =  radio_getTimerPeriod();
-!    newPeriod                      =  (PORT_TIMER_WIDTH)((PORT_SIGNED_INT_WIDTH)currentPeriod-timeCorrection);
-!    // resynchronize by applying the new period
-!    radio_setTimerPeriod(newPeriod);
-!    // reset the de-synchronization timeout
-!    ieee154e_vars.deSyncTimeout    = DESYNCTIMEOUT;
-!    // log a large timeCorrection
-!    if (
-!          ieee154e_vars.isSync==TRUE &&
-!          (
-!             timeCorrection<-LIMITLARGETIMECORRECTION ||
-!             timeCorrection> LIMITLARGETIMECORRECTION
-!          )
-!       ) {
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_LARGE_TIMECORRECTION,
-!                             (errorparameter_t)timeCorrection,
-!                             (errorparameter_t)1);
-!    }
-!    // update the stats
-!    ieee154e_stats.numSyncAck++;
-!    updateStats(timeCorrection);
-! }
-! 
-! void changeIsSync(bool newIsSync) {
-!    ieee154e_vars.isSync = newIsSync;
-!    
-!    if (ieee154e_vars.isSync==TRUE) {
-!       leds_sync_on();
-!       resetStats();
-!    } else {
-!       leds_sync_off();
-!       schedule_resetBackoff();
-!    }
-! }
-! 
-! //======= notifying upper layer
-! 
-! void notif_sendDone(OpenQueueEntry_t* packetSent, error_t error) {
-!    // record the outcome of the trasmission attempt
-!    packetSent->l2_sendDoneError   = error;
-!    // record the current ASN
-!    memcpy(&packetSent->l2_asn,&ieee154e_vars.asn,sizeof(asn_t));
-!    // associate this packet with the virtual component
-!    // COMPONENT_IEEE802154E_TO_RES so RES can knows it's for it
-!    packetSent->owner              = COMPONENT_IEEE802154E_TO_RES;
-!    // post RES's sendDone task
-!    scheduler_push_task(task_resNotifSendDone,TASKPRIO_RESNOTIF_TXDONE);
-!    // wake up the scheduler
-!    SCHEDULER_WAKEUP();
-! }
-! 
-! void notif_receive(OpenQueueEntry_t* packetReceived) {
-!    // record the current ASN
-!    memcpy(&packetReceived->l2_asn, &ieee154e_vars.asn, sizeof(asn_t));
-!    // indicate reception to the schedule, to keep statistics
-!    schedule_indicateRx(&packetReceived->l2_asn);
-!    // associate this packet with the virtual component
-!    // COMPONENT_IEEE802154E_TO_RES so RES can knows it's for it
-!    packetReceived->owner          = COMPONENT_IEEE802154E_TO_RES;
-!    // post RES's Receive task
-!    scheduler_push_task(task_resNotifReceive,TASKPRIO_RESNOTIF_RX);
-!    // wake up the scheduler
-!    SCHEDULER_WAKEUP();
-! }
-! 
-! //======= stats
-! 
-! port_INLINE void resetStats() {
-!    ieee154e_stats.numSyncPkt      =    0;
-!    ieee154e_stats.numSyncAck      =    0;
-!    ieee154e_stats.minCorrection   =  127;
-!    ieee154e_stats.maxCorrection   = -127;
-!    // do not reset the number of de-synchronizations
-! }
-! 
-! void updateStats(PORT_SIGNED_INT_WIDTH timeCorrection) {
-!    // update minCorrection
-!    if (timeCorrection<ieee154e_stats.minCorrection) {
-!      ieee154e_stats.minCorrection = timeCorrection;
-!    }
-!    // update maxConnection
-!    if(timeCorrection>ieee154e_stats.maxCorrection) {
-!      ieee154e_stats.maxCorrection = timeCorrection;
-!    }
-! }
-! 
-! //======= misc
-! 
-! /**
-! \brief Calculates the frequency channel to transmit on, based on the 
-! absolute slot number and the channel offset of the requested slot.
-! 
-! During normal operation, the frequency used is a function of the 
-! channelOffset indicating in the schedule, and of the ASN of the
-! slot. This ensures channel hopping, consecutive packets sent in the same slot
-! in the schedule are done on a difference frequency channel.
-! 
-! During development, you can force single channel operation by having this
-! function return a constant channel number (between 11 and 26). This allows you
-! to use a single-channel sniffer; but you can not schedule two links on two
-! different channel offsets in the same slot.
-! 
-! \param [in] channelOffset channel offset for the current slot
-! 
-! \returns The calculated frequency channel, an integer between 11 and 26.
-! */
-! port_INLINE uint8_t calculateFrequency(uint8_t channelOffset) {
-!    // comment the following line out to disable channel hopping
-!    return SYNCHRONIZING_CHANNEL; // single channel
-!    //return 11+(ieee154e_vars.asnOffset+channelOffset)%16; //channel hopping
-! }
-! 
-! /**
-! \brief Changes the state of the IEEE802.15.4e FSM.
-! 
-! Besides simply updating the state global variable,
-! this function toggles the FSM debug pin.
-! 
-! \param [in] newstate The state the IEEE802.15.4e FSM is now in.
-! */
-! void changeState(ieee154e_state_t newstate) {
-!    // update the state
-!    ieee154e_vars.state = newstate;
-!    // wiggle the FSM debug pin
-!    switch (ieee154e_vars.state) {
-!       case S_SYNCLISTEN:
-!       case S_TXDATAOFFSET:
-!          debugpins_fsm_set();
-!          break;
-!       case S_SLEEP:
-!       case S_RXDATAOFFSET:
-!          debugpins_fsm_clr();
-!          break;
-!       case S_SYNCRX:
-!       case S_SYNCPROC:
-!       case S_TXDATAPREPARE:
-!       case S_TXDATAREADY:
-!       case S_TXDATADELAY:
-!       case S_TXDATA:
-!       case S_RXACKOFFSET:
-!       case S_RXACKPREPARE:
-!       case S_RXACKREADY:
-!       case S_RXACKLISTEN:
-!       case S_RXACK:
-!       case S_TXPROC:
-!       case S_RXDATAPREPARE:
-!       case S_RXDATAREADY:
-!       case S_RXDATALISTEN:
-!       case S_RXDATA:
-!       case S_TXACKOFFSET:
-!       case S_TXACKPREPARE:
-!       case S_TXACKREADY:
-!       case S_TXACKDELAY:
-!       case S_TXACK:
-!       case S_RXPROC:
-!          debugpins_fsm_toggle();
-!          break;
-!    }
-! }
-! 
-! /**
-! \brief Housekeeping tasks to do at the end of each slot.
-! 
-! This functions is called once in each slot, when there is nothing more
-! to do. This might be when an error occured, or when everything went well.
-! This function resets the state of the FSM so it is ready for the next slot.
-! 
-! Note that by the time this function is called, any received packet should already
-! have been sent to the upper layer. Similarly, in a Tx slot, the sendDone
-! function should already have been done. If this is not the case, this function
-! will do that for you, but assume that something went wrong.
-! */
-! void endSlot() {
-!    // turn off the radio
-!    radio_rfOff();
-!    
-!    // clear any pending timer
-!    radiotimer_cancel();
-!    
-!    // reset capturedTimes
-!    ieee154e_vars.lastCapturedTime = 0;
-!    ieee154e_vars.syncCapturedTime = 0;
-!    
-!    // clean up dataToSend
-!    if (ieee154e_vars.dataToSend!=NULL) {
-!       // if everything went well, dataToSend was set to NULL in ti9
-!       // getting here means transmit failed
-!       
-!       // indicate Tx fail to schedule to update stats
-!       schedule_indicateTx(&ieee154e_vars.asn,FALSE);
-!       
-!       //decrement transmits left counter
-!       ieee154e_vars.dataToSend->l2_retriesLeft--;
-!       
-!       if (ieee154e_vars.dataToSend->l2_retriesLeft==0) {
-!          // indicate tx fail if no more retries left
-!          notif_sendDone(ieee154e_vars.dataToSend,E_FAIL);
-!       } else {
-!          // return packet to the virtual COMPONENT_RES_TO_IEEE802154E component
-!          ieee154e_vars.dataToSend->owner = COMPONENT_RES_TO_IEEE802154E;
-!       }
-!       
-!       // reset local variable
-!       ieee154e_vars.dataToSend = NULL;
-!    }
-!    
-!    // clean up dataReceived
-!    if (ieee154e_vars.dataReceived!=NULL) {
-!       // assume something went wrong. If everything went well, dataReceived
-!       // would have been set to NULL in ri9.
-!       // indicate  "received packet" to upper layer since we don't want to loose packets
-!       notif_receive(ieee154e_vars.dataReceived);
-!       // reset local variable
-!       ieee154e_vars.dataReceived = NULL;
-!    }
-!    
-!    // clean up ackToSend
-!    if (ieee154e_vars.ackToSend!=NULL) {
-!       // free ackToSend so corresponding RAM memory can be recycled
-!       openqueue_freePacketBuffer(ieee154e_vars.ackToSend);
-!       // reset local variable
-!       ieee154e_vars.ackToSend = NULL;
-!    }
-!    
-!    // clean up ackReceived
-!    if (ieee154e_vars.ackReceived!=NULL) {
-!       // free ackReceived so corresponding RAM memory can be recycled
-!       openqueue_freePacketBuffer(ieee154e_vars.ackReceived);
-!       // reset local variable
-!       ieee154e_vars.ackReceived = NULL;
-!    }
-!    
-!    // change state
-!    changeState(S_SLEEP);
-! }
-! 
-! bool ieee154e_isSynch(){
-!    return ieee154e_vars.isSync;
-! }
-\ No newline at end of file
---- 1,2061 ----
-! #include "openwsn.h"
-! #include "IEEE802154E.h"
-! #include "radio.h"
-! #include "radiotimer.h"
-! #include "IEEE802154.h"
-! #include "openqueue.h"
-! #include "idmanager.h"
-! #include "openserial.h"
-! #include "schedule.h"
-! #include "packetfunctions.h"
-! #include "scheduler.h"
-! #include "leds.h"
-! #include "neighbors.h"
-! #include "debugpins.h"
-! #include "res.h"
-! 
-! #include "thread.h"
-! 
-! //=========================== variables =======================================
-! 
-! ieee154e_vars_t    ieee154e_vars;
-! ieee154e_stats_t   ieee154e_stats;
-! ieee154e_dbg_t     ieee154e_dbg;
-! 
-! //static char openwsn_ieee802154e_rec_stack[KERNEL_CONF_STACKSIZE_MAIN];
-! //static char openwsn_ieee802154e_send_stack[KERNEL_CONF_STACKSIZE_MAIN];
-! 
-! //=========================== prototypes ======================================
-! void isr_ieee154e_newSlot(void);
-! void isr_ieee154e_timer(void);
-! // SYNCHRONIZING
-! void     activity_synchronize_newSlot(void);
-! void     activity_synchronize_startOfFrame(PORT_RADIOTIMER_WIDTH capturedTime);
-! void     activity_synchronize_endOfFrame(PORT_RADIOTIMER_WIDTH capturedTime);
-! // TX
-! void     activity_ti1ORri1(void);
-! void     activity_ti2(void);
-! void     activity_tie1(void);
-! void     activity_ti3(void);
-! void     activity_tie2(void);
-! void     activity_ti4(PORT_RADIOTIMER_WIDTH capturedTime);
-! void     activity_tie3(void);
-! void     activity_ti5(PORT_RADIOTIMER_WIDTH capturedTime);
-! void     activity_ti6(void);
-! void     activity_tie4(void);
-! void     activity_ti7(void);
-! void     activity_tie5(void);
-! void     activity_ti8(PORT_RADIOTIMER_WIDTH capturedTime);
-! void     activity_tie6(void);
-! void     activity_ti9(PORT_RADIOTIMER_WIDTH capturedTime);
-! // RX
-! void     activity_ri2(void);
-! void     activity_rie1(void);
-! void     activity_ri3(void);
-! void     activity_rie2(void);
-! void     activity_ri4(PORT_RADIOTIMER_WIDTH capturedTime);
-! void     activity_rie3(void);
-! void     activity_ri5(PORT_RADIOTIMER_WIDTH capturedTime);
-! void     activity_ri6(void);
-! void     activity_rie4(void);
-! void     activity_ri7(void);
-! void     activity_rie5(void);
-! void     activity_ri8(PORT_RADIOTIMER_WIDTH capturedTime);
-! void     activity_rie6(void);
-! void     activity_ri9(PORT_RADIOTIMER_WIDTH capturedTime);
-! // frame validity check
-! 
-! bool     isValidRxFrame(ieee802154_header_iht* ieee802514_header);
-! bool     isValidAck(ieee802154_header_iht*     ieee802514_header,
-!                     OpenQueueEntry_t*          packetSent);
-! // IEs Handling
-! bool     ieee154e_processIEs(OpenQueueEntry_t* pkt, uint16_t *     lenIE);//xv poipoi
-! void     ieee154e_processSlotframeLinkIE(OpenQueueEntry_t* pkt,uint8_t * ptr);//xv poipoi
-! // ASN handling
-! void     incrementAsnOffset(void);
-! void     asnStoreFromAdv(uint8_t* asn);
-! void     joinPriorityStoreFromAdv(uint8_t jp);
-! // synchronization
-! void     synchronizePacket(PORT_RADIOTIMER_WIDTH timeReceived);
-! void     synchronizeAck(PORT_SIGNED_INT_WIDTH timeCorrection);
-! void     changeIsSync(bool newIsSync);
-! // notifying upper layer
-! void     notif_sendDone(OpenQueueEntry_t* packetSent, owerror_t error);
-! void     notif_receive(OpenQueueEntry_t* packetReceived);
-! // statistics
-! void     resetStats(void);
-! void     updateStats(PORT_SIGNED_INT_WIDTH timeCorrection);
-! // misc
-! uint8_t  calculateFrequency(uint8_t channelOffset);
-! void     changeState(ieee154e_state_t newstate);
-! void     endSlot(void);
-! bool     debugPrint_asn(void);
-! bool     debugPrint_isSync(void);
-! 
-! //=========================== admin ===========================================
-! 
-! /**
-! \brief This function initializes this module.
-! 
-! Call this function once before any other function in this module, possibly
-! during boot-up.
-! */
-! void ieee154e_init(void) {
-!     puts(__PRETTY_FUNCTION__);
-!    // initialize variables
-!    memset(&ieee154e_vars,0,sizeof(ieee154e_vars_t));
-!    memset(&ieee154e_dbg,0,sizeof(ieee154e_dbg_t));
-!    
-!    if (idmanager_getIsDAGroot()==TRUE) {
-!       changeIsSync(TRUE);
-!    } else {
-!       changeIsSync(FALSE);
-!    }
-!    
-!    resetStats();
-!    ieee154e_stats.numDeSync                 = 0;
-!    
-!    // switch radio on
-!    radio_rfOn();
-!    
-!    // set callback functions for the radio
-!    radio_setOverflowCb(isr_ieee154e_newSlot);
-!    radio_setCompareCb(isr_ieee154e_timer);
-!    radio_setStartFrameCb(ieee154e_startOfFrame);
-!    radio_setEndFrameCb(ieee154e_endOfFrame);
-!    // have the radio start its timer
-!    radio_startTimer(TsSlotDuration);
-! }
-! 
-! //=========================== public ==========================================
-! 
-! /**
-! /brief Difference between some older ASN and the current ASN.
-! 
-! \param[in] someASN some ASN to compare to the current
-! 
-! \returns The ASN difference, or 0xffff if more than 65535 different
-! */
-! PORT_RADIOTIMER_WIDTH ieee154e_asnDiff(asn_t* someASN) {
-!    PORT_RADIOTIMER_WIDTH diff;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    if (ieee154e_vars.asn.byte4 != someASN->byte4) {
-!       ENABLE_INTERRUPTS();
-!       return (PORT_RADIOTIMER_WIDTH)0xFFFFFFFF;;
-!    }
-!    
-!    diff = 0;
-!    if (ieee154e_vars.asn.bytes2and3 == someASN->bytes2and3) {
-!       ENABLE_INTERRUPTS();
-!       return ieee154e_vars.asn.bytes0and1-someASN->bytes0and1;
-!    } else if (ieee154e_vars.asn.bytes2and3-someASN->bytes2and3==1) {
-!       diff  = ieee154e_vars.asn.bytes0and1;
-!       diff += 0xffff-someASN->bytes0and1;
-!       diff += 1;
-!    } else {
-!       diff = (PORT_RADIOTIMER_WIDTH)0xFFFFFFFF;;
-!    }
-!    ENABLE_INTERRUPTS();
-!    return diff;
-! }
-! 
-! //======= events
-! 
-! /**
-! \brief Indicates a new slot has just started.
-! 
-! This function executes in ISR mode, when the new slot timer fires.
-! */
-! void isr_ieee154e_newSlot(void) {
-!    radio_setTimerPeriod(TsSlotDuration);
-!    if (ieee154e_vars.isSync==FALSE) {
-!       if (idmanager_getIsDAGroot()==TRUE) {
-!          changeIsSync(TRUE);
-!       } else {
-!          activity_synchronize_newSlot();
-!       }
-!    } else {
-!       activity_ti1ORri1();
-!    }
-!    ieee154e_dbg.num_newSlot++;
-! }
-! 
-! /**
-! \brief Indicates the FSM timer has fired.
-! 
-! This function executes in ISR mode, when the FSM timer fires.
-! */
-! void isr_ieee154e_timer(void) {
-!    switch (ieee154e_vars.state) {
-!       case S_TXDATAOFFSET:
-!          activity_ti2();
-!          break;
-!       case S_TXDATAPREPARE:
-!          activity_tie1();
-!          break;
-!       case S_TXDATAREADY:
-!          activity_ti3();
-!          break;
-!       case S_TXDATADELAY:
-!          activity_tie2();
-!          break;
-!       case S_TXDATA:
-!          activity_tie3();
-!          break;
-!       case S_RXACKOFFSET:
-!          activity_ti6();
-!          break;
-!       case S_RXACKPREPARE:
-!          activity_tie4();
-!          break;
-!       case S_RXACKREADY:
-!          activity_ti7();
-!          break;
-!       case S_RXACKLISTEN:
-!          activity_tie5();
-!          break;
-!       case S_RXACK:
-!          activity_tie6();
-!          break;
-!       case S_RXDATAOFFSET:
-!          activity_ri2(); 
-!          break;
-!       case S_RXDATAPREPARE:
-!          activity_rie1();
-!          break;
-!       case S_RXDATAREADY:
-!          activity_ri3();
-!          break;
-!       case S_RXDATALISTEN:
-!          activity_rie2();
-!          break;
-!       case S_RXDATA:
-!          activity_rie3();
-!          break;
-!       case S_TXACKOFFSET: 
-!          activity_ri6();
-!          break;
-!       case S_TXACKPREPARE:
-!          activity_rie4();
-!          break;
-!       case S_TXACKREADY:
-!          activity_ri7();
-!          break;
-!       case S_TXACKDELAY:
-!          activity_rie5();
-!          break;
-!       case S_TXACK:
-!          activity_rie6();
-!          break;
-!       default:
-!          // log the error
-!          openserial_printError(COMPONENT_IEEE802154E,ERR_WRONG_STATE_IN_TIMERFIRES,
-!                                (errorparameter_t)ieee154e_vars.state,
-!                                (errorparameter_t)ieee154e_vars.slotOffset);
-!          // abort
-!          endSlot();
-!          break;
-!    }
-!    ieee154e_dbg.num_timer++;
-! }
-! 
-! /**
-! \brief Indicates the radio just received the first byte of a packet.
-! 
-! This function executes in ISR mode.
-! */
-! void ieee154e_startOfFrame(PORT_RADIOTIMER_WIDTH capturedTime) {
-!    if (ieee154e_vars.isSync==FALSE) {
-!      activity_synchronize_startOfFrame(capturedTime);
-!    } else {
-!       switch (ieee154e_vars.state) {
-!          case S_TXDATADELAY:   
-!             activity_ti4(capturedTime);
-!             break;
-!          case S_RXACKREADY:
-!             /*
-!             It is possible to receive in this state for radio where there is no
-!             way of differentiated between "ready to listen" and "listening"
-!             (e.g. CC2420). We must therefore expect to the start of a packet in
-!             this "ready" state.
-!             */
-!             // no break!
-!          case S_RXACKLISTEN:
-!             activity_ti8(capturedTime);
-!             break;
-!          case S_RXDATAREADY:
-!             /*
-!             Similarly as above.
-!             */
-!             // no break!
-!          case S_RXDATALISTEN:
-!             activity_ri4(capturedTime);
-!             break;
-!          case S_TXACKDELAY:
-!             activity_ri8(capturedTime);
-!             break;
-!          default:
-!             // log the error
-!             openserial_printError(COMPONENT_IEEE802154E,ERR_WRONG_STATE_IN_NEWSLOT,
-!                                   (errorparameter_t)ieee154e_vars.state,
-!                                   (errorparameter_t)ieee154e_vars.slotOffset);
-!             // abort
-!             endSlot();
-!             break;
-!       }
-!    }
-!    ieee154e_dbg.num_startOfFrame++;
-! }
-! 
-! /**
-! \brief Indicates the radio just received the last byte of a packet.
-! 
-! This function executes in ISR mode.
-! */
-! void ieee154e_endOfFrame(PORT_RADIOTIMER_WIDTH capturedTime) {
-!    if (ieee154e_vars.isSync==FALSE) {
-!       activity_synchronize_endOfFrame(capturedTime);
-!    } else {
-!       switch (ieee154e_vars.state) {
-!          case S_TXDATA:
-!             activity_ti5(capturedTime);
-!             break;
-!          case S_RXACK:
-!             activity_ti9(capturedTime);
-!             break;
-!          case S_RXDATA:
-!             activity_ri5(capturedTime);
-!             break;
-!          case S_TXACK:
-!             activity_ri9(capturedTime);
-!             break;
-!          default:
-!             // log the error
-!             openserial_printError(COMPONENT_IEEE802154E,ERR_WRONG_STATE_IN_ENDOFFRAME,
-!                                   (errorparameter_t)ieee154e_vars.state,
-!                                   (errorparameter_t)ieee154e_vars.slotOffset);
-!             // abort
-!             endSlot();
-!             break;
-!       }
-!    }
-!    ieee154e_dbg.num_endOfFrame++;
-! }
-! 
-! //======= misc
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_asn(void) {
-!    asn_t output;
-!    output.byte4         =  ieee154e_vars.asn.byte4;
-!    output.bytes2and3    =  ieee154e_vars.asn.bytes2and3;
-!    output.bytes0and1    =  ieee154e_vars.asn.bytes0and1;
-!    openserial_printStatus(STATUS_ASN,(uint8_t*)&output,sizeof(output));
-!    return TRUE;
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_isSync(void) {
-!    uint8_t output=0;
-!    output = ieee154e_vars.isSync;
-!    openserial_printStatus(STATUS_ISSYNC,(uint8_t*)&output,sizeof(uint8_t));
-!    return TRUE;
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_macStats(void) {
-!    // send current stats over serial
-!    ieee154e_stats.dutyCycle/=(float)SUPERFRAME_LENGTH; //avg on the all slots of a frame
-!    ieee154e_stats.dutyCycle/=STATUS_MAX;//because this is executed once every 10 times of debugprint
-!    ieee154e_stats.dutyCycle*=100.0;//as is a percentage
-!    openserial_printStatus(STATUS_MACSTATS,(uint8_t*)&ieee154e_stats,sizeof(ieee154e_stats_t));
-!    ieee154e_stats.dutyCycle=0; //reset for the next superframe.
-!    
-!    return TRUE;
-! }
-! 
-! //=========================== private =========================================
-! 
-! //======= SYNCHRONIZING
-! 
-! port_INLINE void activity_synchronize_newSlot(void) {
-!    // I'm in the middle of receiving a packet
-!    if (ieee154e_vars.state==S_SYNCRX) {
-!       return;
-!    }
-!    
-!    // if this is the first time I call this function while not synchronized,
-!    // switch on the radio in Rx mode
-!    if (ieee154e_vars.state!=S_SYNCLISTEN) {
-!       // change state
-!       changeState(S_SYNCLISTEN);
-!       
-!       // turn off the radio (in case it wasn't yet)
-!       radio_rfOff();
-!       
-!       // configure the radio to listen to the default synchronizing channel
-!       radio_setFrequency(SYNCHRONIZING_CHANNEL);
-!       
-!       // update record of current channel
-!       ieee154e_vars.freq = SYNCHRONIZING_CHANNEL;
-!       
-!       // switch on the radio in Rx mode.
-!       radio_rxEnable();
-!       ieee154e_vars.radioOnInit=radio_getTimerValue();
-!       ieee154e_vars.radioOnThisSlot=TRUE;
-!       radio_rxNow();
-!    }
-!    
-!    // increment ASN (used only to schedule serial activity)
-!    incrementAsnOffset();
-!    
-!    // to be able to receive and transmist serial even when not synchronized
-!    // take turns every 8 slots sending and receiving
-!    if        ((ieee154e_vars.asn.bytes0and1&0x000f)==0x0000) {
-!       openserial_stop();
-!       openserial_startOutput();
-!    } else if ((ieee154e_vars.asn.bytes0and1&0x000f)==0x0008) {
-!       openserial_stop();
-!       openserial_startInput();
-!    }
-! }
-! 
-! port_INLINE void activity_synchronize_startOfFrame(PORT_RADIOTIMER_WIDTH capturedTime) {
-!    
-!    // don't care about packet if I'm not listening
-!    if (ieee154e_vars.state!=S_SYNCLISTEN) {
-!       return;
-!    }
-!    
-!    // change state
-!    changeState(S_SYNCRX);
-!    
-!    // stop the serial
-!    openserial_stop();
-!    
-!    // record the captured time 
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // record the captured time (for sync)
-!    ieee154e_vars.syncCapturedTime = capturedTime;
-! }
-! 
-! port_INLINE void activity_synchronize_endOfFrame(PORT_RADIOTIMER_WIDTH capturedTime) {
-!    ieee802154_header_iht ieee802514_header;
-!    uint16_t lenIE=0;//len of IEs being received if any.
-!    
-!    // check state
-!    if (ieee154e_vars.state!=S_SYNCRX) {
-!       // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_WRONG_STATE_IN_ENDFRAME_SYNC,
-!                             (errorparameter_t)ieee154e_vars.state,
-!                             (errorparameter_t)0);
-!       // abort
-!       endSlot();
-!    }
-!    
-!    // change state
-!    changeState(S_SYNCPROC);
-!    
-!    // get a buffer to put the (received) frame in
-!    ieee154e_vars.dataReceived = openqueue_getFreePacketBuffer(COMPONENT_IEEE802154E);
-!    if (ieee154e_vars.dataReceived==NULL) {
-!       // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       // abort
-!       endSlot();
-!       return;
-!    }
-!    
-!    // declare ownership over that packet
-!    ieee154e_vars.dataReceived->creator = COMPONENT_IEEE802154E;
-!    ieee154e_vars.dataReceived->owner   = COMPONENT_IEEE802154E;
-!    
-!    /*
-!    The do-while loop that follows is a little parsing trick.
-!    Because it contains a while(0) condition, it gets executed only once.
-!    The behavior is:
-!    - if a break occurs inside the do{} body, the error code below the loop
-!      gets executed. This indicates something is wrong with the packet being 
-!      parsed.
-!    - if a return occurs inside the do{} body, the error code below the loop
-!      does not get executed. This indicates the received packet is correct.
-!    */
-!    do { // this "loop" is only executed once
-!       
-!       // retrieve the received data frame from the radio's Rx buffer
-!       ieee154e_vars.dataReceived->payload = &(ieee154e_vars.dataReceived->packet[FIRST_FRAME_BYTE]);
-!       radio_getReceivedFrame(       ieee154e_vars.dataReceived->payload,
-!                                    &ieee154e_vars.dataReceived->length,
-!                              sizeof(ieee154e_vars.dataReceived->packet),
-!                                    &ieee154e_vars.dataReceived->l1_rssi,
-!                                    &ieee154e_vars.dataReceived->l1_lqi,
-!                                    &ieee154e_vars.dataReceived->l1_crc);
-!       
-!       // break if packet too short
-!       if (ieee154e_vars.dataReceived->length<LENGTH_CRC || ieee154e_vars.dataReceived->length>LENGTH_IEEE154_MAX) {
-!          // break from the do-while loop and execute abort code below
-!           openserial_printError(COMPONENT_IEEE802154E,ERR_INVALIDPACKETFROMRADIO,
-!                             (errorparameter_t)0,
-!                             ieee154e_vars.dataReceived->length);
-!          break;
-!       }
-!       
-!       // toss CRC (2 last bytes)
-!       packetfunctions_tossFooter(   ieee154e_vars.dataReceived, LENGTH_CRC);
-!       
-!       // break if invalid CRC
-!       if (ieee154e_vars.dataReceived->l1_crc==FALSE) {
-!          // break from the do-while loop and execute abort code below
-!          break;
-!       }
-!       
-!       // parse the IEEE802.15.4 header (synchronize, end of frame)
-!       ieee802154_retrieveHeader(ieee154e_vars.dataReceived,&ieee802514_header);
-!       
-!       // break if invalid IEEE802.15.4 header
-!       if (ieee802514_header.valid==FALSE) {
-!          // break from the do-while loop and execute the clean-up code below
-!          break;
-!       }
-!       
-!       // store header details in packet buffer
-!       ieee154e_vars.dataReceived->l2_frameType = ieee802514_header.frameType;
-!       ieee154e_vars.dataReceived->l2_dsn       = ieee802514_header.dsn;
-!       memcpy(&(ieee154e_vars.dataReceived->l2_nextORpreviousHop),&(ieee802514_header.src),sizeof(open_addr_t));
-!       
-!       // toss the IEEE802.15.4 header -- this does not include IEs as they are processed 
-!       // next.
-!       packetfunctions_tossHeader(ieee154e_vars.dataReceived,ieee802514_header.headerLength);
-!       
-!       // handle IEs -- xv poipoi
-!       // break if invalid ADV
-!       if ((ieee802514_header.valid==TRUE                                                        && 
-!           ieee802514_header.ieListPresent==TRUE                                                 &&
-!           ieee802514_header.frameType==IEEE154_TYPE_BEACON                                      && 
-!           packetfunctions_sameAddress(&ieee802514_header.panid,idmanager_getMyID(ADDR_PANID))   &&          
-!           ieee154e_processIEs(ieee154e_vars.dataReceived,&lenIE))==FALSE) {
-!          // break from the do-while loop and execute the clean-up code below
-!          break;
-!       }
-!       
-!       // turn off the radio
-!       radio_rfOff();
-!       //compute radio duty cycle
-!       ieee154e_vars.radioOnTics+=(radio_getTimerValue()-ieee154e_vars.radioOnInit);
-!       
-!       // toss the IEs including Synch
-!       packetfunctions_tossHeader(ieee154e_vars.dataReceived,lenIE);
-!       
-!       // synchronize (for the first time) to the sender's ADV
-!       synchronizePacket(ieee154e_vars.syncCapturedTime);
-!       
-!       // declare synchronized
-!       changeIsSync(TRUE);
-!       
-!       // log the info
-!       openserial_printInfo(COMPONENT_IEEE802154E,ERR_SYNCHRONIZED,
-!                             (errorparameter_t)ieee154e_vars.slotOffset,
-!                             (errorparameter_t)0);
-!       
-!       // send received ADV up the stack so RES can update statistics (synchronizing)
-!       notif_receive(ieee154e_vars.dataReceived);
-!       
-!       // clear local variable
-!       ieee154e_vars.dataReceived = NULL;
-!       
-!       // official end of synchronization
-!       endSlot();
-!       
-!       // everything went well, return here not to execute the error code below
-!       return;
-!       
-!    } while (0);
-!    
-!    // free the (invalid) received data buffer so RAM memory can be recycled
-!    openqueue_freePacketBuffer(ieee154e_vars.dataReceived);
-!    
-!    // clear local variable
-!    ieee154e_vars.dataReceived = NULL;
-!    
-!    // return to listening state
-!    changeState(S_SYNCLISTEN);
-! }
-! 
-! //xv poipoi - IE Handling 
-! port_INLINE bool ieee154e_processIEs(OpenQueueEntry_t* pkt, uint16_t * lenIE)
-! {
-!   uint8_t ptr,byte0,byte1;
-!   uint8_t temp_8b,gr_elem_id,subid;
-!   uint16_t temp_16b,len,sublen;
-!   volatile PORT_SIGNED_INT_WIDTH  timeCorrection;
-!   
-!   ptr=0;
-!   //candidate IE header  if type ==0 header IE if type==1 payload IE
-!   temp_8b = *((uint8_t*)(pkt->payload)+ptr);
-!   ptr++;
-!   temp_16b = temp_8b + ((*((uint8_t*)(pkt->payload)+ptr))<< 8);
-!   ptr++;
-!   *lenIE = ptr; 
-!   if ((temp_16b & IEEE802154E_DESC_TYPE_PAYLOAD_IE) == IEEE802154E_DESC_TYPE_PAYLOAD_IE){
-!   //payload IE - last bit is 1
-!      len=(temp_16b & IEEE802154E_DESC_LEN_PAYLOAD_IE_MASK)>>IEEE802154E_DESC_LEN_PAYLOAD_IE_SHIFT;
-!      gr_elem_id= (temp_16b & IEEE802154E_DESC_GROUPID_PAYLOAD_IE_MASK)>>IEEE802154E_DESC_GROUPID_PAYLOAD_IE_SHIFT; 
-!   }else {
-!   //header IE - last bit is 0
-!      len=(temp_16b & IEEE802154E_DESC_LEN_HEADER_IE_MASK)>>IEEE802154E_DESC_LEN_HEADER_IE_SHIFT;
-!      gr_elem_id = (temp_16b & IEEE802154E_DESC_ELEMENTID_HEADER_IE_MASK)>>IEEE802154E_DESC_ELEMENTID_HEADER_IE_SHIFT; 
-!   }
-!   
-!   *lenIE += len; 
-!   //now determine sub elements if any
-!   switch(gr_elem_id){
-!     //this is the only groupID that we parse. See page 82.  
-!     case IEEE802154E_MLME_IE_GROUPID:
-!       //IE content can be any of the sub-IEs. Parse and see which
-!       do{
-!         //read sub IE header
-!         temp_8b = *((uint8_t*)(pkt->payload)+ptr);
-!         ptr = ptr + 1;
-!         temp_16b = temp_8b  +(*((uint8_t*)(pkt->payload)+ptr) << 8);
-!         ptr = ptr + 1;
-!         len = len - 2; //remove header fields len
-!         if ((temp_16b & IEEE802154E_DESC_TYPE_LONG) == IEEE802154E_DESC_TYPE_LONG){
-!            //long sub-IE - last bit is 1
-!            sublen=(temp_16b & IEEE802154E_DESC_LEN_LONG_MLME_IE_MASK)>>IEEE802154E_DESC_LEN_LONG_MLME_IE_SHIFT;
-!            subid= (temp_16b & IEEE802154E_DESC_SUBID_LONG_MLME_IE_MASK)>>IEEE802154E_DESC_SUBID_LONG_MLME_IE_SHIFT; 
-!         }else {
-!            //short IE - last bit is 0
-!            sublen =(temp_16b & IEEE802154E_DESC_LEN_SHORT_MLME_IE_MASK)>>IEEE802154E_DESC_LEN_SHORT_MLME_IE_SHIFT;
-!            subid = (temp_16b & IEEE802154E_DESC_SUBID_SHORT_MLME_IE_MASK)>>IEEE802154E_DESC_SUBID_SHORT_MLME_IE_SHIFT; 
-!         }
-!         switch(subid){
-!         case IEEE802154E_MLME_SYNC_IE_SUBID:
-!           //content is ASN and Join Priority 
-!           if (idmanager_getIsDAGroot()==FALSE) {
-!              asnStoreFromAdv((uint8_t*)(pkt->payload)+ptr);
-!              ptr = ptr + 5; //add ASN len
-!              joinPriorityStoreFromAdv(*((uint8_t*)(pkt->payload)+ptr));
-!              ptr = ptr + 1;
-!           }
-!           break;
-!         case IEEE802154E_MLME_SLOTFRAME_LINK_IE_SUBID:
-!           ieee154e_processSlotframeLinkIE(pkt,&ptr); 
-!           break;
-!         case IEEE802154E_MLME_TIMESLOT_IE_SUBID:
-!           //TODO
-!           break;
-!         default:
-!           return FALSE;
-!           break;
-!         }
-!         len = len - sublen;
-!       } while(len>0);
-!       
-!       break;
-!     //the rest are elementID  
-!     case IEEE802154E_ACK_NACK_TIMECORRECTION_ELEMENTID:
-!       //IE content is time correction -- apply the time correction on ack received.
-!        if (idmanager_getIsDAGroot()==FALSE &&
-!          neighbors_isPreferredParent(&(pkt->l2_nextORpreviousHop)) ) {
-!          byte0 = *((uint8_t*)(pkt->payload)+ptr);
-!          ptr++;
-!          byte1 = *((uint8_t*)(pkt->payload)+ptr);
-!          ptr++;
-!          
-!          timeCorrection  = (PORT_SIGNED_INT_WIDTH)((PORT_RADIOTIMER_WIDTH)byte1<<8 | (PORT_RADIOTIMER_WIDTH)byte0);
-!          timeCorrection /=  US_PER_TICK;
-!          timeCorrection  = -timeCorrection;
-!          synchronizeAck(timeCorrection);
-!       }
-!       break; 
-!     default:
-!       *lenIE = 0;//no header or not recognized.
-!        return FALSE;
-!   }
-!   if (*lenIE>127) {
-!          // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_HEADER_TOO_LONG,
-!                             (errorparameter_t)*lenIE,
-!                             (errorparameter_t)1);
-!   }
-!   return TRUE;
-! }
-! 
-! port_INLINE void ieee154e_processSlotframeLinkIE(OpenQueueEntry_t* pkt,uint8_t * ptr){
-!  uint8_t numSlotFrames,i,j,localptr;
-!  slotframelink_IE_t sfInfo; 
-!  linkInfo_subIE_t linkInfo;
-!  localptr=*ptr; 
-!   // number of slot frames 1B
-!   numSlotFrames = *((uint8_t*)(pkt->payload)+localptr);
-!   localptr++;
-!   // for each slotframe
-!   i=0;
-!   while(i < numSlotFrames){
-!    //1-slotftramehandle 1B
-!     sfInfo.slotframehandle=*((uint8_t*)(pkt->payload)+localptr);
-!     localptr++;
-!     //2-slotframe size 2B
-!     sfInfo.slotframesize = *((uint8_t*)(pkt->payload)+localptr);
-!     localptr++;
-!     sfInfo.slotframesize |= (*((uint8_t*)(pkt->payload)+localptr))<<8;
-!     localptr++;;
-!     //3-number of links 1B   
-!     sfInfo.numlinks= *((uint8_t*)(pkt->payload)+localptr);
-!     localptr++;
-!    
-!     for (j=0;j<sfInfo.numlinks;j++){
-!       //for each link 5Bytes
-!        //TimeSlot 2B
-!        linkInfo.tsNum = *((uint8_t*)(pkt->payload)+localptr);
-!        localptr++;
-!        linkInfo.tsNum  |= (*((uint8_t*)(pkt->payload)+localptr))<<8;
-!        localptr++;
-!        //Ch.Offset 2B
-!        linkInfo.choffset = *((uint8_t*)(pkt->payload)+localptr);
-!        localptr++;
-!        linkInfo.choffset  |= (*((uint8_t*)(pkt->payload)+localptr))<<8;
-!        localptr++;
-!        //LinkOption bitmap 1B
-!        linkInfo.linkoptions = *((uint8_t*)(pkt->payload)+localptr);
-!        localptr++;
-!        //xv poipoi
-!        //TODO - inform schedule of that link so it can update if needed.
-!     } 
-!     i++;
-!   } 
-!   *ptr=localptr;      
-! }
-! 
-! //======= TX
-! 
-! port_INLINE void activity_ti1ORri1(void) {
-!    cellType_t  cellType;
-!    open_addr_t neighbor;
-!    uint8_t  i;
-!    synch_IE_t  syn_IE;
-! 
-!    // increment ASN (do this first so debug pins are in sync)
-!    incrementAsnOffset();
-!    
-!    // wiggle debug pins
-!    debugpins_slot_toggle();
-!    if (ieee154e_vars.slotOffset==0) {
-!       debugpins_frame_toggle();
-!    }
-!    
-!    // desynchronize if needed
-!    if (idmanager_getIsDAGroot()==FALSE) {
-!       ieee154e_vars.deSyncTimeout--;
-!       if (ieee154e_vars.deSyncTimeout==0) {
-!          // declare myself desynchronized
-!          changeIsSync(FALSE);
-!         
-!          // log the error
-!          openserial_printError(COMPONENT_IEEE802154E,ERR_DESYNCHRONIZED,
-!                                (errorparameter_t)ieee154e_vars.slotOffset,
-!                                (errorparameter_t)0);
-!             
-!          // update the statistics
-!          ieee154e_stats.numDeSync++;
-!             
-!          // abort
-!          endSlot();
-!          return;
-!       }
-!    }
-!    
-!    // if the previous slot took too long, we will not be in the right state
-!    if (ieee154e_vars.state!=S_SLEEP) {
-!       // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_WRONG_STATE_IN_STARTSLOT,
-!                             (errorparameter_t)ieee154e_vars.state,
-!                             (errorparameter_t)ieee154e_vars.slotOffset);
-!       // abort
-!       endSlot();
-!       return;
-!    }
-!    
-!    if (ieee154e_vars.slotOffset==ieee154e_vars.nextActiveSlotOffset) {
-!       // this is the next active slot
-!       
-!       // advance the schedule
-!       schedule_advanceSlot();
-!       
-!       // find the next one
-!       ieee154e_vars.nextActiveSlotOffset    = schedule_getNextActiveSlotOffset();
-!    } else {
-!       // this is NOT the next active slot, abort
-!       // stop using serial
-!       openserial_stop();
-!       // abort the slot
-!       endSlot();
-!       //start outputing serial
-!       openserial_startOutput();
-!       return;
-!    }
-!    
-!    // check the schedule to see what type of slot this is
-!    cellType = schedule_getType();
-!    switch (cellType) {
-!       case CELLTYPE_ADV:
-!          // stop using serial
-!          openserial_stop();
-!          // look for an ADV packet in the queue
-!          ieee154e_vars.dataToSend = openqueue_macGetAdvPacket();
-!          if (ieee154e_vars.dataToSend==NULL) {   // I will be listening for an ADV
-!             // change state
-!             changeState(S_RXDATAOFFSET);
-!             // arm rt1
-!             radiotimer_schedule(DURATION_rt1);
-!          } else {                                // I will be sending an ADV
-!             // change state
-!             changeState(S_TXDATAOFFSET);
-!             // change owner
-!             ieee154e_vars.dataToSend->owner = COMPONENT_IEEE802154E;            
-!             //copy synch IE  -- should be Little endian???
-!             // fill in the ASN field of the ADV
-!             ieee154e_getAsn(syn_IE.asn);
-!             syn_IE.join_priority = neighbors_getMyDAGrank()/(2*MINHOPRANKINCREASE); //poipoi -- use dagrank(rank) 
-!        
-!             memcpy(ieee154e_vars.dataToSend->l2_ASNpayload,&syn_IE,sizeof(synch_IE_t));
-!             
-!             // record that I attempt to transmit this packet
-!             ieee154e_vars.dataToSend->l2_numTxAttempts++;
-!             // arm tt1
-!             radiotimer_schedule(DURATION_tt1);
-!          }
-!          break;
-!       case CELLTYPE_TXRX:
-!       case CELLTYPE_TX:
-!          // stop using serial
-!          openserial_stop();
-!          // check whether we can send
-!          if (schedule_getOkToSend()) {
-!             schedule_getNeighbor(&neighbor);
-!             ieee154e_vars.dataToSend = openqueue_macGetDataPacket(&neighbor);
-!          } else {
-!             ieee154e_vars.dataToSend = NULL;
-!          }
-!          if (ieee154e_vars.dataToSend!=NULL) {   // I have a packet to send
-!             // change state
-!             changeState(S_TXDATAOFFSET);
-!             // change owner
-!             ieee154e_vars.dataToSend->owner = COMPONENT_IEEE802154E;
-!             // record that I attempt to transmit this packet
-!             ieee154e_vars.dataToSend->l2_numTxAttempts++;
-!             // arm tt1
-!             radiotimer_schedule(DURATION_tt1);
-!          } else if (cellType==CELLTYPE_TX){
-!             // abort
-!             endSlot();
-!          }
-!          if (cellType==CELLTYPE_TX || 
-!              (cellType==CELLTYPE_TXRX && ieee154e_vars.dataToSend!=NULL)) {
-!             break;
-!          }
-!       case CELLTYPE_RX:
-!          // stop using serial
-!          openserial_stop();
-!          // change state
-!          changeState(S_RXDATAOFFSET);
-!          // arm rt1
-!          radiotimer_schedule(DURATION_rt1);
-!          break;
-!       case CELLTYPE_SERIALRX:
-!          // stop using serial
-!          openserial_stop();
-!          // abort the slot
-!          endSlot();
-!          //start inputting serial data
-!          openserial_startInput();
-!          //this is to emulate a set of serial input slots without having the slotted structure.
-! 
-!          radio_setTimerPeriod(TsSlotDuration*(NUMSERIALRX));
-!          
-!          //increase ASN by NUMSERIALRX-1 slots as at this slot is already incremented by 1
-!          for (i=0;i<NUMSERIALRX-1;i++){
-!             incrementAsnOffset();
-!          }
-!          break;
-!       case CELLTYPE_MORESERIALRX:
-!          // do nothing (not even endSlot())
-!          break;
-!       default:
-!          // stop using serial
-!          openserial_stop();
-!          // log the error
-!          openserial_printCritical(COMPONENT_IEEE802154E,ERR_WRONG_CELLTYPE,
-!                                (errorparameter_t)cellType,
-!                                (errorparameter_t)ieee154e_vars.slotOffset);
-!          // abort
-!          endSlot();
-!          break;
-!    }
-! }
-! 
-! port_INLINE void activity_ti2(void) {
-!    // change state
-!    changeState(S_TXDATAPREPARE);
-!    
-!    // calculate the frequency to transmit on
-!    ieee154e_vars.freq = calculateFrequency(schedule_getChannelOffset()); 
-!    
-!    // configure the radio for that frequency
-!    radio_setFrequency(ieee154e_vars.freq);
-!    
-!    // load the packet in the radio's Tx buffer
-!    radio_loadPacket(ieee154e_vars.dataToSend->payload,
-!                     ieee154e_vars.dataToSend->length);
-!    
-!    // enable the radio in Tx mode. This does not send the packet.
-!    radio_txEnable();
-!    ieee154e_vars.radioOnInit=radio_getTimerValue();
-!    ieee154e_vars.radioOnThisSlot=TRUE;
-!    // arm tt2
-!    radiotimer_schedule(DURATION_tt2);
-!    
-!    // change state
-!    changeState(S_TXDATAREADY);
-! }
-! 
-! port_INLINE void activity_tie1(void) {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_MAXTXDATAPREPARE_OVERFLOW,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ti3(void) {
-!    // change state
-!    changeState(S_TXDATADELAY);
-!    
-!    // arm tt3
-!    radiotimer_schedule(DURATION_tt3);
-!    
-!    // give the 'go' to transmit
-!    radio_txNow();
-! }
-! 
-! port_INLINE void activity_tie2(void) {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_WDRADIO_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! //start of frame interrupt
-! port_INLINE void activity_ti4(PORT_RADIOTIMER_WIDTH capturedTime) {
-!    // change state
-!    changeState(S_TXDATA);
-!    
-!    // cancel tt3
-!    radiotimer_cancel();
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // arm tt4
-!    radiotimer_schedule(DURATION_tt4);
-! }
-! 
-! port_INLINE void activity_tie3(void) {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_WDDATADURATION_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ti5(PORT_RADIOTIMER_WIDTH capturedTime) {
-!    bool listenForAck;
-!    
-!    // change state
-!    changeState(S_RXACKOFFSET);
-!    
-!    // cancel tt4
-!    radiotimer_cancel();
-!    
-!    // turn off the radio
-!     radio_rfOff();
-!    ieee154e_vars.radioOnTics+=(radio_getTimerValue()-ieee154e_vars.radioOnInit);
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // decides whether to listen for an ACK
-!    if (packetfunctions_isBroadcastMulticast(&ieee154e_vars.dataToSend->l2_nextORpreviousHop)==TRUE) {
-!       listenForAck = FALSE;
-!    } else {
-!       listenForAck = TRUE;
-!    }
-!    
-!    if (listenForAck==TRUE) {
-!       // arm tt5
-!       radiotimer_schedule(DURATION_tt5);
-!    } else {
-!       // indicate succesful Tx to schedule to keep statistics
-!       schedule_indicateTx(&ieee154e_vars.asn,TRUE);
-!       // indicate to upper later the packet was sent successfully
-!       notif_sendDone(ieee154e_vars.dataToSend,E_SUCCESS);
-!       // reset local variable
-!       ieee154e_vars.dataToSend = NULL;
-!       // abort
-!       endSlot();
-!    }
-! }
-! 
-! port_INLINE void activity_ti6(void) {
-!    // change state
-!    changeState(S_RXACKPREPARE);
-!    
-!    // calculate the frequency to transmit on
-!    ieee154e_vars.freq = calculateFrequency(schedule_getChannelOffset()); 
-!    
-!    // configure the radio for that frequency
-!    radio_setFrequency(ieee154e_vars.freq);
-!    
-!    // enable the radio in Rx mode. The radio is not actively listening yet.
-!    radio_rxEnable();
-!    //caputre init of radio for duty cycle calculation
-!    ieee154e_vars.radioOnInit=radio_getTimerValue();
-!    ieee154e_vars.radioOnThisSlot=TRUE;
-!    // arm tt6
-!    radiotimer_schedule(DURATION_tt6);
-!    
-!    // change state
-!    changeState(S_RXACKREADY);
-! }
-! 
-! port_INLINE void activity_tie4(void) {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_MAXRXACKPREPARE_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ti7(void) {
-!    // change state
-!    changeState(S_RXACKLISTEN);
-!    
-!    // start listening
-!    radio_rxNow();
-!    
-!    // arm tt7
-!    radiotimer_schedule(DURATION_tt7);
-! }
-! 
-! port_INLINE void activity_tie5(void) {
-!    // indicate transmit failed to schedule to keep stats
-!    schedule_indicateTx(&ieee154e_vars.asn,FALSE);
-!    
-!    // decrement transmits left counter
-!    ieee154e_vars.dataToSend->l2_retriesLeft--;
-!    
-!    if (ieee154e_vars.dataToSend->l2_retriesLeft==0) {
-!       // indicate tx fail if no more retries left
-!       notif_sendDone(ieee154e_vars.dataToSend,E_FAIL);
-!    } else {
-!       // return packet to the virtual COMPONENT_RES_TO_IEEE802154E component
-!       ieee154e_vars.dataToSend->owner = COMPONENT_RES_TO_IEEE802154E;
-!    }
-!    
-!    // reset local variable
-!    ieee154e_vars.dataToSend = NULL;
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ti8(PORT_RADIOTIMER_WIDTH capturedTime) {
-!    // change state
-!    changeState(S_RXACK);
-!    
-!    // cancel tt7
-!    radiotimer_cancel();
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // arm tt8
-!    radiotimer_schedule(DURATION_tt8);
-! }
-! 
-! port_INLINE void activity_tie6(void) {
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ti9(PORT_RADIOTIMER_WIDTH capturedTime) {
-!    ieee802154_header_iht ieee802514_header;
-!    volatile PORT_SIGNED_INT_WIDTH  timeCorrection;
-!    uint16_t lenIE;
-!    
-!    // change state
-!    changeState(S_TXPROC);
-!    
-!    // cancel tt8
-!    radiotimer_cancel();
-!    
-!    // turn off the radio
-!    radio_rfOff();
-!    //compute tics radio on.
-!    ieee154e_vars.radioOnTics+=(radio_getTimerValue()-ieee154e_vars.radioOnInit);
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // get a buffer to put the (received) ACK in
-!    ieee154e_vars.ackReceived = openqueue_getFreePacketBuffer(COMPONENT_IEEE802154E);
-!    if (ieee154e_vars.ackReceived==NULL) {
-!       // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       // abort
-!       endSlot();
-!       return;
-!    }
-!    
-!    // declare ownership over that packet
-!    ieee154e_vars.ackReceived->creator = COMPONENT_IEEE802154E;
-!    ieee154e_vars.ackReceived->owner   = COMPONENT_IEEE802154E;
-!    
-!    /*
-!    The do-while loop that follows is a little parsing trick.
-!    Because it contains a while(0) condition, it gets executed only once.
-!    Below the do-while loop is some code to cleans up the ack variable.
-!    Anywhere in the do-while loop, a break statement can be called to jump to
-!    the clean up code early. If the loop ends without a break, the received
-!    packet was correct. If it got aborted early (through a break), the packet
-!    was faulty.
-!    */
-!    do { // this "loop" is only executed once
-!       
-!       // retrieve the received ack frame from the radio's Rx buffer
-!       ieee154e_vars.ackReceived->payload = &(ieee154e_vars.ackReceived->packet[FIRST_FRAME_BYTE]);
-!       radio_getReceivedFrame(       ieee154e_vars.ackReceived->payload,
-!                                    &ieee154e_vars.ackReceived->length,
-!                              sizeof(ieee154e_vars.ackReceived->packet),
-!                                    &ieee154e_vars.ackReceived->l1_rssi,
-!                                    &ieee154e_vars.ackReceived->l1_lqi,
-!                                    &ieee154e_vars.ackReceived->l1_crc);
-!       
-!       // break if wrong length
-!       if (ieee154e_vars.ackReceived->length<LENGTH_CRC || ieee154e_vars.ackReceived->length>LENGTH_IEEE154_MAX) {
-!          // break from the do-while loop and execute the clean-up code below
-!         openserial_printError(COMPONENT_IEEE802154E,ERR_INVALIDPACKETFROMRADIO,
-!                             (errorparameter_t)1,
-!                             ieee154e_vars.ackReceived->length);
-!         
-!          break;
-!       }
-!       
-!       // toss CRC (2 last bytes)
-!       packetfunctions_tossFooter(   ieee154e_vars.ackReceived, LENGTH_CRC);
-!    
-!       // break if invalid CRC
-!       if (ieee154e_vars.ackReceived->l1_crc==FALSE) {
-!          // break from the do-while loop and execute the clean-up code below
-!          break;
-!       }
-!       
-!       // parse the IEEE802.15.4 header (RX ACK)
-!       ieee802154_retrieveHeader(ieee154e_vars.ackReceived,&ieee802514_header);
-!       
-!       // break if invalid IEEE802.15.4 header
-!       if (ieee802514_header.valid==FALSE) {
-!          // break from the do-while loop and execute the clean-up code below
-!          break;
-!       }
-!       
-!       // store header details in packet buffer
-!       ieee154e_vars.ackReceived->l2_frameType  = ieee802514_header.frameType;
-!       ieee154e_vars.ackReceived->l2_dsn        = ieee802514_header.dsn;
-!       memcpy(&(ieee154e_vars.ackReceived->l2_nextORpreviousHop),&(ieee802514_header.src),sizeof(open_addr_t));
-!       
-!       // toss the IEEE802.15.4 header
-!       packetfunctions_tossHeader(ieee154e_vars.ackReceived,ieee802514_header.headerLength);
-!       
-!       // break if invalid ACK
-!       if (isValidAck(&ieee802514_header,ieee154e_vars.dataToSend)==FALSE) {
-!          // break from the do-while loop and execute the clean-up code below
-!          break;
-!       }
-!       //hanlde IEs --xv poipoi
-!       if (ieee802514_header.ieListPresent==FALSE){
-!          break; //ack should contain IEs.
-!       }
-!       
-!       if (ieee154e_processIEs(ieee154e_vars.ackReceived,&lenIE)==FALSE){
-!         //invalid IEs on ACK. 
-!         break;
-!       }
-!  
-!       // toss the IEs including ACK -- xv poipoi
-!       packetfunctions_tossHeader(ieee154e_vars.ackReceived,lenIE);
-!       
-!       // inform schedule of successful transmission
-!       schedule_indicateTx(&ieee154e_vars.asn,TRUE);
-!       
-!       // inform upper layer
-!       notif_sendDone(ieee154e_vars.dataToSend,E_SUCCESS);
-!       ieee154e_vars.dataToSend = NULL;
-!       
-!       // in any case, execute the clean-up code below (processing of ACK done)
-!    } while (0);
-!    
-!    // free the received ack so corresponding RAM memory can be recycled
-!    openqueue_freePacketBuffer(ieee154e_vars.ackReceived);
-!    
-!    // clear local variable
-!    ieee154e_vars.ackReceived = NULL;
-!    
-!    // official end of Tx slot
-!    endSlot();
-! }
-! 
-! //======= RX
-! 
-! port_INLINE void activity_ri2(void) {
-! 	// change state
-!    changeState(S_RXDATAPREPARE);
-!    
-!    // calculate the frequency to transmit on
-!    ieee154e_vars.freq = calculateFrequency(schedule_getChannelOffset()); 
-!    
-!    // configure the radio for that frequency
-!    radio_setFrequency(ieee154e_vars.freq);
-!    
-!    // enable the radio in Rx mode. The radio does not actively listen yet.
-!    radio_rxEnable();
-!    ieee154e_vars.radioOnInit=radio_getTimerValue();
-!    ieee154e_vars.radioOnThisSlot=TRUE;
-!    
-!    // arm rt2
-!    radiotimer_schedule(DURATION_rt2);
-!        
-!    // change state
-!    changeState(S_RXDATAREADY);
-! }
-! 
-! port_INLINE void activity_rie1(void) {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_MAXRXDATAPREPARE_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri3(void) {
-!    // change state
-!    changeState(S_RXDATALISTEN);
-!    
-!    // give the 'go' to receive
-!    radio_rxNow();
-!    
-!    // arm rt3 
-!    radiotimer_schedule(DURATION_rt3);
-! }
-! 
-! port_INLINE void activity_rie2(void) {
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri4(PORT_RADIOTIMER_WIDTH capturedTime) {
-! 
-!    // change state
-!    changeState(S_RXDATA);
-!    
-!    // cancel rt3
-!    radiotimer_cancel();
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // record the captured time to sync
-!    ieee154e_vars.syncCapturedTime = capturedTime;
-! 
-!    radiotimer_schedule(DURATION_rt4);
-! }
-! 
-! port_INLINE void activity_rie3(void) {
-!      
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_WDDATADURATION_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri5(PORT_RADIOTIMER_WIDTH capturedTime) {
-!    ieee802154_header_iht ieee802514_header;
-!    uint16_t lenIE=0;
-!    
-!    // change state
-!    changeState(S_TXACKOFFSET);
-!    
-!    // cancel rt4
-!    radiotimer_cancel();
-! 
-!    // turn off the radio
-!    //radio_rfOff();
-!    ieee154e_vars.radioOnTics+=radio_getTimerValue()-ieee154e_vars.radioOnInit;
-!    // get a buffer to put the (received) data in
-!    ieee154e_vars.dataReceived = openqueue_getFreePacketBuffer(COMPONENT_IEEE802154E);
-!    if (ieee154e_vars.dataReceived==NULL) {
-!       // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       // abort
-!       endSlot();
-!       return;
-!    }
-!    
-!    // declare ownership over that packet
-!    ieee154e_vars.dataReceived->creator = COMPONENT_IEEE802154E;
-!    ieee154e_vars.dataReceived->owner   = COMPONENT_IEEE802154E;
-! 
-!    /*
-!    The do-while loop that follows is a little parsing trick.
-!    Because it contains a while(0) condition, it gets executed only once.
-!    The behavior is:
-!    - if a break occurs inside the do{} body, the error code below the loop
-!      gets executed. This indicates something is wrong with the packet being 
-!      parsed.
-!    - if a return occurs inside the do{} body, the error code below the loop
-!      does not get executed. This indicates the received packet is correct.
-!    */
-!    do { // this "loop" is only executed once
-!       
-!       // retrieve the received data frame from the radio's Rx buffer
-!       ieee154e_vars.dataReceived->payload = &(ieee154e_vars.dataReceived->packet[FIRST_FRAME_BYTE]);
-!       radio_getReceivedFrame(       ieee154e_vars.dataReceived->payload,
-!                                    &ieee154e_vars.dataReceived->length,
-!                              sizeof(ieee154e_vars.dataReceived->packet),
-!                                    &ieee154e_vars.dataReceived->l1_rssi,
-!                                    &ieee154e_vars.dataReceived->l1_lqi,
-!                                    &ieee154e_vars.dataReceived->l1_crc);
-!       
-!       // break if wrong length
-!       if (ieee154e_vars.dataReceived->length<LENGTH_CRC || ieee154e_vars.dataReceived->length>LENGTH_IEEE154_MAX ) {
-!          // jump to the error code below this do-while loop
-!         openserial_printError(COMPONENT_IEEE802154E,ERR_INVALIDPACKETFROMRADIO,
-!                             (errorparameter_t)2,
-!                             ieee154e_vars.dataReceived->length);
-!          break;
-!       }
-!       
-!       // toss CRC (2 last bytes)
-!       packetfunctions_tossFooter(   ieee154e_vars.dataReceived, LENGTH_CRC);
-!       
-!       // if CRC doesn't check, stop
-!       if (ieee154e_vars.dataReceived->l1_crc==FALSE) {
-!          // jump to the error code below this do-while loop
-!          break;
-!       }
-!       
-!       // parse the IEEE802.15.4 header (RX DATA)
-!       ieee802154_retrieveHeader(ieee154e_vars.dataReceived,&ieee802514_header);
-!       
-!       // break if invalid IEEE802.15.4 header
-!       if (ieee802514_header.valid==FALSE) {
-!          // break from the do-while loop and execute the clean-up code below
-!          break;
-!       }
-!       
-!       // store header details in packet buffer
-!       ieee154e_vars.dataReceived->l2_frameType = ieee802514_header.frameType;
-!       ieee154e_vars.dataReceived->l2_dsn       = ieee802514_header.dsn;
-!       memcpy(&(ieee154e_vars.dataReceived->l2_nextORpreviousHop),&(ieee802514_header.src),sizeof(open_addr_t));
-!       
-!       // toss the IEEE802.15.4 header
-!       packetfunctions_tossHeader(ieee154e_vars.dataReceived,ieee802514_header.headerLength);
-!       
-!       // handle IEs xv poipoi
-!       //reset join priority 
-!       
-!       if ((ieee802514_header.valid==TRUE &&
-!           ieee802514_header.ieListPresent==TRUE && 
-!           packetfunctions_sameAddress(&ieee802514_header.panid,idmanager_getMyID(ADDR_PANID)) && 
-!           ieee154e_processIEs(ieee154e_vars.dataReceived,&lenIE))==FALSE) {
-!           //log  that the packet is not carrying IEs
-!       }
-!       
-!       // toss the IEs including Synch
-!       packetfunctions_tossHeader(ieee154e_vars.dataReceived,lenIE);
-!             
-!       // record the captured time
-!       ieee154e_vars.lastCapturedTime = capturedTime;
-!       
-!       // if I just received an invalid frame, stop
-!       if (isValidRxFrame(&ieee802514_header)==FALSE) {
-!          // jump to the error code below this do-while loop
-!          break;
-!       }
-!       
-!       // check if ack requested
-!       if (ieee802514_header.ackRequested==1) {
-!          // arm rt5
-!          radiotimer_schedule(DURATION_rt5);
-!       } else {
-!          // synchronize to the received packet iif I'm not a DAGroot and this is my preferred parent
-!          if (idmanager_getIsDAGroot()==FALSE && neighbors_isPreferredParent(&(ieee154e_vars.dataReceived->l2_nextORpreviousHop))) {
-!             synchronizePacket(ieee154e_vars.syncCapturedTime);
-!          }
-!          // indicate reception to upper layer (no ACK asked)
-!          notif_receive(ieee154e_vars.dataReceived);
-!          // reset local variable
-!          ieee154e_vars.dataReceived = NULL;
-!          // abort
-!          endSlot();
-!       }
-!       
-!       // everything went well, return here not to execute the error code below
-!       return;
-!       
-!    } while(0);
-!    
-!    // free the (invalid) received data so RAM memory can be recycled
-!    openqueue_freePacketBuffer(ieee154e_vars.dataReceived);
-!    
-!    // clear local variable
-!    ieee154e_vars.dataReceived = NULL;
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri6(void) {
-!    PORT_SIGNED_INT_WIDTH timeCorrection;
-!    header_IE_descriptor_t header_desc;
-!    
-!    // change state
-!    changeState(S_TXACKPREPARE);
-!    
-!    // get a buffer to put the ack to send in
-!    ieee154e_vars.ackToSend = openqueue_getFreePacketBuffer(COMPONENT_IEEE802154E);
-!    if (ieee154e_vars.ackToSend==NULL) {
-!       // log the error
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       // indicate we received a packet anyway (we don't want to loose any)
-!       notif_receive(ieee154e_vars.dataReceived);
-!       // free local variable
-!       ieee154e_vars.dataReceived = NULL;
-!       // abort
-!       endSlot();
-!       return;
-!    }
-!    
-!    // declare ownership over that packet
-!    ieee154e_vars.ackToSend->creator = COMPONENT_IEEE802154E;
-!    ieee154e_vars.ackToSend->owner   = COMPONENT_IEEE802154E;
-!    
-!    // calculate the time timeCorrection (this is the time when the packet arrive w.r.t the time it should be.
-!    timeCorrection = (PORT_SIGNED_INT_WIDTH)((PORT_SIGNED_INT_WIDTH)ieee154e_vars.syncCapturedTime-(PORT_SIGNED_INT_WIDTH)TsTxOffset);
-!     
-!    // add the payload to the ACK (i.e. the timeCorrection)
-!    packetfunctions_reserveHeaderSize(ieee154e_vars.ackToSend,sizeof(ack_timecorrection_IE_t));
-!    timeCorrection  = -timeCorrection;
-!    timeCorrection *= US_PER_TICK;
-!    ieee154e_vars.ackToSend->payload[0] = (uint8_t)((((PORT_RADIOTIMER_WIDTH)timeCorrection)   ) & 0xff);
-!    ieee154e_vars.ackToSend->payload[1] = (uint8_t)((((PORT_RADIOTIMER_WIDTH)timeCorrection)>>8) & 0xff);
-!    
-!    // add header IE header -- xv poipoi -- pkt is filled in reverse order..
-!    packetfunctions_reserveHeaderSize(ieee154e_vars.ackToSend,sizeof(header_IE_descriptor_t));
-!    //create the header for ack IE
-!    header_desc.length_elementid_type=(sizeof(ack_timecorrection_IE_t)<< IEEE802154E_DESC_LEN_HEADER_IE_SHIFT)|
-!                                      (IEEE802154E_ACK_NACK_TIMECORRECTION_ELEMENTID << IEEE802154E_DESC_ELEMENTID_HEADER_IE_SHIFT)|
-!                                      IEEE802154E_DESC_TYPE_SHORT; 
-!    memcpy(ieee154e_vars.ackToSend->payload,&header_desc,sizeof(header_IE_descriptor_t));
-!    
-!    // prepend the IEEE802.15.4 header to the ACK
-!    ieee154e_vars.ackToSend->l2_frameType = IEEE154_TYPE_ACK;
-!    ieee154e_vars.ackToSend->l2_dsn       = ieee154e_vars.dataReceived->l2_dsn;
-!    ieee802154_prependHeader(ieee154e_vars.ackToSend,
-!                             ieee154e_vars.ackToSend->l2_frameType,
-!                             IEEE154_IELIST_YES,//ie in ack
-!                             IEEE154_FRAMEVERSION,//enhanced ack
-!                             IEEE154_SEC_NO_SECURITY,
-!                             ieee154e_vars.dataReceived->l2_dsn,
-!                             &(ieee154e_vars.dataReceived->l2_nextORpreviousHop)
-!                             );
-!    
-!    // space for 2-byte CRC
-!    packetfunctions_reserveFooterSize(ieee154e_vars.ackToSend,2);
-!    
-!     // calculate the frequency to transmit on
-!    ieee154e_vars.freq = calculateFrequency(schedule_getChannelOffset()); 
-!    
-!    // configure the radio for that frequency
-!    radio_setFrequency(ieee154e_vars.freq);
-!    
-!    // load the packet in the radio's Tx buffer
-!    radio_loadPacket(ieee154e_vars.ackToSend->payload,
-!                     ieee154e_vars.ackToSend->length);
-!    
-!    // enable the radio in Tx mode. This does not send that packet.
-!    radio_txEnable();
-!    ieee154e_vars.radioOnInit=radio_getTimerValue();
-!    ieee154e_vars.radioOnThisSlot=TRUE;
-!    // arm rt6
-!    radiotimer_schedule(DURATION_rt6);
-!    
-!    // change state
-!    changeState(S_TXACKREADY);
-! }
-! 
-! port_INLINE void activity_rie4(void) {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_MAXTXACKPREPARE_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri7(void) {
-!    // change state
-!    changeState(S_TXACKDELAY);
-!    
-!    // arm rt7
-!    radiotimer_schedule(DURATION_rt7);
-!    
-!    // give the 'go' to transmit
-!    radio_txNow(); 
-! }
-! 
-! port_INLINE void activity_rie5(void) {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_WDRADIOTX_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri8(PORT_RADIOTIMER_WIDTH capturedTime) {
-!    // change state
-!    changeState(S_TXACK);
-!    
-!    // cancel rt7
-!    radiotimer_cancel();
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // arm rt8
-!    radiotimer_schedule(DURATION_rt8);
-! }
-! 
-! port_INLINE void activity_rie6(void) {
-!    // log the error
-!    openserial_printError(COMPONENT_IEEE802154E,ERR_WDACKDURATION_OVERFLOWS,
-!                          (errorparameter_t)ieee154e_vars.state,
-!                          (errorparameter_t)ieee154e_vars.slotOffset);
-!    
-!    // abort
-!    endSlot();
-! }
-! 
-! port_INLINE void activity_ri9(PORT_RADIOTIMER_WIDTH capturedTime) {
-!    // change state
-!    changeState(S_RXPROC);
-!    
-!    // cancel rt8
-!    radiotimer_cancel();
-!    
-!    // record the captured time
-!    ieee154e_vars.lastCapturedTime = capturedTime;
-!    
-!    // free the ack we just sent so corresponding RAM memory can be recycled
-!    openqueue_freePacketBuffer(ieee154e_vars.ackToSend);
-!    
-!    // clear local variable
-!    ieee154e_vars.ackToSend = NULL;
-!    
-!    // synchronize to the received packet
-!    if (idmanager_getIsDAGroot()==FALSE && neighbors_isPreferredParent(&(ieee154e_vars.dataReceived->l2_nextORpreviousHop))) {
-!       synchronizePacket(ieee154e_vars.syncCapturedTime);
-!    }
-!    
-!    // inform upper layer of reception (after ACK sent)
-!    notif_receive(ieee154e_vars.dataReceived);
-!    
-!    // clear local variable
-!    ieee154e_vars.dataReceived = NULL;
-!    
-!    // official end of Rx slot
-!    endSlot();
-! }
-! 
-! //======= frame validity check
-! 
-! /**
-! \brief Decides whether the packet I just received is valid received frame.
-! 
-! A valid Rx frame satisfies the following constraints:
-! - its IEEE802.15.4 header is well formatted
-! - it's a DATA of BEACON frame (i.e. not ACK and not COMMAND)
-! - it's sent on the same PANid as mine
-! - it's for me (unicast or broadcast)
-! 
-! \param[in] ieee802514_header IEEE802.15.4 header of the packet I just received
-! 
-! \returns TRUE if packet is valid received frame, FALSE otherwise
-! */
-! port_INLINE bool isValidRxFrame(ieee802154_header_iht* ieee802514_header) {
-!    return ieee802514_header->valid==TRUE                                                           && \
-!           (
-!              ieee802514_header->frameType==IEEE154_TYPE_DATA                   ||
-!              ieee802514_header->frameType==IEEE154_TYPE_BEACON
-!           )                                                                                        && \
-!           packetfunctions_sameAddress(&ieee802514_header->panid,idmanager_getMyID(ADDR_PANID))     && \
-!           (
-!              idmanager_isMyAddress(&ieee802514_header->dest)                   ||
-!              packetfunctions_isBroadcastMulticast(&ieee802514_header->dest)
-!           );
-! }
-! 
-! /**
-! \brief Decides whether the packet I just received is a valid ACK.
-! 
-! A packet is a valid ACK if it satisfies the following conditions:
-! - the IEEE802.15.4 header is valid
-! - the frame type is 'ACK'
-! - the sequence number in the ACK matches the sequence number of the packet sent
-! - the ACK contains my PANid
-! - the packet is unicast to me
-! - the packet comes from the neighbor I sent the data to
-! 
-! \param[in] ieee802514_header IEEE802.15.4 header of the packet I just received
-! \param[in] packetSent points to the packet I just sent
-! 
-! \returns TRUE if packet is a valid ACK, FALSE otherwise.
-! */
-! port_INLINE bool isValidAck(ieee802154_header_iht* ieee802514_header, OpenQueueEntry_t* packetSent) {
-!    /*
-!    return ieee802514_header->valid==TRUE                                                           && \
-!           ieee802514_header->frameType==IEEE154_TYPE_ACK                                           && \
-!           ieee802514_header->dsn==packetSent->l2_dsn                                               && \
-!           packetfunctions_sameAddress(&ieee802514_header->panid,idmanager_getMyID(ADDR_PANID))     && \
-!           idmanager_isMyAddress(&ieee802514_header->dest)                                          && \
-!           packetfunctions_sameAddress(&ieee802514_header->src,&packetSent->l2_nextORpreviousHop);
-!    */
-!    // poipoi don't check for seq num
-!    return ieee802514_header->valid==TRUE                                                           && \
-!           ieee802514_header->frameType==IEEE154_TYPE_ACK                                           && \
-!           packetfunctions_sameAddress(&ieee802514_header->panid,idmanager_getMyID(ADDR_PANID))     && \
-!           idmanager_isMyAddress(&ieee802514_header->dest)                                          && \
-!           packetfunctions_sameAddress(&ieee802514_header->src,&packetSent->l2_nextORpreviousHop);
-! }
-! 
-! //======= ASN handling
-! 
-! port_INLINE void incrementAsnOffset(void) {
-!    // increment the asn
-!    ieee154e_vars.asn.bytes0and1++;
-!    if (ieee154e_vars.asn.bytes0and1==0) {
-!       ieee154e_vars.asn.bytes2and3++;
-!       if (ieee154e_vars.asn.bytes2and3==0) {
-!          ieee154e_vars.asn.byte4++;
-!       }
-!    }
-!    // increment the offsets
-!    ieee154e_vars.slotOffset  = (ieee154e_vars.slotOffset+1)%schedule_getFrameLength();
-!    ieee154e_vars.asnOffset   = (ieee154e_vars.asnOffset+1)%16;
-! }
-! 
-! //from upper layer that want to send the ASN to compute timing or latency
-! port_INLINE void ieee154e_getAsn(uint8_t* array) {
-!    array[0]         = (ieee154e_vars.asn.bytes0and1     & 0xff);
-!    array[1]         = (ieee154e_vars.asn.bytes0and1/256 & 0xff);
-!    array[2]         = (ieee154e_vars.asn.bytes2and3     & 0xff);
-!    array[3]         = (ieee154e_vars.asn.bytes2and3/256 & 0xff);
-!    array[4]         =  ieee154e_vars.asn.byte4;
-! }
-! 
-! port_INLINE void joinPriorityStoreFromAdv(uint8_t jp){
-!   ieee154e_vars.dataReceived->l2_joinPriority = jp;
-!   ieee154e_vars.dataReceived->l2_joinPriorityPresent = TRUE;     
-! }
-! 
-! 
-! port_INLINE void asnStoreFromAdv(uint8_t* asn) {
-!    
-!    // store the ASN
-!    ieee154e_vars.asn.bytes0and1   =     asn[0]+
-!                                     256*asn[1];
-!    ieee154e_vars.asn.bytes2and3   =     asn[2]+
-!                                     256*asn[3];
-!    ieee154e_vars.asn.byte4        =     asn[4];
-!    
-!    // determine the current slotOffset
-!    /*
-!    Note: this is a bit of a hack. Normally, slotOffset=ASN%slotlength. But since
-!    the ADV is exchanged in slot 0, we know that we're currently at slotOffset==0
-!    */
-!    ieee154e_vars.slotOffset       = 0;
-!    schedule_syncSlotOffset(ieee154e_vars.slotOffset);
-!    ieee154e_vars.nextActiveSlotOffset = schedule_getNextActiveSlotOffset();
-!    
-!    /* 
-!    infer the asnOffset based on the fact that
-!    ieee154e_vars.freq = 11 + (asnOffset + channelOffset)%16 
-!    */
-!    ieee154e_vars.asnOffset = ieee154e_vars.freq - 11 - schedule_getChannelOffset();
-! }
-! 
-! //======= synchronization
-! 
-! void synchronizePacket(PORT_RADIOTIMER_WIDTH timeReceived) {
-!    PORT_SIGNED_INT_WIDTH  timeCorrection;
-!    PORT_RADIOTIMER_WIDTH newPeriod;
-!    PORT_RADIOTIMER_WIDTH currentValue;
-!    PORT_RADIOTIMER_WIDTH currentPeriod;
-!    // record the current timer value and period
-!    currentValue                   =  radio_getTimerValue();
-!    currentPeriod                  =  radio_getTimerPeriod();
-!    // calculate new period
-!    timeCorrection                 =  (PORT_SIGNED_INT_WIDTH)((PORT_SIGNED_INT_WIDTH)timeReceived-(PORT_SIGNED_INT_WIDTH)TsTxOffset);
-! 
-!    newPeriod                      =  TsSlotDuration;
-!    // detect whether I'm too close to the edge of the slot, in that case,
-!    // skip a slot and increase the temporary slot length to be 2 slots long
-!    if (currentValue<timeReceived || currentPeriod-currentValue<RESYNCHRONIZATIONGUARD) {
-!       newPeriod                  +=  TsSlotDuration;
-!       incrementAsnOffset();
-!    }
-!    newPeriod                      =  (PORT_RADIOTIMER_WIDTH)((PORT_SIGNED_INT_WIDTH)newPeriod+timeCorrection);
-!    // resynchronize by applying the new period
-!    radio_setTimerPeriod(newPeriod);
-!    // reset the de-synchronization timeout
-!    ieee154e_vars.deSyncTimeout    = DESYNCTIMEOUT;
-!    // log a large timeCorrection
-!    if (
-!          ieee154e_vars.isSync==TRUE &&
-!          (
-!             timeCorrection<-LIMITLARGETIMECORRECTION ||
-!             timeCorrection> LIMITLARGETIMECORRECTION
-!          )
-!       ) {
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_LARGE_TIMECORRECTION,
-!                             (errorparameter_t)timeCorrection,
-!                             (errorparameter_t)0);
-!    }
-!    // update the stats
-!    ieee154e_stats.numSyncPkt++;
-!    updateStats(timeCorrection);
-! }
-! 
-! void synchronizeAck(PORT_SIGNED_INT_WIDTH timeCorrection) {
-!    PORT_RADIOTIMER_WIDTH newPeriod;
-!    PORT_RADIOTIMER_WIDTH currentPeriod;
-!    // calculate new period
-!    currentPeriod                  =  radio_getTimerPeriod();
-!    newPeriod                      =  (PORT_RADIOTIMER_WIDTH)((PORT_SIGNED_INT_WIDTH)currentPeriod-timeCorrection);
-! 
-!    // resynchronize by applying the new period
-!    radio_setTimerPeriod(newPeriod);
-!    // reset the de-synchronization timeout
-!    ieee154e_vars.deSyncTimeout    = DESYNCTIMEOUT;
-!    // log a large timeCorrection
-!    if (
-!          ieee154e_vars.isSync==TRUE &&
-!          (
-!             timeCorrection<-LIMITLARGETIMECORRECTION ||
-!             timeCorrection> LIMITLARGETIMECORRECTION
-!          )
-!       ) {
-!       openserial_printError(COMPONENT_IEEE802154E,ERR_LARGE_TIMECORRECTION,
-!                             (errorparameter_t)timeCorrection,
-!                             (errorparameter_t)1);
-!    }
-!    // update the stats
-!    ieee154e_stats.numSyncAck++;
-!    updateStats(timeCorrection);
-! }
-! 
-! void changeIsSync(bool newIsSync) {
-!    ieee154e_vars.isSync = newIsSync;
-!    
-!    if (ieee154e_vars.isSync==TRUE) {
-!       leds_sync_on();
-!       resetStats();
-!    } else {
-!       leds_sync_off();
-!       schedule_resetBackoff();
-!    }
-! }
-! 
-! //======= notifying upper layer
-! 
-! void notif_sendDone(OpenQueueEntry_t* packetSent, owerror_t error) {
-!    // record the outcome of the trasmission attempt
-!    packetSent->l2_sendDoneError   = error;
-!    // record the current ASN
-!    memcpy(&packetSent->l2_asn,&ieee154e_vars.asn,sizeof(asn_t));
-!    // associate this packet with the virtual component
-!    // COMPONENT_IEEE802154E_TO_RES so RES can knows it's for it
-!    packetSent->owner              = COMPONENT_IEEE802154E_TO_RES;
-!    // post RES's sendDone task
-!    scheduler_push_task(task_resNotifSendDone,TASKPRIO_RESNOTIF_TXDONE);
-!    /*thread_create(openwsn_ieee802154e_send_stack, KERNEL_CONF_STACKSIZE_MAIN, 
-!                   PRIORITY_OPENWSN_IEEE802154E, CREATE_STACKTEST, 
-!                   task_resNotifSendDone, "task resNotifSendDone");*/
-!    // wake up the scheduler
-!    SCHEDULER_WAKEUP();
-! }
-! 
-! void notif_receive(OpenQueueEntry_t* packetReceived) {
-!    // record the current ASN
-!    memcpy(&packetReceived->l2_asn, &ieee154e_vars.asn, sizeof(asn_t));
-!    // indicate reception to the schedule, to keep statistics
-!    schedule_indicateRx(&packetReceived->l2_asn);
-!    // associate this packet with the virtual component
-!    // COMPONENT_IEEE802154E_TO_RES so RES can knows it's for it
-!    packetReceived->owner          = COMPONENT_IEEE802154E_TO_RES;
-! 
-!    // post RES's Receive task
-!    scheduler_push_task(task_resNotifReceive,TASKPRIO_RESNOTIF_RX);
-!    /*thread_create(openwsn_ieee802154e_rec_stack, KERNEL_CONF_STACKSIZE_MAIN, 
-!                   PRIORITY_OPENWSN_IEEE802154E, CREATE_STACKTEST, 
-!                   task_resNotifSendDone, "task resNotifSendDone");*/
-!    // wake up the scheduler
-!    SCHEDULER_WAKEUP();
-! }
-! 
-! //======= stats
-! 
-! port_INLINE void resetStats(void) {
-!    ieee154e_stats.numSyncPkt      =    0;
-!    ieee154e_stats.numSyncAck      =    0;
-!    ieee154e_stats.minCorrection   =  127;
-!    ieee154e_stats.maxCorrection   = -127;
-!    ieee154e_stats.dutyCycle       =    0;
-!    // do not reset the number of de-synchronizations
-! }
-! 
-! void updateStats(PORT_SIGNED_INT_WIDTH timeCorrection) {
-!    // update minCorrection
-!    if (timeCorrection<ieee154e_stats.minCorrection) {
-!      ieee154e_stats.minCorrection = timeCorrection;
-!    }
-!    // update maxConnection
-!    if(timeCorrection>ieee154e_stats.maxCorrection) {
-!      ieee154e_stats.maxCorrection = timeCorrection;
-!    }
-! }
-! 
-! //======= misc
-! 
-! /**
-! \brief Calculates the frequency channel to transmit on, based on the 
-! absolute slot number and the channel offset of the requested slot.
-! 
-! During normal operation, the frequency used is a function of the 
-! channelOffset indicating in the schedule, and of the ASN of the
-! slot. This ensures channel hopping, consecutive packets sent in the same slot
-! in the schedule are done on a difference frequency channel.
-! 
-! During development, you can force single channel operation by having this
-! function return a constant channel number (between 11 and 26). This allows you
-! to use a single-channel sniffer; but you can not schedule two links on two
-! different channel offsets in the same slot.
-! 
-! \param[in] channelOffset channel offset for the current slot
-! 
-! \returns The calculated frequency channel, an integer between 11 and 26.
-! */
-! port_INLINE uint8_t calculateFrequency(uint8_t channelOffset) {
-!    // comment the following line out to disable channel hopping
-!    return SYNCHRONIZING_CHANNEL; // single channel
-!    //return 11+(ieee154e_vars.asnOffset+channelOffset)%16; //channel hopping
-! }
-! 
-! /**
-! \brief Changes the state of the IEEE802.15.4e FSM.
-! 
-! Besides simply updating the state global variable,
-! this function toggles the FSM debug pin.
-! 
-! \param[in] newstate The state the IEEE802.15.4e FSM is now in.
-! */
-! void changeState(ieee154e_state_t newstate) {
-!    // update the state
-!    ieee154e_vars.state = newstate;
-!    // wiggle the FSM debug pin
-!    switch (ieee154e_vars.state) {
-!       case S_SYNCLISTEN:
-!       case S_TXDATAOFFSET:
-!          debugpins_fsm_set();
-!          break;
-!       case S_SLEEP:
-!       case S_RXDATAOFFSET:
-!          debugpins_fsm_clr();
-!          break;
-!       case S_SYNCRX:
-!       case S_SYNCPROC:
-!       case S_TXDATAPREPARE:
-!       case S_TXDATAREADY:
-!       case S_TXDATADELAY:
-!       case S_TXDATA:
-!       case S_RXACKOFFSET:
-!       case S_RXACKPREPARE:
-!       case S_RXACKREADY:
-!       case S_RXACKLISTEN:
-!       case S_RXACK:
-!       case S_TXPROC:
-!       case S_RXDATAPREPARE:
-!       case S_RXDATAREADY:
-!       case S_RXDATALISTEN:
-!       case S_RXDATA:
-!       case S_TXACKOFFSET:
-!       case S_TXACKPREPARE:
-!       case S_TXACKREADY:
-!       case S_TXACKDELAY:
-!       case S_TXACK:
-!       case S_RXPROC:
-!          debugpins_fsm_toggle();
-!          break;
-!    }
-! }
-! 
-! /**
-! \brief Housekeeping tasks to do at the end of each slot.
-! 
-! This functions is called once in each slot, when there is nothing more
-! to do. This might be when an error occured, or when everything went well.
-! This function resets the state of the FSM so it is ready for the next slot.
-! 
-! Note that by the time this function is called, any received packet should already
-! have been sent to the upper layer. Similarly, in a Tx slot, the sendDone
-! function should already have been done. If this is not the case, this function
-! will do that for you, but assume that something went wrong.
-! */
-! void endSlot(void) {
-!   
-!    float aux; //duty cycle helper.
-!    // turn off the radio
-!    radio_rfOff();
-!    // compute the duty cycle if radio has been turned on
-!    if (ieee154e_vars.radioOnThisSlot==TRUE){  
-!       ieee154e_vars.radioOnTics+=(radio_getTimerValue()-ieee154e_vars.radioOnInit);
-!    }
-!    // clear any pending timer
-!    radiotimer_cancel();
-!    
-!    // reset capturedTimes
-!    ieee154e_vars.lastCapturedTime = 0;
-!    ieee154e_vars.syncCapturedTime = 0;
-!    
-!    //instant duty cycle.. average is computed at debugprint_macstats.
-!    aux=(float)ieee154e_vars.radioOnTics/(float)radio_getTimerPeriod();
-!    ieee154e_stats.dutyCycle+=aux;//accumulate and avg will be done on serial print
-!    //clear vars for duty cycle on this slot   
-!    ieee154e_vars.radioOnTics=0;
-!    ieee154e_vars.radioOnThisSlot=FALSE;
-!    
-!    // clean up dataToSend
-!    if (ieee154e_vars.dataToSend!=NULL) {
-!       // if everything went well, dataToSend was set to NULL in ti9
-!       // getting here means transmit failed
-!       
-!       // indicate Tx fail to schedule to update stats
-!       schedule_indicateTx(&ieee154e_vars.asn,FALSE);
-!       
-!       //decrement transmits left counter
-!       ieee154e_vars.dataToSend->l2_retriesLeft--;
-!       
-!       if (ieee154e_vars.dataToSend->l2_retriesLeft==0) {
-!          // indicate tx fail if no more retries left
-!          notif_sendDone(ieee154e_vars.dataToSend,E_FAIL);
-!       } else {
-!          // return packet to the virtual COMPONENT_RES_TO_IEEE802154E component
-!          ieee154e_vars.dataToSend->owner = COMPONENT_RES_TO_IEEE802154E;
-!       }
-!       
-!       // reset local variable
-!       ieee154e_vars.dataToSend = NULL;
-!    }
-!    
-!    // clean up dataReceived
-!    if (ieee154e_vars.dataReceived!=NULL) {
-!       // assume something went wrong. If everything went well, dataReceived
-!       // would have been set to NULL in ri9.
-!       // indicate  "received packet" to upper layer since we don't want to loose packets
-!       notif_receive(ieee154e_vars.dataReceived);
-!       // reset local variable
-!       ieee154e_vars.dataReceived = NULL;
-!    }
-!    
-!    // clean up ackToSend
-!    if (ieee154e_vars.ackToSend!=NULL) {
-!       // free ackToSend so corresponding RAM memory can be recycled
-!       openqueue_freePacketBuffer(ieee154e_vars.ackToSend);
-!       // reset local variable
-!       ieee154e_vars.ackToSend = NULL;
-!    }
-!    
-!    // clean up ackReceived
-!    if (ieee154e_vars.ackReceived!=NULL) {
-!       // free ackReceived so corresponding RAM memory can be recycled
-!       openqueue_freePacketBuffer(ieee154e_vars.ackReceived);
-!       // reset local variable
-!       ieee154e_vars.ackReceived = NULL;
-!    }
-!    
-!    
-!    // change state
-!    changeState(S_SLEEP);
-! }
-! 
-! bool ieee154e_isSynch(void){
-!    return ieee154e_vars.isSync;
-! }
-diff -crB openwsn/02a-MAClow/IEEE802154E.h ../../../sys/net/openwsn/02a-MAClow/IEEE802154E.h
-*** openwsn/02a-MAClow/IEEE802154E.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02a-MAClow/IEEE802154E.h	Wed Jan 15 13:48:26 2014
-***************
-*** 1,154 ****
-! #ifndef __IEEE802154E_H
-! #define __IEEE802154E_H
-! 
-! /**
-! \addtogroup MAClow
-! \{
-! \addtogroup IEEE802154E
-! \{
-! */
-! 
-! #include "openwsn.h"
-! #include "board_info.h"
-! 
-! //=========================== debug define ====================================
-! 
-! //=========================== define ==========================================
-! 
-! #define SYNCHRONIZING_CHANNEL       20 // channel the mote listens on to synchronize
-! #define TXRETRIES                    3 // number of MAC retries before declaring failed
-! #define TX_POWER                    31 // 1=-25dBm, 31=0dBm (max value)
-! #define RESYNCHRONIZATIONGUARD       5 // in 32kHz ticks. min distance to the end of the slot to succesfully synchronize
-! #define US_PER_TICK                 30 // number of us per 32kHz clock tick
-! #define KATIMEOUT                   66 // in slots: @15ms per slot -> ~1 seconds
-! #define DESYNCTIMEOUT              333 // in slots: @15ms per slot -> ~5 seconds
-! #define LIMITLARGETIMECORRECTION     5 // threshold number of ticks to declare a timeCorrection "large"
-! #define LENGTH_IEEE154_MAX         128 // max length of a valid radio packet  
-! 
-! /**
-! When a packet is received, it is written inside the OpenQueueEntry_t->packet
-! buffer, starting at the byte defined below. When a packet is relayed, it
-! traverses the stack in which the MAC and IPHC headers are parsed and stripped
-! off, then put on again. During that process, the IPv6 hop limit field is
-! decremented. Depending on the new value of the hop limit, the IPHC header
-! compression algorithm might not be able to compress it, and hence has to carry
-! it inline, adding a byte to the header. To avoid having to move bytes around
-! inside OpenQueueEntry_t->packet buffer, we start writing the received packet a
-! bit after the start of the packet.
-! */
-! #define FIRST_FRAME_BYTE             1
-! 
-! // the different states of the IEEE802.15.4e state machine
-! typedef enum {
-!    S_SLEEP                   = 0x00,   // ready for next slot
-!    // synchronizing
-!    S_SYNCLISTEN              = 0x01,   // listened for packet to synchronize to network
-!    S_SYNCRX                  = 0x02,   // receiving packet to synchronize to network
-!    S_SYNCPROC                = 0x03,   // processing packet just received
-!    // TX
-!    S_TXDATAOFFSET            = 0x04,   // waiting to prepare for Tx data
-!    S_TXDATAPREPARE           = 0x05,   // preparing for Tx data
-!    S_TXDATAREADY             = 0x06,   // ready to Tx data, waiting for 'go'
-!    S_TXDATADELAY             = 0x07,   // 'go' signal given, waiting for SFD Tx data
-!    S_TXDATA                  = 0x08,   // Tx data SFD received, sending bytes
-!    S_RXACKOFFSET             = 0x09,   // Tx data done, waiting to prepare for Rx ACK
-!    S_RXACKPREPARE            = 0x0a,   // preparing for Rx ACK
-!    S_RXACKREADY              = 0x0b,   // ready to Rx ACK, waiting for 'go'
-!    S_RXACKLISTEN             = 0x0c,   // idle listening for ACK
-!    S_RXACK                   = 0x0d,   // Rx ACK SFD received, receiving bytes
-!    S_TXPROC                  = 0x0e,   // processing sent data
-!    // RX
-!    S_RXDATAOFFSET            = 0x0f,   // waiting to prepare for Rx data
-!    S_RXDATAPREPARE           = 0x10,   // preparing for Rx data
-!    S_RXDATAREADY             = 0x11,   // ready to Rx data, waiting for 'go'
-!    S_RXDATALISTEN            = 0x12,   // idle listening for data
-!    S_RXDATA                  = 0x13,   // data SFD received, receiving more bytes
-!    S_TXACKOFFSET             = 0x14,   // waiting to prepare for Tx ACK
-!    S_TXACKPREPARE            = 0x15,   // preparing for Tx ACK
-!    S_TXACKREADY              = 0x16,   // Tx ACK ready, waiting for 'go'
-!    S_TXACKDELAY              = 0x17,   // 'go' signal given, waiting for SFD Tx ACK
-!    S_TXACK                   = 0x18,   // Tx ACK SFD received, sending bytes
-!    S_RXPROC                  = 0x19,   // processing received data
-! } ieee154e_state_t;
-! 
-! // Atomic durations
-! // expressed in 32kHz ticks:
-! //    - ticks = duration_in_seconds * 32768
-! //    - duration_in_seconds = ticks / 32768
-! enum ieee154e_atomicdurations_enum {
-!    // time-slot related
-!    TsTxOffset                =  131,                  //  4000us
-!    TsLongGT                  =   43,                  //  1300us
-!    TsTxAckDelay              =  151,                  //  4606us
-!    TsShortGT                 =   16,                  //   500us
-!    TsSlotDuration            =  PORT_TsSlotDuration,  // 15000us
-!    // execution speed related
-!    maxTxDataPrepare          =  PORT_maxTxDataPrepare,
-!    maxRxAckPrepare           =  PORT_maxRxAckPrepare,
-!    maxRxDataPrepare          =  PORT_maxRxDataPrepare,
-!    maxTxAckPrepare           =  PORT_maxTxAckPrepare,
-!    // radio speed related
-!    delayTx                   =  PORT_delayTx,         // between GO signal and SFD
-!    delayRx                   =  PORT_delayRx,         // between GO signal and start listening
-!    // radio watchdog
-!    wdRadioTx                 =   33,                  //  1000us (needs to be >delayTx)
-!    wdDataDuration            =  164,                  //  5000us (measured 4280us with max payload)
-!    wdAckDuration             =   98,                  //  3000us (measured 1000us)
-! };
-! 
-! 
-! 
-! // FSM timer durations (combinations of atomic durations)
-! // TX
-! #define DURATION_tt1 ieee154e_vars.lastCapturedTime+TsTxOffset-delayTx-maxTxDataPrepare
-! #define DURATION_tt2 ieee154e_vars.lastCapturedTime+TsTxOffset-delayTx
-! #define DURATION_tt3 ieee154e_vars.lastCapturedTime+TsTxOffset-delayTx+wdRadioTx
-! #define DURATION_tt4 ieee154e_vars.lastCapturedTime+wdDataDuration
-! #define DURATION_tt5 ieee154e_vars.lastCapturedTime+TsTxAckDelay-TsShortGT-delayRx-maxRxAckPrepare
-! #define DURATION_tt6 ieee154e_vars.lastCapturedTime+TsTxAckDelay-TsShortGT-delayRx
-! #define DURATION_tt7 ieee154e_vars.lastCapturedTime+TsTxAckDelay+TsShortGT
-! #define DURATION_tt8 ieee154e_vars.lastCapturedTime+wdAckDuration
-! // RX
-! #define DURATION_rt1 ieee154e_vars.lastCapturedTime+TsTxOffset-TsLongGT-delayRx-maxRxDataPrepare
-! #define DURATION_rt2 ieee154e_vars.lastCapturedTime+TsTxOffset-TsLongGT-delayRx
-! #define DURATION_rt3 ieee154e_vars.lastCapturedTime+TsTxOffset+TsLongGT
-! #define DURATION_rt4 ieee154e_vars.lastCapturedTime+wdDataDuration
-! #define DURATION_rt5 ieee154e_vars.lastCapturedTime+TsTxAckDelay-delayTx-maxTxAckPrepare
-! #define DURATION_rt6 ieee154e_vars.lastCapturedTime+TsTxAckDelay-delayTx
-! #define DURATION_rt7 ieee154e_vars.lastCapturedTime+TsTxAckDelay-delayTx+wdRadioTx
-! #define DURATION_rt8 ieee154e_vars.lastCapturedTime+wdAckDuration
-! 
-! //=========================== typedef =========================================
-! 
-! //IEEE802.15.4E acknowledgement (ACK)
-! typedef struct {
-!    PORT_SIGNED_INT_WIDTH timeCorrection;
-! } IEEE802154E_ACK_ht;
-! 
-! #define ADV_PAYLOAD_LENGTH 5
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // admin
-! void               ieee154e_init();
-! // public
-! PORT_TIMER_WIDTH   ieee154e_asnDiff(asn_t* someASN);
-! bool               ieee154e_isSynch();
-! void               asnWriteToPkt(OpenQueueEntry_t* frame);
-! void               asnWriteToSerial(uint8_t* array);
-! // events
-! void               ieee154e_startOfFrame(PORT_TIMER_WIDTH capturedTime);
-! void               ieee154e_endOfFrame(PORT_TIMER_WIDTH capturedTime);
-! // misc
-! bool               debugPrint_asn();
-! bool               debugPrint_isSync();
-! bool               debugPrint_macStats();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,308 ----
-! #ifndef __IEEE802154E_H
-! #define __IEEE802154E_H
-! 
-! /**
-! \addtogroup MAClow
-! \{
-! \addtogroup IEEE802154E
-! \{
-! */
-! 
-! #include "openwsn.h"
-! #include "board_info.h"
-! #include "schedule.h"
-! 
-! //=========================== debug define ====================================
-! 
-! //=========================== define ==========================================
-! 
-! #define SYNCHRONIZING_CHANNEL       20 // channel the mote listens on to synchronize
-! #define TXRETRIES                    3 // number of MAC retries before declaring failed
-! #define TX_POWER                    31 // 1=-25dBm, 31=0dBm (max value)
-! #define RESYNCHRONIZATIONGUARD       5 // in 32kHz ticks. min distance to the end of the slot to succesfully synchronize
-! #define US_PER_TICK                 30 // number of us per 32kHz clock tick
-! #define KATIMEOUT                   66 // in slots: @15ms per slot -> ~1 seconds
-! #define DESYNCTIMEOUT              333 // in slots: @15ms per slot -> ~5 seconds
-! #define LIMITLARGETIMECORRECTION     5 // threshold number of ticks to declare a timeCorrection "large"
-! #define LENGTH_IEEE154_MAX         128 // max length of a valid radio packet  
-! 
-! //15.4e information elements related
-! #define IEEE802154E_PAYLOAD_DESC_LEN_SHIFT              0x04
-! #define IEEE802154E_PAYLOAD_DESC_GROUP_ID_MLME         (0x01 << 1) //includes shift 1
-! #define IEEE802154E_DESC_TYPE_LONG                      0x01
-! #define IEEE802154E_DESC_TYPE_SHORT                     0x00
-! 
-! #define IEEE802154E_DESC_TYPE_HEADER_IE                 0x00
-! #define IEEE802154E_DESC_TYPE_PAYLOAD_IE                0x01
-! //len field on PAYLOAD/HEADER DESC
-! #define IEEE802154E_DESC_LEN_HEADER_IE_MASK             0xFE00
-! #define IEEE802154E_DESC_LEN_PAYLOAD_IE_MASK            0xFFE0
-! 
-! #define IEEE802154E_DESC_LEN_HEADER_IE_SHIFT            9
-! #define IEEE802154E_DESC_LEN_PAYLOAD_IE_SHIFT           5
-! 
-! //groupID/elementID field on PAYLOAD/HEADER DESC
-! #define IEEE802154E_DESC_ELEMENTID_HEADER_IE_MASK       0x01FE
-! #define IEEE802154E_DESC_GROUPID_PAYLOAD_IE_MASK        0x001E
-! 
-! #define IEEE802154E_DESC_ELEMENTID_HEADER_IE_SHIFT      1
-! #define IEEE802154E_DESC_GROUPID_PAYLOAD_IE_SHIFT       1
-! 
-! //MLME Sub IE LONG page 83
-! #define IEEE802154E_DESC_LEN_LONG_MLME_IE_MASK          0xFFE0
-! #define IEEE802154E_DESC_SUBID_LONG_MLME_IE_MASK        0x001E
-! 
-! #define IEEE802154E_DESC_LEN_LONG_MLME_IE_SHIFT         5
-! #define IEEE802154E_DESC_SUBID_LONG_MLME_IE_SHIFT       1
-! 
-! //MLME Sub IE SHORT page 82
-! #define IEEE802154E_DESC_LEN_SHORT_MLME_IE_MASK          0xFF00
-! #define IEEE802154E_DESC_SUBID_SHORT_MLME_IE_MASK        0x00FE
-! 
-! #define IEEE802154E_DESC_LEN_SHORT_MLME_IE_SHIFT         8
-! #define IEEE802154E_DESC_SUBID_SHORT_MLME_IE_SHIFT       1
-! 
-! 
-! #define IEEE802154E_MLME_SYNC_IE_SUBID                  0x1A
-! #define IEEE802154E_MLME_SYNC_IE_SUBID_SHIFT            1
-! #define IEEE802154E_MLME_SLOTFRAME_LINK_IE_SUBID        0x1B
-! #define IEEE802154E_MLME_SLOTFRAME_LINK_IE_SUBID_SHIFT  1
-! #define IEEE802154E_MLME_TIMESLOT_IE_SUBID              0x1c
-! #define IEEE802154E_MLME_TIMESLOT_IE_SUBID_SHIFT        1
-! 
-! #define IEEE802154E_MLME_IE_GROUPID                     0x01
-! #define IEEE802154E_ACK_NACK_TIMECORRECTION_ELEMENTID   0x1E
-! 
-! #define IEEE802154E_
-! /**
-! When a packet is received, it is written inside the OpenQueueEntry_t->packet
-! buffer, starting at the byte defined below. When a packet is relayed, it
-! traverses the stack in which the MAC and IPHC headers are parsed and stripped
-! off, then put on again. During that process, the IPv6 hop limit field is
-! decremented. Depending on the new value of the hop limit, the IPHC header
-! compression algorithm might not be able to compress it, and hence has to carry
-! it inline, adding a byte to the header. To avoid having to move bytes around
-! inside OpenQueueEntry_t->packet buffer, we start writing the received packet a
-! bit after the start of the packet.
-! */
-! #define FIRST_FRAME_BYTE             1
-! 
-! // the different states of the IEEE802.15.4e state machine
-! typedef enum {
-!    S_SLEEP                   = 0x00,   // ready for next slot
-!    // synchronizing
-!    S_SYNCLISTEN              = 0x01,   // listened for packet to synchronize to network
-!    S_SYNCRX                  = 0x02,   // receiving packet to synchronize to network
-!    S_SYNCPROC                = 0x03,   // processing packet just received
-!    // TX
-!    S_TXDATAOFFSET            = 0x04,   // waiting to prepare for Tx data
-!    S_TXDATAPREPARE           = 0x05,   // preparing for Tx data
-!    S_TXDATAREADY             = 0x06,   // ready to Tx data, waiting for 'go'
-!    S_TXDATADELAY             = 0x07,   // 'go' signal given, waiting for SFD Tx data
-!    S_TXDATA                  = 0x08,   // Tx data SFD received, sending bytes
-!    S_RXACKOFFSET             = 0x09,   // Tx data done, waiting to prepare for Rx ACK
-!    S_RXACKPREPARE            = 0x0a,   // preparing for Rx ACK
-!    S_RXACKREADY              = 0x0b,   // ready to Rx ACK, waiting for 'go'
-!    S_RXACKLISTEN             = 0x0c,   // idle listening for ACK
-!    S_RXACK                   = 0x0d,   // Rx ACK SFD received, receiving bytes
-!    S_TXPROC                  = 0x0e,   // processing sent data
-!    // RX
-!    S_RXDATAOFFSET            = 0x0f,   // waiting to prepare for Rx data
-!    S_RXDATAPREPARE           = 0x10,   // preparing for Rx data
-!    S_RXDATAREADY             = 0x11,   // ready to Rx data, waiting for 'go'
-!    S_RXDATALISTEN            = 0x12,   // idle listening for data
-!    S_RXDATA                  = 0x13,   // data SFD received, receiving more bytes
-!    S_TXACKOFFSET             = 0x14,   // waiting to prepare for Tx ACK
-!    S_TXACKPREPARE            = 0x15,   // preparing for Tx ACK
-!    S_TXACKREADY              = 0x16,   // Tx ACK ready, waiting for 'go'
-!    S_TXACKDELAY              = 0x17,   // 'go' signal given, waiting for SFD Tx ACK
-!    S_TXACK                   = 0x18,   // Tx ACK SFD received, sending bytes
-!    S_RXPROC                  = 0x19,   // processing received data
-! } ieee154e_state_t;
-! 
-! // Atomic durations
-! // expressed in 32kHz ticks:
-! //    - ticks = duration_in_seconds * 32768
-! //    - duration_in_seconds = ticks / 32768
-! enum ieee154e_atomicdurations_enum {
-!    // time-slot related
-!    TsTxOffset                =  131,                  //  4000us
-!    TsLongGT                  =   43,                  //  1300us
-!    TsTxAckDelay              =  151,                  //  4606us
-!    TsShortGT                 =   16,                  //   500us
-! //   TsShortGT                 =   30,                  //   900us, stm32 can work well with this value
-!    TsSlotDuration            =  PORT_TsSlotDuration,  // 15000us
-!    // execution speed related
-!    maxTxDataPrepare          =  PORT_maxTxDataPrepare,
-!    maxRxAckPrepare           =  PORT_maxRxAckPrepare,
-!    maxRxDataPrepare          =  PORT_maxRxDataPrepare,
-!    maxTxAckPrepare           =  PORT_maxTxAckPrepare,
-!    // radio speed related
-!    delayTx                   =  PORT_delayTx,         // between GO signal and SFD
-!    delayRx                   =  PORT_delayRx,         // between GO signal and start listening
-!    // radio watchdog
-!    wdRadioTx                 =   33,                  //  1000us (needs to be >delayTx)
-!    wdDataDuration            =  164,                  //  5000us (measured 4280us with max payload)
-!    wdAckDuration             =   98,                  //  3000us (measured 1000us)
-! };
-! 
-! 
-! //shift of bytes in the linkOption bitmap
-! enum ieee154e_linkOption_enum {
-!    FLAG_TX_S              = 7,
-!    FLAG_RX_S              = 6,
-!    FLAG_SHARED_S          = 5,
-!    FLAG_TIMEKEEPING_S     = 4,   
-! };
-! 
-! // FSM timer durations (combinations of atomic durations)
-! // TX
-! #define DURATION_tt1 ieee154e_vars.lastCapturedTime+TsTxOffset-delayTx-maxTxDataPrepare
-! #define DURATION_tt2 ieee154e_vars.lastCapturedTime+TsTxOffset-delayTx
-! #define DURATION_tt3 ieee154e_vars.lastCapturedTime+TsTxOffset-delayTx+wdRadioTx
-! #define DURATION_tt4 ieee154e_vars.lastCapturedTime+wdDataDuration
-! #define DURATION_tt5 ieee154e_vars.lastCapturedTime+TsTxAckDelay-TsShortGT-delayRx-maxRxAckPrepare
-! #define DURATION_tt6 ieee154e_vars.lastCapturedTime+TsTxAckDelay-TsShortGT-delayRx
-! #define DURATION_tt7 ieee154e_vars.lastCapturedTime+TsTxAckDelay+TsShortGT
-! #define DURATION_tt8 ieee154e_vars.lastCapturedTime+wdAckDuration
-! // RX
-! #define DURATION_rt1 ieee154e_vars.lastCapturedTime+TsTxOffset-TsLongGT-delayRx-maxRxDataPrepare
-! #define DURATION_rt2 ieee154e_vars.lastCapturedTime+TsTxOffset-TsLongGT-delayRx
-! #define DURATION_rt3 ieee154e_vars.lastCapturedTime+TsTxOffset+TsLongGT
-! #define DURATION_rt4 ieee154e_vars.lastCapturedTime+wdDataDuration
-! #define DURATION_rt5 ieee154e_vars.lastCapturedTime+TsTxAckDelay-delayTx-maxTxAckPrepare
-! #define DURATION_rt6 ieee154e_vars.lastCapturedTime+TsTxAckDelay-delayTx
-! #define DURATION_rt7 ieee154e_vars.lastCapturedTime+TsTxAckDelay-delayTx+wdRadioTx
-! #define DURATION_rt8 ieee154e_vars.lastCapturedTime+wdAckDuration
-! 
-! //=========================== typedef =========================================
-! 
-! //IEEE802.15.4E acknowledgement (ACK)
-! typedef struct {
-!    PORT_SIGNED_INT_WIDTH timeCorrection;
-! } IEEE802154E_ACK_ht;
-! 
-! //includes payload header IE short + MLME short Header + Sync IE
-! #define ADV_PAYLOAD_LENGTH sizeof(payload_IE_descriptor_t) + \
-!                            sizeof(MLME_IE_subHeader_t)     + \
-!                            sizeof(synch_IE_t)
-! 
-! 
-! 
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    // misc
-!    asn_t              asn;                  // current absolute slot number
-!    slotOffset_t       slotOffset;           // current slot offset
-!    slotOffset_t       nextActiveSlotOffset; // next active slot offset
-!    PORT_RADIOTIMER_WIDTH   deSyncTimeout;        // how many slots left before looses sync
-!    bool               isSync;               // TRUE iff mote is synchronized to network
-!    // as shown on the chronogram
-!    ieee154e_state_t   state;                // state of the FSM
-!    OpenQueueEntry_t*  dataToSend;           // pointer to the data to send
-!    OpenQueueEntry_t*  dataReceived;         // pointer to the data received
-!    OpenQueueEntry_t*  ackToSend;            // pointer to the ack to send
-!    OpenQueueEntry_t*  ackReceived;          // pointer to the ack received
-!    PORT_RADIOTIMER_WIDTH   lastCapturedTime;     // last captured time
-!    PORT_RADIOTIMER_WIDTH   syncCapturedTime;     // captured time used to sync
-!    //channel hopping
-!    uint8_t            freq;                 // frequency of the current slot
-!    uint8_t            asnOffset;            // offset inside the frame
-!    
-!    PORT_RADIOTIMER_WIDTH radioOnInit;  //when within the slot the radio turns on
-!    PORT_RADIOTIMER_WIDTH radioOnTics;//how many tics within the slot the radio is on
-!    bool             radioOnThisSlot; //to control if the radio has been turned on in a slot.
-! } ieee154e_vars_t;
-! 
-! //PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t                   numSyncPkt;    // how many times synchronized on a non-ACK packet
-!    uint8_t                   numSyncAck;    // how many times synchronized on an ACK
-!    PORT_SIGNED_INT_WIDTH     minCorrection; // minimum time correction
-!    PORT_SIGNED_INT_WIDTH     maxCorrection; // maximum time correction
-!    uint8_t                   numDeSync;     // number of times a desync happened
-!    float                     dutyCycle;     // mac dutyCycle at each superframe
-! } ieee154e_stats_t;
-! //PRAGMA(pack());
-! 
-! typedef struct {
-!    PORT_RADIOTIMER_WIDTH          num_newSlot;
-!    PORT_RADIOTIMER_WIDTH          num_timer;
-!    PORT_RADIOTIMER_WIDTH          num_startOfFrame;
-!    PORT_RADIOTIMER_WIDTH          num_endOfFrame;
-! } ieee154e_dbg_t;
-! 
-! 
-! //=========================== IEs =============================================
-! //the header for all header IEs
-! typedef struct{
-!    uint16_t length_elementid_type; 
-! }header_IE_descriptor_t; 
-! //header descriptor. elementid will be 0 as described in 15.4e pag. 81
-! //type is 0 as described on p. 80
-! 
-! 
-! //the content for ack ie -- it is a header IE with values - element id =0x1e len=2 type=0
-! //PRAGMA(pack(1));
-! typedef struct {
-!     int16_t timesync_info;
-! }ack_timecorrection_IE_t;
-! //PRAGMA(pack());
-! //the header for all payload IEs
-! 
-! 
-! typedef struct{//11b len 4b gid 1b type
-!    uint16_t length_groupid_type; //bytes on the IE content- that is the embedded MLME or Header IE.
-!   //groupid == 0x01 MLME | type long = 1
-! }payload_IE_descriptor_t; // payload descriptor. groupid will be 1 as described in 15.4e pag. 81
-! 
-! //MLME sub id header appended to payload descriptor. we use group id=1 type=1
-! typedef struct{
-!    uint16_t length_subID_type;
-! }MLME_IE_subHeader_t;
-! 
-! //the Synchronization IE. it is a payload IE with values - subid=0x1a type=0 (short) len=6 
-! //PRAGMA(pack(1));
-! typedef struct {
-!     uint8_t asn[5];
-!     uint8_t join_priority;
-! }synch_IE_t;
-! //PRAGMA(pack());
-! 
-! //the Slotframe and Link IE
-! typedef struct {
-!     uint8_t slotframehandle;
-!     uint16_t slotframesize;
-!     uint8_t numlinks;
-! }slotframelink_IE_t;
-! 
-! typedef struct {
-!     uint16_t tsNum;
-!     uint16_t choffset;
-!     uint8_t linkoptions;
-! }linkInfo_subIE_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! // admin
-! void               ieee154e_init(void);
-! // public
-! PORT_RADIOTIMER_WIDTH   ieee154e_asnDiff(asn_t* someASN);
-! bool               ieee154e_isSynch(void);
-! void               ieee154e_getAsn(uint8_t* array);
-! // events
-! void               ieee154e_startOfFrame(PORT_RADIOTIMER_WIDTH capturedTime);
-! void               ieee154e_endOfFrame(PORT_RADIOTIMER_WIDTH capturedTime);
-! // misc
-! bool               debugPrint_asn(void);
-! bool               debugPrint_isSync(void);
-! bool               debugPrint_macStats(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/02a-MAClow/Makefile ../../../sys/net/openwsn/02a-MAClow/Makefile
-*** openwsn/02a-MAClow/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/02a-MAClow/Makefile	Wed Jan 15 13:48:26 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBMOD)
-+ 
-+ $(BINDIR)$(SUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/02a-MAClow/stupidmac/Makefile ../../../sys/net/openwsn/02a-MAClow/stupidmac/Makefile
-*** openwsn/02a-MAClow/stupidmac/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/02a-MAClow/stupidmac/Makefile	Wed Jan 15 13:48:26 2014
-***************
-*** 0 ****
---- 1,4 ----
-+ MODULE:=$(shell basename $(CURDIR))
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ 
-+ include $(RIOTBASE)/Makefile.base
-\ No newline at end of file
-diff -crB openwsn/02a-MAClow/stupidmac/stupidmac.c ../../../sys/net/openwsn/02a-MAClow/stupidmac/stupidmac.c
-*** openwsn/02a-MAClow/stupidmac/stupidmac.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02a-MAClow/stupidmac/stupidmac.c	Wed Jan 15 13:48:26 2014
-***************
-*** 1,354 ****
-! /**
-! \brief Implementation of stupidMAC
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, August 2010
-! */
-! 
-! #include "openwsn.h"
-! #include "stupidmac.h"
-! #include "IEEE802154.h"
-! #include "radio.h"
-! #include "packetfunctions.h"
-! #include "idmanager.h"
-! #include "openserial.h"
-! #include "openqueue.h"
-! #include "timers.h"
-! #include "packetfunctions.h"
-! #include "neighbors.h"
-! #include "nores.h"
-! 
-! //=========================== variables =======================================
-! 
-! OpenQueueEntry_t*  stupidmac_dataFrameToSend;     //  NULL at beginning and end of slot
-! OpenQueueEntry_t*  stupidmac_packetACK;           //  NULL at beginning and end, free at end of slot
-! OpenQueueEntry_t*  stupidmac_dataFrameReceived;   // !NULL between data received, and sent to upper layer
-! uint8_t            stupidmac_dsn;
-! uint8_t            stupidmac_state;
-! #ifndef SERIALINSCHEDULER
-! bool               stupidmac_serialInOutputMode;
-! #endif
-! 
-! //=========================== prototypes ======================================
-! 
-! #include "IEEE802154_common.c"
-! void packetReceived();
-! void armRandomBackoffTimer();
-! void change_state(uint8_t newstate);
-! 
-! //======= from upper layer
-! 
-! //in stupidMAC, the radio is always on, listening
-! void stupidmac_init() {
-!    radio_rxOn(openwsn_frequency_channel);
-!    change_state(S_IDLE_LISTENING);
-!    stupidmac_dataFrameToSend = NULL;
-!    timer_startPeriodic(TIMER_MAC_PERIODIC,PERIODICTIMERPERIOD);
-! }
-! 
-! //a packet sent from the upper layer is simply stored into the OpenQueue buffer.
-! //The timerBackoff is armed to service the packet later on.
-! error_t stupidmac_send(OpenQueueEntry_t* msg) {
-!    //metadata
-!    msg->owner = COMPONENT_MAC;
-!    if (packetfunctions_isBroadcastMulticast(&(msg->l2_nextORpreviousHop))==TRUE) {
-!       msg->l2_retriesLeft = 1;
-!    } else {
-!       msg->l2_retriesLeft = TXRETRIES;
-!    }
-!    msg->l1_txPower = TX_POWER;
-!    msg->l1_channel = openwsn_frequency_channel;
-!    //IEEE802.15.4 header
-!    prependIEEE802154header(msg,
-!          msg->l2_frameType,
-!          IEEE154_SEC_NO_SECURITY,
-!          stupidmac_dsn++,
-!          &(msg->l2_nextORpreviousHop)
-!          );
-!    // space for 2-byte CRC
-!    packetfunctions_reserveFooterSize(msg,2);
-!    //simulate timer backoff fires so that packet gets sent immediately
-!    timer_mac_backoff_fired();
-!    return E_SUCCESS;
-! }
-! 
-! //======= from lower layer
-! 
-! void stupidmac_sendDone(OpenQueueEntry_t* pkt, error_t error) {
-!    switch (stupidmac_state) {
-!       case S_TX_TXDATA:                                           //[sendNowDone] transmitter
-!          if (error!=E_SUCCESS) {
-!             nores_sendDone(pkt,E_FAIL);
-!             stupidmac_dataFrameToSend = NULL;
-!             armRandomBackoffTimer();//arm timer to retransmission (?)
-!             change_state(S_IDLE_LISTENING);
-!             openserial_printError(COMPONENT_MAC,ERR_SENDNOWDONE_FAILED,
-!                   (errorparameter_t)stupidmac_state,
-!                   (errorparameter_t)0);
-!             return;
-!          } else {
-!             timer_startOneShot(TIMER_MAC_WATCHDOG,ACK_WAIT_TIME);
-!             change_state(S_TX_RXACK);
-!          }
-!          break;
-!       case S_RX_TXACK:                                            //[sendNowDone] receiver
-!          //I'm a receiver, finished sending ACK (end of RX sequence)
-!          openqueue_freePacketBuffer(stupidmac_packetACK);
-!          packetReceived();
-!          change_state(S_IDLE_LISTENING);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_MAC,ERR_WRONG_STATE_IN_SUBSEND_SENDDONE,
-!                (errorparameter_t)stupidmac_state,
-!                (errorparameter_t)0);
-!          change_state(S_IDLE_LISTENING);
-!          break;
-!    }
-! }
-! 
-! void radio_packet_received(OpenQueueEntry_t* msg) {
-!    ieee802154_header_iht   received_ieee154_header;
-!    ieee802154_header_iht   transmitted_ieee154_header;
-! 
-!    openserial_stop();
-!    //ensure debug fires only after packet fully received
-!    timer_startPeriodic(TIMER_MAC_PERIODIC,PERIODICTIMERPERIOD);
-! 
-!    msg->owner = COMPONENT_MAC;
-! 
-!    if (stupidmac_state!=S_TX_RXACK && stupidmac_state!=S_IDLE_LISTENING) {
-!       //not expecting this packet, throw away
-!       //do not go back to S_IDLE_LISTENING, just don't receive the packet and let the stupidmac_state machine be where it was
-!       openqueue_freePacketBuffer(msg);
-!       return;
-!    }
-! 
-!    received_ieee154_header = retrieveIEEE802154header(msg);
-!    packetfunctions_tossHeader(msg,received_ieee154_header.headerLength);
-!    packetfunctions_tossFooter(msg,2);
-! 
-!    msg->l2_frameType = received_ieee154_header.frameType;
-!    memcpy(&(msg->l2_nextORpreviousHop),&(received_ieee154_header.src),sizeof(open_addr_t));
-!    if (   received_ieee154_header.frameType==IEEE154_TYPE_DATA      &&
-!          !(idmanager_isMyAddress(&received_ieee154_header.panid))) {
-!       openserial_printError(COMPONENT_MAC,ERR_WRONG_PANID,
-!             (errorparameter_t)received_ieee154_header.panid.panid[0]*256+received_ieee154_header.panid.panid[1],
-!             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(msg);
-!       return;
-!    }
-! 
-!    switch (stupidmac_state) {
-! 
-!       /*------------------- TX sequence ------------------------*/
-!       case S_TX_RXACK:                                            //[receive] transmitter
-!          transmitted_ieee154_header = retrieveIEEE802154header(stupidmac_dataFrameToSend);
-!          if (received_ieee154_header.dsn == transmitted_ieee154_header.dsn) {
-!             //I'm a transmitter, just received ACK (end of TX sequence)
-!             timer_stop(TIMER_MAC_WATCHDOG);
-!             neighbors_indicateTx(&(stupidmac_dataFrameToSend->l2_nextORpreviousHop),WAS_ACKED);
-!             nores_sendDone(stupidmac_dataFrameToSend,E_SUCCESS);
-!             stupidmac_dataFrameToSend = NULL;
-!             armRandomBackoffTimer();//arm timer for next transmission
-!             change_state(S_IDLE_LISTENING);
-!          }
-!          openqueue_freePacketBuffer(msg);//free packet I received         
-!          break;
-! 
-!          /*------------------- RX sequence ------------------------*/
-!       case S_IDLE_LISTENING:                                           //[receive] receiver
-!          //I'm a receiver, just received a packet
-!          if (received_ieee154_header.frameType==IEEE154_TYPE_DATA || received_ieee154_header.frameType==IEEE154_TYPE_CMD) {
-!             neighbors_indicateRx(&(msg->l2_nextORpreviousHop),msg->l1_rssi);
-!             if (idmanager_isMyAddress(&received_ieee154_header.dest)) {
-!                //this packet is unicast to me
-!                if (stupidmac_dataFrameReceived==NULL) {
-!                   stupidmac_dataFrameReceived = msg;
-!                } else {
-!                   openserial_printError(COMPONENT_MAC,ERR_BUSY_RECEIVING,
-!                         (errorparameter_t)0,
-!                         (errorparameter_t)0);
-!                   openqueue_freePacketBuffer(msg);
-!                }
-!                //the sender requests an ACK
-!                if (received_ieee154_header.ackRequested) {
-!                   change_state(S_RX_TXACKPREPARE);
-!                   stupidmac_packetACK = openqueue_getFreePacketBuffer();
-!                   if (stupidmac_packetACK!=NULL) {
-!                      //send ACK
-!                      stupidmac_packetACK->creator        = COMPONENT_MAC;
-!                      stupidmac_packetACK->owner          = COMPONENT_MAC;
-!                      stupidmac_packetACK->l1_txPower     = TX_POWER;
-!                      stupidmac_packetACK->l1_channel     = openwsn_frequency_channel;
-!                      stupidmac_packetACK->l2_retriesLeft = 1;
-!                      prependIEEE802154header(stupidmac_packetACK,
-!                            IEEE154_TYPE_ACK,
-!                            IEEE154_SEC_NO_SECURITY,
-!                            received_ieee154_header.dsn,
-!                            NULL);
-!                      packetfunctions_reserveFooterSize(stupidmac_packetACK,2);
-!                      change_state(S_RX_TXACKREADY);
-!                      change_state(S_RX_TXACK);
-!                      if (radio_send(stupidmac_packetACK)!=E_SUCCESS) {
-!                         //abort
-!                         openserial_printError(COMPONENT_MAC,ERR_PREPARESEND_FAILED,
-!                               (errorparameter_t)0,(errorparameter_t)2);
-!                         openqueue_freePacketBuffer(stupidmac_packetACK);
-!                         change_state(S_IDLE_LISTENING);
-!                      }
-!                   } else {
-!                      openserial_printError(COMPONENT_MAC,ERR_NO_FREE_PACKET_BUFFER,
-!                            (errorparameter_t)0,(errorparameter_t)0);
-!                      change_state(S_IDLE_LISTENING);
-!                      void packetReceived();
-!                      return;
-!                   }
-!                } else {
-!                   packetReceived();
-!                }
-!             } else if (packetfunctions_isBroadcastMulticast(&received_ieee154_header.dest)==TRUE) {
-!                //this packet is broadcast
-!                if (stupidmac_dataFrameReceived==NULL) {
-!                   stupidmac_dataFrameReceived = msg;
-!                } else {
-!                   openserial_printError(COMPONENT_MAC,ERR_BUSY_RECEIVING,
-!                         (errorparameter_t)1,
-!                         (errorparameter_t)0);
-!                   openqueue_freePacketBuffer(msg);
-!                }
-!                packetReceived();
-!             } else {
-!                openqueue_freePacketBuffer(msg);
-!             }
-!          } else {
-!             //not data. I could be an ACK but I'm not in S_TX_RXACK stupidmac_state, so I discard
-!             openqueue_freePacketBuffer(msg);
-!          }
-!          break;
-! 
-!       default:
-!          //this should never happen as error was caught above
-!          //do not go back to S_IDLE_LISTENING, just don't receive the packet and let the stupidmac_state machine be where it was
-!          openqueue_freePacketBuffer(msg);
-!          openserial_printError(COMPONENT_MAC,ERR_WRONG_STATE_IN_RECEIVE,
-!                (errorparameter_t)stupidmac_state,
-!                (errorparameter_t)0);
-!          break;
-!    }
-! }
-! 
-! //=========================== private =========================================
-! 
-! void packetReceived() {
-!    if (stupidmac_dataFrameReceived->length>0) {
-!       //packet contains payload destined to an upper layer
-!       nores_receive(stupidmac_dataFrameReceived);
-!    } else {
-!       //packet contains no payload (KA)
-!       openqueue_freePacketBuffer(stupidmac_dataFrameReceived);
-!    }
-!    stupidmac_dataFrameReceived = NULL;
-! }
-! 
-! void armRandomBackoffTimer() {
-!    timer_startOneShot(TIMER_MAC_BACKOFF,MINBACKOFF); //TODO randomize
-! }
-! 
-! void change_state(uint8_t newstate) {
-!    stupidmac_state = newstate;
-!    switch (newstate) {
-!       case S_TX_TXDATAPREPARE:
-!       case S_TX_TXDATA:
-!       case S_RX_TXACKPREPARE:
-!       case S_RX_TXACK:
-!          //atomic P3OUT |= 0x20;
-!          break;
-!       case S_TX_TXDATAREADY:
-!       case S_TX_RXACK:
-!       case S_RX_TXACKREADY:
-!       case S_IDLE_LISTENING:
-!          //atomic P3OUT &= ~0x20;
-!          break;
-!    }
-! }
-! 
-! bool stupidmac_debugPrint() {
-!    return FALSE;
-! }
-! 
-! //======= timers firing
-! 
-! //periodic timer used to transmit, and to trigger serial input/output
-! void timer_mac_periodic_fired() {
-! #ifndef SERIALINSCHEDULER
-!    openserial_stop();
-! #endif
-!    //trigger transmit
-!    armRandomBackoffTimer();
-! #ifndef SERIALINSCHEDULER
-!    //trigger serial input/output
-!    stupidmac_serialInOutputMode = !stupidmac_serialInOutputMode;
-!    if (stupidmac_serialInOutputMode) {
-!       openserial_startOutput();
-!    } else {
-!       openserial_startInput();
-!    }
-! #endif
-! }
-! 
-! //this function is the one which really initiates the transmission of a packet.
-! //It only does so if the MAC layer is in S_IDLE_LISTENING stupidmac_state, otherwise it defers
-! void timer_mac_backoff_fired() {
-!    if (stupidmac_state==S_IDLE_LISTENING) {
-!       if (stupidmac_dataFrameToSend!=NULL) {
-!          openserial_printError(COMPONENT_MAC,ERR_DATAFRAMETOSEND_ERROR,
-!                (errorparameter_t)0,
-!                (errorparameter_t)0);
-!       }
-!       stupidmac_dataFrameToSend = openqueue_inQueue(IS_NOT_ADV);
-!       if (stupidmac_dataFrameToSend==NULL) {
-!          stupidmac_dataFrameToSend = openqueue_inQueue(IS_ADV);
-!       }
-!       if (stupidmac_dataFrameToSend!=NULL) {
-!          change_state(S_TX_TXDATA);
-!          if (radio_send(stupidmac_dataFrameToSend)!=E_SUCCESS) {
-!             nores_sendDone(stupidmac_dataFrameToSend,E_FAIL);
-!             stupidmac_dataFrameToSend = NULL;
-!             armRandomBackoffTimer();//arm to retry later
-!             change_state(S_IDLE_LISTENING);
-!             openserial_printError(COMPONENT_MAC,ERR_PREPARESEND_FAILED,
-!                   (errorparameter_t)0,
-!                   (errorparameter_t)0);
-!          }
-!       }
-!    } else {
-!       //retry later on
-!       armRandomBackoffTimer();
-!    }
-! }
-! 
-! void timer_mac_watchdog_fired() {
-!    switch (stupidmac_state) {
-!       case S_TX_RXACK:
-!          //I'm a transmitter, didn't receive ACK (end of TX sequence).
-!          neighbors_indicateTx(&(stupidmac_dataFrameToSend->l2_nextORpreviousHop),WAS_NOT_ACKED);
-!          stupidmac_dataFrameToSend->l2_retriesLeft--;
-!          if (stupidmac_dataFrameToSend->l2_retriesLeft==0) {
-!             nores_sendDone(stupidmac_dataFrameToSend,E_FAIL);
-!             stupidmac_dataFrameToSend = NULL;
-!             armRandomBackoffTimer();
-!             change_state(S_IDLE_LISTENING);
-!             break;
-!          }
-!          //retransmit later on
-!          armRandomBackoffTimer();
-!          stupidmac_dataFrameToSend = NULL;
-!          change_state(S_IDLE_LISTENING);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_MAC,ERR_WRONG_STATE_IN_FASTTIMER_FIRED,
-!                (errorparameter_t)stupidmac_state,
-!                (errorparameter_t)0);
-!          change_state(S_IDLE_LISTENING);
-!          break;
-!    }
-  }
-\ No newline at end of file
---- 1,354 ----
-! /**
-! \brief Implementation of stupidMAC
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, August 2010
-! */
-! 
-! #include "openwsn.h"
-! #include "stupidmac.h"
-! #include "IEEE802154.h"
-! #include "radio.h"
-! #include "packetfunctions.h"
-! #include "idmanager.h"
-! #include "openserial.h"
-! #include "openqueue.h"
-! #include "timers.h"
-! #include "packetfunctions.h"
-! #include "neighbors.h"
-! #include "nores.h"
-! 
-! //=========================== variables =======================================
-! 
-! OpenQueueEntry_t*  stupidmac_dataFrameToSend;     //  NULL at beginning and end of slot
-! OpenQueueEntry_t*  stupidmac_packetACK;           //  NULL at beginning and end, free at end of slot
-! OpenQueueEntry_t*  stupidmac_dataFrameReceived;   // !NULL between data received, and sent to upper layer
-! uint8_t            stupidmac_dsn;
-! uint8_t            stupidmac_state;
-! #ifndef SERIALINSCHEDULER
-! bool               stupidmac_serialInOutputMode;
-! #endif
-! 
-! //=========================== prototypes ======================================
-! 
-! #include "IEEE802154_common.c"
-! void packetReceived(void);
-! void armRandomBackoffTimer(void);
-! void change_state(uint8_t newstate);
-! 
-! //======= from upper layer
-! 
-! //in stupidMAC, the radio is always on, listening
-! void stupidmac_init(void) {
-!    radio_rxOn(openwsn_frequency_channel);
-!    change_state(S_IDLE_LISTENING);
-!    stupidmac_dataFrameToSend = NULL;
-!    timer_startPeriodic(TIMER_MAC_PERIODIC,PERIODICTIMERPERIOD);
-! }
-! 
-! //a packet sent from the upper layer is simply stored into the OpenQueue buffer.
-! //The timerBackoff is armed to service the packet later on.
-! error_t stupidmac_send(OpenQueueEntry_t* msg) {
-!    //metadata
-!    msg->owner = COMPONENT_MAC;
-!    if (packetfunctions_isBroadcastMulticast(&(msg->l2_nextORpreviousHop))==TRUE) {
-!       msg->l2_retriesLeft = 1;
-!    } else {
-!       msg->l2_retriesLeft = TXRETRIES;
-!    }
-!    msg->l1_txPower = TX_POWER;
-!    msg->l1_channel = openwsn_frequency_channel;
-!    //IEEE802.15.4 header
-!    prependIEEE802154header(msg,
-!          msg->l2_frameType,
-!          IEEE154_SEC_NO_SECURITY,
-!          stupidmac_dsn++,
-!          &(msg->l2_nextORpreviousHop)
-!          );
-!    // space for 2-byte CRC
-!    packetfunctions_reserveFooterSize(msg,2);
-!    //simulate timer backoff fires so that packet gets sent immediately
-!    timer_mac_backoff_fired();
-!    return E_SUCCESS;
-! }
-! 
-! //======= from lower layer
-! 
-! void stupidmac_sendDone(OpenQueueEntry_t* pkt, error_t error) {
-!    switch (stupidmac_state) {
-!       case S_TX_TXDATA:                                           //[sendNowDone] transmitter
-!          if (error!=E_SUCCESS) {
-!             nores_sendDone(pkt,E_FAIL);
-!             stupidmac_dataFrameToSend = NULL;
-!             armRandomBackoffTimer();//arm timer to retransmission (?)
-!             change_state(S_IDLE_LISTENING);
-!             openserial_printError(COMPONENT_MAC,ERR_SENDNOWDONE_FAILED,
-!                   (errorparameter_t)stupidmac_state,
-!                   (errorparameter_t)0);
-!             return;
-!          } else {
-!             timer_startOneShot(TIMER_MAC_WATCHDOG,ACK_WAIT_TIME);
-!             change_state(S_TX_RXACK);
-!          }
-!          break;
-!       case S_RX_TXACK:                                            //[sendNowDone] receiver
-!          //I'm a receiver, finished sending ACK (end of RX sequence)
-!          openqueue_freePacketBuffer(stupidmac_packetACK);
-!          packetReceived();
-!          change_state(S_IDLE_LISTENING);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_MAC,ERR_WRONG_STATE_IN_SUBSEND_SENDDONE,
-!                (errorparameter_t)stupidmac_state,
-!                (errorparameter_t)0);
-!          change_state(S_IDLE_LISTENING);
-!          break;
-!    }
-! }
-! 
-! void radio_packet_received(OpenQueueEntry_t* msg) {
-!    ieee802154_header_iht   received_ieee154_header;
-!    ieee802154_header_iht   transmitted_ieee154_header;
-! 
-!    openserial_stop();
-!    //ensure debug fires only after packet fully received
-!    timer_startPeriodic(TIMER_MAC_PERIODIC,PERIODICTIMERPERIOD);
-! 
-!    msg->owner = COMPONENT_MAC;
-! 
-!    if (stupidmac_state!=S_TX_RXACK && stupidmac_state!=S_IDLE_LISTENING) {
-!       //not expecting this packet, throw away
-!       //do not go back to S_IDLE_LISTENING, just don't receive the packet and let the stupidmac_state machine be where it was
-!       openqueue_freePacketBuffer(msg);
-!       return;
-!    }
-! 
-!    received_ieee154_header = retrieveIEEE802154header(msg);
-!    packetfunctions_tossHeader(msg,received_ieee154_header.headerLength);
-!    packetfunctions_tossFooter(msg,2);
-! 
-!    msg->l2_frameType = received_ieee154_header.frameType;
-!    memcpy(&(msg->l2_nextORpreviousHop),&(received_ieee154_header.src),sizeof(open_addr_t));
-!    if (   received_ieee154_header.frameType==IEEE154_TYPE_DATA      &&
-!          !(idmanager_isMyAddress(&received_ieee154_header.panid))) {
-!       openserial_printError(COMPONENT_MAC,ERR_WRONG_PANID,
-!             (errorparameter_t)received_ieee154_header.panid.panid[0]*256+received_ieee154_header.panid.panid[1],
-!             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(msg);
-!       return;
-!    }
-! 
-!    switch (stupidmac_state) {
-! 
-!       /*------------------- TX sequence ------------------------*/
-!       case S_TX_RXACK:                                            //[receive] transmitter
-!          transmitted_ieee154_header = retrieveIEEE802154header(stupidmac_dataFrameToSend);
-!          if (received_ieee154_header.dsn == transmitted_ieee154_header.dsn) {
-!             //I'm a transmitter, just received ACK (end of TX sequence)
-!             timer_stop(TIMER_MAC_WATCHDOG);
-!             neighbors_indicateTx(&(stupidmac_dataFrameToSend->l2_nextORpreviousHop),WAS_ACKED);
-!             nores_sendDone(stupidmac_dataFrameToSend,E_SUCCESS);
-!             stupidmac_dataFrameToSend = NULL;
-!             armRandomBackoffTimer();//arm timer for next transmission
-!             change_state(S_IDLE_LISTENING);
-!          }
-!          openqueue_freePacketBuffer(msg);//free packet I received         
-!          break;
-! 
-!          /*------------------- RX sequence ------------------------*/
-!       case S_IDLE_LISTENING:                                           //[receive] receiver
-!          //I'm a receiver, just received a packet
-!          if (received_ieee154_header.frameType==IEEE154_TYPE_DATA || received_ieee154_header.frameType==IEEE154_TYPE_CMD) {
-!             neighbors_indicateRx(&(msg->l2_nextORpreviousHop),msg->l1_rssi);
-!             if (idmanager_isMyAddress(&received_ieee154_header.dest)) {
-!                //this packet is unicast to me
-!                if (stupidmac_dataFrameReceived==NULL) {
-!                   stupidmac_dataFrameReceived = msg;
-!                } else {
-!                   openserial_printError(COMPONENT_MAC,ERR_BUSY_RECEIVING,
-!                         (errorparameter_t)0,
-!                         (errorparameter_t)0);
-!                   openqueue_freePacketBuffer(msg);
-!                }
-!                //the sender requests an ACK
-!                if (received_ieee154_header.ackRequested) {
-!                   change_state(S_RX_TXACKPREPARE);
-!                   stupidmac_packetACK = openqueue_getFreePacketBuffer();
-!                   if (stupidmac_packetACK!=NULL) {
-!                      //send ACK
-!                      stupidmac_packetACK->creator        = COMPONENT_MAC;
-!                      stupidmac_packetACK->owner          = COMPONENT_MAC;
-!                      stupidmac_packetACK->l1_txPower     = TX_POWER;
-!                      stupidmac_packetACK->l1_channel     = openwsn_frequency_channel;
-!                      stupidmac_packetACK->l2_retriesLeft = 1;
-!                      prependIEEE802154header(stupidmac_packetACK,
-!                            IEEE154_TYPE_ACK,
-!                            IEEE154_SEC_NO_SECURITY,
-!                            received_ieee154_header.dsn,
-!                            NULL);
-!                      packetfunctions_reserveFooterSize(stupidmac_packetACK,2);
-!                      change_state(S_RX_TXACKREADY);
-!                      change_state(S_RX_TXACK);
-!                      if (radio_send(stupidmac_packetACK)!=E_SUCCESS) {
-!                         //abort
-!                         openserial_printError(COMPONENT_MAC,ERR_PREPARESEND_FAILED,
-!                               (errorparameter_t)0,(errorparameter_t)2);
-!                         openqueue_freePacketBuffer(stupidmac_packetACK);
-!                         change_state(S_IDLE_LISTENING);
-!                      }
-!                   } else {
-!                      openserial_printError(COMPONENT_MAC,ERR_NO_FREE_PACKET_BUFFER,
-!                            (errorparameter_t)0,(errorparameter_t)0);
-!                      change_state(S_IDLE_LISTENING);
-!                      void packetReceived();
-!                      return;
-!                   }
-!                } else {
-!                   packetReceived();
-!                }
-!             } else if (packetfunctions_isBroadcastMulticast(&received_ieee154_header.dest)==TRUE) {
-!                //this packet is broadcast
-!                if (stupidmac_dataFrameReceived==NULL) {
-!                   stupidmac_dataFrameReceived = msg;
-!                } else {
-!                   openserial_printError(COMPONENT_MAC,ERR_BUSY_RECEIVING,
-!                         (errorparameter_t)1,
-!                         (errorparameter_t)0);
-!                   openqueue_freePacketBuffer(msg);
-!                }
-!                packetReceived();
-!             } else {
-!                openqueue_freePacketBuffer(msg);
-!             }
-!          } else {
-!             //not data. I could be an ACK but I'm not in S_TX_RXACK stupidmac_state, so I discard
-!             openqueue_freePacketBuffer(msg);
-!          }
-!          break;
-! 
-!       default:
-!          //this should never happen as error was caught above
-!          //do not go back to S_IDLE_LISTENING, just don't receive the packet and let the stupidmac_state machine be where it was
-!          openqueue_freePacketBuffer(msg);
-!          openserial_printError(COMPONENT_MAC,ERR_WRONG_STATE_IN_RECEIVE,
-!                (errorparameter_t)stupidmac_state,
-!                (errorparameter_t)0);
-!          break;
-!    }
-! }
-! 
-! //=========================== private =========================================
-! 
-! void packetReceived(void) {
-!    if (stupidmac_dataFrameReceived->length>0) {
-!       //packet contains payload destined to an upper layer
-!       nores_receive(stupidmac_dataFrameReceived);
-!    } else {
-!       //packet contains no payload (KA)
-!       openqueue_freePacketBuffer(stupidmac_dataFrameReceived);
-!    }
-!    stupidmac_dataFrameReceived = NULL;
-! }
-! 
-! void armRandomBackoffTimer(void) {
-!    timer_startOneShot(TIMER_MAC_BACKOFF,MINBACKOFF); //TODO randomize
-! }
-! 
-! void change_state(uint8_t newstate) {
-!    stupidmac_state = newstate;
-!    switch (newstate) {
-!       case S_TX_TXDATAPREPARE:
-!       case S_TX_TXDATA:
-!       case S_RX_TXACKPREPARE:
-!       case S_RX_TXACK:
-!          //atomic P3OUT |= 0x20;
-!          break;
-!       case S_TX_TXDATAREADY:
-!       case S_TX_RXACK:
-!       case S_RX_TXACKREADY:
-!       case S_IDLE_LISTENING:
-!          //atomic P3OUT &= ~0x20;
-!          break;
-!    }
-! }
-! 
-! bool stupidmac_debugPrint(void) {
-!    return FALSE;
-! }
-! 
-! //======= timers firing
-! 
-! //periodic timer used to transmit, and to trigger serial input/output
-! void timer_mac_periodic_fired(void) {
-! #ifndef SERIALINSCHEDULER
-!    openserial_stop();
-! #endif
-!    //trigger transmit
-!    armRandomBackoffTimer();
-! #ifndef SERIALINSCHEDULER
-!    //trigger serial input/output
-!    stupidmac_serialInOutputMode = !stupidmac_serialInOutputMode;
-!    if (stupidmac_serialInOutputMode) {
-!       openserial_startOutput();
-!    } else {
-!       openserial_startInput();
-!    }
-! #endif
-! }
-! 
-! //this function is the one which really initiates the transmission of a packet.
-! //It only does so if the MAC layer is in S_IDLE_LISTENING stupidmac_state, otherwise it defers
-! void timer_mac_backoff_fired(void) {
-!    if (stupidmac_state==S_IDLE_LISTENING) {
-!       if (stupidmac_dataFrameToSend!=NULL) {
-!          openserial_printError(COMPONENT_MAC,ERR_DATAFRAMETOSEND_ERROR,
-!                (errorparameter_t)0,
-!                (errorparameter_t)0);
-!       }
-!       stupidmac_dataFrameToSend = openqueue_inQueue(IS_NOT_ADV);
-!       if (stupidmac_dataFrameToSend==NULL) {
-!          stupidmac_dataFrameToSend = openqueue_inQueue(IS_ADV);
-!       }
-!       if (stupidmac_dataFrameToSend!=NULL) {
-!          change_state(S_TX_TXDATA);
-!          if (radio_send(stupidmac_dataFrameToSend)!=E_SUCCESS) {
-!             nores_sendDone(stupidmac_dataFrameToSend,E_FAIL);
-!             stupidmac_dataFrameToSend = NULL;
-!             armRandomBackoffTimer();//arm to retry later
-!             change_state(S_IDLE_LISTENING);
-!             openserial_printError(COMPONENT_MAC,ERR_PREPARESEND_FAILED,
-!                   (errorparameter_t)0,
-!                   (errorparameter_t)0);
-!          }
-!       }
-!    } else {
-!       //retry later on
-!       armRandomBackoffTimer();
-!    }
-! }
-! 
-! void timer_mac_watchdog_fired(void) {
-!    switch (stupidmac_state) {
-!       case S_TX_RXACK:
-!          //I'm a transmitter, didn't receive ACK (end of TX sequence).
-!          neighbors_indicateTx(&(stupidmac_dataFrameToSend->l2_nextORpreviousHop),WAS_NOT_ACKED);
-!          stupidmac_dataFrameToSend->l2_retriesLeft--;
-!          if (stupidmac_dataFrameToSend->l2_retriesLeft==0) {
-!             nores_sendDone(stupidmac_dataFrameToSend,E_FAIL);
-!             stupidmac_dataFrameToSend = NULL;
-!             armRandomBackoffTimer();
-!             change_state(S_IDLE_LISTENING);
-!             break;
-!          }
-!          //retransmit later on
-!          armRandomBackoffTimer();
-!          stupidmac_dataFrameToSend = NULL;
-!          change_state(S_IDLE_LISTENING);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_MAC,ERR_WRONG_STATE_IN_FASTTIMER_FIRED,
-!                (errorparameter_t)stupidmac_state,
-!                (errorparameter_t)0);
-!          change_state(S_IDLE_LISTENING);
-!          break;
-!    }
-  }
-\ No newline at end of file
-diff -crB openwsn/02a-MAClow/stupidmac/stupidmac.h ../../../sys/net/openwsn/02a-MAClow/stupidmac/stupidmac.h
-*** openwsn/02a-MAClow/stupidmac/stupidmac.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02a-MAClow/stupidmac/stupidmac.h	Wed Jan 15 13:48:26 2014
-***************
-*** 1,60 ****
-! /**
-! \brief Implementation of stupidMAC
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, August 2010
-! */
-! 
-! #ifndef __STUPIDMAC_H
-! #define __STUPIDMAC_H
-! 
-! #include "openwsn.h"
-! 
-! enum {
-!    //default
-!    S_IDLE_LISTENING      =     0,
-!    //transmitter
-!    S_TX_TXDATAPREPARE    =     1,
-!    S_TX_TXDATAREADY      =     2,
-!    S_TX_TXDATA           =     3,
-!    S_TX_RXACK            =     4,
-!    //receiver
-!    S_RX_TXACKPREPARE     =     5,
-!    S_RX_TXACKREADY       =     6,
-!    S_RX_TXACK            =     7,
-! };
-! 
-! enum {
-!    IMMEDIATELY           =     1, //used as timer value which is very small
-!    WATCHDOG_PREPARESEND  = 16000, //500ms
-! };
-! 
-! enum {
-!    WAS_ACKED             =   TRUE,
-!    WAS_NOT_ACKED         =  FALSE,
-! };
-! 
-! //timer wait times (in 1/32768 seconds), slow version
-! /*enum {
-!    PERIODICTIMERPERIOD   =   9828, // 300ms
-!    MINBACKOFF            =   6552, // 200ms
-!    ACK_WAIT_TIME         =   3276, // 100ms
-! };*/
-! 
-! //timer wait times (in 1/32768 seconds), fast version
-! enum {
-!    PERIODICTIMERPERIOD   =    982, // 30ms
-!    MINBACKOFF            =    655, // 20ms
-!    ACK_WAIT_TIME         =    327, // 10ms
-! };
-! 
-! void    stupidmac_init();
-! error_t stupidmac_send(OpenQueueEntry_t* msg);
-! void    stupidmac_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void    stupidmac_packet_received(OpenQueueEntry_t* pkt);
-! void    stupidmac_sendDone(OpenQueueEntry_t* packetReceived, error_t error);
-! void    timer_mac_backoff_fired();
-! void    timer_mac_watchdog_fired();
-! void    timer_mac_periodic_fired();
-! bool    stupidmac_debugPrint();
-! 
-! #endif
---- 1,60 ----
-! /**
-! \brief Implementation of stupidMAC
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, August 2010
-! */
-! 
-! #ifndef __STUPIDMAC_H
-! #define __STUPIDMAC_H
-! 
-! #include "openwsn.h"
-! 
-! enum {
-!    //default
-!    S_IDLE_LISTENING      =     0,
-!    //transmitter
-!    S_TX_TXDATAPREPARE    =     1,
-!    S_TX_TXDATAREADY      =     2,
-!    S_TX_TXDATA           =     3,
-!    S_TX_RXACK            =     4,
-!    //receiver
-!    S_RX_TXACKPREPARE     =     5,
-!    S_RX_TXACKREADY       =     6,
-!    S_RX_TXACK            =     7,
-! };
-! 
-! enum {
-!    IMMEDIATELY           =     1, //used as timer value which is very small
-!    WATCHDOG_PREPARESEND  = 16000, //500ms
-! };
-! 
-! enum {
-!    WAS_ACKED             =   TRUE,
-!    WAS_NOT_ACKED         =  FALSE,
-! };
-! 
-! //timer wait times (in 1/32768 seconds), slow version
-! /*enum {
-!    PERIODICTIMERPERIOD   =   9828, // 300ms
-!    MINBACKOFF            =   6552, // 200ms
-!    ACK_WAIT_TIME         =   3276, // 100ms
-! };*/
-! 
-! //timer wait times (in 1/32768 seconds), fast version
-! enum {
-!    PERIODICTIMERPERIOD   =    982, // 30ms
-!    MINBACKOFF            =    655, // 20ms
-!    ACK_WAIT_TIME         =    327, // 10ms
-! };
-! 
-! void    stupidmac_init(void);
-! owerror_t stupidmac_send(OpenQueueEntry_t* msg);
-! void    stupidmac_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void    stupidmac_packet_received(OpenQueueEntry_t* pkt);
-! void    stupidmac_sendDone(OpenQueueEntry_t* packetReceived, owerror_t error);
-! void    timer_mac_backoff_fired(void);
-! void    timer_mac_watchdog_fired(void);
-! void    timer_mac_periodic_fired(void);
-! bool    stupidmac_debugPrint(void);
-! 
-! #endif
-diff -crB openwsn/02a-MAClow/topology.c ../../../sys/net/openwsn/02a-MAClow/topology.c
-*** openwsn/02a-MAClow/topology.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02a-MAClow/topology.c	Wed Jan 15 13:48:26 2014
-***************
-*** 1,48 ****
-! #include "openwsn.h"
-! #include "topology.h"
-! #include "idmanager.h"
-! 
-! //=========================== defines =========================================
-! 
-! #define TOPOLOGY_MOTE1 0x6f
-! #define TOPOLOGY_MOTE2 0xb9
-! #define TOPOLOGY_MOTE3 0x3b
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! bool topology_isAcceptablePacket(ieee802154_header_iht* ieee802514_header) {
-!    bool returnVal;
-!    switch (idmanager_getMyID(ADDR_64B)->addr_64b[7]) {
-!       case TOPOLOGY_MOTE1:
-!          if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE2) {
-!             returnVal=TRUE;
-!          } else {
-!             returnVal=FALSE;
-!          }
-!          break;
-!       case TOPOLOGY_MOTE2:
-!          if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE1 ||
-!              ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE3) {
-!             returnVal=TRUE;
-!          } else {
-!             returnVal=FALSE;
-!          }
-!          break;
-!       case TOPOLOGY_MOTE3:
-!          if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE2) {
-!             returnVal=TRUE;
-!          } else {
-!             returnVal=FALSE;
-!          }
-!          break;
-!       default:
-!          returnVal=TRUE;
-!    }
-!    return returnVal;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,56 ----
-! #include "openwsn.h"
-! #include "topology.h"
-! #include "idmanager.h"
-! 
-! //=========================== defines =========================================
-! 
-! #define TOPOLOGY_MOTE1 0x01
-! #define TOPOLOGY_MOTE2 0x02
-! #define TOPOLOGY_MOTE3 0x03
-! #define TOPOLOGY_MOTE4 0x04
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! bool topology_isAcceptablePacket(ieee802154_header_iht* ieee802514_header) {
-!    bool returnVal;
-!    switch (idmanager_getMyID(ADDR_64B)->addr_64b[7]) {
-!       case TOPOLOGY_MOTE1:
-!          if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE2) {
-!             returnVal=TRUE;
-!          } else {
-!             returnVal=FALSE;
-!          }
-!          break;
-!       case TOPOLOGY_MOTE2:
-!          if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE1 ||
-!              ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE3) {
-!             returnVal=TRUE;
-!          } else {
-!             returnVal=FALSE;
-!          }
-!          break;
-!        case TOPOLOGY_MOTE3:
-!          if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE2 ||
-!              ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE4) {
-!             returnVal=TRUE;
-!          } else {
-!             returnVal=FALSE;
-!          }
-!          break;
-!        case TOPOLOGY_MOTE4:
-!          if (ieee802514_header->src.addr_64b[7]==TOPOLOGY_MOTE3) {
-!             returnVal=TRUE;
-!          } else {
-!             returnVal=FALSE;
-!          }
-!          break;
-!       default:
-!          returnVal=TRUE;
-!    }
-!    return returnVal;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/02a-MAClow/topology.h ../../../sys/net/openwsn/02a-MAClow/topology.h
-*** openwsn/02a-MAClow/topology.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02a-MAClow/topology.h	Wed Jan 15 13:48:26 2014
-***************
-*** 1,31 ****
-! #ifndef __TOPOLOGY_H
-! #define __TOPOLOGY_H
-! 
-! /**
-! \addtogroup MAClow
-! \{
-! \addtogroup topology
-! \{
-! */
-! 
-! #include "openwsn.h"
-! #include "IEEE802154.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! bool topology_isAcceptablePacket(ieee802154_header_iht* ieee802514_header);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,31 ----
-! #ifndef __TOPOLOGY_H
-! #define __TOPOLOGY_H
-! 
-! /**
-! \addtogroup MAClow
-! \{
-! \addtogroup topology
-! \{
-! */
-! 
-! #include "openwsn.h"
-! #include "IEEE802154.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! bool topology_isAcceptablePacket(ieee802154_header_iht* ieee802514_header);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/02b-MAChigh/Makefile ../../../sys/net/openwsn/02b-MAChigh/Makefile
-*** openwsn/02b-MAChigh/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/02b-MAChigh/Makefile	Wed Jan 15 13:48:26 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBMOD)
-+ 
-+ $(BINDIR)$(SUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/02b-MAChigh/neighbors.c ../../../sys/net/openwsn/02b-MAChigh/neighbors.c
-*** openwsn/02b-MAChigh/neighbors.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02b-MAChigh/neighbors.c	Wed Jan 15 13:48:26 2014
-***************
-*** 1,682 ****
-! #include "openwsn.h"
-! #include "neighbors.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "idmanager.h"
-! #include "openserial.h"
-! #include "IEEE802154E.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    neighborRow_t        neighbors[MAXNUMNEIGHBORS];
-!    dagrank_t            myDAGrank;
-!    uint8_t              debugRow;
-!    icmpv6rpl_dio_ht*    dio; //keep it global to be able to debug correctly.
-! } neighbors_vars_t;
-! 
-! neighbors_vars_t neighbors_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void registerNewNeighbor(
-!         open_addr_t* neighborID,
-!         int8_t       rssi,
-!         asn_t*       asnTimestamp
-!      );
-! bool isNeighbor(open_addr_t* neighbor);
-! void removeNeighbor(uint8_t neighborIndex);
-! bool isThisRowMatching(
-!         open_addr_t* address,
-!         uint8_t      rowNumber
-!      );
-! 
-! //=========================== public ==========================================
-! 
-! /**
-! \brief Initializes this module.
-! */
-! void neighbors_init() {
-!    
-!    // clear module variables
-!    memset(&neighbors_vars,0,sizeof(neighbors_vars_t));
-!    
-!    // set myDAGrank
-!    if (idmanager_getIsDAGroot()==TRUE) {
-!       neighbors_vars.myDAGrank=0;
-!    } else {
-!       neighbors_vars.myDAGrank=DEFAULTDAGRANK;
-!    }
-! }
-! 
-! //===== getters
-! 
-! /**
-! \brief Retrieve this mote's current DAG rank.
-! 
-! \returns This mote's current DAG rank.
-! */
-! dagrank_t neighbors_getMyDAGrank() {
-!    return neighbors_vars.myDAGrank;
-! }
-! 
-! /**
-! \brief Retrieve the number of neighbors this mote's currently knows of.
-! 
-! \returns The number of neighbors this mote's currently knows of.
-! */
-! uint8_t neighbors_getNumNeighbors() {
-!    uint8_t i;
-!    uint8_t returnVal;
-!    
-!    returnVal=0;
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (neighbors_vars.neighbors[i].used==TRUE) {
-!          returnVal++;
-!       }
-!    }
-!    return returnVal;
-! }
-! 
-! /**
-! \brief Retrieve my preferred parent's EUI64 address.
-! 
-! \param [out] addressToWrite Where to write the preferred parent's address to.
-! */
-! bool neighbors_getPreferredParentEui64(open_addr_t* addressToWrite) {
-!    uint8_t   i;
-!    bool      foundPreferred;
-!    uint8_t   numNeighbors;
-!    dagrank_t minRankVal;
-!    uint8_t   minRankIdx;
-!    
-!    addressToWrite->type = ADDR_NONE;
-!    
-!    foundPreferred       = FALSE;
-!    numNeighbors         = 0;
-!    minRankVal           = MAXDAGRANK;
-!    minRankIdx           = MAXNUMNEIGHBORS+1;
-!    
-!    //===== step 1. Try to find preferred parent
-!    for (i=0; i<MAXNUMNEIGHBORS; i++) {
-!       if (neighbors_vars.neighbors[i].used==TRUE){
-!          if (neighbors_vars.neighbors[i].parentPreference==MAXPREFERENCE) {
-!             memcpy(addressToWrite,&(neighbors_vars.neighbors[i].addr_64b),sizeof(open_addr_t));
-!             addressToWrite->type=ADDR_64B;
-!             foundPreferred=TRUE;
-!          }
-!          // identify neighbor with lowest rank
-!          if (neighbors_vars.neighbors[i].DAGrank < minRankVal) {
-!             minRankVal=neighbors_vars.neighbors[i].DAGrank;
-!             minRankIdx=i;
-!          }
-!          numNeighbors++;
-!       }
-!    }
-!    
-!    //===== step 2. (backup) Promote neighbor with min rank to preferred parent
-!    if (foundPreferred==FALSE && numNeighbors > 0){
-!       // promote neighbor
-!       neighbors_vars.neighbors[minRankIdx].parentPreference       = MAXPREFERENCE;
-!       neighbors_vars.neighbors[minRankIdx].stableNeighbor         = TRUE;
-!       neighbors_vars.neighbors[minRankIdx].switchStabilityCounter = 0;
-!       // return its address
-!       memcpy(addressToWrite,&(neighbors_vars.neighbors[minRankIdx].addr_64b),sizeof(open_addr_t));
-!       addressToWrite->type=ADDR_64B;
-!       foundPreferred=TRUE;         
-!    }
-!    
-!    return foundPreferred;
-! }
-! 
-! /**
-! \brief Find neighbor to which to send KA.
-! 
-! This function iterates through the neighbor table and identifies the neighbor
-! we need to send a KA to, if any. This neighbor satisfies the following
-! conditions:
-! - it is one of our preferred parents
-! - we haven't heard it for over KATIMEOUT
-! 
-! \returns A pointer to the neighbor's address, or NULL if no KA is needed.
-! */
-! open_addr_t* neighbors_getKANeighbor() {
-!    uint8_t         i;
-!    uint16_t        timeSinceHeard;
-!    open_addr_t*    addrPreferred;
-!    open_addr_t*    addrOther;
-!    
-!    // initialize
-!    addrPreferred = NULL;
-!    addrOther     = NULL;
-!    
-!    // scan through the neighbor table, and populate addrPreferred and addrOther
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (neighbors_vars.neighbors[i].used==1) {
-!          timeSinceHeard = ieee154e_asnDiff(&neighbors_vars.neighbors[i].asn);
-!          if (timeSinceHeard>KATIMEOUT) {
-!             // this neighbor needs to be KA'ed to
-!             if (neighbors_vars.neighbors[i].parentPreference==MAXPREFERENCE) {
-!                // its a preferred parent
-!                addrPreferred = &(neighbors_vars.neighbors[i].addr_64b);
-!             } else {
-!                // its not a preferred parent
-!                // Note: commented out since policy is not to KA to non-preferred parents
-!                // addrOther =     &(neighbors_vars.neighbors[i].addr_64b);
-!             }
-!          }
-!       }
-!    }
-!    
-!    // return the addr of the most urgent KA to send:
-!    // - if available, preferred parent
-!    // - if not, non preferred parent
-!    if        (addrPreferred!=NULL) {
-!       return addrPreferred;
-!    } else if (addrOther!=NULL) {
-!       return addrOther;
-!    } else {
-!       return NULL;
-!    }
-! }
-! 
-! //===== interrogators
-! 
-! /**
-! \brief Indicate whether some neighbor is a stable neighbor
-! 
-! \param address [in] The address of the neighbor, a full 128-bit IPv6 addres.
-! 
-! \returns TRUE if that neighbor is stable, FALSE otherwise.
-! */
-! bool neighbors_isStableNeighbor(open_addr_t* address) {
-!    uint8_t     i;
-!    open_addr_t temp_addr_64b;
-!    open_addr_t temp_prefix;
-!    bool        returnVal;
-!    
-!    // by default, not stable
-!    returnVal  = FALSE;
-!    
-!    // but neighbor's IPv6 address in prefix and EUI64
-!    switch (address->type) {
-!       case ADDR_128B:
-!          packetfunctions_ip128bToMac64b(address,&temp_prefix,&temp_addr_64b);
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_NEIGHBORS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)address->type,
-!                                (errorparameter_t)0);
-!          return returnVal;
-!    }
-!    
-!    // iterate through neighbor table
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (isThisRowMatching(&temp_addr_64b,i) && neighbors_vars.neighbors[i].stableNeighbor==TRUE) {
-!          returnVal  = TRUE;
-!          break;
-!       }
-!    }
-!    
-!    return returnVal;
-! }
-! 
-! /**
-! \brief Indicate whether some neighbor is a preferred neighbor.
-! 
-! \param address [in] The EUI64 address of the neighbor.
-! 
-! \returns TRUE if that neighbor is preferred, FALSE otherwise.
-! */
-! bool neighbors_isPreferredParent(open_addr_t* address) {
-!    uint8_t i;
-!    bool    returnVal;
-!    
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    
-!    // by default, not preferred
-!    returnVal = FALSE;
-!    
-!    // iterate through neighbor table
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (isThisRowMatching(address,i) && neighbors_vars.neighbors[i].parentPreference==MAXPREFERENCE) {
-!          returnVal  = TRUE;
-!          break;
-!       }
-!    }
-!    
-!    ENABLE_INTERRUPTS();
-!    return returnVal;
-! }
-! 
-! /**
-! \brief Indicate whether some neighbor has a lower DAG rank that me.
-! 
-! \param index [in] The index of that neighbor in the neighbor table.
-! 
-! \returns TRUE if that neighbor has a lower DAG rank than me, FALSE otherwise.
-! */
-! bool neighbors_isNeighborWithLowerDAGrank(uint8_t index) {
-!    bool    returnVal;
-!    
-!    if (neighbors_vars.neighbors[index].used==TRUE &&
-!        neighbors_vars.neighbors[index].DAGrank < neighbors_getMyDAGrank()) { 
-!       returnVal = TRUE;
-!    } else {
-!       returnVal = FALSE;
-!    }
-!    
-!    return returnVal;
-! }
-! 
-! 
-! /**
-! \brief Indicate whether some neighbor has a lower DAG rank that me.
-! 
-! \param index [in] The index of that neighbor in the neighbor table.
-! 
-! \returns TRUE if that neighbor has a lower DAG rank than me, FALSE otherwise.
-! */
-! bool neighbors_isNeighborWithHigherDAGrank(uint8_t index) {
-!    bool    returnVal;
-!    
-!    if (neighbors_vars.neighbors[index].used==TRUE &&
-!        neighbors_vars.neighbors[index].DAGrank >= neighbors_getMyDAGrank()) { 
-!       returnVal = TRUE;
-!    } else {
-!       returnVal = FALSE;
-!    }
-!    
-!    return returnVal;
-! }
-! 
-! //===== updating neighbor information
-! 
-! /**
-! \brief Indicate some (non-ACK) packet was received from a neighbor.
-! 
-! This function should be called for each received (non-ACK) packet so neighbor
-! statistics in the neighbor table can be updated.
-! 
-! The fields which are updated are:
-! - numRx
-! - rssi
-! - asn
-! - stableNeighbor
-! - switchStabilityCounter
-! 
-! \param l2_src [in] MAC source address of the packet, i.e. the neighbor who sent
-!                    the packet just received.
-! \param rssi   [in] RSSI with which this packet was received.
-! \param asnTs  [in] ASN at which this packet was received.
-! */
-! void neighbors_indicateRx(open_addr_t* l2_src,
-!                           int8_t       rssi,
-!                           asn_t*       asnTs) {
-!    uint8_t i;
-!    bool    newNeighbor;
-!    
-!    // update existing neighbor
-!    newNeighbor = TRUE;
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (isThisRowMatching(l2_src,i)) {
-!          
-!          // this is not a new neighbor
-!          newNeighbor = FALSE;
-!          
-!          // update numRx, rssi, asn
-!          neighbors_vars.neighbors[i].numRx++;
-!          neighbors_vars.neighbors[i].rssi=rssi;
-!          memcpy(&neighbors_vars.neighbors[i].asn,asnTs,sizeof(asn_t));
-!          
-!          // update stableNeighbor, switchStabilityCounter
-!          if (neighbors_vars.neighbors[i].stableNeighbor==FALSE) {
-!             if (neighbors_vars.neighbors[i].rssi>BADNEIGHBORMAXRSSI) {
-!                neighbors_vars.neighbors[i].switchStabilityCounter++;
-!                if (neighbors_vars.neighbors[i].switchStabilityCounter>=SWITCHSTABILITYTHRESHOLD) {
-!                   neighbors_vars.neighbors[i].switchStabilityCounter=0;
-!                   neighbors_vars.neighbors[i].stableNeighbor=TRUE;
-!                }
-!             } else {
-!                neighbors_vars.neighbors[i].switchStabilityCounter=0;
-!             }
-!          } else if (neighbors_vars.neighbors[i].stableNeighbor==TRUE) {
-!             if (neighbors_vars.neighbors[i].rssi<GOODNEIGHBORMINRSSI) {
-!                neighbors_vars.neighbors[i].switchStabilityCounter++;
-!                if (neighbors_vars.neighbors[i].switchStabilityCounter>=SWITCHSTABILITYTHRESHOLD) {
-!                   neighbors_vars.neighbors[i].switchStabilityCounter=0;
-!                    neighbors_vars.neighbors[i].stableNeighbor=FALSE;
-!                }
-!             } else {
-!                neighbors_vars.neighbors[i].switchStabilityCounter=0;
-!             }
-!          }
-!          
-!          // stop looping
-!          break;
-!       }
-!    }
-!    
-!    // register new neighbor
-!    if (newNeighbor==TRUE) {
-!       registerNewNeighbor(l2_src, rssi, asnTs);
-!    }
-! }
-! 
-! /**
-! \brief Indicate some packet was sent to some neighbor.
-! 
-! This function should be called for each transmitted (non-ACK) packet so
-! neighbor statistics in the neighbor table can be updated.
-! 
-! The fields which are updated are:
-! - numTx
-! - numTxACK
-! - asn
-! 
-! \param l2_dest [in] MAC destination address of the packet, i.e. the neighbor
-!                     who I just sent the packet to.
-! \param numTxAttempts [in] Number of transmission attempts to this neighbor.
-! \param was_finally_acked [in] TRUE iff the packet was ACK'ed by the neighbor
-!                on final transmission attempt.
-! \param asnTs   [in] ASN of the last transmission attempt.
-! */
-! void neighbors_indicateTx(open_addr_t* l2_dest,
-!                           uint8_t      numTxAttempts,
-!                           bool         was_finally_acked,
-!                           asn_t*       asnTs) {
-!    uint8_t i;
-!    // don't run through this function if packet was sent to broadcast address
-!    if (packetfunctions_isBroadcastMulticast(l2_dest)==TRUE) {
-!       return;
-!    }
-!    
-!    // loop through neighbor table
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (isThisRowMatching(l2_dest,i)) {
-!          // handle roll-over case
-!         
-!           if (neighbors_vars.neighbors[i].numTx>(0xff-numTxAttempts)) {
-!               neighbors_vars.neighbors[i].numWraps++; //counting the number of times that tx wraps.
-!               neighbors_vars.neighbors[i].numTx/=2;
-!               neighbors_vars.neighbors[i].numTxACK/=2;
-!            }
-!          // update statistics
-!         neighbors_vars.neighbors[i].numTx += numTxAttempts; 
-!         
-!         if (was_finally_acked==TRUE) {
-!             neighbors_vars.neighbors[i].numTxACK++;
-!             memcpy(&neighbors_vars.neighbors[i].asn,asnTs,sizeof(asn_t));
-!         }
-!         break;
-!       }
-!    }
-! }
-! 
-! /**
-! \brief Indicate I just received a RPL DIO from a neighbor.
-! 
-! This function should be called for each received a DIO is received so neighbor
-! routing information in the neighbor table can be updated.
-! 
-! The fields which are updated are:
-! - DAGrank
-! 
-! \param msg  [in] The received message with msg->payload pointing to the DIO
-!                  header.
-! */
-! void neighbors_indicateRxDIO(OpenQueueEntry_t* msg) {
-!    uint8_t          i;
-!   
-!    // take ownership over the packet
-!    msg->owner = COMPONENT_NEIGHBORS;
-!    
-!    // update rank of that neighbor in table
-!    neighbors_vars.dio = (icmpv6rpl_dio_ht*)(msg->payload);
-!    if (isNeighbor(&(msg->l2_nextORpreviousHop))==TRUE) {
-!       for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!          if (isThisRowMatching(&(msg->l2_nextORpreviousHop),i)) {
-!             if (
-!                   neighbors_vars.dio->rank>neighbors_vars.neighbors[i].DAGrank &&
-!                   neighbors_vars.dio->rank - neighbors_vars.neighbors[i].DAGrank>DEFAULTLINKCOST
-!                ) {
-!                 // the new DAGrank looks suspiciously high, only increment a bit
-!                 neighbors_vars.neighbors[i].DAGrank += DEFAULTLINKCOST;
-!                 openserial_printError(COMPONENT_NEIGHBORS,ERR_LARGE_DAGRANK,
-!                                (errorparameter_t)neighbors_vars.dio->rank,
-!                                (errorparameter_t)neighbors_vars.neighbors[i].DAGrank);
-!             } else {
-!                neighbors_vars.neighbors[i].DAGrank = neighbors_vars.dio->rank;
-!             }
-!             break;
-!          }
-!       }
-!    } 
-!    // update my routing information
-!    neighbors_updateMyDAGrankAndNeighborPreference(); 
-! }
-! 
-! //===== write addresses
-! 
-! /**
-! \brief Write the 64-bit address of some neighbor to some location.
-! 
-! */
-! 
-! void  neighbors_getNeighbor(open_addr_t* address,uint8_t addr_type,uint8_t index){
-!    switch(addr_type) {
-!       case ADDR_64B:
-!          memcpy(&(address->addr_64b),&(neighbors_vars.neighbors[index].addr_64b.addr_64b),LENGTH_ADDR64b);
-!          address->type=ADDR_64B;
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_NEIGHBORS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)addr_type,
-!                                (errorparameter_t)1);
-!          break; 
-!    }
-! }
-! 
-! 
-! //===== managing routing info
-! 
-! /**
-! \brief Update my DAG rank and neighbor preference.
-! 
-! Call this function whenever some data is changed that could cause this mote's
-! routing decisions to change. Examples are:
-! - I received a DIO which updated by neighbor table. If this DIO indicated a
-!   very low DAGrank, I may want to change by routing parent.
-! - I became a DAGroot, so my DAGrank should be 0.
-! */
-! void neighbors_updateMyDAGrankAndNeighborPreference() {
-!    uint8_t   i;
-!    uint8_t   linkCost;
-!    uint32_t  tentativeDAGrank; // 32-bit since is used to sum
-!    uint8_t   prefParentIdx;
-!    bool      prefParentFound;
-!    
-!    // if I'm a DAGroot, my DAGrank is always 0
-!    if ((idmanager_getIsDAGroot())==TRUE) {
-!       neighbors_vars.myDAGrank=0;
-!       return;
-!    }
-!    
-!    // reset my DAG rank to max value. May be lowered below.
-!    neighbors_vars.myDAGrank  = MAXDAGRANK;
-!    
-!    // by default, I haven't found a preferred parent
-!    prefParentFound           = FALSE;
-!    prefParentIdx             = 0;
-!    
-!    // loop through neighbor table, update myDAGrank
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (neighbors_vars.neighbors[i].used==TRUE) {
-!          // reset parent preference
-!          neighbors_vars.neighbors[i].parentPreference=0;
-!          // calculate link cost to this neighbor
-!          if (neighbors_vars.neighbors[i].numTxACK==0) {
-!             linkCost = DEFAULTLINKCOST;
-!          } else {
-!             linkCost = (uint8_t)((((float)neighbors_vars.neighbors[i].numTx)/((float)neighbors_vars.neighbors[i].numTxACK))*10.0);
-!          }
-!          tentativeDAGrank = neighbors_vars.neighbors[i].DAGrank+linkCost;
-!          if ( tentativeDAGrank<neighbors_vars.myDAGrank &&
-!               tentativeDAGrank<MAXDAGRANK) {
-!             // found better parent, lower my DAGrank
-!             neighbors_vars.myDAGrank   = tentativeDAGrank;
-!             prefParentFound            = TRUE;
-!             prefParentIdx              = i;
-!          }
-!       }
-!    } 
-!    
-!    // update preferred parent
-!    if (prefParentFound) {
-!       neighbors_vars.neighbors[prefParentIdx].parentPreference       = MAXPREFERENCE;
-!       neighbors_vars.neighbors[prefParentIdx].stableNeighbor         = TRUE;
-!       neighbors_vars.neighbors[prefParentIdx].switchStabilityCounter = 0;
-!    }
-! }
-! 
-! //===== debug
-! 
-! /**
-! \brief Triggers this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_neighbors() {
-!    debugNeighborEntry_t temp;
-!    neighbors_vars.debugRow=(neighbors_vars.debugRow+1)%MAXNUMNEIGHBORS;
-!    temp.row=neighbors_vars.debugRow;
-!    temp.neighborEntry=neighbors_vars.neighbors[neighbors_vars.debugRow];
-!    openserial_printStatus(STATUS_NEIGHBORS,(uint8_t*)&temp,sizeof(debugNeighborEntry_t));
-!    return TRUE;
-! }
-! 
-! void debugNetPrint_neighbors(netDebugNeigborEntry_t* out){
-!    uint8_t idxIn;
-!    uint8_t idxOut;
-!    
-!    idxOut=0;
-!    for (idxIn=0;idxIn<MAXNUMNEIGHBORS;idxIn++) {
-!       if(neighbors_vars.neighbors[idxIn].used) {
-!          out[idxOut].last_addr_byte = neighbors_vars.neighbors[idxIn].addr_64b.addr_64b[7];//last byte of the address; poipoi could be [0]; endianness
-!          out[idxOut].rssi = neighbors_vars.neighbors[idxIn].rssi;
-!          out[idxOut].parentPreference = neighbors_vars.neighbors[idxIn].parentPreference;
-!          out[idxOut].DAGrank = neighbors_vars.neighbors[idxIn].DAGrank;
-!          memcpy(
-!             &out[idxOut].asn,
-!             &neighbors_vars.neighbors[idxIn].asn.bytes0and1,
-!             sizeof(neighbors_vars.neighbors[idxIn].asn.bytes0and1)
-!          );
-!          idxOut++;
-!       }
-!    }  
-! }
-! 
-! //=========================== private =========================================
-! 
-! void registerNewNeighbor(open_addr_t* address,
-!                          int8_t       rssi,
-!                          asn_t*       asnTimestamp) {
-!    uint8_t  i,j;
-!    bool     iHaveAPreferedParent;
-!    // filter errors
-!    if (address->type!=ADDR_64B) {
-!       openserial_printCritical(COMPONENT_NEIGHBORS,ERR_WRONG_ADDR_TYPE,
-!                             (errorparameter_t)address->type,
-!                             (errorparameter_t)2);
-!       return;
-!    }
-!    // add this neighbor
-!    if (isNeighbor(address)==FALSE) {
-!       i=0;
-!       while(i<MAXNUMNEIGHBORS) {
-!          if (neighbors_vars.neighbors[i].used==FALSE) {
-!             // add this neighbor
-!             neighbors_vars.neighbors[i].used                   = TRUE;
-!             neighbors_vars.neighbors[i].parentPreference       = 0;
-!             // neighbors_vars.neighbors[i].stableNeighbor         = FALSE;
-!             // Note: all new neighbors are consider stable
-!             neighbors_vars.neighbors[i].stableNeighbor         = TRUE;
-!             neighbors_vars.neighbors[i].switchStabilityCounter = 0;
-!             memcpy(&neighbors_vars.neighbors[i].addr_64b,address,sizeof(open_addr_t));
-!             neighbors_vars.neighbors[i].DAGrank                = DEFAULTDAGRANK;
-!             neighbors_vars.neighbors[i].rssi                   = rssi;
-!             neighbors_vars.neighbors[i].numRx                  = 1;
-!             neighbors_vars.neighbors[i].numTx                  = 0;
-!             neighbors_vars.neighbors[i].numTxACK               = 0;
-!             memcpy(&neighbors_vars.neighbors[i].asn,asnTimestamp,sizeof(asn_t));
-!             // do I already have a preferred parent ?
-!             iHaveAPreferedParent = FALSE;
-!             for (j=0;j<MAXNUMNEIGHBORS;j++) {
-!                if (neighbors_vars.neighbors[j].parentPreference==MAXPREFERENCE) {
-!                   iHaveAPreferedParent = TRUE;
-!                }
-!             }
-!             // if I have none, and I'm not DAGroot, the new neighbor is my preferred
-!             if (iHaveAPreferedParent==FALSE && idmanager_getIsDAGroot()==FALSE) {      
-!                neighbors_vars.neighbors[i].parentPreference     = MAXPREFERENCE;
-!             }
-!             break;
-!          }
-!          i++;
-!       }
-!       if (i==MAXNUMNEIGHBORS) {
-!          openserial_printError(COMPONENT_NEIGHBORS,ERR_NEIGHBORS_FULL,
-!                                (errorparameter_t)MAXNUMNEIGHBORS,
-!                                (errorparameter_t)0);
-!          return;
-!       }
-!    }
-!    
-! }
-! 
-! bool isNeighbor(open_addr_t* neighbor) {
-!    uint8_t i=0;
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (isThisRowMatching(neighbor,i)) {
-!          return TRUE;
-!       }
-!    }
-!    return FALSE;
-! }
-! 
-! void removeNeighbor(uint8_t neighborIndex) {
-!    neighbors_vars.neighbors[neighborIndex].used                      = FALSE;
-!    neighbors_vars.neighbors[neighborIndex].parentPreference          = 0;
-!    neighbors_vars.neighbors[neighborIndex].stableNeighbor            = FALSE;
-!    neighbors_vars.neighbors[neighborIndex].switchStabilityCounter    = 0;
-!    //neighbors_vars.neighbors[neighborIndex].addr_16b.type           = ADDR_NONE; // to save RAM
-!    neighbors_vars.neighbors[neighborIndex].addr_64b.type             = ADDR_NONE;
-!    //neighbors_vars.neighbors[neighborIndex].addr_128b.type          = ADDR_NONE; // to save RAM
-!    neighbors_vars.neighbors[neighborIndex].DAGrank                   = DEFAULTDAGRANK;
-!    neighbors_vars.neighbors[neighborIndex].rssi                      = 0;
-!    neighbors_vars.neighbors[neighborIndex].numRx                     = 0;
-!    neighbors_vars.neighbors[neighborIndex].numTx                     = 0;
-!    neighbors_vars.neighbors[neighborIndex].numTxACK                  = 0;
-!    neighbors_vars.neighbors[neighborIndex].asn.bytes0and1            = 0;
-!    neighbors_vars.neighbors[neighborIndex].asn.bytes2and3            = 0;
-!    neighbors_vars.neighbors[neighborIndex].asn.byte4                 = 0;
-! }
-! 
-! //=========================== helpers =========================================
-! 
-! bool isThisRowMatching(open_addr_t* address, uint8_t rowNumber) {
-!    switch (address->type) {
-!       case ADDR_64B:
-!          return neighbors_vars.neighbors[rowNumber].used &&
-!                 packetfunctions_sameAddress(address,&neighbors_vars.neighbors[rowNumber].addr_64b);
-!       default:
-!          openserial_printCritical(COMPONENT_NEIGHBORS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)address->type,
-!                                (errorparameter_t)3);
-!          return FALSE;
-!    }
-! }
---- 1,693 ----
-! #include "openwsn.h"
-! #include "neighbors.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "idmanager.h"
-! #include "openserial.h"
-! #include "IEEE802154E.h"
-! 
-! //=========================== variables =======================================
-! 
-! neighbors_vars_t neighbors_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void registerNewNeighbor(
-!         open_addr_t* neighborID,
-!         int8_t       rssi,
-!         asn_t*       asnTimestamp,
-!         bool         joinPrioPresent,
-!         uint8_t      joinPrio
-!      );
-! bool isNeighbor(open_addr_t* neighbor);
-! void removeNeighbor(uint8_t neighborIndex);
-! bool isThisRowMatching(
-!         open_addr_t* address,
-!         uint8_t      rowNumber
-!      );
-! 
-! //=========================== public ==========================================
-! 
-! /**
-! \brief Initializes this module.
-! */
-! void neighbors_init(void) {
-!    
-!    // clear module variables
-!    memset(&neighbors_vars,0,sizeof(neighbors_vars_t));
-!    
-!    // set myDAGrank
-!    if (idmanager_getIsDAGroot()==TRUE) {
-!       neighbors_vars.myDAGrank=0;
-!    } else {
-!       neighbors_vars.myDAGrank=DEFAULTDAGRANK;
-!    }
-! }
-! 
-! //===== getters
-! 
-! /**
-! \brief Retrieve this mote's current DAG rank.
-! 
-! \returns This mote's current DAG rank.
-! */
-! dagrank_t neighbors_getMyDAGrank(void) {
-!    return neighbors_vars.myDAGrank;
-! }
-! 
-! /**
-! \brief Retrieve the number of neighbors this mote's currently knows of.
-! 
-! \returns The number of neighbors this mote's currently knows of.
-! */
-! uint8_t neighbors_getNumNeighbors(void) {
-!    uint8_t i;
-!    uint8_t returnVal;
-!    
-!    returnVal=0;
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (neighbors_vars.neighbors[i].used==TRUE) {
-!          returnVal++;
-!       }
-!    }
-!    return returnVal;
-! }
-! 
-! /**
-! \brief Retrieve my preferred parent's EUI64 address.
-! 
-! \param[out] addressToWrite Where to write the preferred parent's address to.
-! */
-! bool neighbors_getPreferredParentEui64(open_addr_t* addressToWrite) {
-!    uint8_t   i;
-!    bool      foundPreferred;
-!    uint8_t   numNeighbors;
-!    dagrank_t minRankVal;
-!    uint8_t   minRankIdx;
-!    
-!    addressToWrite->type = ADDR_NONE;
-!    
-!    foundPreferred       = FALSE;
-!    numNeighbors         = 0;
-!    minRankVal           = MAXDAGRANK;
-!    minRankIdx           = MAXNUMNEIGHBORS+1;
-!    
-!    //===== step 1. Try to find preferred parent
-!    for (i=0; i<MAXNUMNEIGHBORS; i++) {
-!       if (neighbors_vars.neighbors[i].used==TRUE){
-!          if (neighbors_vars.neighbors[i].parentPreference==MAXPREFERENCE) {
-!             memcpy(addressToWrite,&(neighbors_vars.neighbors[i].addr_64b),sizeof(open_addr_t));
-!             addressToWrite->type=ADDR_64B;
-!             foundPreferred=TRUE;
-!          }
-!          // identify neighbor with lowest rank
-!          if (neighbors_vars.neighbors[i].DAGrank < minRankVal) {
-!             minRankVal=neighbors_vars.neighbors[i].DAGrank;
-!             minRankIdx=i;
-!          }
-!          numNeighbors++;
-!       }
-!    }
-!    
-!    //===== step 2. (backup) Promote neighbor with min rank to preferred parent
-!    if (foundPreferred==FALSE && numNeighbors > 0){
-!       // promote neighbor
-!       neighbors_vars.neighbors[minRankIdx].parentPreference       = MAXPREFERENCE;
-!       neighbors_vars.neighbors[minRankIdx].stableNeighbor         = TRUE;
-!       neighbors_vars.neighbors[minRankIdx].switchStabilityCounter = 0;
-!       // return its address
-!       memcpy(addressToWrite,&(neighbors_vars.neighbors[minRankIdx].addr_64b),sizeof(open_addr_t));
-!       addressToWrite->type=ADDR_64B;
-!       foundPreferred=TRUE;         
-!    }
-!    
-!    return foundPreferred;
-! }
-! 
-! /**
-! \brief Find neighbor to which to send KA.
-! 
-! This function iterates through the neighbor table and identifies the neighbor
-! we need to send a KA to, if any. This neighbor satisfies the following
-! conditions:
-! - it is one of our preferred parents
-! - we haven't heard it for over KATIMEOUT
-! 
-! \returns A pointer to the neighbor's address, or NULL if no KA is needed.
-! */
-! open_addr_t* neighbors_getKANeighbor(void) {
-!    uint8_t         i;
-!    uint16_t        timeSinceHeard;
-!    open_addr_t*    addrPreferred;
-!    open_addr_t*    addrOther;
-!    
-!    // initialize
-!    addrPreferred = NULL;
-!    addrOther     = NULL;
-!    
-!    // scan through the neighbor table, and populate addrPreferred and addrOther
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (neighbors_vars.neighbors[i].used==1) {
-!          timeSinceHeard = ieee154e_asnDiff(&neighbors_vars.neighbors[i].asn);
-!          if (timeSinceHeard>KATIMEOUT) {
-!             // this neighbor needs to be KA'ed to
-!             if (neighbors_vars.neighbors[i].parentPreference==MAXPREFERENCE) {
-!                // its a preferred parent
-!                addrPreferred = &(neighbors_vars.neighbors[i].addr_64b);
-!             } else {
-!                // its not a preferred parent
-!                // Note: commented out since policy is not to KA to non-preferred parents
-!                // addrOther =     &(neighbors_vars.neighbors[i].addr_64b);
-!             }
-!          }
-!       }
-!    }
-!    
-!    // return the addr of the most urgent KA to send:
-!    // - if available, preferred parent
-!    // - if not, non preferred parent
-!    if        (addrPreferred!=NULL) {
-!       return addrPreferred;
-!    } else if (addrOther!=NULL) {
-!       return addrOther;
-!    } else {
-!       return NULL;
-!    }
-! }
-! 
-! 
-! //===== interrogators
-! 
-! /**
-! \brief Indicate whether some neighbor is a stable neighbor
-! 
-! \param[in] address The address of the neighbor, a full 128-bit IPv6 addres.
-! 
-! \returns TRUE if that neighbor is stable, FALSE otherwise.
-! */
-! bool neighbors_isStableNeighbor(open_addr_t* address) {
-!    uint8_t     i;
-!    open_addr_t temp_addr_64b;
-!    open_addr_t temp_prefix;
-!    bool        returnVal;
-!    
-!    // by default, not stable
-!    returnVal  = FALSE;
-!    
-!    // but neighbor's IPv6 address in prefix and EUI64
-!    switch (address->type) {
-!       case ADDR_128B:
-!          packetfunctions_ip128bToMac64b(address,&temp_prefix,&temp_addr_64b);
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_NEIGHBORS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)address->type,
-!                                (errorparameter_t)0);
-!          return returnVal;
-!    }
-!    
-!    // iterate through neighbor table
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (isThisRowMatching(&temp_addr_64b,i) && neighbors_vars.neighbors[i].stableNeighbor==TRUE) {
-!          returnVal  = TRUE;
-!          break;
-!       }
-!    }
-!    
-!    return returnVal;
-! }
-! 
-! /**
-! \brief Indicate whether some neighbor is a preferred neighbor.
-! 
-! \param[in] address The EUI64 address of the neighbor.
-! 
-! \returns TRUE if that neighbor is preferred, FALSE otherwise.
-! */
-! bool neighbors_isPreferredParent(open_addr_t* address) {
-!    uint8_t i;
-!    bool    returnVal;
-!    
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    
-!    // by default, not preferred
-!    returnVal = FALSE;
-!    
-!    // iterate through neighbor table
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (isThisRowMatching(address,i) && neighbors_vars.neighbors[i].parentPreference==MAXPREFERENCE) {
-!          returnVal  = TRUE;
-!          break;
-!       }
-!    }
-!    
-!    ENABLE_INTERRUPTS();
-!    return returnVal;
-! }
-! 
-! /**
-! \brief Indicate whether some neighbor has a lower DAG rank that me.
-! 
-! \param[in] index The index of that neighbor in the neighbor table.
-! 
-! \returns TRUE if that neighbor has a lower DAG rank than me, FALSE otherwise.
-! */
-! bool neighbors_isNeighborWithLowerDAGrank(uint8_t index) {
-!    bool    returnVal;
-!    
-!    if (neighbors_vars.neighbors[index].used==TRUE &&
-!        neighbors_vars.neighbors[index].DAGrank < neighbors_getMyDAGrank()) { 
-!       returnVal = TRUE;
-!    } else {
-!       returnVal = FALSE;
-!    }
-!    
-!    return returnVal;
-! }
-! 
-! 
-! /**
-! \brief Indicate whether some neighbor has a lower DAG rank that me.
-! 
-! \param[in] index The index of that neighbor in the neighbor table.
-! 
-! \returns TRUE if that neighbor has a lower DAG rank than me, FALSE otherwise.
-! */
-! bool neighbors_isNeighborWithHigherDAGrank(uint8_t index) {
-!    bool    returnVal;
-!    
-!    if (neighbors_vars.neighbors[index].used==TRUE &&
-!        neighbors_vars.neighbors[index].DAGrank >= neighbors_getMyDAGrank()) { 
-!       returnVal = TRUE;
-!    } else {
-!       returnVal = FALSE;
-!    }
-!    
-!    return returnVal;
-! }
-! 
-! //===== updating neighbor information
-! 
-! /**
-! \brief Indicate some (non-ACK) packet was received from a neighbor.
-! 
-! This function should be called for each received (non-ACK) packet so neighbor
-! statistics in the neighbor table can be updated.
-! 
-! The fields which are updated are:
-! - numRx
-! - rssi
-! - asn
-! - stableNeighbor
-! - switchStabilityCounter
-! 
-! \param[in] l2_src MAC source address of the packet, i.e. the neighbor who sent
-!    the packet just received.
-! \param[in] rssi   RSSI with which this packet was received.
-! \param[in] asnTs  ASN at which this packet was received.
-! */
-! void neighbors_indicateRx(open_addr_t* l2_src,
-!                           int8_t       rssi,
-!                           asn_t*       asnTs,
-!                           bool         joinPrioPresent,
-!                           uint8_t      joinPrio) {
-!    uint8_t i;
-!    bool    newNeighbor;
-!    
-!    // update existing neighbor
-!    newNeighbor = TRUE;
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (isThisRowMatching(l2_src,i)) {
-!          
-!          // this is not a new neighbor
-!          newNeighbor = FALSE;
-!          
-!          // update numRx, rssi, asn
-!          neighbors_vars.neighbors[i].numRx++;
-!          neighbors_vars.neighbors[i].rssi=rssi;
-!          memcpy(&neighbors_vars.neighbors[i].asn,asnTs,sizeof(asn_t));
-!          //update jp
-!          if (joinPrioPresent==TRUE){
-!             neighbors_vars.neighbors[i].joinPrio=joinPrio;
-!          }
-!          
-!          // update stableNeighbor, switchStabilityCounter
-!          if (neighbors_vars.neighbors[i].stableNeighbor==FALSE) {
-!             if (neighbors_vars.neighbors[i].rssi>BADNEIGHBORMAXRSSI) {
-!                neighbors_vars.neighbors[i].switchStabilityCounter++;
-!                if (neighbors_vars.neighbors[i].switchStabilityCounter>=SWITCHSTABILITYTHRESHOLD) {
-!                   neighbors_vars.neighbors[i].switchStabilityCounter=0;
-!                   neighbors_vars.neighbors[i].stableNeighbor=TRUE;
-!                }
-!             } else {
-!                neighbors_vars.neighbors[i].switchStabilityCounter=0;
-!             }
-!          } else if (neighbors_vars.neighbors[i].stableNeighbor==TRUE) {
-!             if (neighbors_vars.neighbors[i].rssi<GOODNEIGHBORMINRSSI) {
-!                neighbors_vars.neighbors[i].switchStabilityCounter++;
-!                if (neighbors_vars.neighbors[i].switchStabilityCounter>=SWITCHSTABILITYTHRESHOLD) {
-!                   neighbors_vars.neighbors[i].switchStabilityCounter=0;
-!                    neighbors_vars.neighbors[i].stableNeighbor=FALSE;
-!                }
-!             } else {
-!                neighbors_vars.neighbors[i].switchStabilityCounter=0;
-!             }
-!          }
-!          
-!          // stop looping
-!          break;
-!       }
-!    }
-!    
-!    // register new neighbor
-!    if (newNeighbor==TRUE) {
-!       registerNewNeighbor(l2_src, rssi, asnTs, joinPrioPresent,joinPrio);
-!    }
-! }
-! 
-! /**
-! \brief Indicate some packet was sent to some neighbor.
-! 
-! This function should be called for each transmitted (non-ACK) packet so
-! neighbor statistics in the neighbor table can be updated.
-! 
-! The fields which are updated are:
-! - numTx
-! - numTxACK
-! - asn
-! 
-! \param[in] l2_dest MAC destination address of the packet, i.e. the neighbor
-!    who I just sent the packet to.
-! \param[in] numTxAttempts Number of transmission attempts to this neighbor.
-! \param[in] was_finally_acked TRUE iff the packet was ACK'ed by the neighbor
-!    on final transmission attempt.
-! \param[in] asnTs ASN of the last transmission attempt.
-! */
-! void neighbors_indicateTx(open_addr_t* l2_dest,
-!                           uint8_t      numTxAttempts,
-!                           bool         was_finally_acked,
-!                           asn_t*       asnTs) {
-!    uint8_t i;
-!    // don't run through this function if packet was sent to broadcast address
-!    if (packetfunctions_isBroadcastMulticast(l2_dest)==TRUE) {
-!       return;
-!    }
-!    
-!    // loop through neighbor table
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (isThisRowMatching(l2_dest,i)) {
-!          // handle roll-over case
-!         
-!           if (neighbors_vars.neighbors[i].numTx>(0xff-numTxAttempts)) {
-!               neighbors_vars.neighbors[i].numWraps++; //counting the number of times that tx wraps.
-!               neighbors_vars.neighbors[i].numTx/=2;
-!               neighbors_vars.neighbors[i].numTxACK/=2;
-!            }
-!          // update statistics
-!         neighbors_vars.neighbors[i].numTx += numTxAttempts; 
-!         
-!         if (was_finally_acked==TRUE) {
-!             neighbors_vars.neighbors[i].numTxACK++;
-!             memcpy(&neighbors_vars.neighbors[i].asn,asnTs,sizeof(asn_t));
-!         }
-!         break;
-!       }
-!    }
-! }
-! 
-! /**
-! \brief Indicate I just received a RPL DIO from a neighbor.
-! 
-! This function should be called for each received a DIO is received so neighbor
-! routing information in the neighbor table can be updated.
-! 
-! The fields which are updated are:
-! - DAGrank
-! 
-! \param[in] msg The received message with msg->payload pointing to the DIO
-!    header.
-! */
-! void neighbors_indicateRxDIO(OpenQueueEntry_t* msg) {
-!    uint8_t          i;
-!   
-!    // take ownership over the packet
-!    msg->owner = COMPONENT_NEIGHBORS;
-!    
-!    // update rank of that neighbor in table
-!    neighbors_vars.dio = (icmpv6rpl_dio_ht*)(msg->payload);
-!    if (isNeighbor(&(msg->l2_nextORpreviousHop))==TRUE) {
-!       for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!          if (isThisRowMatching(&(msg->l2_nextORpreviousHop),i)) {
-!             if (
-!                   neighbors_vars.dio->rank > neighbors_vars.neighbors[i].DAGrank &&
-!                   neighbors_vars.dio->rank - neighbors_vars.neighbors[i].DAGrank >(DEFAULTLINKCOST*2*MINHOPRANKINCREASE)
-!                ) {
-!                 // the new DAGrank looks suspiciously high, only increment a bit
-!                 neighbors_vars.neighbors[i].DAGrank += (DEFAULTLINKCOST*2*MINHOPRANKINCREASE);
-!                 openserial_printError(COMPONENT_NEIGHBORS,ERR_LARGE_DAGRANK,
-!                                (errorparameter_t)neighbors_vars.dio->rank,
-!                                (errorparameter_t)neighbors_vars.neighbors[i].DAGrank);
-!             } else {
-!                neighbors_vars.neighbors[i].DAGrank = neighbors_vars.dio->rank;
-!             }
-!             break;
-!          }
-!       }
-!    } 
-!    // update my routing information
-!    neighbors_updateMyDAGrankAndNeighborPreference(); 
-! }
-! 
-! //===== write addresses
-! 
-! /**
-! \brief Write the 64-bit address of some neighbor to some location.
-! 
-! */
-! 
-! void  neighbors_getNeighbor(open_addr_t* address,uint8_t addr_type,uint8_t index){
-!    switch(addr_type) {
-!       case ADDR_64B:
-!          memcpy(&(address->addr_64b),&(neighbors_vars.neighbors[index].addr_64b.addr_64b),LENGTH_ADDR64b);
-!          address->type=ADDR_64B;
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_NEIGHBORS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)addr_type,
-!                                (errorparameter_t)1);
-!          break; 
-!    }
-! }
-! 
-! 
-! //===== managing routing info
-! 
-! /**
-! \brief Update my DAG rank and neighbor preference.
-! 
-! Call this function whenever some data is changed that could cause this mote's
-! routing decisions to change. Examples are:
-! - I received a DIO which updated by neighbor table. If this DIO indicated a
-!   very low DAGrank, I may want to change by routing parent.
-! - I became a DAGroot, so my DAGrank should be 0.
-! */
-! void neighbors_updateMyDAGrankAndNeighborPreference(void) {
-!    uint8_t   i;
-!    uint16_t  rankIncrease;
-!    uint32_t  tentativeDAGrank; // 32-bit since is used to sum
-!    uint8_t   prefParentIdx;
-!    bool      prefParentFound;
-!    
-!    // if I'm a DAGroot, my DAGrank is always 0
-!    if ((idmanager_getIsDAGroot())==TRUE) {
-!       neighbors_vars.myDAGrank=0;
-!       return;
-!    }
-!    
-!    // reset my DAG rank to max value. May be lowered below.
-!    neighbors_vars.myDAGrank  = MAXDAGRANK;
-!    
-!    // by default, I haven't found a preferred parent
-!    prefParentFound           = FALSE;
-!    prefParentIdx             = 0;
-!    
-!    // loop through neighbor table, update myDAGrank
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (neighbors_vars.neighbors[i].used==TRUE) {
-!          // reset parent preference
-!          neighbors_vars.neighbors[i].parentPreference=0;
-!          // calculate link cost to this neighbor
-!          if (neighbors_vars.neighbors[i].numTxACK==0) {
-!             rankIncrease = DEFAULTLINKCOST*2*MINHOPRANKINCREASE;
-!          } else {
-!         	//6TiSCH minimal draft using OF0 for rank computation
-!             rankIncrease = (uint16_t)((((float)neighbors_vars.neighbors[i].numTx)/((float)neighbors_vars.neighbors[i].numTxACK))*2*MINHOPRANKINCREASE);
-!          }
-!          tentativeDAGrank = neighbors_vars.neighbors[i].DAGrank+rankIncrease;
-!          if ( tentativeDAGrank<neighbors_vars.myDAGrank &&
-!               tentativeDAGrank<MAXDAGRANK) {
-!             // found better parent, lower my DAGrank
-!             neighbors_vars.myDAGrank   = tentativeDAGrank;
-!             prefParentFound            = TRUE;
-!             prefParentIdx              = i;
-!          }
-!       }
-!    } 
-!    
-!    // update preferred parent
-!    if (prefParentFound) {
-!       neighbors_vars.neighbors[prefParentIdx].parentPreference       = MAXPREFERENCE;
-!       neighbors_vars.neighbors[prefParentIdx].stableNeighbor         = TRUE;
-!       neighbors_vars.neighbors[prefParentIdx].switchStabilityCounter = 0;
-!    }
-! }
-! 
-! //===== debug
-! 
-! /**
-! \brief Triggers this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_neighbors(void) {
-!    debugNeighborEntry_t temp;
-!    neighbors_vars.debugRow=(neighbors_vars.debugRow+1)%MAXNUMNEIGHBORS;
-!    temp.row=neighbors_vars.debugRow;
-!    temp.neighborEntry=neighbors_vars.neighbors[neighbors_vars.debugRow];
-!    openserial_printStatus(STATUS_NEIGHBORS,(uint8_t*)&temp,sizeof(debugNeighborEntry_t));
-!    return TRUE;
-! }
-! 
-! void debugNetPrint_neighbors(netDebugNeigborEntry_t* out){
-!    uint8_t idxIn;
-!    uint8_t idxOut;
-!    
-!    idxOut=0;
-!    for (idxIn=0;idxIn<MAXNUMNEIGHBORS;idxIn++) {
-!       if(neighbors_vars.neighbors[idxIn].used) {
-!          out[idxOut].last_addr_byte = neighbors_vars.neighbors[idxIn].addr_64b.addr_64b[7];//last byte of the address; poipoi could be [0]; endianness
-!          out[idxOut].rssi = neighbors_vars.neighbors[idxIn].rssi;
-!          out[idxOut].parentPreference = neighbors_vars.neighbors[idxIn].parentPreference;
-!          out[idxOut].DAGrank = neighbors_vars.neighbors[idxIn].DAGrank;
-!          memcpy(
-!             &out[idxOut].asn,
-!             &neighbors_vars.neighbors[idxIn].asn.bytes0and1,
-!             sizeof(neighbors_vars.neighbors[idxIn].asn.bytes0and1)
-!          );
-!          idxOut++;
-!       }
-!    }  
-! }
-! 
-! //=========================== private =========================================
-! 
-! void registerNewNeighbor(open_addr_t* address,
-!                          int8_t       rssi,
-!                          asn_t*       asnTimestamp,
-!                          bool         joinPrioPresent,
-!                          uint8_t      joinPrio) {
-!    uint8_t  i,j;
-!    bool     iHaveAPreferedParent;
-!    // filter errors
-!    if (address->type!=ADDR_64B) {
-!       openserial_printCritical(COMPONENT_NEIGHBORS,ERR_WRONG_ADDR_TYPE,
-!                             (errorparameter_t)address->type,
-!                             (errorparameter_t)2);
-!       return;
-!    }
-!    // add this neighbor
-!    if (isNeighbor(address)==FALSE) {
-!       i=0;
-!       while(i<MAXNUMNEIGHBORS) {
-!          if (neighbors_vars.neighbors[i].used==FALSE) {
-!             // add this neighbor
-!             neighbors_vars.neighbors[i].used                   = TRUE;
-!             neighbors_vars.neighbors[i].parentPreference       = 0;
-!             // neighbors_vars.neighbors[i].stableNeighbor         = FALSE;
-!             // Note: all new neighbors are consider stable
-!             neighbors_vars.neighbors[i].stableNeighbor         = TRUE;
-!             neighbors_vars.neighbors[i].switchStabilityCounter = 0;
-!             memcpy(&neighbors_vars.neighbors[i].addr_64b,address,sizeof(open_addr_t));
-!             neighbors_vars.neighbors[i].DAGrank                = DEFAULTDAGRANK;
-!             neighbors_vars.neighbors[i].rssi                   = rssi;
-!             neighbors_vars.neighbors[i].numRx                  = 1;
-!             neighbors_vars.neighbors[i].numTx                  = 0;
-!             neighbors_vars.neighbors[i].numTxACK               = 0;
-!             memcpy(&neighbors_vars.neighbors[i].asn,asnTimestamp,sizeof(asn_t));
-!             //update jp
-!             if (joinPrioPresent==TRUE){
-!                neighbors_vars.neighbors[i].joinPrio=joinPrio;
-!             }
-!             
-!             
-!             // do I already have a preferred parent ? -- TODO change to use JP
-!             iHaveAPreferedParent = FALSE;
-!             for (j=0;j<MAXNUMNEIGHBORS;j++) {
-!                if (neighbors_vars.neighbors[j].parentPreference==MAXPREFERENCE) {
-!                   iHaveAPreferedParent = TRUE;
-!                }
-!             }
-!             // if I have none, and I'm not DAGroot, the new neighbor is my preferred
-!             if (iHaveAPreferedParent==FALSE && idmanager_getIsDAGroot()==FALSE) {      
-!                neighbors_vars.neighbors[i].parentPreference     = MAXPREFERENCE;
-!             }
-!             break;
-!          }
-!          i++;
-!       }
-!       if (i==MAXNUMNEIGHBORS) {
-!          openserial_printError(COMPONENT_NEIGHBORS,ERR_NEIGHBORS_FULL,
-!                                (errorparameter_t)MAXNUMNEIGHBORS,
-!                                (errorparameter_t)0);
-!          return;
-!       }
-!    }
-!    
-! }
-! 
-! bool isNeighbor(open_addr_t* neighbor) {
-!    uint8_t i=0;
-!    for (i=0;i<MAXNUMNEIGHBORS;i++) {
-!       if (isThisRowMatching(neighbor,i)) {
-!          return TRUE;
-!       }
-!    }
-!    return FALSE;
-! }
-! 
-! void removeNeighbor(uint8_t neighborIndex) {
-!    neighbors_vars.neighbors[neighborIndex].used                      = FALSE;
-!    neighbors_vars.neighbors[neighborIndex].parentPreference          = 0;
-!    neighbors_vars.neighbors[neighborIndex].stableNeighbor            = FALSE;
-!    neighbors_vars.neighbors[neighborIndex].switchStabilityCounter    = 0;
-!    //neighbors_vars.neighbors[neighborIndex].addr_16b.type           = ADDR_NONE; // to save RAM
-!    neighbors_vars.neighbors[neighborIndex].addr_64b.type             = ADDR_NONE;
-!    //neighbors_vars.neighbors[neighborIndex].addr_128b.type          = ADDR_NONE; // to save RAM
-!    neighbors_vars.neighbors[neighborIndex].DAGrank                   = DEFAULTDAGRANK;
-!    neighbors_vars.neighbors[neighborIndex].rssi                      = 0;
-!    neighbors_vars.neighbors[neighborIndex].numRx                     = 0;
-!    neighbors_vars.neighbors[neighborIndex].numTx                     = 0;
-!    neighbors_vars.neighbors[neighborIndex].numTxACK                  = 0;
-!    neighbors_vars.neighbors[neighborIndex].asn.bytes0and1            = 0;
-!    neighbors_vars.neighbors[neighborIndex].asn.bytes2and3            = 0;
-!    neighbors_vars.neighbors[neighborIndex].asn.byte4                 = 0;
-! }
-! 
-! //=========================== helpers =========================================
-! 
-! bool isThisRowMatching(open_addr_t* address, uint8_t rowNumber) {
-!    switch (address->type) {
-!       case ADDR_64B:
-!          return neighbors_vars.neighbors[rowNumber].used &&
-!                 packetfunctions_sameAddress(address,&neighbors_vars.neighbors[rowNumber].addr_64b);
-!       default:
-!          openserial_printCritical(COMPONENT_NEIGHBORS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)address->type,
-!                                (errorparameter_t)3);
-!          return FALSE;
-!    }
-! }
-diff -crB openwsn/02b-MAChigh/neighbors.h ../../../sys/net/openwsn/02b-MAChigh/neighbors.h
-*** openwsn/02b-MAChigh/neighbors.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02b-MAChigh/neighbors.h	Wed Jan 15 13:48:26 2014
-***************
-*** 1,103 ****
-! #ifndef __NEIGHBORS_H
-! #define __NEIGHBORS_H
-! 
-! /**
-! \addtogroup MAChigh
-! \{
-! \addtogroup Neighbors
-! \{
-! */
-! #include "openwsn.h"
-! #include "icmpv6rpl.h"
-! 
-! //=========================== define ==========================================
-! 
-! #define MAXNUMNEIGHBORS           10
-! #define MAXPREFERENCE             2
-! #define BADNEIGHBORMAXRSSI        -80 //dBm
-! #define GOODNEIGHBORMINRSSI       -90 //dBm
-! #define SWITCHSTABILITYTHRESHOLD  3
-! #define DEFAULTLINKCOST           15
-! 
-! #define MAXDAGRANK                0xffff
-! #define DEFAULTDAGRANK            MAXDAGRANK
-! 
-! //=========================== typedef =========================================
-! 
-! PRAGMA(pack(1));
-! typedef struct {
-!    bool             used;
-!    uint8_t          parentPreference;
-!    bool             stableNeighbor;
-!    uint8_t          switchStabilityCounter;
-!    open_addr_t      addr_64b;
-!    dagrank_t        DAGrank;
-!    int8_t           rssi;
-!    uint8_t          numRx;
-!    uint8_t          numTx;
-!    uint8_t          numTxACK;
-!    uint8_t          numWraps;//number of times the tx counter wraps. can be removed if memory is a restriction. also check openvisualizer then.
-!    asn_t            asn;
-! } neighborRow_t;
-! PRAGMA(pack());
-! 
-! PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         row;
-!    neighborRow_t   neighborEntry;
-! } debugNeighborEntry_t;
-! PRAGMA(pack());
-! 
-! PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         last_addr_byte;   // last byte of the neighbor's address
-!    int8_t          rssi;
-!    uint8_t         parentPreference;
-!    dagrank_t       DAGrank;
-!    uint16_t        asn; 
-! } netDebugNeigborEntry_t;
-! PRAGMA(pack());
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void          neighbors_init();
-! // getters
-! dagrank_t     neighbors_getMyDAGrank();
-! uint8_t       neighbors_getNumNeighbors();
-! bool          neighbors_getPreferredParentEui64(open_addr_t* addressToWrite);
-! open_addr_t*  neighbors_getKANeighbor();
-! // interrogators
-! bool          neighbors_isStableNeighbor(open_addr_t* address);
-! bool          neighbors_isPreferredParent(open_addr_t* address);
-! bool          neighbors_isNeighborWithLowerDAGrank(uint8_t index);
-! bool          neighbors_isNeighborWithHigherDAGrank(uint8_t index);
-! 
-! // updating neighbor information
-! void          neighbors_indicateRx(
-!                    open_addr_t*        l2_src,
-!                    int8_t              rssi,
-!                    asn_t*              asnTimestamp
-!               );
-! void          neighbors_indicateTx(
-!                    open_addr_t*        dest,
-!                    uint8_t             numTxAttempts,
-!                    bool                was_finally_acked,
-!                    asn_t*              asnTimestamp
-!               );
-! void          neighbors_indicateRxDIO(OpenQueueEntry_t* msg);
-! // get addresses
-! void          neighbors_getNeighbor(open_addr_t* address,uint8_t addr_type,uint8_t index);
-! // managing routing info
-! void          neighbors_updateMyDAGrankAndNeighborPreference();
-! // debug
-! bool          debugPrint_neighbors();
-! void          debugNetPrint_neighbors(netDebugNeigborEntry_t* schlist);
-!           
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,116 ----
-! #ifndef __NEIGHBORS_H
-! #define __NEIGHBORS_H
-! 
-! /**
-! \addtogroup MAChigh
-! \{
-! \addtogroup Neighbors
-! \{
-! */
-! #include "openwsn.h"
-! #include "icmpv6rpl.h"
-! 
-! //=========================== define ==========================================
-! 
-! #define MAXNUMNEIGHBORS           10
-! #define MAXPREFERENCE             2
-! #define BADNEIGHBORMAXRSSI        -80 //dBm
-! #define GOODNEIGHBORMINRSSI       -90 //dBm
-! #define SWITCHSTABILITYTHRESHOLD  3
-! #define DEFAULTLINKCOST           15
-! 
-! #define MAXDAGRANK                0xffff
-! #define DEFAULTDAGRANK            MAXDAGRANK
-! #define MINHOPRANKINCREASE        256  //default value in RPL and Minimal 6TiSCH draft
-! 
-! //=========================== typedef =========================================
-! 
-! //PRAGMA(pack(1));
-! typedef struct {
-!    bool             used;
-!    uint8_t          parentPreference;
-!    bool             stableNeighbor;
-!    uint8_t          switchStabilityCounter;
-!    open_addr_t      addr_64b;
-!    dagrank_t        DAGrank;
-!    int8_t           rssi;
-!    uint8_t          numRx;
-!    uint8_t          numTx;
-!    uint8_t          numTxACK;
-!    uint8_t          numWraps;//number of times the tx counter wraps. can be removed if memory is a restriction. also check openvisualizer then.
-!    asn_t            asn;
-!    uint8_t          joinPrio;
-! } neighborRow_t;
-! //PRAGMA(pack());
-! 
-! //PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         row;
-!    neighborRow_t   neighborEntry;
-! } debugNeighborEntry_t;
-! //PRAGMA(pack());
-! 
-! //PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         last_addr_byte;   // last byte of the neighbor's address
-!    int8_t          rssi;
-!    uint8_t         parentPreference;
-!    dagrank_t       DAGrank;
-!    uint16_t        asn; 
-! } netDebugNeigborEntry_t;
-! //PRAGMA(pack());
-! 
-! //=========================== module variables ================================
-!    
-! typedef struct {
-!    neighborRow_t        neighbors[MAXNUMNEIGHBORS];
-!    dagrank_t            myDAGrank;
-!    uint8_t              debugRow;
-!    icmpv6rpl_dio_ht*    dio; //keep it global to be able to debug correctly.
-! } neighbors_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! void          neighbors_init(void);
-! // getters
-! dagrank_t     neighbors_getMyDAGrank(void);
-! uint8_t       neighbors_getNumNeighbors(void);
-! bool          neighbors_getPreferredParentEui64(open_addr_t* addressToWrite);
-! open_addr_t*  neighbors_getKANeighbor(void);
-! 
-! // interrogators
-! bool          neighbors_isStableNeighbor(open_addr_t* address);
-! bool          neighbors_isPreferredParent(open_addr_t* address);
-! bool          neighbors_isNeighborWithLowerDAGrank(uint8_t index);
-! bool          neighbors_isNeighborWithHigherDAGrank(uint8_t index);
-! 
-! // updating neighbor information
-! void          neighbors_indicateRx(
-!                    open_addr_t*        l2_src,
-!                    int8_t              rssi,
-!                    asn_t*              asnTimestamp,
-!                    bool                joinPrioPresent,
-!                    uint8_t             joinPrio
-!               );
-! 
-! void          neighbors_indicateTx(
-!                    open_addr_t*        dest,
-!                    uint8_t             numTxAttempts,
-!                    bool                was_finally_acked,
-!                    asn_t*              asnTimestamp
-!               );
-! void          neighbors_indicateRxDIO(OpenQueueEntry_t* msg);
-! // get addresses
-! void          neighbors_getNeighbor(open_addr_t* address,uint8_t addr_type,uint8_t index);
-! // managing routing info
-! void          neighbors_updateMyDAGrankAndNeighborPreference(void);
-! // debug
-! bool          debugPrint_neighbors(void);
-! void          debugNetPrint_neighbors(netDebugNeigborEntry_t* schlist);
-!           
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/02b-MAChigh/res.c ../../../sys/net/openwsn/02b-MAChigh/res.c
-*** openwsn/02b-MAChigh/res.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02b-MAChigh/res.c	Wed Jan 15 13:48:26 2014
-***************
-*** 1,355 ****
-! #include "openwsn.h"
-! #include "res.h"
-! #include "openserial.h"
-! #include "openqueue.h"
-! #include "neighbors.h"
-! #include "IEEE802154E.h"
-! #include "iphc.h"
-! #include "packetfunctions.h"
-! #include "openrandom.h"
-! #include "scheduler.h"
-! #include "opentimers.h"
-! #include "debugpins.h"
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    uint16_t        periodMaintenance;
-!    bool            busySendingKa;        // TRUE when busy sending a keep-alive
-!    bool            busySendingAdv;       // TRUE when busy sending an advertisement
-!    uint8_t         dsn;                  // current data sequence number
-!    uint8_t         MacMgtTaskCounter;    // counter to determine what management task to do
-!    opentimer_id_t  timerId;
-! } res_vars_t;
-! 
-! res_vars_t res_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t res_send_internal(OpenQueueEntry_t* msg);
-! void    sendAdv();
-! void    sendKa();
-! void    res_timer_cb();
-! 
-! //=========================== public ==========================================
-! 
-! void res_init() {
-!    res_vars.periodMaintenance = 872+(openrandom_get16b()&0xff); // fires every 1 sec on average
-!    res_vars.busySendingKa     = FALSE;
-!    res_vars.busySendingAdv    = FALSE;
-!    res_vars.dsn               = 0;
-!    res_vars.MacMgtTaskCounter = 0;
-!    res_vars.timerId = opentimers_start(res_vars.periodMaintenance,
-!                                        TIMER_PERIODIC,TIME_MS,
-!                                        res_timer_cb);
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_myDAGrank() {
-!    uint8_t output=0;
-!    output = neighbors_getMyDAGrank();
-!    openserial_printStatus(STATUS_DAGRANK,(uint8_t*)&output,sizeof(uint8_t));
-!    return TRUE;
-! }
-! 
-! //======= from upper layer
-! 
-! error_t res_send(OpenQueueEntry_t *msg) {
-!    msg->owner        = COMPONENT_RES;
-!    msg->l2_frameType = IEEE154_TYPE_DATA;
-!    return res_send_internal(msg);
-! }
-! 
-! //======= from lower layer
-! 
-! void task_resNotifSendDone() {
-!    OpenQueueEntry_t* msg;
-!    // get recently-sent packet from openqueue
-!    msg = openqueue_resGetSentPacket();
-!    if (msg==NULL) {
-!       // log the error
-!       openserial_printCritical(COMPONENT_RES,ERR_NO_SENT_PACKET,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       // abort
-!       return;
-!    }
-!    // declare it as mine
-!    msg->owner = COMPONENT_RES;
-!    // indicate transmission (to update statistics)
-!    if (msg->l2_sendDoneError==E_SUCCESS) {
-!       neighbors_indicateTx(&(msg->l2_nextORpreviousHop),
-!                            msg->l2_numTxAttempts,
-!                            TRUE,
-!                            &msg->l2_asn);
-!    } else {
-!       neighbors_indicateTx(&(msg->l2_nextORpreviousHop),
-!                            msg->l2_numTxAttempts,
-!                            FALSE,
-!                            &msg->l2_asn);
-!    }
-!    // send the packet to where it belongs
-!    if (msg->creator == COMPONENT_RES) {
-!       if (msg->l2_frameType==IEEE154_TYPE_BEACON) {
-!          // this is a ADV
-!          
-!          // not busy sending ADV anymore
-!          res_vars.busySendingAdv = FALSE;
-!       } else {
-!          // this is a KA
-!          
-!          // not busy sending KA anymore
-!          res_vars.busySendingKa = FALSE;
-!       }
-!       // discard packets
-!       openqueue_freePacketBuffer(msg);
-!       // restart a random timer
-!       res_vars.periodMaintenance = 872+(openrandom_get16b()&0xff);
-!       opentimers_setPeriod(res_vars.timerId,
-!                            TIME_MS,
-!                            res_vars.periodMaintenance);
-!    } else {
-!       // send the rest up the stack
-!       iphc_sendDone(msg,msg->l2_sendDoneError);
-!    }
-! }
-! 
-! void task_resNotifReceive() {
-!    OpenQueueEntry_t* msg;
-!    
-!    // get received packet from openqueue
-!    msg = openqueue_resGetReceivedPacket();
-!    if (msg==NULL) {
-!       // log the error
-!       openserial_printCritical(COMPONENT_RES,ERR_NO_RECEIVED_PACKET,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       // abort
-!       return;
-!    }
-!    
-!    // declare it as mine
-!    msg->owner = COMPONENT_RES;
-!    
-!    // indicate reception (to update statistics)
-!    neighbors_indicateRx(&(msg->l2_nextORpreviousHop),
-!                         msg->l1_rssi,
-!                         &msg->l2_asn);
-!    
-!    // send the packet up the stack, if it qualifies
-!    switch (msg->l2_frameType) {
-!       case IEEE154_TYPE_BEACON:
-!       case IEEE154_TYPE_DATA:
-!       case IEEE154_TYPE_CMD:
-!          if (msg->length>0) {
-!             // send to upper layer
-!             iphc_receive(msg);
-!          } else {
-!             // free up the RAM
-!             openqueue_freePacketBuffer(msg);
-!          }
-!          break;
-!       case IEEE154_TYPE_ACK:
-!       default:
-!          // free the packet's RAM memory
-!          openqueue_freePacketBuffer(msg);
-!          // log the error
-!          openserial_printError(COMPONENT_RES,ERR_MSG_UNKNOWN_TYPE,
-!                                (errorparameter_t)msg->l2_frameType,
-!                                (errorparameter_t)0);
-!          break;
-!    }
-! }
-! 
-! //======= timer
-! 
-! /**
-! \brief Timer handlers which triggers MAC management task.
-! 
-! This function is called in task context by the scheduler after the RES timer
-! has fired. This timer is set to fire every second, on average.
-! 
-! The body of this function executes one of the MAC management task.
-! */
-! void timers_res_fired() {
-!    res_vars.MacMgtTaskCounter = (res_vars.MacMgtTaskCounter+1)%10;
-!    if (res_vars.MacMgtTaskCounter==0) {
-!       sendAdv(); // called every 10s
-!    } else {
-!       sendKa();  // called every second, except once every 10s
-!    }
-! }
-! 
-! //=========================== private =========================================
-! 
-! /**
-! \brief Transfer packet to MAC.
-! 
-! This function adds a IEEE802.15.4 header to the packet and leaves it the 
-! OpenQueue buffer. The very last thing it does is assigning this packet to the 
-! virtual component COMPONENT_RES_TO_IEEE802154E. Whenever it gets a change,
-! IEEE802154E will handle the packet.
-! 
-! \param [in] msg The packet to the transmitted
-! 
-! \returns E_SUCCESS iff successful.
-! */
-! error_t res_send_internal(OpenQueueEntry_t* msg) {
-!    // assign a number of retries
-!    if (packetfunctions_isBroadcastMulticast(&(msg->l2_nextORpreviousHop))==TRUE) {
-!       msg->l2_retriesLeft = 1;
-!    } else {
-!       msg->l2_retriesLeft = TXRETRIES;
-!    }
-!    // record this packet's dsn (for matching the ACK)
-!    msg->l2_dsn = res_vars.dsn++;
-!    // this is a new packet which I never attempted to send
-!    msg->l2_numTxAttempts = 0;
-!    // transmit with the default TX power
-!    msg->l1_txPower = TX_POWER;
-!    // record the location, in the packet, where the l2 payload starts
-!    msg->l2_payload = msg->payload;
-!    // add a IEEE802.15.4 header
-!    ieee802154_prependHeader(msg,
-!                             msg->l2_frameType,
-!                             IEEE154_SEC_NO_SECURITY,
-!                             msg->l2_dsn,
-!                             &(msg->l2_nextORpreviousHop)
-!                             );
-!    // reserve space for 2-byte CRC
-!    packetfunctions_reserveFooterSize(msg,2);
-!    // change owner to IEEE802154E fetches it from queue
-!    msg->owner  = COMPONENT_RES_TO_IEEE802154E;
-!    return E_SUCCESS;
-! }
-! 
-! /**
-! \brief Send an advertisement.
-! 
-! This is one of the MAC managament tasks. This function inlines in the
-! timers_res_fired() function, but is declared as a separate function for better
-! readability of the code.
-! */
-! port_INLINE void sendAdv() {
-!    OpenQueueEntry_t* adv;
-!    
-!    if (ieee154e_isSynch()==FALSE) {
-!       // I'm not sync'ed
-!       
-!       // delete packets genereted by this module (ADV and KA) from openqueue
-!       openqueue_removeAllCreatedBy(COMPONENT_RES);
-!       
-!       // I'm now busy sending an ADV
-!       res_vars.busySendingAdv = FALSE;
-!       
-!       // stop here
-!       return;
-!    }
-!    
-!    if (res_vars.busySendingAdv==TRUE) {
-!       // don't continue if I'm still sending a previous ADV
-!    }
-!    
-!    // if I get here, I will send an ADV
-!    
-!    // get a free packet buffer
-!    adv = openqueue_getFreePacketBuffer(COMPONENT_RES);
-!    if (adv==NULL) {
-!       openserial_printError(COMPONENT_RES,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    
-!    // declare ownership over that packet
-!    adv->creator = COMPONENT_RES;
-!    adv->owner   = COMPONENT_RES;
-!    
-!    // reserve space for ADV-specific header
-!    packetfunctions_reserveHeaderSize(adv, ADV_PAYLOAD_LENGTH);
-!    // the actual value of the current ASN will be written by the
-!    // IEEE802.15.4e when transmitting
-!    
-!    // some l2 information about this packet
-!    adv->l2_frameType                     = IEEE154_TYPE_BEACON;
-!    adv->l2_nextORpreviousHop.type        = ADDR_16B;
-!    adv->l2_nextORpreviousHop.addr_16b[0] = 0xff;
-!    adv->l2_nextORpreviousHop.addr_16b[1] = 0xff;
-!    
-!    // put in queue for MAC to handle
-!    res_send_internal(adv);
-!    
-!    // I'm now busy sending an ADV
-!    res_vars.busySendingAdv = TRUE;
-! }
-! 
-! /**
-! \brief Send an keep-alive message, if nessary.
-! 
-! This is one of the MAC managament tasks. This function inlines in the
-! timers_res_fired() function, but is declared as a separate function for better
-! readability of the code.
-! */
-! port_INLINE void sendKa() {
-!    OpenQueueEntry_t* kaPkt;
-!    open_addr_t*      kaNeighAddr;
-!    
-!    if (ieee154e_isSynch()==FALSE) {
-!       // I'm not sync'ed
-!       
-!       // delete packets genereted by this module (ADV and KA) from openqueue
-!       openqueue_removeAllCreatedBy(COMPONENT_RES);
-!       
-!       // I'm now busy sending a KA
-!       res_vars.busySendingKa = FALSE;
-!       
-!       // stop here
-!       return;
-!    }
-!    
-!    if (res_vars.busySendingKa==TRUE) {
-!       // don't proceed if I'm still sending a KA
-!       return;
-!    }
-!    
-!    kaNeighAddr = neighbors_getKANeighbor();
-!    if (kaNeighAddr==NULL) {
-!       // don't proceed if I have no neighbor I need to send a KA to
-!       return;
-!    }
-!    
-!    // if I get here, I will send a KA
-!    
-!    // get a free packet buffer
-!    kaPkt = openqueue_getFreePacketBuffer(COMPONENT_RES);
-!    if (kaPkt==NULL) {
-!       openserial_printError(COMPONENT_RES,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)1,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    
-!    // declare ownership over that packet
-!    kaPkt->creator = COMPONENT_RES;
-!    kaPkt->owner   = COMPONENT_RES;
-!    
-!    // some l2 information about this packet
-!    kaPkt->l2_frameType = IEEE154_TYPE_DATA;
-!    memcpy(&(kaPkt->l2_nextORpreviousHop),kaNeighAddr,sizeof(open_addr_t));
-!    
-!    // put in queue for MAC to handle
-!    res_send_internal(kaPkt);
-!    
-!    // I'm now busy sending a KA
-!    res_vars.busySendingKa = TRUE;
-! }
-! 
-! void res_timer_cb() {
-!    scheduler_push_task(timers_res_fired,TASKPRIO_RES);
-  }
-\ No newline at end of file
---- 1,463 ----
-! #include "openwsn.h"
-! #include "res.h"
-! #include "openserial.h"
-! #include "openqueue.h"
-! #include "neighbors.h"
-! #include "IEEE802154E.h"
-! #include "iphc.h"
-! #include "packetfunctions.h"
-! #include "openrandom.h"
-! #include "scheduler.h"
-! #include "opentimers.h"
-! //#include "debugpins.h"
-! 
-! #include "thread.h"
-! 
-! 
-! //=========================== variables =======================================
-! 
-! res_vars_t res_vars;
-! //static char openwsn_res_stack[KERNEL_CONF_STACKSIZE_MAIN];
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t res_send_internal(OpenQueueEntry_t* msg, uint8_t iePresent,uint8_t frameVersion);
-! void    sendAdv(void);
-! void    sendKa(void);
-! void    res_timer_cb(void);
-! uint8_t res_copySlotFrameAndLinkIE(OpenQueueEntry_t* adv);//returns reserved size
-! 
-! //=========================== public ==========================================
-! 
-! void res_init(void) {
-!    res_vars.periodMaintenance = 872+(openrandom_get16b()&0xff); // fires every 1 sec on average
-!    res_vars.busySendingKa     = FALSE;
-!    res_vars.busySendingAdv    = FALSE;
-!    res_vars.dsn               = 0;
-!    res_vars.MacMgtTaskCounter = 0;
-!    res_vars.timerId = opentimers_start(res_vars.periodMaintenance,
-!                                        TIMER_PERIODIC,TIME_MS,
-!                                        res_timer_cb);
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! // TODO: was bool but complained "conflicting types"
-! uint8_t debugPrint_myDAGrank(void) {
-!    uint16_t output=0;
-!    output = neighbors_getMyDAGrank();
-!    openserial_printStatus(STATUS_DAGRANK,(uint8_t*)&output,sizeof(uint16_t));
-!    return TRUE;
-! }
-! 
-! //======= from upper layer
-! 
-! owerror_t res_send(OpenQueueEntry_t *msg) {
-!    msg->owner        = COMPONENT_RES;
-!    msg->l2_frameType = IEEE154_TYPE_DATA;
-!    return res_send_internal(msg,IEEE154_IELIST_NO,IEEE154_FRAMEVERSION_2006);
-! }
-! 
-! //======= from lower layer
-! 
-! void task_resNotifSendDone(void) {
-!    OpenQueueEntry_t* msg;
-!    // get recently-sent packet from openqueue
-!    msg = openqueue_resGetSentPacket();
-!    if (msg==NULL) {
-!       // log the error
-!       openserial_printCritical(COMPONENT_RES,ERR_NO_SENT_PACKET,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       // abort
-!       return;
-!    }
-!    // declare it as mine
-!    msg->owner = COMPONENT_RES;
-!    // indicate transmission (to update statistics)
-!    if (msg->l2_sendDoneError==E_SUCCESS) {
-!       neighbors_indicateTx(&(msg->l2_nextORpreviousHop),
-!                            msg->l2_numTxAttempts,
-!                            TRUE,
-!                            &msg->l2_asn);
-!    } else {
-!       neighbors_indicateTx(&(msg->l2_nextORpreviousHop),
-!                            msg->l2_numTxAttempts,
-!                            FALSE,
-!                            &msg->l2_asn);
-!    }
-!    // send the packet to where it belongs
-!    if (msg->creator == COMPONENT_RES) {
-!       if (msg->l2_frameType==IEEE154_TYPE_BEACON) {
-!          // this is a ADV
-!          
-!          // not busy sending ADV anymore
-!          res_vars.busySendingAdv = FALSE;
-!       } else {
-!          // this is a KA
-!          
-!          // not busy sending KA anymore
-!          res_vars.busySendingKa = FALSE;
-!       }
-!       // discard packets
-!       openqueue_freePacketBuffer(msg);
-!       // restart a random timer
-!       res_vars.periodMaintenance = 872+(openrandom_get16b()&0xff);
-!       opentimers_setPeriod(res_vars.timerId,
-!                            TIME_MS,
-!                            res_vars.periodMaintenance);
-!    } else {
-!       // send the rest up the stack
-!       iphc_sendDone(msg,msg->l2_sendDoneError);
-!    }
-! }
-! 
-! void task_resNotifReceive(void) {
-!    OpenQueueEntry_t* msg;
-!    
-!    // get received packet from openqueue
-!    msg = openqueue_resGetReceivedPacket();
-!    if (msg==NULL) {
-!       // log the error
-!       openserial_printCritical(COMPONENT_RES,ERR_NO_RECEIVED_PACKET,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       // abort
-!       return;
-!    }
-!    
-!    // declare it as mine
-!    msg->owner = COMPONENT_RES;
-!    
-!    // indicate reception (to update statistics)
-!    neighbors_indicateRx(&(msg->l2_nextORpreviousHop),
-!                         msg->l1_rssi,
-!                         &msg->l2_asn,
-!                         msg->l2_joinPriorityPresent,
-!                         msg->l2_joinPriority);
-!    
-!    msg->l2_joinPriorityPresent=FALSE; //reset it to avoid race conditions with this var.
-!    
-!    // send the packet up the stack, if it qualifies
-!    switch (msg->l2_frameType) {
-!       case IEEE154_TYPE_BEACON:
-!       case IEEE154_TYPE_DATA:
-!       case IEEE154_TYPE_CMD:
-!          if (msg->length>0) {
-!             // send to upper layer
-!             iphc_receive(msg);
-!          } else {
-!             // free up the RAM
-!             openqueue_freePacketBuffer(msg);
-!          }
-!          break;
-!       case IEEE154_TYPE_ACK:
-!       default:
-!          // free the packet's RAM memory
-!          openqueue_freePacketBuffer(msg);
-!          // log the error
-!          openserial_printError(COMPONENT_RES,ERR_MSG_UNKNOWN_TYPE,
-!                                (errorparameter_t)msg->l2_frameType,
-!                                (errorparameter_t)0);
-!          break;
-!    }
-! }
-! 
-! //======= timer
-! 
-! /**
-! \brief Timer handlers which triggers MAC management task.
-! 
-! This function is called in task context by the scheduler after the RES timer
-! has fired. This timer is set to fire every second, on average.
-! 
-! The body of this function executes one of the MAC management task.
-! */
-! void timers_res_fired(void) {
-!    res_vars.MacMgtTaskCounter = (res_vars.MacMgtTaskCounter+1)%10;
-!    if (res_vars.MacMgtTaskCounter==0) {
-!       sendAdv(); // called every 10s
-!    } else {
-!       sendKa();  // called every second, except once every 10s
-!       //leds_debug_toggle();
-!    }
-! }
-! 
-! //=========================== private =========================================
-! 
-! /**
-! \brief Transfer packet to MAC.
-! 
-! This function adds a IEEE802.15.4 header to the packet and leaves it the 
-! OpenQueue buffer. The very last thing it does is assigning this packet to the 
-! virtual component COMPONENT_RES_TO_IEEE802154E. Whenever it gets a change,
-! IEEE802154E will handle the packet.
-! 
-! \param[in] msg The packet to the transmitted
-! 
-! \returns E_SUCCESS iff successful.
-! */
-! owerror_t res_send_internal(OpenQueueEntry_t* msg, uint8_t iePresent, uint8_t frameVersion) {
-!    // assign a number of retries
-!    if (packetfunctions_isBroadcastMulticast(&(msg->l2_nextORpreviousHop))==TRUE) {
-!       msg->l2_retriesLeft = 1;
-!    } else {
-!       msg->l2_retriesLeft = TXRETRIES;
-!    }
-!    // record this packet's dsn (for matching the ACK)
-!    msg->l2_dsn = res_vars.dsn++;
-!    // this is a new packet which I never attempted to send
-!    msg->l2_numTxAttempts = 0;
-!    // transmit with the default TX power
-!    msg->l1_txPower = TX_POWER;
-!    // record the location, in the packet, where the l2 payload starts
-!    msg->l2_payload = msg->payload;
-!    // add a IEEE802.15.4 header
-!    ieee802154_prependHeader(msg,
-!                             msg->l2_frameType,
-!                             iePresent,
-!                             frameVersion,
-!                             IEEE154_SEC_NO_SECURITY,
-!                             msg->l2_dsn,
-!                             &(msg->l2_nextORpreviousHop)
-!                             );
-!    // reserve space for 2-byte CRC
-!    packetfunctions_reserveFooterSize(msg,2);
-!    // change owner to IEEE802154E fetches it from queue
-!    msg->owner  = COMPONENT_RES_TO_IEEE802154E;
-!    return E_SUCCESS;
-! }
-! 
-! /**
-! \brief Send an advertisement.
-! 
-! This is one of the MAC managament tasks. This function inlines in the
-! timers_res_fired() function, but is declared as a separate function for better
-! readability of the code.
-! */
-! port_INLINE void sendAdv(void) {
-!    OpenQueueEntry_t* adv;
-!    payload_IE_descriptor_t payload_IE_desc;
-!    MLME_IE_subHeader_t mlme_subHeader;
-!    uint8_t slotframeIElen=0;
-!    
-!    if (ieee154e_isSynch()==FALSE) {
-!       // I'm not sync'ed
-!       
-!       // delete packets genereted by this module (ADV and KA) from openqueue
-!       openqueue_removeAllCreatedBy(COMPONENT_RES);
-!       
-!       // I'm now busy sending an ADV
-!       res_vars.busySendingAdv = FALSE;
-!       
-!       // stop here
-!       return;
-!    }
-!    
-!    if (res_vars.busySendingAdv==TRUE) {
-!       // don't continue if I'm still sending a previous ADV
-!    }
-!    
-!    // if I get here, I will send an ADV
-!    
-!    // get a free packet buffer
-!    adv = openqueue_getFreePacketBuffer(COMPONENT_RES);
-!    if (adv==NULL) {
-!       openserial_printError(COMPONENT_RES,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    
-!    // declare ownership over that packet
-!    adv->creator = COMPONENT_RES;
-!    adv->owner   = COMPONENT_RES;
-!    
-!    // reserve space for ADV-specific header
-!    // xv poipoi -- reserving for IEs  -- reverse order.
-!    //TODO reserve here for slotframe and link IE with minimal schedule information
-!    slotframeIElen = res_copySlotFrameAndLinkIE(adv);
-!    //create Sync IE with JP and ASN 
-!    packetfunctions_reserveHeaderSize(adv, sizeof(synch_IE_t));//the asn + jp
-!    adv->l2_ASNpayload               = adv->payload; //keep a pointer to where the ASN should be.
-!    // the actual value of the current ASN and JP will be written by the
-!    // IEEE802.15.4e when transmitting
-!    packetfunctions_reserveHeaderSize(adv, sizeof(MLME_IE_subHeader_t));//the MLME header
-!    //copy mlme sub-header               
-!    mlme_subHeader.length_subID_type=sizeof(synch_IE_t) << IEEE802154E_DESC_LEN_SHORT_MLME_IE_SHIFT;
-!    mlme_subHeader.length_subID_type |= (IEEE802154E_MLME_SYNC_IE_SUBID << IEEE802154E_MLME_SYNC_IE_SUBID_SHIFT) | IEEE802154E_DESC_TYPE_SHORT;
-!    //little endian          
-!    adv->payload[0]= mlme_subHeader.length_subID_type & 0xFF;
-!    adv->payload[1]= (mlme_subHeader.length_subID_type >> 8) & 0xFF;
-!     
-!    packetfunctions_reserveHeaderSize(adv, sizeof(payload_IE_descriptor_t));//the payload IE header
-!    //prepare IE headers and copy them to the ADV 
-!    
-!    payload_IE_desc.length_groupid_type = (sizeof(MLME_IE_subHeader_t)+sizeof(synch_IE_t)+slotframeIElen)<<IEEE802154E_DESC_LEN_PAYLOAD_IE_SHIFT;
-!    payload_IE_desc.length_groupid_type |=  (IEEE802154E_PAYLOAD_DESC_GROUP_ID_MLME  | IEEE802154E_DESC_TYPE_LONG); //
-!    
-!    //copy header into the packet
-!    //little endian
-!    adv->payload[0]= payload_IE_desc.length_groupid_type & 0xFF;
-!    adv->payload[1]= (payload_IE_desc.length_groupid_type >> 8) & 0xFF;
-!   
-!    // some l2 information about this packet
-!    adv->l2_frameType                     = IEEE154_TYPE_BEACON;
-!    adv->l2_nextORpreviousHop.type        = ADDR_16B;
-!    adv->l2_nextORpreviousHop.addr_16b[0] = 0xff;
-!    adv->l2_nextORpreviousHop.addr_16b[1] = 0xff;
-!    
-!    // put in queue for MAC to handle
-!    res_send_internal(adv,IEEE154_IELIST_YES,IEEE154_FRAMEVERSION);
-!    
-!    // I'm now busy sending an ADV
-!    res_vars.busySendingAdv = TRUE;
-! }
-! 
-! port_INLINE uint8_t res_copySlotFrameAndLinkIE(OpenQueueEntry_t* adv){
-!   MLME_IE_subHeader_t mlme_subHeader;
-!   uint8_t len=0;
-!   uint8_t linkOption=0;
-!   uint16_t slot=SCHEDULE_MINIMAL_6TISCH_ACTIVE_CELLS+SCHEDULE_MINIMAL_6TISCH_EB_CELLS;
-!   
-!   //reverse order and little endian. -- 
-!  
-!   //for each link in the schedule (in basic configuration)
-!   //copy to adv 1B linkOption bitmap
-!   //copy to adv 2B ch.offset
-!   //copy to adv 2B timeslot
-!  
-!   //shared cells
-!   linkOption = (1<<FLAG_TX_S)|(1<<FLAG_RX_S)|(1<<FLAG_SHARED_S);
-!   while(slot>SCHEDULE_MINIMAL_6TISCH_EB_CELLS){
-!     packetfunctions_reserveHeaderSize(adv,5);
-!     //ts
-!     adv->payload[0]= slot & 0xFF;
-!     adv->payload[1]= (slot >> 8) & 0xFF;
-!     //ch.offset as minimal draft
-!     adv->payload[2]= 0x00;
-!     adv->payload[3]= 0x00;
-!     //linkOption
-!     adv->payload[4]= linkOption;
-!     len+=5;
-!     slot--;
-!   }
-!  
-!   //eb slot
-!   linkOption = (1<<FLAG_TX_S)|(1<<FLAG_RX_S)|(1<<FLAG_SHARED_S)|(1<<FLAG_TIMEKEEPING_S);
-!   packetfunctions_reserveHeaderSize(adv,5);
-!   len+=5;
-!  //ts
-!   adv->payload[0]= SCHEDULE_MINIMAL_6TISCH_EB_CELLS & 0xFF;
-!   adv->payload[1]= (SCHEDULE_MINIMAL_6TISCH_EB_CELLS >> 8) & 0xFF;
-!   //ch.offset as minimal draft
-!   adv->payload[2]= 0x00;
-!   adv->payload[3]= 0x00;
-!  
-!   adv->payload[4]= linkOption;
-!  //now slotframe ie general fields
-!     //1B number of links == 6 
-!     //Slotframe Size 2B = 101 timeslots
-!     //1B slotframe handle (id)
-!   packetfunctions_reserveHeaderSize(adv,5);//
-!   len+=5;
-!   
-!   adv->payload[0]= SCHEDULE_MINIMAL_6TISCH_DEFAULT_SLOTFRAME_NUMBER;  
-!   adv->payload[1]= SCHEDULE_MINIMAL_6TISCH_DEFAULT_SLOTFRAME_HANDLE;
-!   adv->payload[2]= SCHEDULE_MINIMAL_6TISCH_SLOTFRAME_SIZE & 0xFF;
-!   adv->payload[3]= (SCHEDULE_MINIMAL_6TISCH_SLOTFRAME_SIZE >> 8) & 0xFF;
-!   adv->payload[4]= 0x06; //number of links
-!   
-!   //MLME sub IE header 
-!   //1b -15 short ==0x00
-!   //7b -8-14 Sub-ID=0x1b
-!   //8b - Length = 2 mlme-header + 5 slotframe general header +(6links*5bytes each) 
-!   packetfunctions_reserveHeaderSize(adv, sizeof(MLME_IE_subHeader_t));//the MLME header
-!    
-!    
-!    //copy mlme sub-header               
-!   mlme_subHeader.length_subID_type = len << IEEE802154E_DESC_LEN_SHORT_MLME_IE_SHIFT;
-!   mlme_subHeader.length_subID_type |= (IEEE802154E_MLME_SLOTFRAME_LINK_IE_SUBID << IEEE802154E_MLME_SYNC_IE_SUBID_SHIFT) | IEEE802154E_DESC_TYPE_SHORT;
-!   
-!   //little endian          
-!   adv->payload[0]= mlme_subHeader.length_subID_type & 0xFF;
-!   adv->payload[1]= (mlme_subHeader.length_subID_type >> 8) & 0xFF;
-!   len+=2;//count len of mlme header
-!    
-!   return len;
-! }
-! 
-! /**
-! \brief Send an keep-alive message, if nessary.
-! 
-! This is one of the MAC managament tasks. This function inlines in the
-! timers_res_fired() function, but is declared as a separate function for better
-! readability of the code.
-! */
-! port_INLINE void sendKa(void) {
-!    OpenQueueEntry_t* kaPkt;
-!    open_addr_t*      kaNeighAddr;
-!    
-!    if (ieee154e_isSynch()==FALSE) {
-!       // I'm not sync'ed
-!       
-!       // delete packets genereted by this module (ADV and KA) from openqueue
-!       openqueue_removeAllCreatedBy(COMPONENT_RES);
-!       
-!       // I'm now busy sending a KA
-!       res_vars.busySendingKa = FALSE;
-!       
-!       // stop here
-!       return;
-!    }
-!    
-!    if (res_vars.busySendingKa==TRUE) {
-!       // don't proceed if I'm still sending a KA
-!       return;
-!    }
-!    
-!    kaNeighAddr = neighbors_getKANeighbor();
-!    if (kaNeighAddr==NULL) {
-!       // don't proceed if I have no neighbor I need to send a KA to
-!       return;
-!    }
-!    
-!    // if I get here, I will send a KA
-!    
-!    // get a free packet buffer
-!    kaPkt = openqueue_getFreePacketBuffer(COMPONENT_RES);
-!    if (kaPkt==NULL) {
-!       openserial_printError(COMPONENT_RES,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)1,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    
-!    // declare ownership over that packet
-!    kaPkt->creator = COMPONENT_RES;
-!    kaPkt->owner   = COMPONENT_RES;
-!    
-!    // some l2 information about this packet
-!    kaPkt->l2_frameType = IEEE154_TYPE_DATA;
-!    memcpy(&(kaPkt->l2_nextORpreviousHop),kaNeighAddr,sizeof(open_addr_t));
-!    
-!    // put in queue for MAC to handle
-!    res_send_internal(kaPkt,IEEE154_IELIST_NO,IEEE154_FRAMEVERSION_2006);
-!    
-!    // I'm now busy sending a KA
-!    res_vars.busySendingKa = TRUE;
-! }
-! 
-! void res_timer_cb(void) {
-!    puts(__PRETTY_FUNCTION__);
-!    scheduler_push_task(timers_res_fired,TASKPRIO_RES);
-!    /*thread_create(openwsn_res_stack, KERNEL_CONF_STACKSIZE_MAIN, 
-!                  PRIORITY_OPENWSN_RES, CREATE_STACKTEST, 
-!                  timers_res_fired, "timers res fired");*/
-  }
-\ No newline at end of file
-diff -crB openwsn/02b-MAChigh/res.h ../../../sys/net/openwsn/02b-MAChigh/res.h
-*** openwsn/02b-MAChigh/res.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02b-MAChigh/res.h	Wed Jan 15 13:48:26 2014
-***************
-*** 1,32 ****
-! #ifndef __RES_H
-! #define __RES_H
-! 
-! /**
-! \addtogroup MAChigh
-! \{
-! \addtogroup RES
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    res_init();
-! bool    debugPrint_myDAGrank();
-! // from upper layer
-! error_t res_send(OpenQueueEntry_t *msg);
-! // from lower layer
-! void    task_resNotifSendDone();
-! void    task_resNotifReceive();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
---- 1,42 ----
-! #ifndef __RES_H
-! #define __RES_H
-! 
-! /**
-! \addtogroup MAChigh
-! \{
-! \addtogroup RES
-! \{
-! */
-! #include "opentimers.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    uint16_t        periodMaintenance;
-!    bool            busySendingKa;        // TRUE when busy sending a keep-alive
-!    bool            busySendingAdv;       // TRUE when busy sending an advertisement
-!    uint8_t         dsn;                  // current data sequence number
-!    uint8_t         MacMgtTaskCounter;    // counter to determine what management task to do
-!    opentimer_id_t  timerId;
-! } res_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! void    res_init(void);
-! uint8_t    debugPrint_myDAGrank(void); // TODO: was bool but complained "conflicting types"
-! // from upper layer
-! owerror_t res_send(OpenQueueEntry_t *msg);
-! // from lower layer
-! void    task_resNotifSendDone(void);
-! void    task_resNotifReceive(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
-diff -crB openwsn/02b-MAChigh/schedule.c ../../../sys/net/openwsn/02b-MAChigh/schedule.c
-*** openwsn/02b-MAChigh/schedule.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02b-MAChigh/schedule.c	Wed Jan 15 13:48:26 2014
-***************
-*** 1,476 ****
-! #include "openwsn.h"
-! #include "schedule.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    scheduleEntry_t  scheduleBuf[MAXACTIVESLOTS];
-!    scheduleEntry_t* currentScheduleEntry;
-!    uint16_t         frameLength;
-!    uint8_t          backoffExponent;
-!    uint8_t          backoff;
-!    slotOffset_t     debugPrintRow;
-! } schedule_vars_t;
-! 
-! schedule_vars_t schedule_vars;
-! 
-! typedef struct {
-!    uint8_t          numActiveSlotsCur;
-!    uint8_t          numActiveSlotsMax;
-! } schedule_dbg_t;
-! 
-! schedule_dbg_t schedule_dbg;
-! 
-! //=========================== prototypes ======================================
-! 
-! void schedule_resetEntry(scheduleEntry_t* pScheduleEntry);
-! 
-! //=========================== public ==========================================
-! 
-! //=== admin
-! 
-! void schedule_init() {
-!    uint8_t         i;
-!    slotOffset_t    running_slotOffset;
-!    open_addr_t     temp_neighbor;
-! 
-!    // reset local variables
-!    memset(&schedule_vars,0,sizeof(schedule_vars_t));
-!    for (i=0;i<MAXACTIVESLOTS;i++){
-!       schedule_resetEntry(&schedule_vars.scheduleBuf[i]);
-!    }
-!    schedule_vars.backoffExponent = MINBE-1;
-!    memset(&schedule_dbg, 0,sizeof(schedule_dbg_t));
-! 
-!    // set frame length
-!    schedule_setFrameLength(SUPERFRAME_LENGTH);
-!    
-!    // start at slot 0
-!    running_slotOffset = 0;
-!    
-!    // advertisement slot(s)
-!    memset(&temp_neighbor,0,sizeof(temp_neighbor));
-!    for (i=0;i<NUMADVSLOTS;i++) {
-!       schedule_addActiveSlot(
-!          running_slotOffset,      // slot offset
-!          CELLTYPE_ADV,            // type of slot
-!          FALSE,                   // shared?
-!          0,                       // channel offset
-!          &temp_neighbor           // neighbor
-!       );
-!       running_slotOffset++;
-!    } 
-!    
-!    // shared TXRX anycast slot(s)
-!    memset(&temp_neighbor,0,sizeof(temp_neighbor));
-!    temp_neighbor.type             = ADDR_ANYCAST;
-!    for (i=0;i<NUMSHAREDTXRX;i++) {
-!       schedule_addActiveSlot(
-!          running_slotOffset,      // slot offset
-!          CELLTYPE_TXRX,           // type of slot
-!          TRUE,                    // shared?
-!          0,                       // channel offset
-!          &temp_neighbor           // neighbor
-!       );
-!       running_slotOffset++;
-!    }
-!    
-!    // serial RX slot(s)
-!    memset(&temp_neighbor,0,sizeof(temp_neighbor));
-!    schedule_addActiveSlot(
-!       running_slotOffset,         // slot offset
-!       CELLTYPE_SERIALRX,          // type of slot
-!       FALSE,                      // shared?
-!       0,                          // channel offset
-!       &temp_neighbor              // neighbor
-!    );
-!    running_slotOffset++;
-!    /*
-!    for (i=0;i<NUMSERIALRX-1;i++) {
-!       schedule_addActiveSlot(
-!          running_slotOffset,      // slot offset
-!          CELLTYPE_MORESERIALRX,   // type of slot
-!          FALSE,                   // shared?
-!          0,                       // channel offset
-!          &temp_neighbor           // neighbor
-!       );
-!       running_slotOffset++;
-!    }
-!    */
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_schedule() {
-!    debugScheduleEntry_t temp;
-!    schedule_vars.debugPrintRow    = (schedule_vars.debugPrintRow+1)%MAXACTIVESLOTS;
-!    temp.row                       = schedule_vars.debugPrintRow;
-!    //copy element  by element to the struct that will  be serialized. we don't want to sent the pointer through the serial port.
-!    temp.scheduleEntry.channelOffset  = schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].channelOffset;
-!    temp.scheduleEntry.numRx  = schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].numRx;
-!    temp.scheduleEntry.numTx=schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].numTx;
-!    temp.scheduleEntry.numTxACK=schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].numTxACK;
-!    temp.scheduleEntry.lastUsedAsn=schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].lastUsedAsn;
-!    temp.scheduleEntry.neighbor=schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].neighbor;
-!    temp.scheduleEntry.shared=schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].shared;
-!    temp.scheduleEntry.slotOffset=schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].slotOffset;
-!    temp.scheduleEntry.type=schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].type;
-!             
-!    openserial_printStatus(STATUS_SCHEDULE,
-!          (uint8_t*)&temp,
-!          sizeof(debugScheduleEntry_t));
-!    return TRUE;
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_backoff() {
-!    uint8_t temp[2];
-!    temp[0] = schedule_vars.backoffExponent;
-!    temp[1] = schedule_vars.backoff;
-!    openserial_printStatus(STATUS_BACKOFF,
-!          (uint8_t*)&temp,
-!          sizeof(temp));
-!    return TRUE;
-! }
-! 
-! //=== from uRES (writing the schedule)
-! 
-! /**
-! \brief Set frame length.
-! 
-! \param newFrameLength The new frame length.
-! */
-! void schedule_setFrameLength(frameLength_t newFrameLength) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    schedule_vars.frameLength = newFrameLength;
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! /**
-! \brief Add a new active slot into the schedule.
-! 
-! \param newFrameLength The new frame length.
-! */
-! void schedule_addActiveSlot(slotOffset_t    slotOffset,
-!       cellType_t      type,
-!       bool            shared,
-!       uint8_t         channelOffset,
-!       open_addr_t*    neighbor) {
-!    scheduleEntry_t* slotContainer;
-!    scheduleEntry_t* previousSlotWalker;
-!    scheduleEntry_t* nextSlotWalker;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-! 
-!    // find an empty schedule entry container
-!    slotContainer = &schedule_vars.scheduleBuf[0];
-!    while (slotContainer->type!=CELLTYPE_OFF &&
-!          slotContainer<=&schedule_vars.scheduleBuf[MAXACTIVESLOTS-1]) {
-!       slotContainer++;
-!    }
-!    if (slotContainer>&schedule_vars.scheduleBuf[MAXACTIVESLOTS-1]) {
-!       // schedule has overflown
-!       openserial_printCritical(COMPONENT_SCHEDULE,ERR_SCHEDULE_OVERFLOWN,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    // fill that schedule entry with parameters passed
-!    slotContainer->slotOffset                = slotOffset;
-!    slotContainer->type                      = type;
-!    slotContainer->shared                    = shared;
-!    slotContainer->channelOffset             = channelOffset;
-!    memcpy(&slotContainer->neighbor,neighbor,sizeof(open_addr_t));
-! 
-!    if (schedule_vars.currentScheduleEntry==NULL) {
-!       // this is the first active slot added
-! 
-!       // the next slot of this slot is this slot
-!       slotContainer->next                   = slotContainer;
-! 
-!       // current slot points to this slot
-!       schedule_vars.currentScheduleEntry    = slotContainer;
-!    } else  {
-!       // this is NOT the first active slot added
-! 
-!       // find position in schedule
-!       previousSlotWalker                    = schedule_vars.currentScheduleEntry;
-!       while (1) {
-!          nextSlotWalker                     = previousSlotWalker->next;
-!          if (
-!                (
-!                      (previousSlotWalker->slotOffset <  slotContainer->slotOffset) &&
-!                      (slotContainer->slotOffset <  nextSlotWalker->slotOffset)
-!                )
-!                ||
-!                (
-!                      (previousSlotWalker->slotOffset <  slotContainer->slotOffset) &&
-!                      (nextSlotWalker->slotOffset <= previousSlotWalker->slotOffset)
-!                )
-!                ||
-!                (
-!                      (slotContainer->slotOffset <  nextSlotWalker->slotOffset) &&
-!                      (nextSlotWalker->slotOffset <= previousSlotWalker->slotOffset)
-!                )
-!          ) {
-!             break;
-!          }
-!          previousSlotWalker                 = nextSlotWalker;
-!       }
-!       // insert between previousSlotWalker and nextSlotWalker
-!       previousSlotWalker->next              = slotContainer;
-!       slotContainer->next                   = nextSlotWalker;
-!    }
-! 
-!    // maintain debug stats
-!    schedule_dbg.numActiveSlotsCur++;
-!    if (schedule_dbg.numActiveSlotsCur>schedule_dbg.numActiveSlotsMax) {
-!       schedule_dbg.numActiveSlotsMax        = schedule_dbg.numActiveSlotsCur;
-!    }
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! //=== from IEEE802154E: reading the schedule and updating statistics
-! 
-! void schedule_syncSlotOffset(slotOffset_t targetSlotOffset) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    while (schedule_vars.currentScheduleEntry->slotOffset!=targetSlotOffset) {
-!       schedule_advanceSlot();
-!    }
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! void schedule_advanceSlot() {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    // advance to next active slot
-!    schedule_vars.currentScheduleEntry = schedule_vars.currentScheduleEntry->next;
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! slotOffset_t schedule_getNextActiveSlotOffset() {
-!    slotOffset_t res;   
-!    INTERRUPT_DECLARATION();
-!    
-!    // return next active slot's slotOffset
-!    DISABLE_INTERRUPTS();
-!    res = ((scheduleEntry_t*)(schedule_vars.currentScheduleEntry->next))->slotOffset;
-!    ENABLE_INTERRUPTS();
-!    
-!    return res;
-! }
-! 
-! /**
-! \brief Get the frame length.
-! 
-! \returns The frame length.
-! */
-! frameLength_t schedule_getFrameLength() {
-!    frameLength_t res;
-!    INTERRUPT_DECLARATION();
-!    
-!    DISABLE_INTERRUPTS();
-!    res= schedule_vars.frameLength;
-!    ENABLE_INTERRUPTS();
-!    
-!    return res;
-! }
-! 
-! /**
-! \brief Get the type of the current schedule entry.
-! 
-! \returns The type of the current schedule entry.
-! */
-! cellType_t schedule_getType() {
-!    cellType_t res;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    res= schedule_vars.currentScheduleEntry->type;
-!    ENABLE_INTERRUPTS();
-!    return res;
-! }
-! 
-! /**
-! \brief Get the neighbor associated wit the current schedule entry.
-! 
-! \returns The neighbor associated wit the current schedule entry.
-! */
-! void schedule_getNeighbor(open_addr_t* addrToWrite) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    memcpy(addrToWrite,&(schedule_vars.currentScheduleEntry->neighbor),sizeof(open_addr_t));
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! /**
-! \brief Get the channel offset of the current schedule entry.
-! 
-! \returns The channel offset of the current schedule entry.
-! */
-! channelOffset_t schedule_getChannelOffset() {
-!    channelOffset_t res;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    res= schedule_vars.currentScheduleEntry->channelOffset;
-!    ENABLE_INTERRUPTS();
-!    return res;
-! }
-! 
-! /**
-! \brief Check whether I can send on this slot.
-! 
-! This function is called at the beginning of every TX slot.
-! If the slot is *not* a shared slot, it always return TRUE.
-! If the slot is a shared slot, it decrements the backoff counter and returns 
-! TRUE only if it hits 0.
-! 
-! Note that the backoff counter is global, not per slot.
-! 
-! \returns TRUE if it is OK to send on this slot, FALSE otherwise.
-!  */
-! bool schedule_getOkToSend() {
-!    bool returnVal;
-!    
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    
-!    if (schedule_vars.currentScheduleEntry->shared==FALSE) {
-!       // non-shared slot: backoff does not apply
-!       
-!       returnVal = TRUE;
-!    } else {
-!       // non-shared slot: check backoff before answering
-!       
-!       // decrement backoff
-!       if (schedule_vars.backoff>0) {
-!          schedule_vars.backoff--;
-!       }
-!       
-!       // only return TRUE if backoff hit 0
-!       if (schedule_vars.backoff==0) {
-!          returnVal = TRUE;
-!       } else {
-!          returnVal = FALSE;
-!       }
-!    }
-!    
-!    ENABLE_INTERRUPTS();
-!    return returnVal;
-! }
-! 
-! /**
-! \brief Reset the backoff and backoffExponent.
-! */
-! void schedule_resetBackoff() {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    
-!    // reset backoffExponent
-!    schedule_vars.backoffExponent = MINBE-1;
-!    // reset backoff
-!    schedule_vars.backoff         = 0;
-!    
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! /**
-! \brief Indicate the reception of a packet.
-! */
-! void schedule_indicateRx(asn_t* asnTimestamp) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    // increment usage statistics
-!    schedule_vars.currentScheduleEntry->numRx++;
-! 
-!    // update last used timestamp
-!    memcpy(&(schedule_vars.currentScheduleEntry->lastUsedAsn), asnTimestamp, sizeof(asn_t));
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! /**
-! \brief Indicate the transmission of a packet.
-! */
-! void schedule_indicateTx(asn_t* asnTimestamp,
-!                          bool   succesfullTx) {
-!    
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    // increment usage statistics
-!    if (schedule_vars.currentScheduleEntry->numTx==0xFF) {
-!       schedule_vars.currentScheduleEntry->numTx/=2;
-!       schedule_vars.currentScheduleEntry->numTxACK/=2;
-!    }
-!    schedule_vars.currentScheduleEntry->numTx++;
-!    if (succesfullTx==TRUE) {
-!       schedule_vars.currentScheduleEntry->numTxACK++;
-!    }
-! 
-!    // update last used timestamp
-!    memcpy(&schedule_vars.currentScheduleEntry->lastUsedAsn, asnTimestamp, sizeof(asn_t));
-! 
-!    // update this backoff parameters for shared slots
-!    if (schedule_vars.currentScheduleEntry->shared==TRUE) {
-!       if (succesfullTx==TRUE) {
-!          // reset backoffExponent
-!          schedule_vars.backoffExponent = MINBE-1;
-!          // reset backoff
-!          schedule_vars.backoff         = 0;
-!       } else {
-!          // increase the backoffExponent
-!          if (schedule_vars.backoffExponent<MAXBE) {
-!             schedule_vars.backoffExponent++;
-!          }
-!          // set the backoff to a random value in [0..2^BE]
-!          schedule_vars.backoff         = openrandom_get16b()%(1<<schedule_vars.backoffExponent);
-!       }
-!    }
-!    
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! void schedule_getNetDebugInfo(netDebugScheduleEntry_t* schlist){  
-!   uint8_t i;
-!   
-!   for (i=0;i<MAXACTIVESLOTS;i++){
-!    schlist[i].last_addr_byte=schedule_vars.scheduleBuf[i].neighbor.addr_64b[7];
-!    schlist[i].slotOffset=(uint8_t)schedule_vars.scheduleBuf[i].slotOffset&0xFF;
-!    schlist[i].channelOffset=schedule_vars.scheduleBuf[i].channelOffset;
-!   }
-! }
-! //=========================== private =========================================
-! 
-! void schedule_resetEntry(scheduleEntry_t* pScheduleEntry) {
-!    pScheduleEntry->type                     = CELLTYPE_OFF;
-!    pScheduleEntry->shared                   = FALSE;
-!    pScheduleEntry->channelOffset            = 0;
-!    pScheduleEntry->neighbor.type            = ADDR_NONE;
-!    pScheduleEntry->neighbor.addr_64b[0]     = 0x14;
-!    pScheduleEntry->neighbor.addr_64b[1]     = 0x15;
-!    pScheduleEntry->neighbor.addr_64b[2]     = 0x92;
-!    pScheduleEntry->neighbor.addr_64b[3]     = 0x09;
-!    pScheduleEntry->neighbor.addr_64b[4]     = 0x02;
-!    pScheduleEntry->neighbor.addr_64b[5]     = 0x2c;
-!    pScheduleEntry->neighbor.addr_64b[6]     = 0x00;
-!    pScheduleEntry->numRx                    = 0;
-!    pScheduleEntry->numTx                    = 0;
-!    pScheduleEntry->numTxACK                 = 0;
-!    pScheduleEntry->lastUsedAsn.bytes0and1   = 0;
-!    pScheduleEntry->lastUsedAsn.bytes2and3   = 0;
-!    pScheduleEntry->lastUsedAsn.byte4        = 0;
-! }
---- 1,621 ----
-! #include "openwsn.h"
-! #include "schedule.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "packetfunctions.h"
-! 
-! //=========================== variables =======================================
-! 
-! schedule_vars_t schedule_vars;
-! schedule_dbg_t schedule_dbg;
-! 
-! //=========================== prototypes ======================================
-! 
-! void schedule_resetEntry(scheduleEntry_t* pScheduleEntry);
-! 
-! //=========================== public ==========================================
-! 
-! //=== admin
-! 
-! void schedule_init(void) {
-!    uint8_t         i;
-!    slotOffset_t    running_slotOffset;
-!    open_addr_t     temp_neighbor;
-! 
-!    // reset local variables
-!    memset(&schedule_vars,0,sizeof(schedule_vars_t));
-!    for (i=0;i<MAXACTIVESLOTS;i++) {
-!       schedule_resetEntry(&schedule_vars.scheduleBuf[i]);
-!    }
-!    schedule_vars.backoffExponent = MINBE-1;
-!    memset(&schedule_dbg, 0,sizeof(schedule_dbg_t));
-! 
-!    // set frame length
-!    schedule_setFrameLength(SUPERFRAME_LENGTH);
-!    
-!    // start at slot 0
-!    running_slotOffset = 0;
-!    
-!    // advertisement slot(s)
-!    memset(&temp_neighbor,0,sizeof(temp_neighbor));
-!    for (i=0;i<NUMADVSLOTS;i++) {
-!       schedule_addActiveSlot(
-!          running_slotOffset,      // slot offset
-!          CELLTYPE_ADV,            // type of slot
-!          FALSE,                   // shared?
-!          0,                       // channel offset
-!          &temp_neighbor,           // neighbor
-!          FALSE                     //no update but insert
-!       );
-!       running_slotOffset++;
-!    } 
-!    
-!    // shared TXRX anycast slot(s)
-!    memset(&temp_neighbor,0,sizeof(temp_neighbor));
-!    temp_neighbor.type             = ADDR_ANYCAST;
-!    for (i=0;i<NUMSHAREDTXRX;i++) {
-!       schedule_addActiveSlot(
-!          running_slotOffset,      // slot offset
-!          CELLTYPE_TXRX,           // type of slot
-!          TRUE,                    // shared?
-!          0,                       // channel offset
-!          &temp_neighbor,          // neighbor
-!          FALSE                    //no update but insert
-!       );
-!       running_slotOffset++;
-!    }
-!    
-!    // serial RX slot(s)
-!    memset(&temp_neighbor,0,sizeof(temp_neighbor));
-!    schedule_addActiveSlot(
-!       running_slotOffset,         // slot offset
-!       CELLTYPE_SERIALRX,          // type of slot
-!       FALSE,                      // shared?
-!       0,                          // channel offset
-!       &temp_neighbor,             // neighbor
-!       FALSE                       //no update but insert
-!    );
-!    running_slotOffset++;
-!    /*
-!    for (i=0;i<NUMSERIALRX-1;i++) {
-!       schedule_addActiveSlot(
-!          running_slotOffset,      // slot offset
-!          CELLTYPE_MORESERIALRX,   // type of slot
-!          FALSE,                   // shared?
-!          0,                       // channel offset
-!          &temp_neighbor           // neighbor
-!       );
-!       running_slotOffset++;
-!    }
-!    */
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_schedule(void) {
-!    debugScheduleEntry_t temp;
-!    
-!    schedule_vars.debugPrintRow         = (schedule_vars.debugPrintRow+1)%MAXACTIVESLOTS;
-!    
-!    temp.row                            = schedule_vars.debugPrintRow;
-!    temp.slotOffset                     = \
-!       schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].slotOffset;
-!    temp.type                           = \
-!       schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].type;
-!    temp.shared                         = \
-!       schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].shared;
-!    temp.channelOffset                  = \
-!       schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].channelOffset;
-!    memcpy(
-!       &temp.neighbor,
-!       &schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].neighbor,
-!       sizeof(open_addr_t)
-!    );
-!    temp.numRx                          = \
-!       schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].numRx;
-!    temp.numTx                          = \
-!       schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].numTx;
-!    temp.numTxACK                       = \
-!       schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].numTxACK;
-!    memcpy(
-!       &temp.lastUsedAsn,
-!       &schedule_vars.scheduleBuf[schedule_vars.debugPrintRow].lastUsedAsn,
-!       sizeof(asn_t)
-!    );
-!    
-!    openserial_printStatus(STATUS_SCHEDULE,
-!          (uint8_t*)&temp,
-!          sizeof(debugScheduleEntry_t)
-!    );
-!    
-!    return TRUE;
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_backoff(void) {
-!    uint8_t temp[2];
-!    temp[0] = schedule_vars.backoffExponent;
-!    temp[1] = schedule_vars.backoff;
-!    openserial_printStatus(STATUS_BACKOFF,
-!          (uint8_t*)&temp,
-!          sizeof(temp));
-!    return TRUE;
-! }
-! 
-! //=== from uRES (writing the schedule)
-! 
-! /**
-! \brief Set frame length.
-! 
-! \param newFrameLength The new frame length.
-! */
-! void schedule_setFrameLength(frameLength_t newFrameLength) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    schedule_vars.frameLength = newFrameLength;
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! /**
-! \brief get the information of a spcific slot.
-! 
-! \param slotOffset
-! \param neighbor
-! \param info
-! */
-! void  schedule_getSlotInfo(
-!    slotOffset_t         slotOffset,
-!    open_addr_t*         neighbor,
-!    slotinfo_element_t*  info
-! ){
-!                            
-!    scheduleEntry_t* slotContainer;
-!   
-!    // find an empty schedule entry container
-!    slotContainer = &schedule_vars.scheduleBuf[0];
-!    while (slotContainer->type!=CELLTYPE_OFF && slotContainer<=&schedule_vars.scheduleBuf[MAXACTIVESLOTS-1]) {
-!        //check that this entry for that neighbour and timeslot is not already scheduled.
-!        if (packetfunctions_sameAddress(neighbor,&(slotContainer->neighbor))&& (slotContainer->slotOffset==slotOffset)){
-!                //it exists so this is an update.
-!                info->link_type                 = slotContainer->type;
-!                info->shared                    =slotContainer->shared;
-!                info->channelOffset             = slotContainer->channelOffset;
-!                return; //as this is an update. No need to re-insert as it is in the same position on the list.
-!         }
-!         slotContainer++;
-!    }
-!    //return cell type off.
-!    info->link_type                 = CELLTYPE_OFF;
-!    info->shared                    = FALSE;
-!    info->channelOffset             = 0;//set to zero if not set.                          
-! }
-! 
-! /**
-! \brief Add a new active slot into the schedule.
-! 
-! If udpate param is set then update it in case it exists.
-! 
-! \param slotOffset
-! \param type
-! \param shared
-! \param channelOffset
-! \param neighbor
-! \param isUpdate
-! */
-! owerror_t schedule_addActiveSlot(
-!       slotOffset_t    slotOffset,
-!       cellType_t      type,
-!       bool            shared,
-!       channelOffset_t channelOffset,
-!       open_addr_t*    neighbor,
-!       bool            isUpdate
-!    ) {
-!    
-!    owerror_t outcome;
-!    
-!    scheduleEntry_t* slotContainer;
-!    scheduleEntry_t* previousSlotWalker;
-!    scheduleEntry_t* nextSlotWalker;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    
-!    
-!    // find an empty schedule entry container
-!    slotContainer = &schedule_vars.scheduleBuf[0];
-!    while (slotContainer->type!=CELLTYPE_OFF &&
-!          slotContainer<=&schedule_vars.scheduleBuf[MAXACTIVESLOTS-1]) {
-!   
-!            //check that this entry for that neighbour and timeslot is not already scheduled.
-!            if (type!=CELLTYPE_SERIALRX && type!=CELLTYPE_MORESERIALRX &&  
-!                (packetfunctions_sameAddress(neighbor,&(slotContainer->neighbor))||
-!                  (slotContainer->neighbor.type==ADDR_ANYCAST && isUpdate==TRUE))
-!                  &&(slotContainer->slotOffset==slotOffset)){
-!                //it exists so this is an update.
-!                slotContainer->type                      = type;
-!                slotContainer->shared                    = shared;
-!                slotContainer->channelOffset             = channelOffset;
-!                memcpy(&slotContainer->neighbor,neighbor,sizeof(open_addr_t));//update the address too!
-!                schedule_dbg.numUpdatedSlotsCur++;
-!                ENABLE_INTERRUPTS();
-!                return E_SUCCESS; //as this is an update. No need to re-insert as it is in the same position on the list.
-!            }
-!            
-!            slotContainer++;
-!    }
-!    
-!    if (isUpdate==TRUE) {
-!      //we are trying to update an item that is not in the schedule list.
-!      ENABLE_INTERRUPTS();
-!      return E_FAIL;
-!    }
-!    if (slotContainer>&schedule_vars.scheduleBuf[MAXACTIVESLOTS-1]) {
-!       // schedule has overflown
-!       outcome=E_FAIL;
-!       openserial_printCritical(COMPONENT_SCHEDULE,ERR_SCHEDULE_OVERFLOWN,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       
-!       
-!    }
-!    // fill that schedule entry with parameters passed
-!    slotContainer->slotOffset                = slotOffset;
-!    slotContainer->type                      = type;
-!    slotContainer->shared                    = shared;
-!    slotContainer->channelOffset             = channelOffset;
-!    memcpy(&slotContainer->neighbor,neighbor,sizeof(open_addr_t));
-! 
-!    if (schedule_vars.currentScheduleEntry==NULL) {
-!       // this is the first active slot added
-! 
-!       // the next slot of this slot is this slot
-!       slotContainer->next                   = slotContainer;
-! 
-!       // current slot points to this slot
-!       schedule_vars.currentScheduleEntry    = slotContainer;
-!    } else  {
-!       // this is NOT the first active slot added
-! 
-!       // find position in schedule
-!       previousSlotWalker                    = schedule_vars.currentScheduleEntry;
-!       while (1) {
-!          nextSlotWalker                     = previousSlotWalker->next;
-!          if (
-!                (
-!                      (previousSlotWalker->slotOffset <  slotContainer->slotOffset) &&
-!                      (slotContainer->slotOffset <  nextSlotWalker->slotOffset)
-!                )
-!                ||
-!                (
-!                      (previousSlotWalker->slotOffset <  slotContainer->slotOffset) &&
-!                      (nextSlotWalker->slotOffset <= previousSlotWalker->slotOffset)
-!                )
-!                ||
-!                (
-!                      (slotContainer->slotOffset <  nextSlotWalker->slotOffset) &&
-!                      (nextSlotWalker->slotOffset <= previousSlotWalker->slotOffset)
-!                )
-!          ) {
-!             break;
-!          }
-!          previousSlotWalker                 = nextSlotWalker;
-!       }
-!       // insert between previousSlotWalker and nextSlotWalker
-!       previousSlotWalker->next              = slotContainer;
-!       slotContainer->next                   = nextSlotWalker;
-!    }
-! 
-!    // maintain debug stats
-!    schedule_dbg.numActiveSlotsCur++;
-!    if (schedule_dbg.numActiveSlotsCur>schedule_dbg.numActiveSlotsMax) {
-!       schedule_dbg.numActiveSlotsMax        = schedule_dbg.numActiveSlotsCur;
-!    }
-!    outcome=E_SUCCESS;
-!    ENABLE_INTERRUPTS();
-!    return outcome;
-! }
-! 
-! 
-! 
-! owerror_t   schedule_removeActiveSlot(slotOffset_t   slotOffset, open_addr_t*   neighbor){
-!   
-!    owerror_t outcome;
-!    
-!    scheduleEntry_t* slotContainer;
-!    scheduleEntry_t* previousSlotWalker;
-! 
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    
-!    
-!    // find the schedule entry
-!    slotContainer = &schedule_vars.scheduleBuf[0];
-!    while (slotContainer->type!=CELLTYPE_OFF && slotContainer<=&schedule_vars.scheduleBuf[MAXACTIVESLOTS-1]) {
-!           //check that this entry for that neighbour and timeslot is not already scheduled.
-!            if (packetfunctions_sameAddress(neighbor,&(slotContainer->neighbor))&& (slotContainer->slotOffset==slotOffset)){
-!                break;
-!            }
-!            slotContainer++;
-!    }
-!   
-!    if (slotContainer->next==slotContainer) {
-!       // this is the last active slot
-! 
-!       // the next slot of this slot is NULL
-!       slotContainer->next                   = NULL;
-! 
-!       // current slot points to this slot
-!       schedule_vars.currentScheduleEntry    = NULL;
-!    } else  {
-!       // this is NOT the last active slot
-! 
-!       // find the previous in the schedule
-!       previousSlotWalker                    = schedule_vars.currentScheduleEntry;
-!       
-!       while (1) {
-!         if ((previousSlotWalker->next=slotContainer)){
-!             break;
-!          }
-!          previousSlotWalker                 = previousSlotWalker->next;
-!       }
-!       // remove this element from the linked list
-!       previousSlotWalker->next              = slotContainer->next;//my next;
-!       slotContainer->next                   = NULL;
-!    }
-! 
-!     // clear that schedule entry 
-!     slotContainer->slotOffset                = 0;
-!     slotContainer->type                      = CELLTYPE_OFF;
-!     slotContainer->shared                    = FALSE;
-!     slotContainer->channelOffset             = 0;
-!     memset(&slotContainer->neighbor,0,sizeof(open_addr_t));
-! 
-!     // maintain debug stats
-!     schedule_dbg.numActiveSlotsCur--;
-!    
-!     outcome=E_SUCCESS;
-!     ENABLE_INTERRUPTS();
-!     
-!     return outcome;
-! }
-! 
-! 
-! 
-! 
-! //=== from IEEE802154E: reading the schedule and updating statistics
-! 
-! void schedule_syncSlotOffset(slotOffset_t targetSlotOffset) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    while (schedule_vars.currentScheduleEntry->slotOffset!=targetSlotOffset) {
-!       schedule_advanceSlot();
-!    }
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! void schedule_advanceSlot(void) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    // advance to next active slot
-!    schedule_vars.currentScheduleEntry = schedule_vars.currentScheduleEntry->next;
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! slotOffset_t schedule_getNextActiveSlotOffset(void) {
-!    slotOffset_t res;   
-!    INTERRUPT_DECLARATION();
-!    
-!    // return next active slot's slotOffset
-!    DISABLE_INTERRUPTS();
-!    res = ((scheduleEntry_t*)(schedule_vars.currentScheduleEntry->next))->slotOffset;
-!    ENABLE_INTERRUPTS();
-!    
-!    return res;
-! }
-! 
-! /**
-! \brief Get the frame length.
-! 
-! \returns The frame length.
-! */
-! frameLength_t schedule_getFrameLength(void) {
-!    frameLength_t res;
-!    INTERRUPT_DECLARATION();
-!    
-!    DISABLE_INTERRUPTS();
-!    res= schedule_vars.frameLength;
-!    ENABLE_INTERRUPTS();
-!    
-!    return res;
-! }
-! 
-! /**
-! \brief Get the type of the current schedule entry.
-! 
-! \returns The type of the current schedule entry.
-! */
-! cellType_t schedule_getType(void) {
-!    cellType_t res;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    res= schedule_vars.currentScheduleEntry->type;
-!    ENABLE_INTERRUPTS();
-!    return res;
-! }
-! 
-! /**
-! \brief Get the neighbor associated wit the current schedule entry.
-! 
-! \returns The neighbor associated wit the current schedule entry.
-! */
-! void schedule_getNeighbor(open_addr_t* addrToWrite) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    memcpy(addrToWrite,&(schedule_vars.currentScheduleEntry->neighbor),sizeof(open_addr_t));
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! /**
-! \brief Get the channel offset of the current schedule entry.
-! 
-! \returns The channel offset of the current schedule entry.
-! */
-! channelOffset_t schedule_getChannelOffset(void) {
-!    channelOffset_t res;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    res= schedule_vars.currentScheduleEntry->channelOffset;
-!    ENABLE_INTERRUPTS();
-!    return res;
-! }
-! 
-! /**
-! \brief Check whether I can send on this slot.
-! 
-! This function is called at the beginning of every TX slot.
-! If the slot is *not* a shared slot, it always return TRUE.
-! If the slot is a shared slot, it decrements the backoff counter and returns 
-! TRUE only if it hits 0.
-! 
-! Note that the backoff counter is global, not per slot.
-! 
-! \returns TRUE if it is OK to send on this slot, FALSE otherwise.
-!  */
-! bool schedule_getOkToSend(void) {
-!    bool returnVal;
-!    
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    
-!    if (schedule_vars.currentScheduleEntry->shared==FALSE) {
-!       // non-shared slot: backoff does not apply
-!       
-!       returnVal = TRUE;
-!    } else {
-!       // non-shared slot: check backoff before answering
-!       
-!       // decrement backoff
-!       if (schedule_vars.backoff>0) {
-!          schedule_vars.backoff--;
-!       }
-!       
-!       // only return TRUE if backoff hit 0
-!       if (schedule_vars.backoff==0) {
-!          returnVal = TRUE;
-!       } else {
-!          returnVal = FALSE;
-!       }
-!    }
-!    
-!    ENABLE_INTERRUPTS();
-!    return returnVal;
-! }
-! 
-! /**
-! \brief Reset the backoff and backoffExponent.
-! */
-! void schedule_resetBackoff(void) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    
-!    // reset backoffExponent
-!    schedule_vars.backoffExponent = MINBE-1;
-!    // reset backoff
-!    schedule_vars.backoff         = 0;
-!    
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! /**
-! \brief Indicate the reception of a packet.
-! */
-! void schedule_indicateRx(asn_t* asnTimestamp) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    // increment usage statistics
-!    schedule_vars.currentScheduleEntry->numRx++;
-! 
-!    // update last used timestamp
-!    memcpy(&(schedule_vars.currentScheduleEntry->lastUsedAsn), asnTimestamp, sizeof(asn_t));
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! /**
-! \brief Indicate the transmission of a packet.
-! */
-! void schedule_indicateTx(asn_t* asnTimestamp,
-!                          bool   succesfullTx) {
-!    
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    // increment usage statistics
-!    if (schedule_vars.currentScheduleEntry->numTx==0xFF) {
-!       schedule_vars.currentScheduleEntry->numTx/=2;
-!       schedule_vars.currentScheduleEntry->numTxACK/=2;
-!    }
-!    schedule_vars.currentScheduleEntry->numTx++;
-!    if (succesfullTx==TRUE) {
-!       schedule_vars.currentScheduleEntry->numTxACK++;
-!    }
-! 
-!    // update last used timestamp
-!    memcpy(&schedule_vars.currentScheduleEntry->lastUsedAsn, asnTimestamp, sizeof(asn_t));
-! 
-!    // update this backoff parameters for shared slots
-!    if (schedule_vars.currentScheduleEntry->shared==TRUE) {
-!       if (succesfullTx==TRUE) {
-!          // reset backoffExponent
-!          schedule_vars.backoffExponent = MINBE-1;
-!          // reset backoff
-!          schedule_vars.backoff         = 0;
-!       } else {
-!          // increase the backoffExponent
-!          if (schedule_vars.backoffExponent<MAXBE) {
-!             schedule_vars.backoffExponent++;
-!          }
-!          // set the backoff to a random value in [0..2^BE]
-!          schedule_vars.backoff         = openrandom_get16b()%(1<<schedule_vars.backoffExponent);
-!       }
-!    }
-!    
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! void schedule_getNetDebugInfo(netDebugScheduleEntry_t* schlist){  
-!   uint8_t i;
-!   
-!   for (i=0;i<MAXACTIVESLOTS;i++){
-!    schlist[i].last_addr_byte=schedule_vars.scheduleBuf[i].neighbor.addr_64b[7];
-!    schlist[i].slotOffset=(uint8_t)schedule_vars.scheduleBuf[i].slotOffset&0xFF;
-!    schlist[i].channelOffset=schedule_vars.scheduleBuf[i].channelOffset;
-!   }
-! }
-! //=========================== private =========================================
-! 
-! void schedule_resetEntry(scheduleEntry_t* pScheduleEntry) {
-!    pScheduleEntry->type                     = CELLTYPE_OFF;
-!    pScheduleEntry->shared                   = FALSE;
-!    pScheduleEntry->channelOffset            = 0;
-! 
-!    pScheduleEntry->neighbor.type            = ADDR_NONE;
-!    memset(&pScheduleEntry->neighbor.addr_64b[0], 0x00, sizeof(pScheduleEntry->neighbor.addr_64b));
-! 
-!    pScheduleEntry->numRx                    = 0;
-!    pScheduleEntry->numTx                    = 0;
-!    pScheduleEntry->numTxACK                 = 0;
-!    pScheduleEntry->lastUsedAsn.bytes0and1   = 0;
-!    pScheduleEntry->lastUsedAsn.bytes2and3   = 0;
-!    pScheduleEntry->lastUsedAsn.byte4        = 0;
-! }
-diff -crB openwsn/02b-MAChigh/schedule.h ../../../sys/net/openwsn/02b-MAChigh/schedule.h
-*** openwsn/02b-MAChigh/schedule.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/02b-MAChigh/schedule.h	Wed Jan 15 13:48:26 2014
-***************
-*** 1,158 ****
-! #ifndef __SCHEDULE_H
-! #define __SCHEDULE_H
-! 
-! /**
-! \addtogroup MAChigh
-! \{
-! \addtogroup Schedule
-! \{
-! */
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! /**
-! \brief The length of the superframe, in slots.
-! 
-! The superframe repears over time and can be arbitrarly long.
-! */
-! #define SUPERFRAME_LENGTH    9
-! 
-! #define NUMADVSLOTS          1
-! #define NUMSHAREDTXRX        4
-! #define NUMSERIALRX          3
-! 
-! /**
-! \brief Maximum number of active slots in a superframe.
-! 
-! Note that this is merely used to allocate RAM memory for the schedule. The
-! schedule is represented, in RAM, by a table. There is one row per active slot
-! in that table; a slot is "active" when it is not of type CELLTYPE_OFF.
-! 
-! Set this number to the exact number of active slots you are planning on having
-! in your schedule, so not to waste RAM.
-! */
-! #define MAXACTIVESLOTS       (NUMADVSLOTS+NUMSHAREDTXRX+NUMSERIALRX)
-! 
-! /**
-! \brief Minimum backoff exponent.
-! 
-! Backoff is used only in slots that are marked as shared in the schedule. When
-! not shared, the mote assumes that schedule is collision-free, and therefore
-! does not use any backoff mechanism when a transmission fails.
-! */
-! #define MINBE                2
-! 
-! /**
-! \brief Maximum backoff exponent.
-! 
-! See MINBE for an explanation of backoff.
-! */
-! #define MAXBE                4
-! 
-! 
-! //=========================== typedef =========================================
-! 
-! typedef uint8_t    channelOffset_t;
-! typedef uint16_t   slotOffset_t;
-! typedef uint16_t   frameLength_t;
-! 
-! typedef enum {
-!    CELLTYPE_OFF              = 0,
-!    CELLTYPE_ADV              = 1,
-!    CELLTYPE_TX               = 2,
-!    CELLTYPE_RX               = 3,
-!    CELLTYPE_TXRX             = 4,
-!    CELLTYPE_SERIALRX         = 5,
-!    CELLTYPE_MORESERIALRX     = 6
-! } cellType_t;
-! 
-! //not packed as does not fly on the network
-! //PRAGMA(pack(1));
-! typedef struct {
-!    slotOffset_t    slotOffset;
-!    cellType_t      type;
-!    bool            shared;
-!    uint8_t         channelOffset;
-!    open_addr_t     neighbor;
-!    uint8_t         numRx;
-!    uint8_t         numTx;
-!    uint8_t         numTxACK;
-!    asn_t           lastUsedAsn;
-!    void*           next;
-! } scheduleEntry_t;
-! //PRAGMA(pack());
-! 
-! //copy of the previous one but without the pointer and packed
-! PRAGMA(pack(1));
-! typedef struct {
-!    slotOffset_t    slotOffset;
-!    cellType_t      type;
-!    bool            shared;
-!    uint8_t         channelOffset;
-!    open_addr_t     neighbor;
-!    uint8_t         numRx;
-!    uint8_t         numTx;
-!    uint8_t         numTxACK;
-!    asn_t           lastUsedAsn;
-! } scheduleEntryDebug_t;
-! PRAGMA(pack());
-! 
-! //used to debug through ipv6 pkt. 
-! 
-! PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t last_addr_byte;//last byte of the address; poipoi could be [0]; endianness
-!    uint8_t slotOffset;
-!    uint8_t channelOffset;
-! }netDebugScheduleEntry_t;
-! PRAGMA(pack());
-! 
-! PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         row;
-!    scheduleEntryDebug_t scheduleEntry;
-! } debugScheduleEntry_t;
-! PRAGMA(pack());
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // admin
-! void               schedule_init();
-! bool               debugPrint_schedule();
-! bool               debugPrint_backoff();
-! // from uRES
-! void               schedule_setFrameLength(frameLength_t newFrameLength);
-! void               schedule_addActiveSlot(
-!                         slotOffset_t   slotOffset,
-!                         cellType_t     type,
-!                         bool           shared,
-!                         uint8_t        channelOffset,
-!                         open_addr_t*   neighbor
-!                    );
-! // from IEEE802154E
-! void               schedule_syncSlotOffset(slotOffset_t targetSlotOffset);
-! void               schedule_advanceSlot();
-! slotOffset_t       schedule_getNextActiveSlotOffset();
-! frameLength_t      schedule_getFrameLength();
-! cellType_t         schedule_getType();
-! void               schedule_getNeighbor(open_addr_t* addrToWrite);
-! channelOffset_t    schedule_getChannelOffset();
-! bool               schedule_getOkToSend();
-! void               schedule_resetBackoff();
-! void               schedule_indicateRx(asn_t*   asnTimestamp);
-! void               schedule_indicateTx(
-!                         asn_t*    asnTimestamp,
-!                         bool      succesfullTx
-!                    );
-! void               schedule_getNetDebugInfo(netDebugScheduleEntry_t* schlist);
-! 
-! /**
-! \}
-! \}
-! */
-!           
-! #endif
---- 1,189 ----
-! #ifndef __SCHEDULE_H
-! #define __SCHEDULE_H
-! 
-! /**
-! \addtogroup MAChigh
-! \{
-! \addtogroup Schedule
-! \{
-! */
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! /**
-! \brief The length of the superframe, in slots.
-! 
-! The superframe repears over time and can be arbitrarly long.
-! */
-! #define SUPERFRAME_LENGTH    11 //should be 101
-! 
-! #define NUMADVSLOTS          1
-! #define NUMSHAREDTXRX        5
-! #define NUMSERIALRX          3
-! 
-! /**
-! \brief Maximum number of active slots in a superframe.
-! 
-! Note that this is merely used to allocate RAM memory for the schedule. The
-! schedule is represented, in RAM, by a table. There is one row per active slot
-! in that table; a slot is "active" when it is not of type CELLTYPE_OFF.
-! 
-! Set this number to the exact number of active slots you are planning on having
-! in your schedule, so not to waste RAM.
-! */
-! #define MAXACTIVESLOTS       (NUMADVSLOTS+NUMSHAREDTXRX+NUMSERIALRX)
-! 
-! /**
-! \brief Minimum backoff exponent.
-! 
-! Backoff is used only in slots that are marked as shared in the schedule. When
-! not shared, the mote assumes that schedule is collision-free, and therefore
-! does not use any backoff mechanism when a transmission fails.
-! */
-! #define MINBE                2
-! 
-! /**
-! \brief Maximum backoff exponent.
-! 
-! See MINBE for an explanation of backoff.
-! */
-! #define MAXBE                4
-! //6tisch minimal draft
-! #define SCHEDULE_MINIMAL_6TISCH_ACTIVE_CELLS                      5
-! #define SCHEDULE_MINIMAL_6TISCH_EB_CELLS                          1
-! #define SCHEDULE_MINIMAL_6TISCH_SLOTFRAME_SIZE                  101
-! #define SCHEDULE_MINIMAL_6TISCH_DEFAULT_SLOTFRAME_HANDLE          1 //id of slotframe
-! #define SCHEDULE_MINIMAL_6TISCH_DEFAULT_SLOTFRAME_NUMBER          1 //1 slotframe by default.
-! 
-! //=========================== typedef =========================================
-! 
-! typedef uint8_t    channelOffset_t;
-! typedef uint16_t   slotOffset_t;
-! typedef uint16_t   frameLength_t;
-! 
-! typedef enum {
-!    CELLTYPE_OFF              = 0,
-!    CELLTYPE_ADV              = 1,
-!    CELLTYPE_TX               = 2,
-!    CELLTYPE_RX               = 3,
-!    CELLTYPE_TXRX             = 4,
-!    CELLTYPE_SERIALRX         = 5,
-!    CELLTYPE_MORESERIALRX     = 6
-! } cellType_t;
-! 
-! 
-! //PRAGMA(pack(1));
-! typedef struct {
-!    slotOffset_t    slotOffset;
-!    cellType_t      type;
-!    bool            shared;
-!    uint8_t         channelOffset;
-!    open_addr_t     neighbor;
-!    uint8_t         numRx;
-!    uint8_t         numTx;
-!    uint8_t         numTxACK;
-!    asn_t           lastUsedAsn;
-!    void*           next;
-! } scheduleEntry_t;
-! //PRAGMA(pack());
-! 
-! //used to debug through ipv6 pkt. 
-! 
-! //PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t last_addr_byte;//last byte of the address; poipoi could be [0]; endianness
-!    uint8_t slotOffset;
-!    channelOffset_t channelOffset;
-! }netDebugScheduleEntry_t;
-! //PRAGMA(pack());
-! 
-! //PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         row;
-!    slotOffset_t    slotOffset;
-!    uint8_t         type;
-!    bool            shared;
-!    uint8_t         channelOffset;
-!    open_addr_t     neighbor;
-!    uint8_t         numRx;
-!    uint8_t         numTx;
-!    uint8_t         numTxACK;
-!    asn_t           lastUsedAsn;
-! } debugScheduleEntry_t;
-! //PRAGMA(pack());
-! 
-! //PRAGMA(pack(1)); //elements for slot info 
-! typedef struct {
-!   uint8_t address[LENGTH_ADDR64b];// 
-!   cellType_t link_type;// rx,tx etc...
-!   bool shared;
-!   slotOffset_t slotOffset;
-!   channelOffset_t channelOffset;
-! }slotinfo_element_t;
-! //PRAGMA(pack());
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    scheduleEntry_t  scheduleBuf[MAXACTIVESLOTS];
-!    scheduleEntry_t* currentScheduleEntry;
-!    uint16_t         frameLength;
-!    uint8_t          backoffExponent;
-!    uint8_t          backoff;
-!    slotOffset_t     debugPrintRow;
-! } schedule_vars_t;
-! 
-! typedef struct {
-!    uint8_t          numActiveSlotsCur;
-!    uint8_t          numActiveSlotsMax;
-!    uint8_t          numUpdatedSlotsCur;
-! } schedule_dbg_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! // admin
-! void               schedule_init(void);
-! bool               debugPrint_schedule(void);
-! bool               debugPrint_backoff(void);
-! // from uRES
-! void               schedule_setFrameLength(frameLength_t newFrameLength);
-! owerror_t            schedule_addActiveSlot(
-!                         slotOffset_t   slotOffset,
-!                         cellType_t     type,
-!                         bool           shared,
-!                         uint8_t        channelOffset,
-!                         open_addr_t*   neighbor,
-!                         bool isUpdate);
-! 
-! void               schedule_getSlotInfo(slotOffset_t   slotOffset,                      
-!                               open_addr_t*   neighbor,
-!                               slotinfo_element_t* info);
-! 
-! owerror_t               schedule_removeActiveSlot(slotOffset_t   slotOffset,                      
-!                               open_addr_t*   neighbor);
-! 
-! 
-! // from IEEE802154E
-! void               schedule_syncSlotOffset(slotOffset_t targetSlotOffset);
-! void               schedule_advanceSlot(void);
-! slotOffset_t       schedule_getNextActiveSlotOffset(void);
-! frameLength_t      schedule_getFrameLength(void);
-! cellType_t         schedule_getType(void);
-! void               schedule_getNeighbor(open_addr_t* addrToWrite);
-! channelOffset_t    schedule_getChannelOffset(void);
-! bool               schedule_getOkToSend(void);
-! void               schedule_resetBackoff(void);
-! void               schedule_indicateRx(asn_t*   asnTimestamp);
-! void               schedule_indicateTx(
-!                         asn_t*    asnTimestamp,
-!                         bool      succesfullTx
-!                    );
-! void               schedule_getNetDebugInfo(netDebugScheduleEntry_t* schlist);
-! 
-! /**
-! \}
-! \}
-! */
-!           
-! #endif
-diff -crB openwsn/03a-IPHC/Makefile ../../../sys/net/openwsn/03a-IPHC/Makefile
-*** openwsn/03a-IPHC/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/03a-IPHC/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/ 
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBMOD)
-+ 
-+ $(BINDIR)$(SUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/03a-IPHC/iphc.c ../../../sys/net/openwsn/03a-IPHC/iphc.c
-*** openwsn/03a-IPHC/iphc.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/03a-IPHC/iphc.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,560 ****
-! #include "openwsn.h"
-! #include "iphc.h"
-! #include "packetfunctions.h"
-! #include "idmanager.h"
-! #include "openserial.h"
-! #include "res.h"
-! #include "forwarding.h"
-! #include "neighbors.h"
-! #include "openbridge.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t prependIPv6Header(
-!    OpenQueueEntry_t*    msg,
-!    uint8_t              tf,
-!    uint32_t             value_flowLabel,
-!    bool                 nh,
-!    uint8_t              value_nextHeader,
-!    uint8_t              hlim,
-!    uint8_t              value_hopLimit,
-!    bool                 cid,
-!    bool                 sac,
-!    uint8_t              sam,
-!    bool                 m,
-!    bool                 dac,
-!    uint8_t              dam,
-!    open_addr_t*         value_dest,
-!    open_addr_t*         value_src,
-!    uint8_t              fw_SendOrfw_Rcv
-! );
-! ipv6_header_iht retrieveIPv6Header(OpenQueueEntry_t* msg);
-! 
-! //=========================== public ==========================================
-! 
-! void iphc_init() {
-! }
-! 
-! //send from upper layer: I need to add 6LoWPAN header
-! error_t iphc_sendFromForwarding(OpenQueueEntry_t *msg, ipv6_header_iht ipv6_header, uint8_t fw_SendOrfw_Rcv) {
-!    open_addr_t  temp_dest_prefix;
-!    open_addr_t  temp_dest_mac64b;
-!    open_addr_t* p_dest;
-!    open_addr_t* p_src;  
-!    open_addr_t  temp_src_prefix;
-!    open_addr_t  temp_src_mac64b; 
-!    uint8_t      sam;
-!    uint8_t      dam;
-!    uint8_t      nh;
-!    
-!    // take ownership over the packet
-!    msg->owner = COMPONENT_IPHC;
-!    
-!    // by default, the "next header" field is carried inline
-!    nh=IPHC_NH_INLINE;
-!    
-!    // error checking
-!    if (idmanager_getIsBridge()==TRUE &&
-!       packetfunctions_isAllRoutersMulticast(&(msg->l3_destinationAdd))==FALSE) {
-!       openserial_printCritical(COMPONENT_IPHC,ERR_BRIDGE_MISMATCH,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    
-!    //discard the packet.. hop limit reached.
-!    if (ipv6_header.hop_limit==0) {
-!       openserial_printError(COMPONENT_IPHC,ERR_HOP_LIMIT_REACHED,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!      return E_FAIL;
-!    }
-!    
-!    packetfunctions_ip128bToMac64b(&(msg->l3_destinationAdd),&temp_dest_prefix,&temp_dest_mac64b);
-!    //xv poipoi -- get the src prefix as well
-!    packetfunctions_ip128bToMac64b(&(msg->l3_sourceAdd),&temp_src_prefix,&temp_src_mac64b);
-!    //XV -poipoi we want to check if the source address prefix is the same as destination prefix
-!    if (packetfunctions_sameAddress(&temp_dest_prefix,&temp_src_prefix)) {   
-!    //dest and src on same prefix
-!       if (neighbors_isStableNeighbor(&(msg->l3_destinationAdd))) {
-!          //if direct neighbors, MAC nextHop and IP destination indicate same node
-!          //the source can be ME or another who I am relaying from. If its me then SAM is elided,
-!          //if not SAM is 64b address 
-!         if (fw_SendOrfw_Rcv==PCKTFORWARD){
-!             sam = IPHC_SAM_64B;    //case forwarding a packet
-!             p_src = &temp_src_mac64b;
-!         } else if (fw_SendOrfw_Rcv==PCKTSEND){
-!             sam = IPHC_SAM_ELIDED;
-!             p_src = NULL;
-!         } else {
-!            openserial_printCritical(COMPONENT_IPHC,ERR_INVALID_FWDMODE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!         }
-!          dam = IPHC_DAM_ELIDED;
-!          p_dest = NULL;
-!       } else {
-!          //else, not a direct neighbour use 64B address
-!          sam = IPHC_SAM_64B;
-!          dam = IPHC_DAM_64B;
-!          p_dest = &temp_dest_mac64b;      
-!          p_src  = &temp_src_mac64b; 
-!       }
-!    } else {
-!      //not the same prefix. so the packet travels to another network
-!      //check if this is a source routing pkt. in case it is then the DAM is elided as it is in the SrcRouting header.
-!      if(ipv6_header.next_header!=IANA_IPv6ROUTE){ 
-!       sam = IPHC_SAM_128B;
-!       dam = IPHC_DAM_128B;
-!       p_dest = &(msg->l3_destinationAdd);
-!       p_src = &(msg->l3_sourceAdd);
-!      }else{
-!        //source routing
-!       sam = IPHC_SAM_128B;
-!       dam = IPHC_DAM_ELIDED;
-!       p_dest = NULL;
-!       p_src = &(msg->l3_sourceAdd);
-!      }
-!    }
-!    //check if we are forwarding a packet and it comes with the next header compressed. We want to preserve that state in the following hop.
-!    
-!    if ((fw_SendOrfw_Rcv==PCKTFORWARD) && ipv6_header.next_header_compressed) nh=IPHC_NH_COMPRESSED;
-!    
-!    // decrement the packet's hop limit
-!    ipv6_header.hop_limit--;
-!    
-!    if (prependIPv6Header(msg,
-!             IPHC_TF_ELIDED,
-!             0, // value_flowlabel is not copied
-!             nh,
-!             msg->l4_protocol,
-!             IPHC_HLIM_INLINE,
-!             ipv6_header.hop_limit,
-!             IPHC_CID_NO,
-!             IPHC_SAC_STATELESS,
-!             sam,
-!             IPHC_M_NO,
-!             IPHC_DAC_STATELESS,
-!             dam,
-!             p_dest,
-!             p_src,            
-!             fw_SendOrfw_Rcv  
-!             )==E_FAIL) {
-!       return E_FAIL;
-!    }
-!    return res_send(msg);
-! }
-! 
-! //send from bridge: 6LoWPAN header already added by OpenLBR, send as is
-! error_t iphc_sendFromBridge(OpenQueueEntry_t *msg) {
-!    msg->owner = COMPONENT_IPHC;
-!    // error checking
-!    if (idmanager_getIsBridge()==FALSE) {
-!       openserial_printCritical(COMPONENT_IPHC,ERR_BRIDGE_MISMATCH,
-!                             (errorparameter_t)1,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    return res_send(msg);
-! }
-! 
-! void iphc_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_IPHC;
-!    if (msg->creator==COMPONENT_OPENBRIDGE) {
-!       openbridge_sendDone(msg,error);
-!    } else {
-!       forwarding_sendDone(msg,error);
-!    }
-! }
-! 
-! void iphc_receive(OpenQueueEntry_t* msg) {
-!    ipv6_header_iht ipv6_header;
-!    msg->owner  = COMPONENT_IPHC;
-!    ipv6_header = retrieveIPv6Header(msg);
-!    if (idmanager_getIsBridge()==FALSE ||
-!       packetfunctions_isBroadcastMulticast(&(ipv6_header.dest))) {
-!       packetfunctions_tossHeader(msg,ipv6_header.header_length);
-!       forwarding_receive(msg,ipv6_header);       //up the internal stack
-!    } else {
-!       openbridge_receive(msg);                   //out to the OpenVisualizer
-!    }
-! }
-! 
-! //=========================== private =========================================
-! 
-! error_t prependIPv6Header(
-!       OpenQueueEntry_t* msg,
-!       uint8_t tf,
-!       uint32_t value_flowLabel,
-!       bool nh,
-!       uint8_t value_nextHeader,
-!       uint8_t hlim,
-!       uint8_t value_hopLimit,
-!       bool cid,
-!       bool sac,
-!       uint8_t sam,
-!       bool m,
-!       bool dac,
-!       uint8_t dam,
-!       open_addr_t* value_dest,
-!       open_addr_t* value_src,
-!       uint8_t fw_SendOrfw_Rcv
-!    ) {
-!    
-!    uint8_t temp_8b;
-!    
-!    //destination address
-!    switch (dam) {
-!       case IPHC_DAM_ELIDED:
-!          break;
-!       case IPHC_DAM_16B:
-!          if (value_dest->type!=ADDR_16B) {
-!             openserial_printCritical(COMPONENT_IPHC,ERR_WRONG_ADDR_TYPE,
-!                                   (errorparameter_t)value_dest->type,
-!                                   (errorparameter_t)0);
-!             return E_FAIL;
-!          };
-!          packetfunctions_writeAddress(msg,value_dest,BIG_ENDIAN);
-!          break;
-!       case IPHC_DAM_64B:
-!          if (value_dest->type!=ADDR_64B) {
-!             openserial_printCritical(COMPONENT_IPHC,ERR_WRONG_ADDR_TYPE,
-!                                   (errorparameter_t)value_dest->type,
-!                                   (errorparameter_t)1);
-!             return E_FAIL;
-!          };
-!          packetfunctions_writeAddress(msg,value_dest,BIG_ENDIAN);
-!          break;
-!       case IPHC_DAM_128B:
-!          if (value_dest->type!=ADDR_128B) {
-!             openserial_printCritical(COMPONENT_IPHC,ERR_WRONG_ADDR_TYPE,
-!                                   (errorparameter_t)value_dest->type,
-!                                   (errorparameter_t)2);
-!             return E_FAIL;
-!          };
-!          packetfunctions_writeAddress(msg,value_dest,BIG_ENDIAN);
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)dam);
-!          return E_FAIL;
-!    }
-!    //source address
-!    switch (sam) {
-!       case IPHC_SAM_ELIDED:
-!          break;
-!       case IPHC_SAM_16B:
-!         if(fw_SendOrfw_Rcv==PCKTSEND)
-!         {
-!          packetfunctions_writeAddress(msg, (idmanager_getMyID(ADDR_16B)),BIG_ENDIAN);
-!         }
-!         if(fw_SendOrfw_Rcv==PCKTFORWARD)
-!         {
-!             if (value_src->type!=ADDR_16B) {
-!                 openserial_printCritical(COMPONENT_IPHC,ERR_WRONG_ADDR_TYPE,
-!                                       (errorparameter_t)value_src->type,
-!                                       (errorparameter_t)0);
-!                 return E_FAIL;
-!             } 
-!             packetfunctions_writeAddress(msg,value_src,BIG_ENDIAN);
-!         }
-!          break;
-!       case IPHC_SAM_64B:
-!         if(fw_SendOrfw_Rcv==PCKTSEND)
-!         {
-!           packetfunctions_writeAddress(msg, (idmanager_getMyID(ADDR_64B)),BIG_ENDIAN);
-!         }
-!          if(fw_SendOrfw_Rcv==PCKTFORWARD)
-!         {
-!             if (value_src->type!=ADDR_64B) {
-!                 openserial_printCritical(COMPONENT_IPHC,ERR_WRONG_ADDR_TYPE,
-!                                       (errorparameter_t)value_src->type,
-!                                       (errorparameter_t)1);
-!                 return E_FAIL;
-!             }      
-!             packetfunctions_writeAddress(msg, value_src,BIG_ENDIAN);
-!         }
-!          break;
-!       case IPHC_SAM_128B:
-!         if(fw_SendOrfw_Rcv==PCKTSEND)
-!         {
-!          packetfunctions_writeAddress(msg, (idmanager_getMyID(ADDR_64B)),BIG_ENDIAN);
-!          packetfunctions_writeAddress(msg, (idmanager_getMyID(ADDR_PREFIX)),BIG_ENDIAN);
-!         }
-!         if(fw_SendOrfw_Rcv==PCKTFORWARD)
-!         {
-!             if (value_src->type!=ADDR_128B) {
-!                 openserial_printCritical(COMPONENT_IPHC,ERR_WRONG_ADDR_TYPE,
-!                                       (errorparameter_t)value_src->type,
-!                                       (errorparameter_t)2);
-!                 return E_FAIL;
-!              }
-!            packetfunctions_writeAddress(msg,value_src,BIG_ENDIAN);
-!         }
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)1,
-!                                (errorparameter_t)sam);
-!          return E_FAIL;
-!    }
-!    //hop limit
-!    switch (hlim) {
-!       case IPHC_HLIM_INLINE:
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = value_hopLimit;
-!          break;
-!       case IPHC_HLIM_1:
-!       case IPHC_HLIM_64:
-!       case IPHC_HLIM_255:
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)2,
-!                                (errorparameter_t)hlim);
-!          return E_FAIL;
-!    }
-!    //next header
-!    switch (nh) {
-!       case IPHC_NH_INLINE:
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = value_nextHeader;
-!          break;
-!       case IPHC_NH_COMPRESSED:
-!          //do nothing, the next header will be there
-!         break;
-!       default:
-!          openserial_printCritical(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)3,
-!                                (errorparameter_t)nh);
-!          return E_FAIL;
-!    }
-!    //flowlabel
-!    switch (tf) {
-!       case IPHC_TF_3B:
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = ((uint32_t)(value_flowLabel & 0x000000ff) >> 0);
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = ((uint32_t)(value_flowLabel & 0x0000ff00) >> 8);
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = ((uint32_t)(value_flowLabel & 0x00ff0000) >> 16);
-!          break;            
-!       case IPHC_TF_ELIDED:
-!          break;
-!       case IPHC_TF_4B:
-!          //unsupported
-!       case IPHC_TF_1B:
-!          //unsupported
-!       default:
-!          openserial_printCritical(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)4,
-!                                (errorparameter_t)tf);
-!          return E_FAIL;
-!    }
-!    //header
-!    temp_8b  = 0;
-!    temp_8b |= cid                 << IPHC_CID;
-!    temp_8b |= sac                 << IPHC_SAC;
-!    temp_8b |= sam                 << IPHC_SAM;
-!    temp_8b |= m                   << IPHC_M;
-!    temp_8b |= dac                 << IPHC_DAC;
-!    temp_8b |= dam                 << IPHC_DAM;
-!    packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!    *((uint8_t*)(msg->payload)) = temp_8b;
-!    temp_8b  = 0;
-!    temp_8b |= IPHC_DISPATCH_IPHC  << IPHC_DISPATCH;
-!    temp_8b |= tf                  << IPHC_TF;
-!    temp_8b |= nh                  << IPHC_NH;
-!    temp_8b |= hlim                << IPHC_HLIM;
-!    packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!    *((uint8_t*)(msg->payload)) = temp_8b;
-!    return E_SUCCESS;
-! }
-! 
-! ipv6_header_iht retrieveIPv6Header(OpenQueueEntry_t* msg) {
-!    uint8_t         temp_8b;
-!    open_addr_t     temp_addr_16b;
-!    open_addr_t     temp_addr_64b;
-!    ipv6_header_iht ipv6_header;
-!    uint8_t         dispatch;
-!    uint8_t         tf;
-!    bool            nh;
-!    uint8_t         hlim;
-!    //bool            cid;
-!    //bool            sac;
-!    uint8_t         sam;
-!   // bool            m;
-!    //bool          dac;
-!    uint8_t         dam;
-!    
-!    ipv6_header.header_length = 0;
-!    //header
-!    temp_8b   = *((uint8_t*)(msg->payload)+ipv6_header.header_length);
-!    dispatch  = (temp_8b >> IPHC_DISPATCH)  & 0x07;//3b
-!    tf        = (temp_8b >> IPHC_TF)        & 0x03;//2b
-!    nh        = (temp_8b >> IPHC_NH)        & 0x01;//1b
-!    hlim      = (temp_8b >> IPHC_HLIM)      & 0x03;//2b
-!    ipv6_header.header_length += sizeof(uint8_t);
-!    temp_8b   = *((uint8_t*)(msg->payload)+ipv6_header.header_length);
-!    //cid       = (temp_8b >> IPHC_CID)       & 0x01;//1b unused
-!    //sac       = (temp_8b >> IPHC_SAC)       & 0x01;//1b unused
-!    sam       = (temp_8b >> IPHC_SAM)       & 0x03;//2b
-!    //m         = (temp_8b >> IPHC_M)         & 0x01;//1b unused
-!    //dac       = (temp_8b >> IPHC_DAC)       & 0x01;//1b unused
-!    dam       = (temp_8b >> IPHC_DAM)       & 0x03;//2b
-!    ipv6_header.header_length += sizeof(uint8_t);
-!    //dispatch
-!    switch (dispatch) {
-!       case IPHC_DISPATCH_IPHC:
-!          break;            
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)5,
-!                                (errorparameter_t)dispatch);
-!          break;
-!    }
-!    //flowlabel
-!    switch (tf) {
-!       case IPHC_TF_3B:
-!          ipv6_header.flow_label  = ((uint32_t) *((uint8_t*)(msg->payload)+ipv6_header.header_length))<<0;
-!          ipv6_header.header_length += sizeof(uint8_t);
-!          ipv6_header.flow_label |= ((uint32_t) *((uint8_t*)(msg->payload)+ipv6_header.header_length))<<8;
-!          ipv6_header.header_length += sizeof(uint8_t);
-!          ipv6_header.flow_label |= ((uint32_t) *((uint8_t*)(msg->payload)+ipv6_header.header_length))<<16;
-!          ipv6_header.header_length += sizeof(uint8_t);
-!          break;            
-!       case IPHC_TF_ELIDED:
-!          ipv6_header.flow_label  = 0;
-!          break;
-!       case IPHC_TF_4B:
-!          //unsupported
-!       case IPHC_TF_1B:
-!          //unsupported
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)6,
-!                                (errorparameter_t)tf);
-!          break;
-!    }
-!    //next header
-!    switch (nh) {
-!       case IPHC_NH_INLINE:
-!          // Full 8 bits for Next Header are carried in-line
-!          ipv6_header.next_header_compressed = FALSE;
-!          ipv6_header.next_header = *((uint8_t*)(msg->payload)+ipv6_header.header_length);
-!          ipv6_header.header_length += sizeof(uint8_t);
-!          break;
-!       case IPHC_NH_COMPRESSED:
-!          // the Next header field is compressed and the next header is encoded
-!          // using LOWPAN_NHC, which is discussed in Section 4.1 of RFC6282
-!          // we don't parse anything here, but will look at the (compressed)
-!          // next header after having parsed all address fields.
-!          ipv6_header.next_header_compressed = TRUE;
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)7,
-!                                (errorparameter_t)nh);
-!          break;
-!    }
-!    //hop limit
-!    switch (hlim) {
-!       case IPHC_HLIM_INLINE:
-!          ipv6_header.hop_limit = *((uint8_t*)(msg->payload+ipv6_header.header_length));
-!          ipv6_header.header_length += sizeof(uint8_t);
-!          break;
-!       case IPHC_HLIM_1:
-!          ipv6_header.hop_limit = 1;
-!          break;
-!       case IPHC_HLIM_64:
-!          ipv6_header.hop_limit = 64;
-!          break;
-!       case IPHC_HLIM_255:
-!          ipv6_header.hop_limit = 255;
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)8,
-!                                (errorparameter_t)hlim);
-!          break;
-!    }
-!    //source address
-!    switch (sam) {
-!       case IPHC_SAM_ELIDED:
-!          packetfunctions_mac64bToIp128b(idmanager_getMyID(ADDR_PREFIX),&(msg->l2_nextORpreviousHop),&ipv6_header.src);
-!          break;
-!       case IPHC_SAM_16B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload+ipv6_header.header_length)),ADDR_16B,&temp_addr_16b,BIG_ENDIAN);
-!          ipv6_header.header_length += 2*sizeof(uint8_t);
-!          packetfunctions_mac16bToMac64b(&temp_addr_16b,&temp_addr_64b);
-!          packetfunctions_mac64bToIp128b(idmanager_getMyID(ADDR_PREFIX),&temp_addr_64b,&ipv6_header.src);
-!          break;
-!       case IPHC_SAM_64B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload+ipv6_header.header_length)),ADDR_64B,&temp_addr_64b,BIG_ENDIAN);
-!          ipv6_header.header_length += 8*sizeof(uint8_t);
-!          packetfunctions_mac64bToIp128b(idmanager_getMyID(ADDR_PREFIX),&temp_addr_64b,&ipv6_header.src);
-!          break;
-!       case IPHC_SAM_128B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload+ipv6_header.header_length)),ADDR_128B,&ipv6_header.src,BIG_ENDIAN);
-!          ipv6_header.header_length += 16*sizeof(uint8_t);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)9,
-!                                (errorparameter_t)sam);
-!          break;
-!    }
-!    //destination address
-!    switch (dam) {
-!       case IPHC_DAM_ELIDED:
-!          packetfunctions_mac64bToIp128b(idmanager_getMyID(ADDR_PREFIX),idmanager_getMyID(ADDR_64B),&(ipv6_header.dest));
-!          break;
-!       case IPHC_DAM_16B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload+ipv6_header.header_length)),ADDR_16B,&temp_addr_16b,BIG_ENDIAN);
-!          ipv6_header.header_length += 2*sizeof(uint8_t);
-!          packetfunctions_mac16bToMac64b(&temp_addr_16b,&temp_addr_64b);
-!          packetfunctions_mac64bToIp128b(idmanager_getMyID(ADDR_PREFIX),&temp_addr_64b,&ipv6_header.dest);
-!          break;
-!       case IPHC_DAM_64B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload+ipv6_header.header_length)),ADDR_64B,&temp_addr_64b,BIG_ENDIAN);
-!          ipv6_header.header_length += 8*sizeof(uint8_t);
-!          packetfunctions_mac64bToIp128b(idmanager_getMyID(ADDR_PREFIX),&temp_addr_64b,&ipv6_header.dest);
-!          break;
-!       case IPHC_DAM_128B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload+ipv6_header.header_length)),ADDR_128B,&ipv6_header.dest,BIG_ENDIAN);
-!          ipv6_header.header_length += 16*sizeof(uint8_t);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)10,
-!                                (errorparameter_t)dam);
-!          break;
-!    }
-!    /*
-!    During the parsing of the nh field, we found that the next header was
-!    compressed. We now identify which next (compressed) header this is, and
-!    populate the ipv6_header.next_header field accordingly. It's the role of the
-!    appropriate transport module to decompress the header.
-!    */
-!    if (ipv6_header.next_header_compressed==TRUE) {
-!       temp_8b   = *((uint8_t*)(msg->payload)+ipv6_header.header_length);
-!       if    ( (temp_8b & NHC_UDP_MASK) == NHC_UDP_ID) {
-!          ipv6_header.next_header = IANA_UDP;
-!       } else {
-!          // the next header could be an IPv6 extension header, or misformed
-!          ipv6_header.next_header = IANA_UNDEFINED;
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)11,
-!                                (errorparameter_t)ipv6_header.next_header);
-!       }
-!    }
-!    // this is a temporary workaround for allowing multicast RAs to go through
-!    //poipoi xv -- TODO -- check if this still needed. NO RAs anymore after RPL implementation.
-!    /*if (m==1 && dam==IPHC_DAM_ELIDED) {
-!       ipv6_header.header_length += sizeof(uint8_t);
-!    }*/
-!    return ipv6_header;
-! }
---- 1,695 ----
-! #include "openwsn.h"
-! #include "iphc.h"
-! #include "packetfunctions.h"
-! #include "idmanager.h"
-! #include "openserial.h"
-! #include "res.h"
-! #include "forwarding.h"
-! #include "neighbors.h"
-! #include "openbridge.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t prependIPv6Header(
-!    OpenQueueEntry_t*    msg,
-!    uint8_t              tf,
-!    uint32_t             value_flowLabel,
-!    bool                 nh,
-!    uint8_t              value_nextHeader,
-!    uint8_t              hlim,
-!    uint8_t              value_hopLimit,
-!    bool                 cid,
-!    bool                 sac,
-!    uint8_t              sam,
-!    bool                 m,
-!    bool                 dac,
-!    uint8_t              dam,
-!    open_addr_t*         value_dest,
-!    open_addr_t*         value_src,
-!    uint8_t              fw_SendOrfw_Rcv
-! );
-! ipv6_header_iht retrieveIPv6Header(OpenQueueEntry_t* msg);
-! //hop by hop header
-! void prependIPv6HopByHopHeader(OpenQueueEntry_t* msg,uint8_t nextheader, bool nh, rpl_hopoption_ht *hopbyhop_option);
-! void retrieveIPv6HopByHopHeader(OpenQueueEntry_t* msg, ipv6_hopbyhop_ht *hopbyhop_header, rpl_hopoption_ht *rpl_option);
-! //=========================== public ==========================================
-! 
-! void iphc_init(void) {
-! }
-! 
-! //send from upper layer: I need to add 6LoWPAN header
-! owerror_t iphc_sendFromForwarding(OpenQueueEntry_t *msg, ipv6_header_iht ipv6_header, rpl_hopoption_ht *hopbyhop_option, uint8_t fw_SendOrfw_Rcv) {
-!    open_addr_t  temp_dest_prefix;
-!    open_addr_t  temp_dest_mac64b;
-!    open_addr_t* p_dest;
-!    open_addr_t* p_src;  
-!    open_addr_t  temp_src_prefix;
-!    open_addr_t  temp_src_mac64b; 
-!    uint8_t      sam;
-!    uint8_t      dam;
-!    uint8_t      nh;
-!    uint8_t      next_header;
-!    //option header
-!   
-!    // take ownership over the packet
-!    msg->owner = COMPONENT_IPHC;
-!    
-!    // by default, the "next header" field is carried inline
-!    nh=IPHC_NH_INLINE;
-!    
-!    // error checking
-!    if (idmanager_getIsBridge()==TRUE &&
-!       packetfunctions_isAllRoutersMulticast(&(msg->l3_destinationAdd))==FALSE) {
-!       openserial_printCritical(COMPONENT_IPHC,ERR_BRIDGE_MISMATCH,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    
-!    //discard the packet.. hop limit reached.
-!    if (ipv6_header.hop_limit==0) {
-!       openserial_printError(COMPONENT_IPHC,ERR_HOP_LIMIT_REACHED,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!      return E_FAIL;
-!    }
-!    
-!    packetfunctions_ip128bToMac64b(&(msg->l3_destinationAdd),&temp_dest_prefix,&temp_dest_mac64b);
-!    //xv poipoi -- get the src prefix as well
-!    packetfunctions_ip128bToMac64b(&(msg->l3_sourceAdd),&temp_src_prefix,&temp_src_mac64b);
-!    //XV -poipoi we want to check if the source address prefix is the same as destination prefix
-!    if (packetfunctions_sameAddress(&temp_dest_prefix,&temp_src_prefix)) {   
-!    //dest and src on same prefix
-!       if (neighbors_isStableNeighbor(&(msg->l3_destinationAdd))) {
-!          //if direct neighbors, MAC nextHop and IP destination indicate same node
-!          //the source can be ME or another who I am relaying from. If its me then SAM is elided,
-!          //if not SAM is 64b address 
-!         if (fw_SendOrfw_Rcv==PCKTFORWARD){
-!             sam = IPHC_SAM_64B;    //case forwarding a packet
-!             p_src = &temp_src_mac64b;
-!             //poipoi xv forcing elided addresses on src routing, this needs to be fixed so any type of address should be supported supported.
-!         } else if (fw_SendOrfw_Rcv==PCKTSEND){
-!             sam = IPHC_SAM_ELIDED;
-!             p_src = NULL;
-!         } else {
-!            openserial_printCritical(COMPONENT_IPHC,ERR_INVALID_FWDMODE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!         } 
-!         dam = IPHC_DAM_ELIDED;
-!         p_dest = NULL;     
-!       } else {
-!          //else, not a direct neighbour use 64B address
-!          sam = IPHC_SAM_64B;
-!          dam = IPHC_DAM_64B;
-!          p_dest = &temp_dest_mac64b;      
-!          p_src  = &temp_src_mac64b; 
-!       }
-!    } else {
-!      //not the same prefix. so the packet travels to another network
-!      //check if this is a source routing pkt. in case it is then the DAM is elided as it is in the SrcRouting header.
-!      if(ipv6_header.next_header!=IANA_IPv6ROUTE){ 
-!       sam = IPHC_SAM_128B;
-!       dam = IPHC_DAM_128B;
-!       p_dest = &(msg->l3_destinationAdd);
-!       p_src = &(msg->l3_sourceAdd);
-!      }else{
-!        //source routing
-!       sam = IPHC_SAM_128B;
-!       dam = IPHC_DAM_ELIDED; //poipoi xv not true, should not be elided.
-!       p_dest = NULL;
-!       p_src = &(msg->l3_sourceAdd);
-!      }
-!    }
-!    //check if we are forwarding a packet and it comes with the next header compressed. We want to preserve that state in the following hop.
-!    
-!    if ((fw_SendOrfw_Rcv==PCKTFORWARD) && ipv6_header.next_header_compressed) nh=IPHC_NH_COMPRESSED;
-!    
-!    // decrement the packet's hop limit
-!    ipv6_header.hop_limit--;
-!    
-!    //prepend Option hop by hop header except when src routing and dst is not 0xffff -- this is a little trick as src routing is using an option header set to 0x00
-!    next_header=msg->l4_protocol;
-!    if (hopbyhop_option->optionType==RPL_HOPBYHOP_HEADER_OPTION_TYPE 
-!        && packetfunctions_isBroadcastMulticast(&(msg->l3_destinationAdd))==FALSE ){
-!       prependIPv6HopByHopHeader(msg, msg->l4_protocol, nh, hopbyhop_option);
-!       //change nh to point to the newly added header
-!       next_header=IANA_IPv6HOPOPT;// use 0x00 as NH to indicate option header -- see rfc 2460
-!    }
-!    //then regular header
-!    if (prependIPv6Header(msg,
-!             IPHC_TF_ELIDED,
-!             0, // value_flowlabel is not copied
-!             nh,
-!             next_header, 
-!             IPHC_HLIM_INLINE,
-!             ipv6_header.hop_limit,
-!             IPHC_CID_NO,
-!             IPHC_SAC_STATELESS,
-!             sam,
-!             IPHC_M_NO,
-!             IPHC_DAC_STATELESS,
-!             dam,
-!             p_dest,
-!             p_src,            
-!             fw_SendOrfw_Rcv  
-!             )==E_FAIL) {
-!       return E_FAIL;
-!    }
-!    
-!    return res_send(msg);
-! }
-! 
-! 
-! 
-! 
-! //send from bridge: 6LoWPAN header already added by OpenLBR, send as is
-! owerror_t iphc_sendFromBridge(OpenQueueEntry_t *msg) {
-!    msg->owner = COMPONENT_IPHC;
-!    // error checking
-!    if (idmanager_getIsBridge()==FALSE) {
-!       openserial_printCritical(COMPONENT_IPHC,ERR_BRIDGE_MISMATCH,
-!                             (errorparameter_t)1,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    return res_send(msg);
-! }
-! 
-! void iphc_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_IPHC;
-!    if (msg->creator==COMPONENT_OPENBRIDGE) {
-!       openbridge_sendDone(msg,error);
-!    } else {
-!       forwarding_sendDone(msg,error);
-!    }
-! }
-! 
-! void iphc_receive(OpenQueueEntry_t* msg) {
-!    ipv6_header_iht ipv6_header;
-!    ipv6_hopbyhop_ht ipv6_hop_header;
-!    rpl_hopoption_ht hop_by_hop_option;
-!    
-!    msg->owner  = COMPONENT_IPHC;
-!    
-!    //then regular header
-!    ipv6_header = retrieveIPv6Header(msg);
-!    
-!   
-!    if (idmanager_getIsBridge()==FALSE ||
-!       packetfunctions_isBroadcastMulticast(&(ipv6_header.dest))) {
-!       packetfunctions_tossHeader(msg,ipv6_header.header_length);
-!       
-!       if (ipv6_header.next_header==IANA_IPv6HOPOPT){
-!           //retrieve hop by hop header
-!           retrieveIPv6HopByHopHeader(msg,&ipv6_hop_header,&hop_by_hop_option);
-!           //toss the header + option +tlv on it if any
-!           packetfunctions_tossHeader(msg,IPv6HOP_HDR_LEN+ipv6_hop_header.HdrExtLen);
-!       }
-!       forwarding_receive(msg,ipv6_header,ipv6_hop_header,hop_by_hop_option);       //up the internal stack
-!    } else {
-!       openbridge_receive(msg);                   //out to the OpenVisualizer
-!    }
-! }
-! 
-! //=========================== private =========================================
-! 
-! 
-! void prependIPv6HopByHopHeader(OpenQueueEntry_t *msg,uint8_t nextheader, bool nh, rpl_hopoption_ht *hopbyhop_option){
-!    
-!     //copy them in reverse order, first option later header
-!     packetfunctions_reserveHeaderSize(msg,sizeof(rpl_hopoption_ht));
-!     memcpy(msg->payload,hopbyhop_option,sizeof(rpl_hopoption_ht));
-!     
-!     //hdr len as defined by rfc6282 sect 4.2
-!     packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!    *((uint8_t*)(msg->payload)) = sizeof(rpl_hopoption_ht);
-!     
-!     //next header
-!     switch (nh) {
-!       case IPHC_NH_INLINE:
-!         //add the next header inline
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = nextheader;
-!        
-!          //append NHC field on the extension header should be 1110 0000 -- see rfc 6282 sect 4.2
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = NHC_IPv6EXT_ID;
-!          break;
-!       case IPHC_NH_COMPRESSED:
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = NHC_IPv6EXT_ID | 0x01; //mark last bit as 1 -- see rfc 6282 sect 4.2
-!         break;
-!       default:
-!          openserial_printCritical(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)3,
-!                                (errorparameter_t)nh);
-!    }
-! 
-! }
-! 
-! owerror_t prependIPv6Header(
-!       OpenQueueEntry_t* msg,
-!       uint8_t tf,
-!       uint32_t value_flowLabel,
-!       bool nh,
-!       uint8_t value_nextHeader,
-!       uint8_t hlim,
-!       uint8_t value_hopLimit,
-!       bool cid,
-!       bool sac,
-!       uint8_t sam,
-!       bool m,
-!       bool dac,
-!       uint8_t dam,
-!       open_addr_t* value_dest,
-!       open_addr_t* value_src,
-!       uint8_t fw_SendOrfw_Rcv
-!    ) {
-!    
-!    uint8_t temp_8b;
-!    
-!    //destination address
-!    switch (dam) {
-!       case IPHC_DAM_ELIDED:
-!          break;
-!       case IPHC_DAM_16B:
-!          if (value_dest->type!=ADDR_16B) {
-!             openserial_printCritical(COMPONENT_IPHC,ERR_WRONG_ADDR_TYPE,
-!                                   (errorparameter_t)value_dest->type,
-!                                   (errorparameter_t)0);
-!             return E_FAIL;
-!          };
-!          packetfunctions_writeAddress(msg,value_dest,OW_BIG_ENDIAN);
-!          break;
-!       case IPHC_DAM_64B:
-!          if (value_dest->type!=ADDR_64B) {
-!             openserial_printCritical(COMPONENT_IPHC,ERR_WRONG_ADDR_TYPE,
-!                                   (errorparameter_t)value_dest->type,
-!                                   (errorparameter_t)1);
-!             return E_FAIL;
-!          };
-!          packetfunctions_writeAddress(msg,value_dest,OW_BIG_ENDIAN);
-!          break;
-!       case IPHC_DAM_128B:
-!          if (value_dest->type!=ADDR_128B) {
-!             openserial_printCritical(COMPONENT_IPHC,ERR_WRONG_ADDR_TYPE,
-!                                   (errorparameter_t)value_dest->type,
-!                                   (errorparameter_t)2);
-!             return E_FAIL;
-!          };
-!          packetfunctions_writeAddress(msg,value_dest,OW_BIG_ENDIAN);
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)dam);
-!          return E_FAIL;
-!    }
-!    //source address
-!    switch (sam) {
-!       case IPHC_SAM_ELIDED:
-!          break;
-!       case IPHC_SAM_16B:
-!         if(fw_SendOrfw_Rcv==PCKTSEND)
-!         {
-!          packetfunctions_writeAddress(msg, (idmanager_getMyID(ADDR_16B)),OW_BIG_ENDIAN);
-!         }
-!         if(fw_SendOrfw_Rcv==PCKTFORWARD)
-!         {
-!             if (value_src->type!=ADDR_16B) {
-!                 openserial_printCritical(COMPONENT_IPHC,ERR_WRONG_ADDR_TYPE,
-!                                       (errorparameter_t)value_src->type,
-!                                       (errorparameter_t)0);
-!                 return E_FAIL;
-!             } 
-!             packetfunctions_writeAddress(msg,value_src,OW_BIG_ENDIAN);
-!         }
-!          break;
-!       case IPHC_SAM_64B:
-!         if(fw_SendOrfw_Rcv==PCKTSEND)
-!         {
-!           packetfunctions_writeAddress(msg, (idmanager_getMyID(ADDR_64B)),OW_BIG_ENDIAN);
-!         }
-!          if(fw_SendOrfw_Rcv==PCKTFORWARD)
-!         {
-!             if (value_src->type!=ADDR_64B) {
-!                 openserial_printCritical(COMPONENT_IPHC,ERR_WRONG_ADDR_TYPE,
-!                                       (errorparameter_t)value_src->type,
-!                                       (errorparameter_t)1);
-!                 return E_FAIL;
-!             }      
-!             packetfunctions_writeAddress(msg, value_src,OW_BIG_ENDIAN);
-!         }
-!          break;
-!       case IPHC_SAM_128B:
-!         if(fw_SendOrfw_Rcv==PCKTSEND)
-!         {
-!          packetfunctions_writeAddress(msg, (idmanager_getMyID(ADDR_64B)),OW_BIG_ENDIAN);
-!          packetfunctions_writeAddress(msg, (idmanager_getMyID(ADDR_PREFIX)),OW_BIG_ENDIAN);
-!         }
-!         if(fw_SendOrfw_Rcv==PCKTFORWARD)
-!         {
-!             if (value_src->type!=ADDR_128B) {
-!                 openserial_printCritical(COMPONENT_IPHC,ERR_WRONG_ADDR_TYPE,
-!                                       (errorparameter_t)value_src->type,
-!                                       (errorparameter_t)2);
-!                 return E_FAIL;
-!              }
-!            packetfunctions_writeAddress(msg,value_src,OW_BIG_ENDIAN);
-!         }
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)1,
-!                                (errorparameter_t)sam);
-!          return E_FAIL;
-!    }
-!    //hop limit
-!    switch (hlim) {
-!       case IPHC_HLIM_INLINE:
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = value_hopLimit;
-!          break;
-!       case IPHC_HLIM_1:
-!       case IPHC_HLIM_64:
-!       case IPHC_HLIM_255:
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)2,
-!                                (errorparameter_t)hlim);
-!          return E_FAIL;
-!    }
-!    //next header
-!    switch (nh) {
-!       case IPHC_NH_INLINE:
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = value_nextHeader;
-!          break;
-!       case IPHC_NH_COMPRESSED:
-!          //do nothing, the next header will be there
-!         break;
-!       default:
-!          openserial_printCritical(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)3,
-!                                (errorparameter_t)nh);
-!          return E_FAIL;
-!    }
-!    //flowlabel
-!    switch (tf) {
-!       case IPHC_TF_3B:
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = ((uint32_t)(value_flowLabel & 0x000000ff) >> 0);
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = ((uint32_t)(value_flowLabel & 0x0000ff00) >> 8);
-!          packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!          *((uint8_t*)(msg->payload)) = ((uint32_t)(value_flowLabel & 0x00ff0000) >> 16);
-!          break;            
-!       case IPHC_TF_ELIDED:
-!          break;
-!       case IPHC_TF_4B:
-!          //unsupported
-!       case IPHC_TF_1B:
-!          //unsupported
-!       default:
-!          openserial_printCritical(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)4,
-!                                (errorparameter_t)tf);
-!          return E_FAIL;
-!    }
-!    //header
-!    temp_8b  = 0;
-!    temp_8b |= cid                 << IPHC_CID;
-!    temp_8b |= sac                 << IPHC_SAC;
-!    temp_8b |= sam                 << IPHC_SAM;
-!    temp_8b |= m                   << IPHC_M;
-!    temp_8b |= dac                 << IPHC_DAC;
-!    temp_8b |= dam                 << IPHC_DAM;
-!    packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!    *((uint8_t*)(msg->payload)) = temp_8b;
-!    temp_8b  = 0;
-!    temp_8b |= IPHC_DISPATCH_IPHC  << IPHC_DISPATCH;
-!    temp_8b |= tf                  << IPHC_TF;
-!    temp_8b |= nh                  << IPHC_NH;
-!    temp_8b |= hlim                << IPHC_HLIM;
-!    packetfunctions_reserveHeaderSize(msg,sizeof(uint8_t));
-!    *((uint8_t*)(msg->payload)) = temp_8b;
-!    return E_SUCCESS;
-! }
-! 
-! 
-! 
-! void retrieveIPv6HopByHopHeader(OpenQueueEntry_t *msg,ipv6_hopbyhop_ht *hopbyhop_header, rpl_hopoption_ht *rpl_option){
-!   uint8_t temp_8b;
-!   
-!   hopbyhop_header->headerlen=0;
-!    
-!   hopbyhop_header->lowpan_nhc = *((uint8_t*)(msg->payload)+ hopbyhop_header->headerlen);
-!   hopbyhop_header->headerlen += sizeof(uint8_t);   
-!   
-!    //next header
-!    switch ( hopbyhop_header->lowpan_nhc & NHC_HOP_NH_MASK) {
-!       case IPHC_NH_INLINE:
-!          // Full 8 bits for Next Header are carried in-line
-!          hopbyhop_header->next_header_compressed = FALSE;
-!          hopbyhop_header->nextHeader = *((uint8_t*)(msg->payload)+hopbyhop_header->headerlen);
-!          hopbyhop_header->headerlen+= sizeof(uint8_t);   
-!          break;
-!       case IPHC_NH_COMPRESSED:
-!          // the Next header field is compressed and the next header is encoded
-!          // using LOWPAN_NHC, which is discussed in Section 4.1 of RFC6282
-!          // we don't parse anything here, but will look at the (compressed)
-!          // next header after having parsed all address fields.
-!          hopbyhop_header->next_header_compressed = TRUE;
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)7,
-!                                (errorparameter_t)hopbyhop_header->lowpan_nhc);
-!          break;
-!    }
-!    
-!    //len of options
-!    hopbyhop_header->HdrExtLen =*((uint8_t*)(msg->payload)+hopbyhop_header->headerlen);
-!    hopbyhop_header->headerlen+= sizeof(uint8_t);  
-!    //copy the options
-!    memcpy(rpl_option,((uint8_t*)(msg->payload)+hopbyhop_header->headerlen),sizeof(rpl_hopoption_ht));
-!    hopbyhop_header->headerlen+= sizeof(rpl_hopoption_ht);  
-!    
-!    //now in case nh compressed:
-!     /*
-!    During the parsing of the nh field, we found that the next header was
-!    compressed. We now identify which next (compressed) header this is, and
-!    populate the hopbyhop_header.nextHeader field accordingly. It's the role of the
-!    appropriate transport module to decompress the header.
-!    */
-!    if (hopbyhop_header->next_header_compressed==TRUE) {
-!       temp_8b   = *((uint8_t*)(msg->payload)+ hopbyhop_header->headerlen);
-!       if    ( (temp_8b & NHC_UDP_MASK) == NHC_UDP_ID) {
-!          hopbyhop_header->nextHeader = IANA_UDP;
-!       }else {
-!          // the next header could be an IPv6 extension header, or misformed
-!          hopbyhop_header->nextHeader = IANA_UNDEFINED;
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)14,
-!                                (errorparameter_t)hopbyhop_header->nextHeader);
-!       }
-!    }
-! }
-! 
-! 
-! ipv6_header_iht retrieveIPv6Header(OpenQueueEntry_t* msg) {
-!    uint8_t         temp_8b;
-!    open_addr_t     temp_addr_16b;
-!    open_addr_t     temp_addr_64b;
-!    ipv6_header_iht ipv6_header;
-!    uint8_t         dispatch;
-!    uint8_t         tf;
-!    bool            nh;
-!    uint8_t         hlim;
-!    //bool            cid;
-!    //bool            sac;
-!    uint8_t         sam;
-!   // bool            m;
-!    //bool          dac;
-!    uint8_t         dam;
-!    
-!    ipv6_header.header_length = 0;
-!    //header
-!    temp_8b   = *((uint8_t*)(msg->payload)+ipv6_header.header_length);
-!    dispatch  = (temp_8b >> IPHC_DISPATCH)  & 0x07;//3b
-!    tf        = (temp_8b >> IPHC_TF)        & 0x03;//2b
-!    nh        = (temp_8b >> IPHC_NH)        & 0x01;//1b
-!    hlim      = (temp_8b >> IPHC_HLIM)      & 0x03;//2b
-!    ipv6_header.header_length += sizeof(uint8_t);
-!    temp_8b   = *((uint8_t*)(msg->payload)+ipv6_header.header_length);
-!    //cid       = (temp_8b >> IPHC_CID)       & 0x01;//1b unused
-!    //sac       = (temp_8b >> IPHC_SAC)       & 0x01;//1b unused
-!    sam       = (temp_8b >> IPHC_SAM)       & 0x03;//2b
-!    //m         = (temp_8b >> IPHC_M)         & 0x01;//1b unused
-!    //dac       = (temp_8b >> IPHC_DAC)       & 0x01;//1b unused
-!    dam       = (temp_8b >> IPHC_DAM)       & 0x03;//2b
-!    ipv6_header.header_length += sizeof(uint8_t);
-!    //dispatch
-!    switch (dispatch) {
-!       case IPHC_DISPATCH_IPHC:
-!          break;            
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)5,
-!                                (errorparameter_t)dispatch);
-!          break;
-!    }
-!    //flowlabel
-!    switch (tf) {
-!       case IPHC_TF_3B:
-!          ipv6_header.flow_label  = ((uint32_t) *((uint8_t*)(msg->payload)+ipv6_header.header_length))<<0;
-!          ipv6_header.header_length += sizeof(uint8_t);
-!          ipv6_header.flow_label |= ((uint32_t) *((uint8_t*)(msg->payload)+ipv6_header.header_length))<<8;
-!          ipv6_header.header_length += sizeof(uint8_t);
-!          ipv6_header.flow_label |= ((uint32_t) *((uint8_t*)(msg->payload)+ipv6_header.header_length))<<16;
-!          ipv6_header.header_length += sizeof(uint8_t);
-!          break;            
-!       case IPHC_TF_ELIDED:
-!          ipv6_header.flow_label  = 0;
-!          break;
-!       case IPHC_TF_4B:
-!          //unsupported
-!       case IPHC_TF_1B:
-!          //unsupported
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)6,
-!                                (errorparameter_t)tf);
-!          break;
-!    }
-!    //next header
-!    switch (nh) {
-!       case IPHC_NH_INLINE:
-!          // Full 8 bits for Next Header are carried in-line
-!          ipv6_header.next_header_compressed = FALSE;
-!          ipv6_header.next_header = *((uint8_t*)(msg->payload)+ipv6_header.header_length);
-!          ipv6_header.header_length += sizeof(uint8_t);
-!       
-!          break;
-!       case IPHC_NH_COMPRESSED:
-!          // the Next header field is compressed and the next header is encoded
-!          // using LOWPAN_NHC, which is discussed in Section 4.1 of RFC6282
-!          // we don't parse anything here, but will look at the (compressed)
-!          // next header after having parsed all address fields.
-!          ipv6_header.next_header_compressed = TRUE;
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)7,
-!                                (errorparameter_t)nh);
-!          break;
-!    }
-!    //hop limit
-!    switch (hlim) {
-!       case IPHC_HLIM_INLINE:
-!          ipv6_header.hop_limit = *((uint8_t*)(msg->payload+ipv6_header.header_length));
-!          ipv6_header.header_length += sizeof(uint8_t);
-!          break;
-!       case IPHC_HLIM_1:
-!          ipv6_header.hop_limit = 1;
-!          break;
-!       case IPHC_HLIM_64:
-!          ipv6_header.hop_limit = 64;
-!          break;
-!       case IPHC_HLIM_255:
-!          ipv6_header.hop_limit = 255;
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)8,
-!                                (errorparameter_t)hlim);
-!          break;
-!    }
-!    //source address
-!    switch (sam) {
-!       case IPHC_SAM_ELIDED:
-!          packetfunctions_mac64bToIp128b(idmanager_getMyID(ADDR_PREFIX),&(msg->l2_nextORpreviousHop),&ipv6_header.src);
-!          break;
-!       case IPHC_SAM_16B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload+ipv6_header.header_length)),ADDR_16B,&temp_addr_16b,OW_BIG_ENDIAN);
-!          ipv6_header.header_length += 2*sizeof(uint8_t);
-!          packetfunctions_mac16bToMac64b(&temp_addr_16b,&temp_addr_64b);
-!          packetfunctions_mac64bToIp128b(idmanager_getMyID(ADDR_PREFIX),&temp_addr_64b,&ipv6_header.src);
-!          break;
-!       case IPHC_SAM_64B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload+ipv6_header.header_length)),ADDR_64B,&temp_addr_64b,OW_BIG_ENDIAN);
-!          ipv6_header.header_length += 8*sizeof(uint8_t);
-!          packetfunctions_mac64bToIp128b(idmanager_getMyID(ADDR_PREFIX),&temp_addr_64b,&ipv6_header.src);
-!          break;
-!       case IPHC_SAM_128B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload+ipv6_header.header_length)),ADDR_128B,&ipv6_header.src,OW_BIG_ENDIAN);
-!          ipv6_header.header_length += 16*sizeof(uint8_t);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)9,
-!                                (errorparameter_t)sam);
-!          break;
-!    }
-!    //destination address
-!    switch (dam) {
-!       case IPHC_DAM_ELIDED:
-!          packetfunctions_mac64bToIp128b(idmanager_getMyID(ADDR_PREFIX),idmanager_getMyID(ADDR_64B),&(ipv6_header.dest));
-!          break;
-!       case IPHC_DAM_16B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload+ipv6_header.header_length)),ADDR_16B,&temp_addr_16b,OW_BIG_ENDIAN);
-!          ipv6_header.header_length += 2*sizeof(uint8_t);
-!          packetfunctions_mac16bToMac64b(&temp_addr_16b,&temp_addr_64b);
-!          packetfunctions_mac64bToIp128b(idmanager_getMyID(ADDR_PREFIX),&temp_addr_64b,&ipv6_header.dest);
-!          break;
-!       case IPHC_DAM_64B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload+ipv6_header.header_length)),ADDR_64B,&temp_addr_64b,OW_BIG_ENDIAN);
-!          ipv6_header.header_length += 8*sizeof(uint8_t);
-!          packetfunctions_mac64bToIp128b(idmanager_getMyID(ADDR_PREFIX),&temp_addr_64b,&ipv6_header.dest);
-!          break;
-!       case IPHC_DAM_128B:
-!          packetfunctions_readAddress(((uint8_t*)(msg->payload+ipv6_header.header_length)),ADDR_128B,&ipv6_header.dest,OW_BIG_ENDIAN);
-!          ipv6_header.header_length += 16*sizeof(uint8_t);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)10,
-!                                (errorparameter_t)dam);
-!          break;
-!    }
-!    /*
-!    During the parsing of the nh field, we found that the next header was
-!    compressed. We now identify which next (compressed) header this is, and
-!    populate the ipv6_header.next_header field accordingly. It's the role of the
-!    appropriate transport module to decompress the header.
-!    */
-!    if (ipv6_header.next_header_compressed==TRUE) {
-!       temp_8b   = *((uint8_t*)(msg->payload)+ipv6_header.header_length);
-!       if    ( (temp_8b & NHC_UDP_MASK) == NHC_UDP_ID) {
-!          ipv6_header.next_header = IANA_UDP;
-!       }else if ( (temp_8b & NHC_IPv6EXT_MASK) == NHC_IPv6EXT_ID){
-!         if( (temp_8b & NHC_IPv6HOP_MASK) == NHC_IPv6HOP_VAL){
-!           //it is hop by hop header
-!           ipv6_header.next_header = IANA_IPv6HOPOPT;
-!         }else{
-!           // the next header could be another IPv6 extension header
-!           ipv6_header.next_header = IANA_UNDEFINED;
-!           openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)11,
-!                                (errorparameter_t)ipv6_header.next_header);
-!         }
-!       }else {
-!          // the next header could be an IPv6 extension header, or misformed
-!          ipv6_header.next_header = IANA_UNDEFINED;
-!          openserial_printError(COMPONENT_IPHC,ERR_6LOWPAN_UNSUPPORTED,
-!                                (errorparameter_t)12,
-!                                (errorparameter_t)ipv6_header.next_header);
-!       }
-!    }
-!    
-!    return ipv6_header;
-! }
-diff -crB openwsn/03a-IPHC/iphc.h ../../../sys/net/openwsn/03a-IPHC/iphc.h
-*** openwsn/03a-IPHC/iphc.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/03a-IPHC/iphc.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,134 ****
-! #ifndef __IPHC_H
-! #define __IPHC_H
-! 
-! /**
-! \addtogroup LoWPAN
-! \{
-! \addtogroup IPHC
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! #define IPHC_DEFAULT_HOP_LIMIT 65
-! 
-! enum IPHC_enums {
-!    IPHC_DISPATCH             = 5,
-!    IPHC_TF                   = 3,
-!    IPHC_NH                   = 2,
-!    IPHC_HLIM                 = 0,
-!    IPHC_CID                  = 7,
-!    IPHC_SAC                  = 6,
-!    IPHC_SAM                  = 4,
-!    IPHC_M                    = 3,
-!    IPHC_DAC                  = 2,
-!    IPHC_DAM                  = 0,
-! };
-! 
-! enum IPHC_DISPATCH_enums {
-!    IPHC_DISPATCH_IPHC        = 3,
-! };
-! 
-! enum IPHC_TF_enums {
-!    IPHC_TF_4B                = 0,
-!    IPHC_TF_3B                = 1,
-!    IPHC_TF_1B                = 2,
-!    IPHC_TF_ELIDED            = 3,
-! };
-! 
-! enum IPHC_NH_enums {    
-!    IPHC_NH_INLINE            = 0,
-!    IPHC_NH_COMPRESSED        = 1,
-! };
-! 
-! enum NHC_enums {
-!    // IPv6 Extension Header Encoding starts with b1110 xxxx
-!    NHC_IPv6EXT_MASK          = 0xf0,          // b1111 0000
-!    NHC_IPv6EXT_ID            = 0xe0,          // b1110 0000
-!    // UDP Header Encoding            starts with b1111 0xxx
-!    NHC_UDP_MASK              = 0xf8,          // b1111 1000
-!    NHC_UDP_ID                = 0xf0,          // b1111 0000
-! };
-! 
-! enum NHC_UDP_enums {
-!    NHC_UDP_C_MASK            = 0x40,
-!    NHC_UDP_PORTS_MASK        = 0x03,
-! };
-! 
-! enum NHC_UDP_PORTS_enums {
-!    NHC_UDP_PORTS_INLINE      = 0,
-!    NHC_UDP_PORTS_16S_8D      = 1,
-!    NHC_UDP_PORTS_8S_8D       = 2,
-!    NHC_UDP_PORTS_4S_4D       = 3,
-! };
-! 
-! enum IPHC_HLIM_enums {
-!    IPHC_HLIM_INLINE          = 0,
-!    IPHC_HLIM_1               = 1,
-!    IPHC_HLIM_64              = 2,
-!    IPHC_HLIM_255             = 3,
-! };
-! 
-! enum IPHC_CID_enums {
-!    IPHC_CID_NO               = 0,
-!    IPHC_CID_YES              = 1,
-! };
-! 
-! enum IPHC_SAC_enums {
-!    IPHC_SAC_STATELESS        = 0,
-!    IPHC_SAC_STATEFUL         = 1,
-! };
-! 
-! enum IPHC_SAM_enums {
-!    IPHC_SAM_128B             = 0,
-!    IPHC_SAM_64B              = 1,
-!    IPHC_SAM_16B              = 2,
-!    IPHC_SAM_ELIDED           = 3,
-! };
-! 
-! enum IPHC_M_enums {
-!    IPHC_M_NO                 = 0,
-!    IPHC_M_YES                = 1,
-! };
-! 
-! enum IPHC_DAC_enums {
-!    IPHC_DAC_STATELESS        = 0,
-!    IPHC_DAC_STATEFUL         = 1,
-! };
-! 
-! enum IPHC_DAM_enums {
-!    IPHC_DAM_128B             = 0,
-!    IPHC_DAM_64B              = 1,
-!    IPHC_DAM_16B              = 2,
-!    IPHC_DAM_ELIDED           = 3,
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    uint8_t     traffic_class;
-!    uint32_t    flow_label;
-!    bool        next_header_compressed;
-!    uint8_t     next_header;
-!    uint8_t     hop_limit;
-!    open_addr_t src;
-!    open_addr_t dest;
-!    uint8_t     header_length;          ///< needed to toss the header
-! } ipv6_header_iht; //iht for "internal header type"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    iphc_init();
-! error_t iphc_sendFromForwarding(OpenQueueEntry_t *msg, ipv6_header_iht ipv6_header, uint8_t fw_SendOrfw_Rcv);
-! error_t iphc_sendFromBridge(OpenQueueEntry_t *msg);
-! void    iphc_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void    iphc_receive(OpenQueueEntry_t* msg);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,184 ----
-! #ifndef __IPHC_H
-! #define __IPHC_H
-! 
-! /**
-! \addtogroup LoWPAN
-! \{
-! \addtogroup IPHC
-! \{
-! */
-! 
-! #include "openwsn.h"
-! //=========================== define ==========================================
-! 
-! #define IPHC_DEFAULT_HOP_LIMIT 65
-! #define IPv6HOP_HDR_LEN         3
-! 
-! enum IPHC_enums {
-!    IPHC_DISPATCH             = 5,
-!    IPHC_TF                   = 3,
-!    IPHC_NH                   = 2,
-!    IPHC_HLIM                 = 0,
-!    IPHC_CID                  = 7,
-!    IPHC_SAC                  = 6,
-!    IPHC_SAM                  = 4,
-!    IPHC_M                    = 3,
-!    IPHC_DAC                  = 2,
-!    IPHC_DAM                  = 0,
-! };
-! 
-! enum IPHC_DISPATCH_enums {
-!    IPHC_DISPATCH_IPHC        = 3,
-! };
-! 
-! enum IPHC_TF_enums {
-!    IPHC_TF_4B                = 0,
-!    IPHC_TF_3B                = 1,
-!    IPHC_TF_1B                = 2,
-!    IPHC_TF_ELIDED            = 3,
-! };
-! 
-! enum IPHC_NH_enums {    
-!    IPHC_NH_INLINE            = 0,
-!    IPHC_NH_COMPRESSED        = 1,
-! };
-! 
-! enum NHC_enums {
-!    // IPv6 Extension Header Encoding starts with b1110 xxxx
-!    NHC_IPv6EXT_MASK          = 0xf0,          // b1111 0000
-!    NHC_IPv6EXT_ID            = 0xe0,          // b1110 0000
-!    // UDP Header Encoding            starts with b1111 0xxx
-!    NHC_UDP_MASK              = 0xf8,          // b1111 1000
-!    NHC_UDP_ID                = 0xf0,          // b1111 0000
-! };
-! 
-! enum NHC_IPv6HOP_enums {
-!    NHC_IPv6HOP_MASK        = 0x0e,
-!    NHC_IPv6HOP_VAL         = 0x0e,
-!    NHC_HOP_NH_MASK         = 0x01,
-! };
-! 
-! 
-! enum NHC_UDP_enums {
-!    NHC_UDP_C_MASK            = 0x40,
-!    NHC_UDP_PORTS_MASK        = 0x03,
-! };
-! 
-! enum NHC_UDP_PORTS_enums {
-!    NHC_UDP_PORTS_INLINE      = 0,
-!    NHC_UDP_PORTS_16S_8D      = 1,
-!    NHC_UDP_PORTS_8S_8D       = 2,
-!    NHC_UDP_PORTS_4S_4D       = 3,
-! };
-! 
-! enum IPHC_HLIM_enums {
-!    IPHC_HLIM_INLINE          = 0,
-!    IPHC_HLIM_1               = 1,
-!    IPHC_HLIM_64              = 2,
-!    IPHC_HLIM_255             = 3,
-! };
-! 
-! enum IPHC_CID_enums {
-!    IPHC_CID_NO               = 0,
-!    IPHC_CID_YES              = 1,
-! };
-! 
-! enum IPHC_SAC_enums {
-!    IPHC_SAC_STATELESS        = 0,
-!    IPHC_SAC_STATEFUL         = 1,
-! };
-! 
-! enum IPHC_SAM_enums {
-!    IPHC_SAM_128B             = 0,
-!    IPHC_SAM_64B              = 1,
-!    IPHC_SAM_16B              = 2,
-!    IPHC_SAM_ELIDED           = 3,
-! };
-! 
-! enum IPHC_M_enums {
-!    IPHC_M_NO                 = 0,
-!    IPHC_M_YES                = 1,
-! };
-! 
-! enum IPHC_DAC_enums {
-!    IPHC_DAC_STATELESS        = 0,
-!    IPHC_DAC_STATEFUL         = 1,
-! };
-! 
-! enum IPHC_DAM_enums {
-!    IPHC_DAM_128B             = 0,
-!    IPHC_DAM_64B              = 1,
-!    IPHC_DAM_16B              = 2,
-!    IPHC_DAM_ELIDED           = 3,
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    uint8_t     traffic_class;
-!    uint32_t    flow_label;
-!    bool        next_header_compressed;
-!    uint8_t     next_header;
-!    uint8_t     hop_limit;
-!    open_addr_t src;
-!    open_addr_t dest;
-!    uint8_t     header_length;          ///< needed to toss the header
-! } ipv6_header_iht; //iht for "internal header type"
-! 
-! 
-! /*
-!  The Hop-by-Hop Options header is used to carry optional information
-!    that must be examined by every node along a packet's delivery path.
-!    The Hop-by-Hop Options header is identified by a Next Header value of
-!    0 in the IPv6 header, and has the following format:
-! */
-! typedef struct {
-!   /*see rfc 6282 section 4.2 The first 7 bits serve as an identifier for the IPv6 Extension Header immediately
-!    following the LOWPAN_NHC octet.  The remaining bit indicates whether
-!    or not the following header utilizes LOWPAN_NHC encoding. */
-!    uint8_t    headerlen;// counter for internal use
-!    bool       next_header_compressed;
-!    uint8_t    lowpan_nhc; 
-!    uint8_t    nextHeader;//IPv6 hop by hop header field see rfc 2460 section 4.3 
-!    uint8_t    HdrExtLen; //IPv6 hop by hop header field see rfc 6282 section 4.2 
-!    /*
-!    The Length field contained in a compressed IPv6 Extension Header
-!    indicates the number of octets that pertain to the (compressed)
-!    extension header following the Length field.  Note that this changes
-!    the Length field definition in [RFC2460] from indicating the header
-!    size in 8-octet units, not including the first 8 octets.  Changing
-!    the Length field to be in units of octets removes wasteful internal
-!    fragmentation.*/
-!    
-! } ipv6_hopbyhop_ht;
-! 
-! //PRAGMA(pack(1));
-! typedef struct {
-!    //RPL hop by hop option header as described by RFC 6553 p.3
-!    uint8_t    optionType;    ///0x63.
-!    uint8_t    optionLen;     /////8-bit field indicating the length of the option, in octets, excluding the Option Type and Opt Data Len fields.
-!    uint8_t    flags;         //ORF00000.
-!    uint8_t    rplInstanceID;  //instanceid
-!    uint16_t   senderRank;    //sender rank
-! } rpl_hopoption_ht;
-! //PRAGMA(pack());
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    iphc_init(void);
-! owerror_t iphc_sendFromForwarding(OpenQueueEntry_t *msg, 
-!                                   ipv6_header_iht ipv6_header, 
-!                                   rpl_hopoption_ht *hopbyhop_option, 
-!                                   uint8_t fw_SendOrfw_Rcv);
-! 
-! owerror_t iphc_sendFromBridge(OpenQueueEntry_t *msg);
-! void    iphc_sendDone(OpenQueueEntry_t *msg, owerror_t error);
-! void    iphc_receive(OpenQueueEntry_t *msg);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/03a-IPHC/openbridge.c ../../../sys/net/openwsn/03a-IPHC/openbridge.c
-*** openwsn/03a-IPHC/openbridge.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/03a-IPHC/openbridge.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,93 ****
-! #include "openwsn.h"
-! #include "openbridge.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! #include "iphc.h"
-! #include "idmanager.h"
-! #include "openqueue.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void openbridge_init() {
-! }
-! 
-! void openbridge_triggerData() {
-!    uint8_t           input_buffer[136];//worst case: 8B of next hop + 128B of data
-!    OpenQueueEntry_t* pkt;
-!    uint8_t           numDataBytes;
-!    
-!    numDataBytes = openserial_getNumDataBytes();
-!    openserial_getInputBuffer(&(input_buffer[0]),numDataBytes);
-!    
-!    //poipoi xv
-!    //this is a temporal workaround as we are never supposed to get chunks of data
-!    //longer than input buffer size.. I assume that HDLC will solve that.
-!    
-!    if (numDataBytes>136){
-!        openserial_printError(COMPONENT_OPENBRIDGE,ERR_INPUTBUFFER_LENGTH,
-!                    (errorparameter_t)0,
-!                    (errorparameter_t)numDataBytes);
-!        //return;
-!        //poipoi xv test that..
-!        numDataBytes=sizeof(input_buffer);
-!    }
-!    
-!    if (idmanager_getIsBridge()==TRUE && numDataBytes>0) {
-!       pkt = openqueue_getFreePacketBuffer(COMPONENT_OPENBRIDGE);
-!       if (pkt==NULL) {
-!          openserial_printError(COMPONENT_OPENBRIDGE,ERR_NO_FREE_PACKET_BUFFER,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          return;
-!       }
-!       //admin
-!       pkt->creator  = COMPONENT_OPENBRIDGE;
-!       pkt->owner    = COMPONENT_OPENBRIDGE;
-!       //l2
-!       pkt->l2_nextORpreviousHop.type = ADDR_64B;
-!       memcpy(&(pkt->l2_nextORpreviousHop.addr_64b[0]),&(input_buffer[0]),8);
-!       //payload
-!       packetfunctions_reserveHeaderSize(pkt,numDataBytes-8);
-!       memcpy(pkt->payload,&(input_buffer[8]),numDataBytes-8);
-!       //send
-!       if ((iphc_sendFromBridge(pkt))==E_FAIL) {
-!          openqueue_freePacketBuffer(pkt);
-!       }
-!    }
-! }
-! 
-! void openbridge_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_OPENBRIDGE;
-!    if (msg->creator!=COMPONENT_OPENBRIDGE) {
-!       openserial_printError(COMPONENT_OPENBRIDGE,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! /**
-! \brief Receive a frame at the openbridge, which sends it out over serial.
-! */
-! void openbridge_receive(OpenQueueEntry_t* msg) {
-!    
-!    // prepend previous hop
-!    packetfunctions_reserveHeaderSize(msg,LENGTH_ADDR64b);
-!    memcpy(msg->payload,msg->l2_nextORpreviousHop.addr_64b,LENGTH_ADDR64b);
-!    
-!    // prepend next hop (me)
-!    packetfunctions_reserveHeaderSize(msg,LENGTH_ADDR64b);
-!    memcpy(msg->payload,idmanager_getMyID(ADDR_64B)->addr_64b,LENGTH_ADDR64b);
-!    
-!    // send packet over serial (will be memcopied into serial buffer)
-!    openserial_printData((uint8_t*)(msg->payload),msg->length);
-!    
-!    // free packet
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! //=========================== private =========================================
---- 1,100 ----
-! #include "openwsn.h"
-! #include "openbridge.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! #include "iphc.h"
-! #include "idmanager.h"
-! #include "openqueue.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! //=========================== public ==========================================
-! 
-! void openbridge_init(void) {
-! }
-! 
-! void openbridge_triggerData(void) {
-!    uint8_t           input_buffer[136];//worst case: 8B of next hop + 128B of data
-!    OpenQueueEntry_t* pkt;
-!    uint8_t           numDataBytes;
-!   
-!    numDataBytes = openserial_getNumDataBytes();
-!   
-!    //poipoi xv
-!    //this is a temporal workaround as we are never supposed to get chunks of data
-!    //longer than input buffer size.. I assume that HDLC will solve that.
-!    // MAC header is 13B + 8 next hop so we cannot accept packets that are longer than 118B
-!    if (numDataBytes>(136 - 21) || numDataBytes<8){
-!    //to prevent too short or too long serial frames to kill the stack  
-!        openserial_printError(COMPONENT_OPENBRIDGE,ERR_INPUTBUFFER_LENGTH,
-!                    (errorparameter_t)numDataBytes,
-!                    (errorparameter_t)0);
-!        return;
-!    }
-!   
-!    //copying the buffer once we know it is not too big
-!    openserial_getInputBuffer(&(input_buffer[0]),numDataBytes);
-!   
-!    if (idmanager_getIsBridge()==TRUE && numDataBytes>0) {
-!       pkt = openqueue_getFreePacketBuffer(COMPONENT_OPENBRIDGE);
-!       if (pkt==NULL) {
-!          openserial_printError(COMPONENT_OPENBRIDGE,ERR_NO_FREE_PACKET_BUFFER,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          return;
-!       }
-!       //admin
-!       pkt->creator  = COMPONENT_OPENBRIDGE;
-!       pkt->owner    = COMPONENT_OPENBRIDGE;
-!       //l2
-!       pkt->l2_nextORpreviousHop.type = ADDR_64B;
-!       memcpy(&(pkt->l2_nextORpreviousHop.addr_64b[0]),&(input_buffer[0]),8);
-!       //payload
-!       packetfunctions_reserveHeaderSize(pkt,numDataBytes-8);
-!       memcpy(pkt->payload,&(input_buffer[8]),numDataBytes-8);
-!       
-!       //this is to catch the too short packet. remove it after fw-103 is solved.
-!       if (numDataBytes<16){
-!               openserial_printError(COMPONENT_OPENBRIDGE,ERR_INVALIDSERIALFRAME,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       }        
-!       //send
-!       if ((iphc_sendFromBridge(pkt))==E_FAIL) {
-!          openqueue_freePacketBuffer(pkt);
-!       }
-!    }
-! }
-! 
-! void openbridge_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_OPENBRIDGE;
-!    if (msg->creator!=COMPONENT_OPENBRIDGE) {
-!       openserial_printError(COMPONENT_OPENBRIDGE,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! /**
-! \brief Receive a frame at the openbridge, which sends it out over serial.
-! */
-! void openbridge_receive(OpenQueueEntry_t* msg) {
-!    
-!    // prepend previous hop
-!    packetfunctions_reserveHeaderSize(msg,LENGTH_ADDR64b);
-!    memcpy(msg->payload,msg->l2_nextORpreviousHop.addr_64b,LENGTH_ADDR64b);
-!    
-!    // prepend next hop (me)
-!    packetfunctions_reserveHeaderSize(msg,LENGTH_ADDR64b);
-!    memcpy(msg->payload,idmanager_getMyID(ADDR_64B)->addr_64b,LENGTH_ADDR64b);
-!    
-!    // send packet over serial (will be memcopied into serial buffer)
-!    openserial_printData((uint8_t*)(msg->payload),msg->length);
-!    
-!    // free packet
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! //=========================== private =========================================
-diff -crB openwsn/03a-IPHC/openbridge.h ../../../sys/net/openwsn/03a-IPHC/openbridge.h
-*** openwsn/03a-IPHC/openbridge.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/03a-IPHC/openbridge.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,29 ****
-! #ifndef __OPENBRIDGE_H
-! #define __OPENBRIDGE_H
-! 
-! /**
-! \addtogroup LoWPAN
-! \{
-! \addtogroup OpenBridge
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void openbridge_init();
-! void openbridge_triggerData();
-! void openbridge_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void openbridge_receive(OpenQueueEntry_t* msg);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,29 ----
-! #ifndef __OPENBRIDGE_H
-! #define __OPENBRIDGE_H
-! 
-! /**
-! \addtogroup LoWPAN
-! \{
-! \addtogroup OpenBridge
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void openbridge_init(void);
-! void openbridge_triggerData(void);
-! void openbridge_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void openbridge_receive(OpenQueueEntry_t* msg);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/03b-IPv6/Makefile ../../../sys/net/openwsn/03b-IPv6/Makefile
-*** openwsn/03b-IPv6/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/03b-IPv6/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/ 
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBMOD)
-+ 
-+ $(BINDIR)$(SUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/03b-IPv6/forwarding.c ../../../sys/net/openwsn/03b-IPv6/forwarding.c
-*** openwsn/03b-IPv6/forwarding.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/03b-IPv6/forwarding.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,406 ****
-! #include "openwsn.h"
-! #include "forwarding.h"
-! #include "iphc.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "idmanager.h"
-! #include "packetfunctions.h"
-! #include "neighbors.h"
-! #include "icmpv6.h"
-! #include "openudp.h"
-! #include "opentcp.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t fowarding_send_internal_RoutingTable(OpenQueueEntry_t *msg,  ipv6_header_iht ipv6_header, uint8_t fw_SendOrfw_Rcv);
-! void    forwarding_getNextHop_RoutingTable(open_addr_t* destination, open_addr_t* addressToWrite);
-! error_t fowarding_send_internal_SourceRouting(OpenQueueEntry_t *msg, ipv6_header_iht ipv6_header);
-! 
-! //=========================== public ==========================================
-! 
-! /**
-! \brief Initialize this module.
-! */
-! void forwarding_init() {
-! }
-! 
-! /**
-! \brief Send a packet originating at this mote.
-! 
-! This function is called by an upper layer, and only concerns packets originated
-! at this mote.
-! 
-! \param[in,out] msg Packet to send.
-! */
-! error_t forwarding_send(OpenQueueEntry_t* msg) { 
-!    ipv6_header_iht ipv6_header;
-!    open_addr_t*    myprefix;
-!    open_addr_t*    myadd64;
-!    
-!    // take ownership
-!    msg->owner                = COMPONENT_FORWARDING; 
-!    
-!    // retrieve my prefix and EUI64
-!    myprefix                  = idmanager_getMyID(ADDR_PREFIX);
-!    myadd64                   = idmanager_getMyID(ADDR_64B);
-!    
-!    // set source address (to me)
-!    msg->l3_sourceAdd.type=ADDR_128B;
-!    memcpy(&(msg->l3_sourceAdd.addr_128b[0]),myprefix->prefix,8);
-!    memcpy(&(msg->l3_sourceAdd.addr_128b[8]),myadd64->addr_64b,8);
-!    
-!    // initialize IPv6 header
-!    memset(&ipv6_header,0,sizeof(ipv6_header_iht));
-!    
-!    //set hop limit to the default in-network value as this packet is being sent from upper layer.
-!    //this is done here as send_internal is used by forwarding of packets as well which 
-!    //carry a hlim. This value is required to be set to a value as the following function can decrement it
-!    ipv6_header.hop_limit     = IPHC_DEFAULT_HOP_LIMIT;
-!    
-!    return fowarding_send_internal_RoutingTable(msg,ipv6_header,PCKTSEND);
-! }
-! 
-! /**
-! \brief Indicates a packet has been sent.
-! 
-! \param[in,out] msg   The packet just sent.
-! \param[in]     error The outcome of sending it.
-! */
-! void forwarding_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    
-!    // take ownership
-!    msg->owner = COMPONENT_FORWARDING;
-!    
-!    if (msg->creator==COMPONENT_RADIO || msg->creator==COMPONENT_FORWARDING) {
-!       // that is a packet I relayed
-!       
-!       // free packet
-!       openqueue_freePacketBuffer(msg);
-!    } else {
-!       // that is a packet I created
-!       
-!       // indicate sendDone to upper layer
-!       switch(msg->l4_protocol) {
-!          case IANA_TCP:
-!             opentcp_sendDone(msg,error);
-!             break;
-!          case IANA_UDP:
-!             openudp_sendDone(msg,error);
-!             break;
-!          case IANA_ICMPv6:
-!             icmpv6_sendDone(msg,error);
-!             break;
-!          default:
-!             openserial_printCritical(COMPONENT_FORWARDING,ERR_WRONG_TRAN_PROTOCOL,
-!                                   (errorparameter_t)msg->l4_protocol,
-!                                   (errorparameter_t)0);
-!             // free packet
-!             openqueue_freePacketBuffer(msg);
-!       }
-!    }
-! }
-! 
-! /**
-! \brief Indicates a packet was received.
-! 
-! \param[in,out] msg         The packet just sent.
-! \param[in]     ipv6_header The information contained in the 6LoWPAN header.
-! */
-! void forwarding_receive(OpenQueueEntry_t* msg, ipv6_header_iht ipv6_header) {
-!    
-!    // take ownership
-!    msg->owner                  = COMPONENT_FORWARDING;
-!    
-!    // populate packets metadata with l4 information
-!    msg->l4_protocol            = ipv6_header.next_header;
-!    msg->l4_protocol_compressed = ipv6_header.next_header_compressed;
-!    
-!    // populate packets metadata with l3 information
-!    memcpy(&(msg->l3_destinationAdd),&ipv6_header.dest,sizeof(open_addr_t));
-!    memcpy(&(msg->l3_sourceAdd),     &ipv6_header.src, sizeof(open_addr_t));
-!    
-!    if (
-!           (
-!              idmanager_isMyAddress(&ipv6_header.dest)
-!              ||
-!              packetfunctions_isBroadcastMulticast(&ipv6_header.dest)
-!           )
-!           &&
-!           ipv6_header.next_header!=IANA_IPv6ROUTE
-!        ) {
-!       // this packet is for me, but no routing header.
-!       
-!       // indicate received packet to upper layer
-!       switch(msg->l4_protocol) {
-!          case IANA_TCP:
-!             opentcp_receive(msg);
-!             break;
-!          case IANA_UDP:
-!             openudp_receive(msg);
-!             break;
-!          case IANA_ICMPv6:
-!             icmpv6_receive(msg);
-!             break;
-!          default:
-!             openserial_printError(COMPONENT_FORWARDING,ERR_WRONG_TRAN_PROTOCOL,
-!                                   (errorparameter_t)msg->l4_protocol,
-!                                   (errorparameter_t)1);
-!             openqueue_freePacketBuffer(msg);
-!       }
-!    } else {
-!       // this packet is not for me: relay
-!       
-!       // change the creator of the packet
-!       msg->creator = COMPONENT_FORWARDING;
-!       
-!       if (ipv6_header.next_header!=IANA_IPv6ROUTE) {
-!          // no source routing header present
-!          
-!          // resend as if from upper layer 
-!          if (fowarding_send_internal_RoutingTable(msg, ipv6_header,PCKTFORWARD)==E_FAIL) {
-!             openqueue_freePacketBuffer(msg);
-!          }
-!       } else {
-!          // source routing header present
-!          
-!          if (fowarding_send_internal_SourceRouting(msg, ipv6_header)==E_FAIL) {
-!             openqueue_freePacketBuffer(msg);
-!          }
-!       }
-!    }
-! }
-! 
-! //=========================== private =========================================
-! 
-! /**
-! \brief Send a packet using the routing table to find the next hop.
-! 
-! \param[in,out] msg             The packet to send.
-! \param[in]     ipv6_header     The packet's IPv6 header.
-! \param[in]     fw_SendOrfw_Rcv The packet is originating from this mote
-!    (PCKTSEND), or forwarded (PCKTFORWARD).
-! */
-! error_t fowarding_send_internal_RoutingTable(OpenQueueEntry_t* msg, ipv6_header_iht ipv6_header, uint8_t fw_SendOrfw_Rcv) {
-!    
-!    // retrieve the next hop from the routing table
-!    forwarding_getNextHop_RoutingTable(&(msg->l3_destinationAdd),&(msg->l2_nextORpreviousHop));
-!    if (msg->l2_nextORpreviousHop.type==ADDR_NONE) {
-!       openserial_printError(COMPONENT_FORWARDING,ERR_NO_NEXTHOP,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    
-!    // send to next lower layer
-!    return iphc_sendFromForwarding(msg, ipv6_header, fw_SendOrfw_Rcv);
-! }
-! 
-! /**
-! \brief Send a packet using the source rout to find the next hop.
-! 
-! \note This is always called for packets being forwarded.
-! 
-! How to process the routing header is detailed in
-! http://tools.ietf.org/html/rfc6554#page-9.
-! 
-! \param[in,out] msg             The packet to send.
-! \param[in]     ipv6_header     The packet's IPv6 header.
-! */
-! error_t fowarding_send_internal_SourceRouting(OpenQueueEntry_t *msg, ipv6_header_iht ipv6_header) {
-!    uint8_t         local_CmprE;
-!    uint8_t         local_CmprI;
-!    uint8_t         numAddr;
-!    uint8_t         hlen;
-!    uint8_t         addressposition;
-!    uint8_t*        runningPointer;
-!    uint8_t         octetsAddressSize;
-!    open_addr_t*    prefix;
-!    rpl_routing_ht* rpl_routing_hdr;
-!    
-!    // get my prefix
-!    prefix               = idmanager_getMyID(ADDR_PREFIX);
-!    
-!    // cast packet to RPL routing header
-!    rpl_routing_hdr      = (rpl_routing_ht*)(msg->payload);
-!    
-!    // point behind the RPL routing header
-!    runningPointer       = (msg->payload)+sizeof(rpl_routing_ht);
-!    
-!    // retrieve CmprE and CmprI
-!    
-!    /*CmprE 4-bit unsigned integer. Number of prefix octets
-!      from the last segment (i.e., segment n) that are
-!      elided. For example, an SRH carrying a full IPv6
-!      address in Addressesn sets CmprE to 0.*/
-!    
-!    local_CmprE          = rpl_routing_hdr->CmprICmprE & 0x0f;   
-!    local_CmprI          = rpl_routing_hdr->CmprICmprE & 0xf0;
-!    local_CmprI          = local_CmprI>>4;
-!    
-!    numAddr              = (((rpl_routing_hdr->HdrExtLen*8)-rpl_routing_hdr->PadRes-(16-local_CmprE))/(16-local_CmprI))+1;
-!    
-!    if (rpl_routing_hdr->SegmentsLeft==0){
-!       // no more segments left, this is the last hop
-!       
-!       // push packet up the stack
-!       msg->l4_protocol  = rpl_routing_hdr->nextHeader;
-!       hlen              = rpl_routing_hdr->HdrExtLen; //in 8-octet units
-!       
-!       // toss RPL routing header
-!       packetfunctions_tossHeader(msg,sizeof(rpl_routing_ht));
-!       
-!       // toss source route addresses
-!       octetsAddressSize = LENGTH_ADDR128b - local_CmprE; //total length - number of octets that are elided
-!       packetfunctions_tossHeader(msg,octetsAddressSize*hlen);
-!       
-!       // indicate reception to upper layer
-!       switch(msg->l4_protocol) {
-!          case IANA_TCP:
-!             opentcp_receive(msg);
-!             break;
-!          case IANA_UDP:
-!             openudp_receive(msg);
-!             break;
-!          case IANA_ICMPv6:
-!             icmpv6_receive(msg);
-!             break;
-!          default:
-!             openserial_printError(COMPONENT_FORWARDING,ERR_WRONG_TRAN_PROTOCOL,
-!                                (errorparameter_t)msg->l4_protocol,
-!                                (errorparameter_t)1);
-!             openqueue_freePacketBuffer(msg);
-!             return E_FAIL;
-!       }
-!       
-!       // stop executing here (successful)
-!       return E_SUCCESS;
-!    
-!    } else {
-!       // this is not the last hop
-!       
-!       if (rpl_routing_hdr->SegmentsLeft>numAddr) {
-!          // error code: there are more segments left than space in source route
-!          
-!          // TODO: send ICMPv6 packet (code 0) to originator
-!          
-!          openserial_printError(COMPONENT_FORWARDING,ERR_NO_NEXTHOP,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!          openqueue_freePacketBuffer(msg);
-!          return E_FAIL;
-!       
-!       } else {
-!          
-!          // decrement number of segments left
-!          rpl_routing_hdr->SegmentsLeft--;
-!          
-!          // find next hop address in source route
-!          addressposition    = numAddr-(rpl_routing_hdr->SegmentsLeft);
-!          
-!          // how many octets have the address? 
-!          if (rpl_routing_hdr->SegmentsLeft > 1){
-!               octetsAddressSize = LENGTH_ADDR128b - local_CmprI; //max addr length - number of prefix octets that are elided in the internal route elements
-!          }else{
-!               octetsAddressSize = LENGTH_ADDR128b - local_CmprE; //max addr length - number of prefix octets that are elided in the internal route elements
-!          }
-!          switch(octetsAddressSize) {
-!             case LENGTH_ADDR16b:
-!                // write previous hop
-!                msg->l2_nextORpreviousHop.type    = ADDR_16B;
-!                memcpy(
-!                   &(msg->l2_nextORpreviousHop.addr_16b),
-!                   runningPointer+((addressposition-1)*octetsAddressSize),
-!                   octetsAddressSize
-!                );
-!                // write next hop
-!                msg->l3_destinationAdd.type       = ADDR_16B;
-!                memcpy(
-!                   &(msg->l3_destinationAdd.addr_16b),
-!                   runningPointer+((addressposition-1)*octetsAddressSize),
-!                   octetsAddressSize
-!                );
-!                break;
-!             case LENGTH_ADDR64b:
-!                // write previous hop
-!                msg->l2_nextORpreviousHop.type    = ADDR_64B;
-!                memcpy(
-!                   &(msg->l2_nextORpreviousHop.addr_64b),
-!                   runningPointer+((addressposition-1)*octetsAddressSize),
-!                   octetsAddressSize
-!                );
-!                
-!                //this is 128b address as send from forwarding function 
-!                //takes care of reducing it if needed.
-!                
-!                //write next hop
-!                msg->l3_destinationAdd.type       = ADDR_128B;
-!                memcpy(
-!                   &(msg->l3_destinationAdd.addr_128b[0]),
-!                   prefix->prefix,
-!                   LENGTH_ADDR64b
-!                );
-!                
-!                memcpy(
-!                   &(msg->l3_destinationAdd.addr_128b[8]),
-!                   runningPointer+((addressposition-1)*octetsAddressSize),
-!                   octetsAddressSize
-!                );
-!                
-!                break;
-!             case LENGTH_ADDR128b:
-!                // write previous hop
-!                msg->l2_nextORpreviousHop.type    = ADDR_128B;
-!                memcpy(
-!                   &(msg->l2_nextORpreviousHop.addr_128b),
-!                   runningPointer+((addressposition-1)*octetsAddressSize),
-!                   octetsAddressSize
-!                );
-!                // write next hop
-!                msg->l3_destinationAdd.type       = ADDR_128B;
-!                memcpy(
-!                   &(msg->l3_destinationAdd.addr_128b),
-!                   runningPointer+((addressposition-1)*octetsAddressSize),
-!                   octetsAddressSize
-!                );
-!                break;
-!             default:
-!                //poipoi xv
-!                //any other value is not supported by now.
-!                openserial_printError(COMPONENT_FORWARDING,ERR_INVALID_PARAM,
-!                                (errorparameter_t)1,
-!                                (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return E_FAIL;
-!          }
-!       }
-!    }
-!    
-!    // send to next lower layer
-!    return iphc_sendFromForwarding(msg, ipv6_header, PCKTFORWARD);
-! }
-! 
-! /**
-! \brief Retrieve the next hop's address from routing table.
-! 
-! \param[in]  destination128b  Final IPv6 destination address.
-! \param[out]addressToWrite64b Location to write the EUI64 of next hop to.
-! */
-! void forwarding_getNextHop_RoutingTable(open_addr_t* destination128b, open_addr_t* addressToWrite64b) {
-!    uint8_t i;
-!    open_addr_t temp_prefix64btoWrite;
-!    if (packetfunctions_isBroadcastMulticast(destination128b)) {
-!       // IP destination is broadcast, send to 0xffffffffffffffff
-!       addressToWrite64b->type = ADDR_64B;
-!       for (i=0;i<8;i++) {
-!          addressToWrite64b->addr_64b[i] = 0xff;
-!       }
-!    } else if (neighbors_isStableNeighbor(destination128b)) {
-!       // IP destination is 1-hop neighbor, send directly
-!       packetfunctions_ip128bToMac64b(destination128b,&temp_prefix64btoWrite,addressToWrite64b);
-!    } else {
-!       // destination is remote, send to preferred parent
-!       neighbors_getPreferredParentEui64(addressToWrite64b);
-!    }
-! }
-\ No newline at end of file
---- 1,478 ----
-! #include "openwsn.h"
-! #include "forwarding.h"
-! #include "iphc.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "idmanager.h"
-! #include "packetfunctions.h"
-! #include "neighbors.h"
-! #include "icmpv6.h"
-! #include "icmpv6rpl.h"
-! #include "openudp.h"
-! #include "opentcp.h"
-! //#include "debugpins.h"
-! #include "scheduler.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t forwarding_send_internal_RoutingTable(OpenQueueEntry_t *msg,  ipv6_header_iht ipv6_header, rpl_hopoption_ht hopbyhop_header, uint8_t fw_SendOrfw_Rcv);
-! void    forwarding_getNextHop_RoutingTable(open_addr_t* destination, open_addr_t* addressToWrite);
-! owerror_t forwarding_send_internal_SourceRouting(OpenQueueEntry_t *msg, ipv6_header_iht ipv6_header);
-! void forwarding_createHopByHopOption(rpl_hopoption_ht *hopbyhop_opt, uint8_t flags);
-! 
-! //=========================== public ==========================================
-! 
-! /**
-! \brief Initialize this module.
-! */
-! void forwarding_init(void) {
-! }
-! 
-! 
-! /**
-! \brief Send a packet originating at this mote.
-! 
-! This function is called by an upper layer, and only concerns packets originated
-! at this mote.
-! 
-! \param[in,out] msg Packet to send.
-! */
-! owerror_t forwarding_send(OpenQueueEntry_t* msg) { 
-!    ipv6_header_iht ipv6_header;
-!    rpl_hopoption_ht hopbyhop_opt;
-! 
-!    open_addr_t*    myprefix;
-!    open_addr_t*    myadd64;
-!    
-!    // take ownership
-!    msg->owner                = COMPONENT_FORWARDING; 
-!    
-!    // retrieve my prefix and EUI64
-!    myprefix                  = idmanager_getMyID(ADDR_PREFIX);
-!    myadd64                   = idmanager_getMyID(ADDR_64B);
-!    
-!    // set source address (to me)
-!    msg->l3_sourceAdd.type=ADDR_128B;
-!    memcpy(&(msg->l3_sourceAdd.addr_128b[0]),myprefix->prefix,8);
-!    memcpy(&(msg->l3_sourceAdd.addr_128b[8]),myadd64->addr_64b,8);
-!    
-!    // initialize IPv6 header
-!    memset(&ipv6_header,0,sizeof(ipv6_header_iht));
-!    
-!    //set hop limit to the default in-network value as this packet is being sent from upper layer.
-!    //this is done here as send_internal is used by forwarding of packets as well which 
-!    //carry a hlim. This value is required to be set to a value as the following function can decrement it
-!    ipv6_header.hop_limit     = IPHC_DEFAULT_HOP_LIMIT;
-!     //create hop  by hop option
-!    forwarding_createHopByHopOption(&hopbyhop_opt, 0x00); //flags are 0x00 -- TODO check and define macro   
-!    
-!    return forwarding_send_internal_RoutingTable(msg,ipv6_header,hopbyhop_opt,PCKTSEND);
-! }
-! 
-! /**
-! \brief Indicates a packet has been sent.
-! 
-! \param[in,out] msg   The packet just sent.
-! \param[in]     error The outcome of sending it.
-! */
-! void forwarding_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    
-!    // take ownership
-!    msg->owner = COMPONENT_FORWARDING;
-!    
-!    if (msg->creator==COMPONENT_RADIO || msg->creator==COMPONENT_FORWARDING) {
-!       // that is a packet I relayed
-!       
-!       // free packet
-!       openqueue_freePacketBuffer(msg);
-!    } else {
-!       // that is a packet I created
-!       
-!       // indicate sendDone to upper layer
-!       switch(msg->l4_protocol) {
-!          case IANA_TCP:
-!             opentcp_sendDone(msg,error);
-!             break;
-!          case IANA_UDP:
-!             openudp_sendDone(msg,error);
-!             break;
-!          case IANA_ICMPv6:
-!             icmpv6_sendDone(msg,error);
-!             break;
-!          default:
-!             openserial_printCritical(COMPONENT_FORWARDING,ERR_WRONG_TRAN_PROTOCOL,
-!                                   (errorparameter_t)msg->l4_protocol,
-!                                   (errorparameter_t)0);
-!             // free packet
-!             openqueue_freePacketBuffer(msg);
-!       }
-!    }
-! }
-! 
-! /**
-! \brief Indicates a packet was received.
-! 
-! \param[in,out] msg         The packet just sent.
-! \param[in]     ipv6_header The information contained in the 6LoWPAN header.
-! */
-! void forwarding_receive(OpenQueueEntry_t* msg, 
-!                         ipv6_header_iht ipv6_header, 
-!                         ipv6_hopbyhop_ht ipv6_hop_header, 
-!                         rpl_hopoption_ht hop_by_hop_option) {
-!                           
-!    uint8_t temp_flags;
-!    
-!    // take ownership
-!    msg->owner                  = COMPONENT_FORWARDING;
-!    
-!    
-!    //contains a 
-!  if (ipv6_header.next_header==IANA_IPv6HOPOPT){
-!       // populate packets metadata with l4 information
-!       msg->l4_protocol            = ipv6_hop_header.nextHeader;
-!       msg->l4_protocol_compressed = ipv6_hop_header.next_header_compressed; // rfc 6282   
-!       
-!       //process HOP BY HOP header
-!       
-!       
-!    }else{
-!       msg->l4_protocol            = ipv6_header.next_header;
-!       msg->l4_protocol_compressed = ipv6_header.next_header_compressed; // rfc 6282   
-!    }
-!    
-!      // populate packets metadata with l3 information
-!    memcpy(&(msg->l3_destinationAdd),&ipv6_header.dest,sizeof(open_addr_t));
-!    memcpy(&(msg->l3_sourceAdd),     &ipv6_header.src, sizeof(open_addr_t));
-!    
-!    
-!    if (
-!           (
-!              idmanager_isMyAddress(&ipv6_header.dest)
-!              ||
-!              packetfunctions_isBroadcastMulticast(&ipv6_header.dest)
-!           )
-!           &&
-!           //ipv6 header - next header will be IANA_IPv6HOPOPT or IANA_IPv6ROUTE
-!           ipv6_header.next_header!=IANA_IPv6ROUTE
-!        ) {
-!       // this packet is for me, but no src routing header.
-!       
-!       // indicate received packet to upper layer
-!       switch(msg->l4_protocol) {
-!          case IANA_TCP:
-!             opentcp_receive(msg);
-!             break;
-!          case IANA_UDP:
-!             openudp_receive(msg);
-!             break;
-!          case IANA_ICMPv6:
-!             icmpv6_receive(msg);
-!             break;
-!          default:
-!             openserial_printError(COMPONENT_FORWARDING,ERR_WRONG_TRAN_PROTOCOL,
-!                                   (errorparameter_t)msg->l4_protocol,
-!                                   (errorparameter_t)1);
-!             openqueue_freePacketBuffer(msg);
-!       }
-!    } else {
-!       // this packet is not for me: relay
-!    
-!       // change the creator of the packet
-!       msg->creator = COMPONENT_FORWARDING;
-!       
-!       if (ipv6_header.next_header!=IANA_IPv6ROUTE) {
-!          // no source routing header present
-!           
-!           //process HOP bY HOP header
-!           temp_flags = hop_by_hop_option.flags;
-!           if ((temp_flags & O_FLAG)!=0){
-!             //error wrong direction
-!             //what todo? print the error
-!             openserial_printError(COMPONENT_FORWARDING,ERR_WRONG_DIRECTION,
-!                                   (errorparameter_t)1,
-!                                   (errorparameter_t)1);
-!           }
-!           if (hop_by_hop_option.senderRank < neighbors_getMyDAGrank()){
-!             //wrong rank relation.. loop detected
-!             temp_flags |= R_FLAG; //set r flag.
-!             openserial_printError(COMPONENT_FORWARDING,ERR_LOOP_DETECTED,
-!                                   (errorparameter_t) hop_by_hop_option.senderRank,
-!                                   (errorparameter_t) neighbors_getMyDAGrank());
-!           }
-!             
-!           //O flag should always be 0 as this is upstream route.
-!           
-!           forwarding_createHopByHopOption(&hop_by_hop_option, temp_flags); 
-!    
-!         
-!          // resend as if from upper layer 
-!          if (forwarding_send_internal_RoutingTable(msg, ipv6_header,hop_by_hop_option,PCKTFORWARD)==E_FAIL) {
-!             openqueue_freePacketBuffer(msg);
-!          }
-!       } else {
-!          // source routing header present 
-!           if (forwarding_send_internal_SourceRouting(msg, ipv6_header)==E_FAIL) {
-!             //already freed by send_internal if it fails
-!             //todo change error type to another that says src_route failure.
-!            openserial_printError(COMPONENT_FORWARDING,ERR_INVALID_FWDMODE,
-!                                   (errorparameter_t)0,
-!                                   (errorparameter_t)0);
-!          }
-!       }
-!    }
-! }
-! 
-! 
-! 
-! /**
-! \brief Send a packet using the routing table to find the next hop.
-! 
-! \param[in,out] msg             The packet to send.
-! \param[in]     ipv6_header     The packet's IPv6 header.
-! \param[in]     fw_SendOrfw_Rcv The packet is originating from this mote
-!    (PCKTSEND), or forwarded (PCKTFORWARD).
-! */
-! owerror_t forwarding_send_internal_RoutingTable(OpenQueueEntry_t* msg, ipv6_header_iht ipv6_header, rpl_hopoption_ht hopbyhop_opt, uint8_t fw_SendOrfw_Rcv) {
-!    
-!    // retrieve the next hop from the routing table
-!    forwarding_getNextHop_RoutingTable(&(msg->l3_destinationAdd),&(msg->l2_nextORpreviousHop));
-!    if (msg->l2_nextORpreviousHop.type==ADDR_NONE) {
-!       openserial_printError(COMPONENT_FORWARDING,ERR_NO_NEXTHOP,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    
-!    // send to next lower layer
-!    return iphc_sendFromForwarding(msg, ipv6_header, &hopbyhop_opt,fw_SendOrfw_Rcv);
-! }
-! 
-! /**
-! \brief Send a packet using the source rout to find the next hop.
-! 
-! \note This is always called for packets being forwarded.
-! 
-! How to process the routing header is detailed in
-! http://tools.ietf.org/html/rfc6554#page-9.
-! 
-! \param[in,out] msg             The packet to send.
-! \param[in]     ipv6_header     The packet's IPv6 header.
-! */
-! owerror_t forwarding_send_internal_SourceRouting(OpenQueueEntry_t *msg, ipv6_header_iht ipv6_header) {
-!    uint8_t         local_CmprE;
-!    uint8_t         local_CmprI;
-!    uint8_t         numAddr;
-!    uint8_t         hlen;
-!    uint8_t         addressposition;
-!    uint8_t*        runningPointer;
-!    uint8_t         octetsAddressSize;
-!    open_addr_t*    prefix;
-!    rpl_routing_ht* rpl_routing_hdr;
-!   
-!    rpl_hopoption_ht hopbyhop_opt; 
-!    
-!    memset(&hopbyhop_opt,0,sizeof(rpl_hopoption_ht));//reset everything
-!    
-!    // get my prefix
-!    prefix               = idmanager_getMyID(ADDR_PREFIX);
-!    
-!    // cast packet to RPL routing header
-!    rpl_routing_hdr      = (rpl_routing_ht*)(msg->payload);
-!    
-!    // point behind the RPL routing header
-!    runningPointer       = (msg->payload)+sizeof(rpl_routing_ht);
-!    
-!    // retrieve CmprE and CmprI
-!    
-!    /*CmprE 4-bit unsigned integer. Number of prefix octets
-!      from the last segment (i.e., segment n) that are
-!      elided. For example, an SRH carrying a full IPv6
-!      address in Addressesn sets CmprE to 0.*/
-!    
-!    local_CmprE          = rpl_routing_hdr->CmprICmprE & 0x0f;   
-!    local_CmprI          = rpl_routing_hdr->CmprICmprE & 0xf0;
-!    local_CmprI          = local_CmprI>>4;
-!    
-!    numAddr              = (((rpl_routing_hdr->HdrExtLen*8)-rpl_routing_hdr->PadRes-(16-local_CmprE))/(16-local_CmprI))+1;
-!    
-!    if (rpl_routing_hdr->SegmentsLeft==0){
-!       // no more segments left, this is the last hop
-!       
-!       // push packet up the stack
-!       msg->l4_protocol  = rpl_routing_hdr->nextHeader;
-!       hlen              = rpl_routing_hdr->HdrExtLen; //in 8-octet units
-!       
-!       // toss RPL routing header
-!       packetfunctions_tossHeader(msg,sizeof(rpl_routing_ht));
-!       
-!       // toss source route addresses
-!       octetsAddressSize = LENGTH_ADDR128b - local_CmprE; //total length - number of octets that are elided
-!       packetfunctions_tossHeader(msg,octetsAddressSize*hlen);
-!       
-!       // indicate reception to upper layer
-!       switch(msg->l4_protocol) {
-!          case IANA_TCP:
-!             opentcp_receive(msg);
-!             break;
-!          case IANA_UDP:
-!             openudp_receive(msg);
-!             break;
-!          case IANA_ICMPv6:
-!             icmpv6_receive(msg);
-!             break;
-!          default:
-!             openserial_printError(COMPONENT_FORWARDING,ERR_WRONG_TRAN_PROTOCOL,
-!                                (errorparameter_t)msg->l4_protocol,
-!                                (errorparameter_t)1);
-!             //not sure that this is correct as iphc will free it?
-!             openqueue_freePacketBuffer(msg);
-!             return E_FAIL;
-!       }
-!       
-!       // stop executing here (successful)
-!       return E_SUCCESS;
-!    
-!    } else {
-!       // this is not the last hop
-!       
-!       if (rpl_routing_hdr->SegmentsLeft>numAddr) {
-!          // error code: there are more segments left than space in source route
-!          
-!          // TODO: send ICMPv6 packet (code 0) to originator
-!          
-!          openserial_printError(COMPONENT_FORWARDING,ERR_NO_NEXTHOP,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!          openqueue_freePacketBuffer(msg);
-!          return E_FAIL;
-!       
-!       } else {
-!          
-!          // decrement number of segments left
-!          rpl_routing_hdr->SegmentsLeft--;
-!          
-!          // find next hop address in source route
-!          //addressposition    = numAddr-(rpl_routing_hdr->SegmentsLeft);
-!          addressposition    = rpl_routing_hdr->SegmentsLeft;
-!          // how many octets have the address? 
-!          if (rpl_routing_hdr->SegmentsLeft > 1){
-!               octetsAddressSize = LENGTH_ADDR128b - local_CmprI; //max addr length - number of prefix octets that are elided in the internal route elements
-!          }else{
-!               octetsAddressSize = LENGTH_ADDR128b - local_CmprE; //max addr length - number of prefix octets that are elided in the internal route elements
-!          }
-!          switch(octetsAddressSize) {
-!             case LENGTH_ADDR16b:
-!                // write previous hop
-!                msg->l2_nextORpreviousHop.type    = ADDR_16B;
-!                memcpy(
-!                   &(msg->l2_nextORpreviousHop.addr_16b),
-!                   runningPointer+((addressposition)*octetsAddressSize),
-!                   octetsAddressSize
-!                );
-!                // write next hop
-!                msg->l3_destinationAdd.type       = ADDR_16B;
-!                memcpy(
-!                   &(msg->l3_destinationAdd.addr_16b),
-!                   runningPointer+((addressposition)*octetsAddressSize),
-!                   octetsAddressSize
-!                );
-!                break;
-!             case LENGTH_ADDR64b:
-!                // write previous hop
-!                msg->l2_nextORpreviousHop.type    = ADDR_64B;
-!                memcpy(
-!                   &(msg->l2_nextORpreviousHop.addr_64b),
-!                   runningPointer+((addressposition)*octetsAddressSize),
-!                   octetsAddressSize
-!                );
-!                
-!                //this is 128b address as send from forwarding function 
-!                //takes care of reducing it if needed.
-!                
-!                //write next hop
-!                msg->l3_destinationAdd.type       = ADDR_128B;
-!                memcpy(
-!                   &(msg->l3_destinationAdd.addr_128b[0]),
-!                   prefix->prefix,
-!                   LENGTH_ADDR64b
-!                );
-!                
-!                memcpy(
-!                   &(msg->l3_destinationAdd.addr_128b[8]),
-!                   runningPointer+((addressposition)*octetsAddressSize),
-!                   octetsAddressSize
-!                );
-!                
-!                break;
-!             case LENGTH_ADDR128b:
-!                // write previous hop
-!                msg->l2_nextORpreviousHop.type    = ADDR_128B;
-!                memcpy(
-!                   &(msg->l2_nextORpreviousHop.addr_128b),
-!                   runningPointer+((addressposition)*octetsAddressSize),
-!                   octetsAddressSize
-!                );
-!                // write next hop
-!                msg->l3_destinationAdd.type       = ADDR_128B;
-!                memcpy(
-!                   &(msg->l3_destinationAdd.addr_128b),
-!                   runningPointer+((addressposition)*octetsAddressSize),
-!                   octetsAddressSize
-!                );
-!                break;
-!             default:
-!                //poipoi xv
-!                //any other value is not supported by now.
-!                openserial_printError(COMPONENT_FORWARDING,ERR_INVALID_PARAM,
-!                                (errorparameter_t)1,
-!                                (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return E_FAIL;
-!          }
-!       }
-!    }
-!    
-!    // send to next lower layer
-!    return iphc_sendFromForwarding(msg, ipv6_header,&hopbyhop_opt, PCKTFORWARD);
-! }
-! 
-! /**
-! \brief Retrieve the next hop's address from routing table.
-! 
-! \param[in]  destination128b  Final IPv6 destination address.
-! \param[out] addressToWrite64b Location to write the EUI64 of next hop to.
-! */
-! void forwarding_getNextHop_RoutingTable(open_addr_t* destination128b, open_addr_t* addressToWrite64b) {
-!    uint8_t i;
-!    open_addr_t temp_prefix64btoWrite;
-!    if (packetfunctions_isBroadcastMulticast(destination128b)) {
-!       // IP destination is broadcast, send to 0xffffffffffffffff
-!       addressToWrite64b->type = ADDR_64B;
-!       for (i=0;i<8;i++) {
-!          addressToWrite64b->addr_64b[i] = 0xff;
-!       }
-!    } else if (neighbors_isStableNeighbor(destination128b)) {
-!       // IP destination is 1-hop neighbor, send directly
-!       packetfunctions_ip128bToMac64b(destination128b,&temp_prefix64btoWrite,addressToWrite64b);
-!    } else {
-!       // destination is remote, send to preferred parent
-!       neighbors_getPreferredParentEui64(addressToWrite64b);
-!    }
-! }
-! /*
-!  * HOP BY HOP HEADER OPTION
-!  */
-! 
-! 
-! void forwarding_createHopByHopOption(rpl_hopoption_ht *hopbyhop_opt, uint8_t flags) {   
-!         //set the rpl hop by hop header
-! 	hopbyhop_opt->optionType = RPL_HOPBYHOP_HEADER_OPTION_TYPE;
-! 	//8-bit field indicating the length of the option, in
-! 	//octets, excluding the Option Type and Opt Data Len fields.
-! 	hopbyhop_opt->optionLen = 0x04; //4-bytes, flags+instanceID+senderrank - no sub-tlvs
-! 	hopbyhop_opt->flags = flags;
-! 	hopbyhop_opt->rplInstanceID = icmpv6rpl_getRPLIntanceID(); //getit..
-! 	hopbyhop_opt->senderRank = neighbors_getMyDAGrank(); //TODO change to DAGRAnk(rank) instead of rank
-! }
-diff -crB openwsn/03b-IPv6/forwarding.h ../../../sys/net/openwsn/03b-IPv6/forwarding.h
-*** openwsn/03b-IPv6/forwarding.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/03b-IPv6/forwarding.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,53 ****
-! #ifndef __FORWARDING_H
-! #define __FORWARDING_H
-! 
-! /**
-! \addtogroup IPv6
-! \{
-! \addtogroup Forwarding
-! \{
-! */
-! 
-! #include "iphc.h"
-! 
-! //=========================== define ==========================================
-! 
-! enum {
-!    PCKTFORWARD     = 1,          
-!    PCKTSEND        = 2,
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! /**
-! \brief RPL source routing header.
-! 
-! As defined in http://tools.ietf.org/html/rfc6554#section-3.
-! */
-! PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t    nextHeader;    ///< Header immediately following.
-!    uint8_t    HdrExtLen;     ///< In 8-octet units, excluding first 8.
-!    uint8_t    RoutingType;   ///< Set to 3 for "Source Routing Header".
-!    uint8_t    SegmentsLeft;  ///< Number of addresses still to visit.
-!    uint8_t    CmprICmprE;    ///< Number of prefix octets elided for all (CmprI) and last (CmprE) segment
-!    uint8_t    PadRes;        ///< Number of padding octets. Set to 0 if using EUI64.
-!    uint16_t   Reserved;      ///< Set to 0.
-! } rpl_routing_ht;
-! PRAGMA(pack());
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    forwarding_init();
-! error_t forwarding_send(OpenQueueEntry_t *msg);
-! void    forwarding_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void    forwarding_receive(OpenQueueEntry_t* msg, ipv6_header_iht ipv6_header);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,68 ----
-! #ifndef __FORWARDING_H
-! #define __FORWARDING_H
-! 
-! /**
-! \addtogroup IPv6
-! \{
-! \addtogroup Forwarding
-! \{
-! */
-! 
-! #include "iphc.h"
-! 
-! 
-! //=========================== define ==========================================
-! 
-! #define RPL_HOPBYHOP_HEADER_OPTION_TYPE  0x63
-! 
-! enum {
-!    PCKTFORWARD     = 1,          
-!    PCKTSEND        = 2,
-! };
-! 
-! enum {
-!   O_FLAG   = 0x80,
-!   R_FLAG   = 0x40,
-!   F_FLAG   = 0x20,
-! };
-! 
-! 
-! //=========================== typedef =========================================
-! 
-! /**
-! \brief RPL source routing header.
-! 
-! As defined in http://tools.ietf.org/html/rfc6554#section-3.
-! */
-! 
-! //PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t    nextHeader;    ///< Header immediately following.
-!    uint8_t    HdrExtLen;     ///< In 8-octet units, excluding first 8.
-!    uint8_t    RoutingType;   ///< Set to 3 for "Source Routing Header".
-!    uint8_t    SegmentsLeft;  ///< Number of addresses still to visit.
-!    uint8_t    CmprICmprE;    ///< Number of prefix octets elided for all (CmprI) and last (CmprE) segment
-!    uint8_t    PadRes;        ///< Number of padding octets. Set to 0 if using EUI64.
-!    uint16_t   Reserved;      ///< Set to 0.
-! } rpl_routing_ht;
-! //PRAGMA(pack());
-! 
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    forwarding_init(void);
-! owerror_t forwarding_send(OpenQueueEntry_t *msg);
-! void    forwarding_sendDone(OpenQueueEntry_t *msg, owerror_t error);
-! void    forwarding_receive(OpenQueueEntry_t *msg, 
-!                            ipv6_header_iht ipv6_header, 
-!                            ipv6_hopbyhop_ht ipv6_hop_header, 
-!                            rpl_hopoption_ht hop_by_hop_option);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/03b-IPv6/icmpv6.c ../../../sys/net/openwsn/03b-IPv6/icmpv6.c
-*** openwsn/03b-IPv6/icmpv6.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/03b-IPv6/icmpv6.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,63 ****
-! #include "openwsn.h"
-! #include "icmpv6.h"
-! #include "icmpv6echo.h"
-! #include "icmpv6rpl.h"
-! #include "forwarding.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void icmpv6_init() {
-! }
-! 
-! error_t icmpv6_send(OpenQueueEntry_t* msg) {
-!    msg->owner       = COMPONENT_ICMPv6;
-!    msg->l4_protocol = IANA_ICMPv6;
-!    return forwarding_send(msg);
-! }
-! 
-! void icmpv6_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_ICMPv6;
-!    switch (msg->l4_sourcePortORicmpv6Type) {
-!       case IANA_ICMPv6_ECHO_REQUEST:
-!       case IANA_ICMPv6_ECHO_REPLY:
-!          icmpv6echo_sendDone(msg, error);
-!          break;
-!       case IANA_ICMPv6_RPL:
-!          icmpv6rpl_sendDone(msg, error);
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_ICMPv6,ERR_UNSUPPORTED_ICMPV6_TYPE,
-!                                (errorparameter_t)msg->l4_sourcePortORicmpv6Type,
-!                                (errorparameter_t)0);
-!          // free the corresponding packet buffer
-!          openqueue_freePacketBuffer(msg);
-!          break;
-!    }
-! }
-! 
-! void icmpv6_receive(OpenQueueEntry_t* msg) {
-!    msg->owner = COMPONENT_ICMPv6;
-!    msg->l4_sourcePortORicmpv6Type = ((ICMPv6_ht*)(msg->payload))->type;
-!    switch (msg->l4_sourcePortORicmpv6Type) {
-!       case IANA_ICMPv6_ECHO_REQUEST:
-!       case IANA_ICMPv6_ECHO_REPLY:
-!          icmpv6echo_receive(msg);
-!          break;
-!       case IANA_ICMPv6_RPL:
-!          icmpv6rpl_receive(msg);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_ICMPv6,ERR_UNSUPPORTED_ICMPV6_TYPE,
-!                                (errorparameter_t)msg->l4_sourcePortORicmpv6Type,
-!                                (errorparameter_t)1);
-!          // free the corresponding packet buffer
-!          openqueue_freePacketBuffer(msg);
-!          break;
-!    }
-  }
-\ No newline at end of file
---- 1,63 ----
-! #include "openwsn.h"
-! #include "icmpv6.h"
-! #include "icmpv6echo.h"
-! #include "icmpv6rpl.h"
-! #include "forwarding.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void icmpv6_init(void) {
-! }
-! 
-! owerror_t icmpv6_send(OpenQueueEntry_t* msg) {
-!    msg->owner       = COMPONENT_ICMPv6;
-!    msg->l4_protocol = IANA_ICMPv6;
-!    return forwarding_send(msg);
-! }
-! 
-! void icmpv6_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_ICMPv6;
-!    switch (msg->l4_sourcePortORicmpv6Type) {
-!       case IANA_ICMPv6_ECHO_REQUEST:
-!       case IANA_ICMPv6_ECHO_REPLY:
-!          icmpv6echo_sendDone(msg, error);
-!          break;
-!       case IANA_ICMPv6_RPL:
-!          icmpv6rpl_sendDone(msg, error);
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_ICMPv6,ERR_UNSUPPORTED_ICMPV6_TYPE,
-!                                (errorparameter_t)msg->l4_sourcePortORicmpv6Type,
-!                                (errorparameter_t)0);
-!          // free the corresponding packet buffer
-!          openqueue_freePacketBuffer(msg);
-!          break;
-!    }
-! }
-! 
-! void icmpv6_receive(OpenQueueEntry_t* msg) {
-!    msg->owner = COMPONENT_ICMPv6;
-!    msg->l4_sourcePortORicmpv6Type = ((ICMPv6_ht*)(msg->payload))->type;
-!    switch (msg->l4_sourcePortORicmpv6Type) {
-!       case IANA_ICMPv6_ECHO_REQUEST:
-!       case IANA_ICMPv6_ECHO_REPLY:
-!          icmpv6echo_receive(msg);
-!          break;
-!       case IANA_ICMPv6_RPL:
-!          icmpv6rpl_receive(msg);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_ICMPv6,ERR_UNSUPPORTED_ICMPV6_TYPE,
-!                                (errorparameter_t)msg->l4_sourcePortORicmpv6Type,
-!                                (errorparameter_t)1);
-!          // free the corresponding packet buffer
-!          openqueue_freePacketBuffer(msg);
-!          break;
-!    }
-  }
-\ No newline at end of file
-diff -crB openwsn/03b-IPv6/icmpv6.h ../../../sys/net/openwsn/03b-IPv6/icmpv6.h
-*** openwsn/03b-IPv6/icmpv6.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/03b-IPv6/icmpv6.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,61 ****
-! #ifndef __ICMPv6_H
-! #define __ICMPv6_H
-! 
-! /**
-! \addtogroup IPv6
-! \{
-! \addtogroup ICMPv6
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    uint8_t    type;
-!    uint8_t    code;
-!    uint16_t   checksum;
-!    // Below Identifier might need to be replaced by the identifier used by icmpv6rpl
-!    // uint16_t    identifier;
-!    // Below sequence_number might need to be removed
-!    // uint16_t    sequence_number;
-! } ICMPv6_ht;
-! 
-! typedef struct {
-!    uint8_t    type;
-!    uint8_t    code;
-!    uint16_t   checksum;
-!    uint8_t    hop_limit;
-!    uint8_t    flags;
-!    uint16_t   router_lifetime;
-!    uint32_t   reachable_time;
-!    uint32_t   retransmission_timer;
-! } ICMPv6_RA_ht;
-! 
-! typedef struct {
-!    uint8_t    option_type;
-!    uint8_t    option_length;
-!    uint8_t    prefix_length;
-!    uint8_t    flags;
-!    uint32_t   valid_lifetime;
-!    uint32_t   preferred_lifetime;
-!    uint32_t   unused;
-!    uint8_t    prefix[16]; // prefix container always 16B
-! } ICMPv6_64bprefix_option_ht;
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void     icmpv6_init();
-! error_t  icmpv6_send(OpenQueueEntry_t* msg);
-! void     icmpv6_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void     icmpv6_receive(OpenQueueEntry_t* msg);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,61 ----
-! #ifndef __ICMPv6_H
-! #define __ICMPv6_H
-! 
-! /**
-! \addtogroup IPv6
-! \{
-! \addtogroup ICMPv6
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    uint8_t    type;
-!    uint8_t    code;
-!    uint16_t   checksum;
-!    // Below Identifier might need to be replaced by the identifier used by icmpv6rpl
-!    // uint16_t    identifier;
-!    // Below sequence_number might need to be removed
-!    // uint16_t    sequence_number;
-! } ICMPv6_ht;
-! 
-! typedef struct {
-!    uint8_t    type;
-!    uint8_t    code;
-!    uint16_t   checksum;
-!    uint8_t    hop_limit;
-!    uint8_t    flags;
-!    uint16_t   router_lifetime;
-!    uint32_t   reachable_time;
-!    uint32_t   retransmission_timer;
-! } ICMPv6_RA_ht;
-! 
-! typedef struct {
-!    uint8_t    option_type;
-!    uint8_t    option_length;
-!    uint8_t    prefix_length;
-!    uint8_t    flags;
-!    uint32_t   valid_lifetime;
-!    uint32_t   preferred_lifetime;
-!    uint32_t   unused;
-!    uint8_t    prefix[16]; // prefix container always 16B
-! } ICMPv6_64bprefix_option_ht;
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void     icmpv6_init(void);
-! owerror_t  icmpv6_send(OpenQueueEntry_t* msg);
-! void     icmpv6_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void     icmpv6_receive(OpenQueueEntry_t* msg);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/03b-IPv6/icmpv6echo.c ../../../sys/net/openwsn/03b-IPv6/icmpv6echo.c
-*** openwsn/03b-IPv6/icmpv6echo.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/03b-IPv6/icmpv6echo.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,152 ****
-! #include "openwsn.h"
-! #include "icmpv6echo.h"
-! #include "icmpv6.h"
-! #include "openserial.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    bool        busySending;
-!    open_addr_t hisAddress;
-!    uint16_t    seq;
-! } icmpv6echo_vars_t;
-! 
-! icmpv6echo_vars_t icmpv6echo_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void icmpv6echo_init() {
-!    icmpv6echo_vars.busySending = FALSE;
-!    icmpv6echo_vars.seq         = 0;
-! }
-! 
-! void icmpv6echo_trigger() {
-!    uint8_t number_bytes_from_input_buffer;
-!    uint8_t input_buffer[16];
-!    OpenQueueEntry_t* msg;
-!    
-!    //get command from OpenSerial (16B IPv6 destination address)
-!    number_bytes_from_input_buffer = openserial_getInputBuffer(&(input_buffer[0]),sizeof(input_buffer));
-!    if (number_bytes_from_input_buffer!=sizeof(input_buffer)) {
-!       openserial_printError(COMPONENT_ICMPv6ECHO,ERR_INPUTBUFFER_LENGTH,
-!                             (errorparameter_t)number_bytes_from_input_buffer,
-!                             (errorparameter_t)0);
-!       return;
-!    };
-!    icmpv6echo_vars.hisAddress.type  = ADDR_128B;
-!    memcpy(&(icmpv6echo_vars.hisAddress.addr_128b[0]),&(input_buffer[0]),16);
-!    
-!    //send
-!    if (icmpv6echo_vars.busySending==TRUE) {
-!       openserial_printError(COMPONENT_ICMPv6ECHO,ERR_BUSY_SENDING,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    } else {
-!       icmpv6echo_vars.busySending = TRUE;
-!       
-!       msg = openqueue_getFreePacketBuffer(COMPONENT_ICMPv6ECHO);
-!       if (msg==NULL) {
-!          openserial_printError(COMPONENT_ICMPv6ECHO,ERR_NO_FREE_PACKET_BUFFER,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          icmpv6echo_vars.busySending = FALSE;
-!          return;
-!       }
-!       //admin
-!       msg->creator                               = COMPONENT_ICMPv6ECHO;
-!       msg->owner                                 = COMPONENT_ICMPv6ECHO;
-!       //l4
-!       msg->l4_protocol                           = IANA_ICMPv6;
-!       msg->l4_sourcePortORicmpv6Type             = IANA_ICMPv6_ECHO_REQUEST;
-!       //l3
-!       memcpy(&(msg->l3_destinationAdd),&icmpv6echo_vars.hisAddress,sizeof(open_addr_t));
-!       //payload
-!       packetfunctions_reserveHeaderSize(msg,4);
-!       packetfunctions_htonl(0x789abcde,(uint8_t*)(msg->payload));
-!       //ICMPv6 header
-!       packetfunctions_reserveHeaderSize(msg,sizeof(ICMPv6_ht));
-!       ((ICMPv6_ht*)(msg->payload))->type         = msg->l4_sourcePortORicmpv6Type;
-!       ((ICMPv6_ht*)(msg->payload))->code         = 0;
-!       // Below Identifier might need to be replaced by the identifier used by icmpv6rpl
-!       // packetfunctions_htons(0x1234       ,(uint8_t*)&((ICMPv6_ht*)(msg->payload))->identifier);
-!       // Below sequence_number might need to be removed
-!       // packetfunctions_htons(icmpv6echo_vars.seq++ ,(uint8_t*)&((ICMPv6_ht*)(msg->payload))->sequence_number); 
-!       packetfunctions_calculateChecksum(msg,(uint8_t*)&(((ICMPv6_ht*)(msg->payload))->checksum));//do last
-!       //send
-!       if (icmpv6_send(msg)!=E_SUCCESS) {
-!          icmpv6echo_vars.busySending = FALSE;
-!          openqueue_freePacketBuffer(msg);
-!       }
-!    }
-! }
-! 
-! void icmpv6echo_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_ICMPv6ECHO;
-!    if (msg->creator!=COMPONENT_ICMPv6ECHO) {//that was a packet I had not created
-!       openserial_printError(COMPONENT_ICMPv6ECHO,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-!    icmpv6echo_vars.busySending = FALSE;
-! }
-! 
-! void icmpv6echo_receive(OpenQueueEntry_t* msg) {
-!    OpenQueueEntry_t* reply;
-!    msg->owner = COMPONENT_ICMPv6ECHO;
-!    switch(msg->l4_sourcePortORicmpv6Type) {
-!       case IANA_ICMPv6_ECHO_REQUEST:
-!          openserial_printInfo(COMPONENT_ICMPv6ECHO,ERR_RCVD_ECHO_REQUEST,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          // get a new openqueuEntry_t for the echo reply
-!          reply = openqueue_getFreePacketBuffer(COMPONENT_ICMPv6ECHO);
-!          if (reply==NULL) {
-!             openserial_printError(COMPONENT_ICMPv6ECHO,ERR_NO_FREE_PACKET_BUFFER,
-!                                   (errorparameter_t)1,
-!                                   (errorparameter_t)0);
-!             openqueue_freePacketBuffer(msg);
-!             return;
-!          }
-!          // take ownership over reply
-!          reply->creator = COMPONENT_ICMPv6ECHO;
-!          reply->owner   = COMPONENT_ICMPv6ECHO;
-!          // copy payload from msg to (end of) reply
-!          packetfunctions_reserveHeaderSize(reply,msg->length);
-!          memcpy(reply->payload,msg->payload,msg->length);
-!          // copy source of msg in destination of reply
-!          memcpy(&(reply->l3_destinationAdd),&(msg->l3_sourceAdd),sizeof(open_addr_t));
-!          // free up msg
-!          openqueue_freePacketBuffer(msg);
-!          msg = NULL;
-!          // administrative information for reply
-!          reply->l4_protocol                   = IANA_ICMPv6;
-!          reply->l4_sourcePortORicmpv6Type     = IANA_ICMPv6_ECHO_REPLY;
-!          ((ICMPv6_ht*)(reply->payload))->type = reply->l4_sourcePortORicmpv6Type;
-!          packetfunctions_calculateChecksum(reply,(uint8_t*)&(((ICMPv6_ht*)(reply->payload))->checksum));//do last
-!          icmpv6echo_vars.busySending = TRUE;
-!          if (icmpv6_send(reply)!=E_SUCCESS) {
-!             icmpv6echo_vars.busySending = FALSE;
-!             openqueue_freePacketBuffer(reply);
-!          }
-!          break;
-!       case IANA_ICMPv6_ECHO_REPLY:
-!          openserial_printInfo(COMPONENT_ICMPv6ECHO,ERR_RCVD_ECHO_REPLY,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          openqueue_freePacketBuffer(msg);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_ICMPv6ECHO,ERR_UNSUPPORTED_ICMPV6_TYPE,
-!                                (errorparameter_t)msg->l4_sourcePortORicmpv6Type,
-!                                (errorparameter_t)2);
-!          openqueue_freePacketBuffer(msg);
-!          break;
-!    }
-! }
-! 
-! //=========================== private =========================================
-\ No newline at end of file
---- 1,148 ----
-! #include "openwsn.h"
-! #include "icmpv6echo.h"
-! #include "icmpv6.h"
-! #include "openserial.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! //#include "debugpins.h"
-! 
-! //=========================== variables =======================================
-! 
-! icmpv6echo_vars_t icmpv6echo_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void icmpv6echo_init(void) {
-!    icmpv6echo_vars.busySending = FALSE;
-!    icmpv6echo_vars.seq         = 0;
-! }
-! 
-! void icmpv6echo_trigger(void) {
-!    uint8_t number_bytes_from_input_buffer;
-!    uint8_t input_buffer[16];
-!    OpenQueueEntry_t* msg;
-!  
-!    
-!    //get command from OpenSerial (16B IPv6 destination address)
-!    number_bytes_from_input_buffer = openserial_getInputBuffer(&(input_buffer[0]),sizeof(input_buffer));
-!    if (number_bytes_from_input_buffer!=sizeof(input_buffer)) {
-!       openserial_printError(COMPONENT_ICMPv6ECHO,ERR_INPUTBUFFER_LENGTH,
-!                             (errorparameter_t)number_bytes_from_input_buffer,
-!                             (errorparameter_t)0);
-!       return;
-!    };
-!    icmpv6echo_vars.hisAddress.type  = ADDR_128B;
-!    memcpy(&(icmpv6echo_vars.hisAddress.addr_128b[0]),&(input_buffer[0]),16);
-!    
-!    //send
-!    if (icmpv6echo_vars.busySending==TRUE) {
-!       openserial_printError(COMPONENT_ICMPv6ECHO,ERR_BUSY_SENDING,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    } else {
-!       icmpv6echo_vars.busySending = TRUE;
-!       
-!       msg = openqueue_getFreePacketBuffer(COMPONENT_ICMPv6ECHO);
-!       if (msg==NULL) {
-!          openserial_printError(COMPONENT_ICMPv6ECHO,ERR_NO_FREE_PACKET_BUFFER,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          icmpv6echo_vars.busySending = FALSE;
-!          return;
-!       }
-!       //admin
-!       msg->creator                               = COMPONENT_ICMPv6ECHO;
-!       msg->owner                                 = COMPONENT_ICMPv6ECHO;
-!       //l4
-!       msg->l4_protocol                           = IANA_ICMPv6;
-!       msg->l4_sourcePortORicmpv6Type             = IANA_ICMPv6_ECHO_REQUEST;
-!       //l3
-!       memcpy(&(msg->l3_destinationAdd),&icmpv6echo_vars.hisAddress,sizeof(open_addr_t));
-!       //payload
-!       packetfunctions_reserveHeaderSize(msg,4);
-!       packetfunctions_htonl(0x789abcde,(uint8_t*)(msg->payload));
-!       //ICMPv6 header
-!       packetfunctions_reserveHeaderSize(msg,sizeof(ICMPv6_ht));
-!       ((ICMPv6_ht*)(msg->payload))->type         = msg->l4_sourcePortORicmpv6Type;
-!       ((ICMPv6_ht*)(msg->payload))->code         = 0;
-!       // Below Identifier might need to be replaced by the identifier used by icmpv6rpl
-!       // packetfunctions_htons(0x1234       ,(uint8_t*)&((ICMPv6_ht*)(msg->payload))->identifier);
-!       // Below sequence_number might need to be removed
-!       // packetfunctions_htons(icmpv6echo_vars.seq++ ,(uint8_t*)&((ICMPv6_ht*)(msg->payload))->sequence_number); 
-!       packetfunctions_calculateChecksum(msg,(uint8_t*)&(((ICMPv6_ht*)(msg->payload))->checksum));//do last
-!       //send
-!       if (icmpv6_send(msg)!=E_SUCCESS) {
-!          icmpv6echo_vars.busySending = FALSE;
-!          openqueue_freePacketBuffer(msg);
-!       }
-!    }
-! }
-! 
-! void icmpv6echo_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_ICMPv6ECHO;
-!    if (msg->creator!=COMPONENT_ICMPv6ECHO) {//that was a packet I had not created
-!       openserial_printError(COMPONENT_ICMPv6ECHO,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-!    icmpv6echo_vars.busySending = FALSE;
-!  }
-! 
-! void icmpv6echo_receive(OpenQueueEntry_t* msg) {
-!    OpenQueueEntry_t* reply;
-!    msg->owner = COMPONENT_ICMPv6ECHO;
-!    switch(msg->l4_sourcePortORicmpv6Type) {
-!       case IANA_ICMPv6_ECHO_REQUEST:
-!          openserial_printInfo(COMPONENT_ICMPv6ECHO,ERR_RCVD_ECHO_REQUEST,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          // get a new openqueuEntry_t for the echo reply
-!          reply = openqueue_getFreePacketBuffer(COMPONENT_ICMPv6ECHO);
-!          if (reply==NULL) {
-!             openserial_printError(COMPONENT_ICMPv6ECHO,ERR_NO_FREE_PACKET_BUFFER,
-!                                   (errorparameter_t)1,
-!                                   (errorparameter_t)0);
-!             openqueue_freePacketBuffer(msg);
-!             return;
-!          }
-!          // take ownership over reply
-!          reply->creator = COMPONENT_ICMPv6ECHO;
-!          reply->owner   = COMPONENT_ICMPv6ECHO;
-!          // copy payload from msg to (end of) reply
-!          packetfunctions_reserveHeaderSize(reply,msg->length);
-!          memcpy(reply->payload,msg->payload,msg->length);
-!          // copy source of msg in destination of reply
-!          memcpy(&(reply->l3_destinationAdd),&(msg->l3_sourceAdd),sizeof(open_addr_t));
-!          // free up msg
-!          openqueue_freePacketBuffer(msg);
-!          msg = NULL;
-!          // administrative information for reply
-!          reply->l4_protocol                   = IANA_ICMPv6;
-!          reply->l4_sourcePortORicmpv6Type     = IANA_ICMPv6_ECHO_REPLY;
-!          ((ICMPv6_ht*)(reply->payload))->type = reply->l4_sourcePortORicmpv6Type;
-!          packetfunctions_calculateChecksum(reply,(uint8_t*)&(((ICMPv6_ht*)(reply->payload))->checksum));//do last
-!          icmpv6echo_vars.busySending = TRUE;
-!          if (icmpv6_send(reply)!=E_SUCCESS) {
-!             icmpv6echo_vars.busySending = FALSE;
-!             openqueue_freePacketBuffer(reply);
-!          }
-!          break;
-!       case IANA_ICMPv6_ECHO_REPLY:
-!          openserial_printInfo(COMPONENT_ICMPv6ECHO,ERR_RCVD_ECHO_REPLY,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          openqueue_freePacketBuffer(msg);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_ICMPv6ECHO,ERR_UNSUPPORTED_ICMPV6_TYPE,
-!                                (errorparameter_t)msg->l4_sourcePortORicmpv6Type,
-!                                (errorparameter_t)2);
-!          openqueue_freePacketBuffer(msg);
-!          break;
-!    }
-! }
-! 
-! //=========================== private =========================================
-diff -crB openwsn/03b-IPv6/icmpv6echo.h ../../../sys/net/openwsn/03b-IPv6/icmpv6echo.h
-*** openwsn/03b-IPv6/icmpv6echo.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/03b-IPv6/icmpv6echo.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,29 ****
-! #ifndef __ICMPv6ECHO_H
-! #define __ICMPv6ECHO_H
-! 
-! /**
-! \addtogroup IPv6
-! \{
-! \addtogroup ICMPv6Echo
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void icmpv6echo_init();
-! void icmpv6echo_trigger();
-! void icmpv6echo_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void icmpv6echo_receive(OpenQueueEntry_t* msg);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,35 ----
-! #ifndef __ICMPv6ECHO_H
-! #define __ICMPv6ECHO_H
-! 
-! /**
-! \addtogroup IPv6
-! \{
-! \addtogroup ICMPv6Echo
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    bool        busySending;
-!    open_addr_t hisAddress;
-!    uint16_t    seq;
-! } icmpv6echo_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! void icmpv6echo_init(void);
-! void icmpv6echo_trigger(void);
-! void icmpv6echo_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void icmpv6echo_receive(OpenQueueEntry_t* msg);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/03b-IPv6/icmpv6rpl.c ../../../sys/net/openwsn/03b-IPv6/icmpv6rpl.c
-*** openwsn/03b-IPv6/icmpv6rpl.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/03b-IPv6/icmpv6rpl.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,562 ****
-! #include "openwsn.h"
-! #include "icmpv6rpl.h"
-! #include "icmpv6.h"
-! #include "openserial.h"
-! #include "openqueue.h"
-! #include "neighbors.h"
-! #include "packetfunctions.h"
-! #include "openrandom.h"
-! #include "scheduler.h"
-! #include "idmanager.h"
-! #include "opentimers.h"
-! #include "IEEE802154E.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    // admin
-!    bool                      busySending;             ///< currently sending DIO/DAO.
-!    uint8_t                   DODAGIDFlagSet;          ///< is DODAGID set already?
-!    // DIO-related
-!    icmpv6rpl_dio_ht          dio;                     ///< pre-populated DIO packet.
-!    open_addr_t               dioDestination;          ///< IPv6 destination address for DIOs.
-!    uint16_t                  periodDIO;               ///< duration, in ms, of a timerIdDIO timeout.
-!    opentimer_id_t            timerIdDIO;              ///< ID of the timer used to send DIOs.
-!    uint8_t                   delayDIO;                ///< number of timerIdDIO events before actually sending a DIO.
-!    // DAO-related
-!    icmpv6rpl_dao_ht          dao;                     ///< pre-populated DAO packet.
-!    icmpv6rpl_dao_transit_ht  dao_transit;             ///< pre-populated DAO "Transit Info" option header.
-!    icmpv6rpl_dao_target_ht  dao_target;             ///< pre-populated DAO "Transit Info" option header.
-!    opentimer_id_t            timerIdDAO;              ///< ID of the timer used to send DAOs.
-!    uint16_t                  periodDAO;               ///< duration, in ms, of a timerIdDAO timeout.
-!    uint8_t                   delayDAO;                ///< number of timerIdDIO events before actually sending a DAO.
-! } icmpv6rpl_vars_t;
-! 
-! icmpv6rpl_vars_t             icmpv6rpl_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! // DIO-related
-! void icmpv6rpl_timer_DIO_cb();
-! void icmpv6rpl_timer_DIO_task();
-! void sendDIO();
-! // DAO-related
-! void icmpv6rpl_timer_DAO_cb();
-! void icmpv6rpl_timer_DAO_task();
-! void sendDAO();
-! 
-! //=========================== public ==========================================
-! 
-! /**
-! \brief Initialize this module.
-! */
-! void icmpv6rpl_init() {
-!    
-!    //===== reset local variables
-!    memset(&icmpv6rpl_vars,0,sizeof(icmpv6rpl_vars_t));
-!    
-!    //=== admin
-!    
-!    icmpv6rpl_vars.busySending               = FALSE;
-!    icmpv6rpl_vars.DODAGIDFlagSet            = 0;
-!    
-!    //=== DIO-related
-!    
-!    icmpv6rpl_vars.dio.rplinstanceId         = 0x00;        ///< TODO: put correct value
-!    icmpv6rpl_vars.dio.verNumb               = 0x00;        ///< TODO: put correct value
-!    // rank: to be populated upon TX
-!    icmpv6rpl_vars.dio.rplOptions            = MOP_DIO_A | \
-!                                               MOP_DIO_B | \
-!                                               MOP_DIO_C | \
-!                                               PRF_DIO_A | \
-!                                               PRF_DIO_B | \
-!                                               PRF_DIO_C | \
-!                                               G_DIO ;
-!    icmpv6rpl_vars.dio.DTSN                  = 0x33;        ///< TODO: put correct value
-!    icmpv6rpl_vars.dio.flags                 = 0x00;
-!    icmpv6rpl_vars.dio.reserved              = 0x00;
-!    // DODAGID: to be populated upon receiving DIO
-!    
-!    icmpv6rpl_vars.dioDestination.type = ADDR_128B;
-!    memcpy(&icmpv6rpl_vars.dioDestination.addr_128b[0],all_routers_multicast,sizeof(all_routers_multicast));
-!    
-!    icmpv6rpl_vars.periodDIO                 = TIMER_DIO_TIMEOUT+(openrandom_get16b()&0xff);
-!    icmpv6rpl_vars.timerIdDIO                = opentimers_start(
-!                                                 icmpv6rpl_vars.periodDIO,
-!                                                 TIMER_PERIODIC,
-!                                                 TIME_MS,
-!                                                 icmpv6rpl_timer_DIO_cb
-!                                              );
-!    
-!    //=== DAO-related
-!    
-!    icmpv6rpl_vars.dao.rplinstanceId         = 0x00;        ///< TODO: put correct value
-!    icmpv6rpl_vars.dao.K_D_flags             = FLAG_DAO_A   | \
-!                                               FLAG_DAO_B   | \
-!                                               FLAG_DAO_C   | \
-!                                               FLAG_DAO_D   | \
-!                                               FLAG_DAO_E   | \
-!                                               PRF_DIO_C    | \
-!                                               FLAG_DAO_F   | \
-!                                               D_DAO        |
-!                                               K_DAO;
-!    icmpv6rpl_vars.dao.reserved              = 0x00;
-!    icmpv6rpl_vars.dao.DAOSequance           = 0x00;
-!    // DODAGID: to be populated upon receiving DIO
-!    
-!    icmpv6rpl_vars.dao_transit.type          = OPTION_TRANSIT_INFORMATION_TYPE;
-!    // optionLength: to be populated upon TX
-!    icmpv6rpl_vars.dao_transit.E_flags       = E_DAO_Transit_Info;
-!    icmpv6rpl_vars.dao_transit.PathControl   = PC1_A_DAO_Transit_Info | \
-!                                               PC1_B_DAO_Transit_Info | \
-!                                               PC2_A_DAO_Transit_Info | \
-!                                               PC2_B_DAO_Transit_Info | \
-!                                               PC3_A_DAO_Transit_Info | \
-!                                               PC3_B_DAO_Transit_Info | \
-!                                               PC4_A_DAO_Transit_Info | \
-!                                               PC4_B_DAO_Transit_Info;  
-!    icmpv6rpl_vars.dao_transit.PathSequence  = 0x00; // to be incremented at each TX
-!    icmpv6rpl_vars.dao_transit.PathLifetime  = 0xAA;
-!    //target information
-!    icmpv6rpl_vars.dao_target.type  = OPTION_TARGET_INFORMATION_TYPE;
-!    icmpv6rpl_vars.dao_target.optionLength  = 0;
-!    icmpv6rpl_vars.dao_target.flags  = 0;
-!    icmpv6rpl_vars.dao_target.prefixLength = 0;
-!    
-!    icmpv6rpl_vars.periodDAO                 = TIMER_DAO_TIMEOUT+(openrandom_get16b()&0xff);
-!    icmpv6rpl_vars.timerIdDAO                = opentimers_start(
-!                                                 icmpv6rpl_vars.periodDAO,
-!                                                 TIMER_PERIODIC,
-!                                                 TIME_MS,
-!                                                 icmpv6rpl_timer_DAO_cb
-!                                              );
-!    
-! }
-! 
-! /**
-! \brief Called when DIO/DAO was sent.
-! 
-! \param[in] msg   Pointer to the message just sent.
-! \param[in] error Outcome of the sending.
-! */
-! void icmpv6rpl_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    
-!    // take ownership over that packet
-!    msg->owner = COMPONENT_ICMPv6RPL;
-!    
-!    // make sure I created it
-!    if (msg->creator!=COMPONENT_ICMPv6RPL) {
-!       openserial_printError(COMPONENT_ICMPv6RPL,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    
-!    // free packet
-!    openqueue_freePacketBuffer(msg);
-!    
-!    // I'm not busy sending anymore
-!    icmpv6rpl_vars.busySending = FALSE;
-! }
-! 
-! /**
-! \brief Called when RPL message received.
-! 
-! \param[in] msg   Pointer to the received message.
-! */
-! void icmpv6rpl_receive(OpenQueueEntry_t* msg) {
-!    uint8_t      icmpv6code;
-!    open_addr_t  myPrefix;
-!    
-!    // take ownership
-!    msg->owner      = COMPONENT_ICMPv6RPL;
-!    
-!    // retrieve ICMPv6 code
-!    icmpv6code      = (((ICMPv6_ht*)(msg->payload))->code);
-!    
-!    // toss ICMPv6 header
-!    packetfunctions_tossHeader(msg,sizeof(ICMPv6_ht));
-!    
-!    // handle message
-!    switch (icmpv6code) {
-!       
-!       case IANA_ICMPv6_RPL_DIO:
-!          if (idmanager_getIsBridge()==TRUE) {
-!             // stop here if I'm in bridge mode
-!             break; // break, don't return
-!          }
-!          
-!          // update neighbor table
-!          neighbors_indicateRxDIO(msg);
-!          
-!          // update DODAGID in DIO/DAO
-!          memcpy(
-!             &(icmpv6rpl_vars.dio.DODAGID[0]),
-!             &(((icmpv6rpl_dio_ht*)(msg->payload))->DODAGID[0]),
-!             sizeof(icmpv6rpl_vars.dio.DODAGID)
-!          );
-!          memcpy(
-!             &(icmpv6rpl_vars.dao.DODAGID[0]),
-!             &(((icmpv6rpl_dio_ht*)(msg->payload))->DODAGID[0]),
-!             sizeof(icmpv6rpl_vars.dao.DODAGID)
-!          );
-!          
-!          // remember I got a DODAGID
-!          icmpv6rpl_vars.DODAGIDFlagSet=1;
-!          
-!          // update my prefix
-!          myPrefix.type = ADDR_PREFIX;
-!          memcpy(
-!             myPrefix.prefix,
-!             &((icmpv6rpl_dio_ht*)(msg->payload))->DODAGID[0],
-!             sizeof(myPrefix.prefix)
-!          );
-!          idmanager_setMyID(&myPrefix);
-!          
-!          break;
-!       
-!       case IANA_ICMPv6_RPL_DAO:
-!          // this should never happen
-!          openserial_printCritical(COMPONENT_ICMPv6RPL,ERR_UNEXPECTED_DAO,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          break;
-!       
-!       default:
-!          // this should never happen
-!          openserial_printCritical(COMPONENT_ICMPv6RPL,ERR_MSG_UNKNOWN_TYPE,
-!                                (errorparameter_t)icmpv6code,
-!                                (errorparameter_t)0);
-!          break;
-!       
-!    }
-!    
-!    // free message
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! //=========================== private =========================================
-! 
-! //===== DIO-related
-! 
-! /**
-! \brief DIO timer callback function.
-! 
-! \note This function is executed in interrupt context, and should only push a 
-!    task.
-! */
-! void icmpv6rpl_timer_DIO_cb() {
-!    scheduler_push_task(icmpv6rpl_timer_DIO_task,TASKPRIO_RPL);
-! }
-! 
-! /**
-! \brief Handler for DIO timer event.
-! 
-! \note This function is executed in task context, called by the scheduler.
-! */
-! void icmpv6rpl_timer_DIO_task() {
-!    
-!    // update the delayDIO
-!    icmpv6rpl_vars.delayDIO = (icmpv6rpl_vars.delayDIO+1)%5;
-!    
-!    // check whether we need to send DIO
-!    if (icmpv6rpl_vars.delayDIO==0) {
-!       
-!       // send DIO
-!       sendDIO();
-!       
-!       // pick a new pseudo-random periodDIO
-!       icmpv6rpl_vars.periodDIO = TIMER_DIO_TIMEOUT+(openrandom_get16b()&0xff);
-!       
-!       // arm the DIO timer with this new value
-!       opentimers_setPeriod(
-!          icmpv6rpl_vars.timerIdDIO,
-!          TIME_MS,
-!          icmpv6rpl_vars.periodDIO
-!       );
-!    }
-! }
-! 
-! /**
-! \brief Prepare and a send a RPL DIO.
-! */
-! void sendDIO() {
-!    OpenQueueEntry_t*    msg;
-!    
-!    // stop if I'm not sync'ed
-!    if (ieee154e_isSynch()==FALSE) {
-!       
-!       // remove packets genereted by this module (DIO and DAO) from openqueue
-!       openqueue_removeAllCreatedBy(COMPONENT_ICMPv6RPL);
-!       
-!       // I'm not busy sending a DIO/DAO
-!       icmpv6rpl_vars.busySending  = FALSE;
-!       
-!       // stop here
-!       return;
-!    }
-!       
-!    // do not send DIO if I'm in in bridge mode
-!    if (idmanager_getIsBridge()==TRUE) {
-!       return;
-!    }
-!    
-!    // do not send DIO if I have the default DAG rank
-!    if (neighbors_getMyDAGrank()==DEFAULTDAGRANK) {
-!       return;
-!    }
-!    
-!    // do not send DIO if I'm already busy sending
-!    if (icmpv6rpl_vars.busySending==TRUE) {
-!       return;
-!    }
-!    
-!    // if you get here, all good to send a DIO
-!    
-!    // I'm now busy sending
-!    icmpv6rpl_vars.busySending = TRUE;
-!    
-!    // reserve a free packet buffer for DIO
-!    msg = openqueue_getFreePacketBuffer(COMPONENT_ICMPv6RPL);
-!    if (msg==NULL) {
-!       openserial_printError(COMPONENT_ICMPv6RPL,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       icmpv6rpl_vars.busySending = FALSE;
-!       
-!       return;
-!    }
-!    
-!    // take ownership
-!    msg->creator                             = COMPONENT_ICMPv6RPL;
-!    msg->owner                               = COMPONENT_ICMPv6RPL;
-!    
-!    // set transport information
-!    msg->l4_protocol                         = IANA_ICMPv6;
-!    msg->l4_sourcePortORicmpv6Type           = IANA_ICMPv6_RPL;
-!    
-!    // set DIO destination
-!    memcpy(&(msg->l3_destinationAdd),&icmpv6rpl_vars.dioDestination,sizeof(open_addr_t));
-!    
-!    //===== DIO payload
-!    // note: DIO is already mostly populated
-!    icmpv6rpl_vars.dio.rank                  = neighbors_getMyDAGrank();
-!    packetfunctions_reserveHeaderSize(msg,sizeof(icmpv6rpl_dio_ht));
-!    memcpy(
-!       ((icmpv6rpl_dio_ht*)(msg->payload)),
-!       &(icmpv6rpl_vars.dio),
-!       sizeof(icmpv6rpl_dio_ht)
-!    );
-!    
-!    //===== ICMPv6 header
-!    packetfunctions_reserveHeaderSize(msg,sizeof(ICMPv6_ht));
-!    ((ICMPv6_ht*)(msg->payload))->type       = msg->l4_sourcePortORicmpv6Type;
-!    ((ICMPv6_ht*)(msg->payload))->code       = IANA_ICMPv6_RPL_DIO;
-!    packetfunctions_calculateChecksum(msg,(uint8_t*)&(((ICMPv6_ht*)(msg->payload))->checksum));//call last
-!    
-!    //send
-!    if (icmpv6_send(msg)!=E_SUCCESS) {
-!       icmpv6rpl_vars.busySending = FALSE;
-!       openqueue_freePacketBuffer(msg);
-!    } else {
-!       icmpv6rpl_vars.busySending = FALSE; 
-!    }
-! }
-! 
-! //===== DAO-related
-! 
-! /**
-! \brief DAO timer callback function.
-! 
-! \note This function is executed in interrupt context, and should only push a
-!    task.
-! */
-! void icmpv6rpl_timer_DAO_cb() {
-!    scheduler_push_task(icmpv6rpl_timer_DAO_task,TASKPRIO_RPL);
-! }
-! 
-! /**
-! \brief Handler for DAO timer event.
-! 
-! \note This function is executed in task context, called by the scheduler.
-! */
-! void icmpv6rpl_timer_DAO_task() {
-!    
-!    // update the delayDAO
-!    icmpv6rpl_vars.delayDAO = (icmpv6rpl_vars.delayDAO+1)%5;
-!    
-!    // check whether we need to send DAO
-!    if (icmpv6rpl_vars.delayDAO==0) {
-!       
-!       // send DAO
-!       sendDAO();
-!       
-!       // pick a new pseudo-random periodDAO
-!       icmpv6rpl_vars.periodDAO = TIMER_DAO_TIMEOUT+(openrandom_get16b()&0xff);
-!       
-!       // arm the DAO timer with this new value
-!       opentimers_setPeriod(
-!          icmpv6rpl_vars.timerIdDAO,
-!          TIME_MS,
-!          icmpv6rpl_vars.periodDAO
-!       );
-!    }
-! }
-! 
-! /**
-! \brief Prepare and a send a RPL DAO.
-! */
-! void sendDAO() {
-!    OpenQueueEntry_t*    msg;                // pointer to DAO messages
-!    uint8_t              nbrIdx;             // running neighbor index
-!    uint8_t              numTransitParents,numTargetParents;  // the number of parents indicated in transit option
-!    open_addr_t         address;
-!    
-!    if (ieee154e_isSynch()==FALSE) {
-!       // I'm not sync'ed 
-!       
-!       // delete packets genereted by this module (DIO and DAO) from openqueue
-!       openqueue_removeAllCreatedBy(COMPONENT_ICMPv6RPL);
-!       
-!       // I'm not busy sending a DIO/DAO
-!       icmpv6rpl_vars.busySending = FALSE;
-!       
-!       // stop here
-!       return;
-!    }
-!    
-!    // dont' send a DAO if you're in bridge mode
-!    if (idmanager_getIsBridge()==TRUE) {
-!       return;
-!    }
-!    
-!    // dont' send a DAO if you did not acquire a DAGrank
-!    if (neighbors_getMyDAGrank()==DEFAULTDAGRANK) {
-!        return;
-!    }
-!    
-!    // dont' send a DAO if you're still busy sending the previous one
-!    if (icmpv6rpl_vars.busySending==TRUE) {
-!       return;
-!    }
-!    
-!    // if you get here, you start construct DAO
-!    
-!    // reserve a free packet buffer for DAO
-!    msg = openqueue_getFreePacketBuffer(COMPONENT_ICMPv6RPL);
-!    if (msg==NULL) {
-!       openserial_printError(COMPONENT_ICMPv6RPL,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    
-!    // take ownership
-!    msg->creator                             = COMPONENT_ICMPv6RPL;
-!    msg->owner                               = COMPONENT_ICMPv6RPL;
-!    
-!    // set transport information
-!    msg->l4_protocol                         = IANA_ICMPv6;
-!    msg->l4_sourcePortORicmpv6Type           = IANA_ICMPv6_RPL;
-!    
-!    // set DAO destination
-!    msg->l3_destinationAdd.type=ADDR_128B;
-!    memcpy(msg->l3_destinationAdd.addr_128b,icmpv6rpl_vars.dio.DODAGID,sizeof(icmpv6rpl_vars.dio.DODAGID));
-!    
-!    //===== fill in packet
-!    
-!    //=== transit option -- from RFC 6550, page 55 - 1 transit information header per parent is required.
-!    numTransitParents                        = 0;
-!    for (nbrIdx=0;nbrIdx<MAXNUMNEIGHBORS;nbrIdx++) {
-!       if ((neighbors_isNeighborWithLowerDAGrank(nbrIdx))==TRUE) {
-!          // this neighbor is of lower DAGrank as I am
-!          
-!          // write it's address in DAO
-!          //packetfunctions_reserveHeaderSize(msg,LENGTH_ADDR64b);
-!          neighbors_getNeighbor(&address,ADDR_64B,nbrIdx);
-!          packetfunctions_writeAddress(msg,&address,BIG_ENDIAN);
-!         
-!         
-!          // update transit info fields 
-!          //size of the whole option in bytes.
-!          icmpv6rpl_vars.dao_transit.optionLength  = LENGTH_ADDR64b + sizeof(icmpv6rpl_dao_transit_ht);
-!          icmpv6rpl_vars.dao_transit.PathControl=0; //todo. this is to set the preference of this parent.      
-!          icmpv6rpl_vars.dao_transit.type=OPTION_TRANSIT_INFORMATION_TYPE;
-!            
-!          // write transit info in packet
-!          packetfunctions_reserveHeaderSize(msg,sizeof(icmpv6rpl_dao_transit_ht));
-!          memcpy(
-!                ((icmpv6rpl_dao_transit_ht*)(msg->payload)),
-!                &(icmpv6rpl_vars.dao_transit),
-!                sizeof(icmpv6rpl_dao_transit_ht)
-!          );
-!          
-!          // remember I found it
-!          numTransitParents++;
-!       }  
-!    }
-!    
-!    //target information is required. RFC 6550 page 55.
-!    /*
-!    One or more Transit Information options MUST be preceded by one or
-!    more RPL Target options.   
-!    */
-!     numTargetParents                        = 0;
-!     for (nbrIdx=0;nbrIdx<MAXNUMNEIGHBORS;nbrIdx++) {
-!       if ((neighbors_isNeighborWithHigherDAGrank(nbrIdx))==TRUE) {
-!          // this neighbor is of higher DAGrank as I am. so it is my child
-!          
-!          // write it's address in DAO RFC6550 page 80 check point 1.
-!          neighbors_getNeighbor(&address,ADDR_64B,nbrIdx);
-!          packetfunctions_writeAddress(msg,&address,BIG_ENDIAN);
-!         
-!          // update target info fields 
-!          icmpv6rpl_vars.dao_target.optionLength  = LENGTH_ADDR64b + sizeof(icmpv6rpl_dao_target_ht);
-!          icmpv6rpl_vars.dao_target.type  = OPTION_TARGET_INFORMATION_TYPE;
-!          icmpv6rpl_vars.dao_target.flags  = 0;       //must be 0
-!          icmpv6rpl_vars.dao_target.prefixLength = 0; //no prefix.  
-!          
-!          // write transit info in packet
-!          packetfunctions_reserveHeaderSize(msg,sizeof(icmpv6rpl_dao_target_ht));
-!          memcpy(
-!                ((icmpv6rpl_dao_target_ht*)(msg->payload)),
-!                &(icmpv6rpl_vars.dao_target),
-!                sizeof(icmpv6rpl_dao_target_ht)
-!          );
-!          
-!          // remember I found it
-!          numTargetParents++;
-!       }  
-!    }
-!    
-!    
-!    // stop here if no parents found
-!    if (numTransitParents==0) {
-!       openqueue_freePacketBuffer(msg);
-!       return;
-!    }
-!    
-!    icmpv6rpl_vars.dao_transit.PathSequence++; //increment path sequence.
-!    // if you get here, you will send a DAO
-!    
-!    
-!    //=== DAO header
-!    packetfunctions_reserveHeaderSize(msg,sizeof(icmpv6rpl_dao_ht));
-!    memcpy(
-!       ((icmpv6rpl_dao_ht*)(msg->payload)),
-!       &(icmpv6rpl_vars.dao),
-!       sizeof(icmpv6rpl_dao_ht)
-!    );
-!    
-!    //=== ICMPv6 header
-!    packetfunctions_reserveHeaderSize(msg,sizeof(ICMPv6_ht));
-!    ((ICMPv6_ht*)(msg->payload))->type       = msg->l4_sourcePortORicmpv6Type;
-!    ((ICMPv6_ht*)(msg->payload))->code       = IANA_ICMPv6_RPL_DAO;
-!    packetfunctions_calculateChecksum(msg,(uint8_t*)&(((ICMPv6_ht*)(msg->payload))->checksum)); //call last
-!    
-!    //===== send
-!    if (icmpv6_send(msg)==E_SUCCESS) {
-!       icmpv6rpl_vars.busySending = TRUE;
-!    } else {
-!       openqueue_freePacketBuffer(msg);
-!    }
-! }
---- 1,561 ----
-! #include "openwsn.h"
-! #include "icmpv6rpl.h"
-! #include "icmpv6.h"
-! #include "openserial.h"
-! #include "openqueue.h"
-! #include "neighbors.h"
-! #include "packetfunctions.h"
-! #include "openrandom.h"
-! #include "scheduler.h"
-! #include "idmanager.h"
-! #include "opentimers.h"
-! #include "IEEE802154E.h"
-! 
-! #include "thread.h"
-! 
-! //=========================== variables =======================================
-! 
-! icmpv6rpl_vars_t             icmpv6rpl_vars;
-! //static char openwsn_icmpv6rpl_DAO_stack[KERNEL_CONF_STACKSIZE_MAIN];
-! //static char openwsn_icmpv6rpl_DIO_stack[KERNEL_CONF_STACKSIZE_MAIN];
-! 
-! //=========================== prototypes ======================================
-! 
-! // DIO-related
-! void icmpv6rpl_timer_DIO_cb(void);
-! void icmpv6rpl_timer_DIO_task(void);
-! void sendDIO(void);
-! // DAO-related
-! void icmpv6rpl_timer_DAO_cb(void);
-! void icmpv6rpl_timer_DAO_task(void);
-! void sendDAO(void);
-! 
-! //=========================== public ==========================================
-! 
-! /**
-! \brief Initialize this module.
-! */
-! void icmpv6rpl_init(void) {
-!    
-!    //===== reset local variables
-!    memset(&icmpv6rpl_vars,0,sizeof(icmpv6rpl_vars_t));
-!    
-!    //=== admin
-!    
-!    icmpv6rpl_vars.busySending               = FALSE;
-!    icmpv6rpl_vars.DODAGIDFlagSet            = 0;
-!    
-!    //=== DIO-related
-!    
-!    icmpv6rpl_vars.dio.rplinstanceId         = 0x00;        ///< TODO: put correct value
-!    icmpv6rpl_vars.dio.verNumb               = 0x00;        ///< TODO: put correct value
-!    // rank: to be populated upon TX
-!    icmpv6rpl_vars.dio.rplOptions            = MOP_DIO_A | \
-!                                               MOP_DIO_B | \
-!                                               MOP_DIO_C | \
-!                                               PRF_DIO_A | \
-!                                               PRF_DIO_B | \
-!                                               PRF_DIO_C | \
-!                                               G_DIO ;
-!    icmpv6rpl_vars.dio.DTSN                  = 0x33;        ///< TODO: put correct value
-!    icmpv6rpl_vars.dio.flags                 = 0x00;
-!    icmpv6rpl_vars.dio.reserved              = 0x00;
-!    // DODAGID: to be populated upon receiving DIO
-!    
-!    icmpv6rpl_vars.dioDestination.type = ADDR_128B;
-!    memcpy(&icmpv6rpl_vars.dioDestination.addr_128b[0],all_routers_multicast,sizeof(all_routers_multicast));
-!    
-!    icmpv6rpl_vars.periodDIO                 = TIMER_DIO_TIMEOUT+(openrandom_get16b()&0xff);
-!    icmpv6rpl_vars.timerIdDIO                = opentimers_start(
-!                                                 icmpv6rpl_vars.periodDIO,
-!                                                 TIMER_PERIODIC,
-!                                                 TIME_MS,
-!                                                 icmpv6rpl_timer_DIO_cb
-!                                              );
-!    
-!    //=== DAO-related
-!    
-!    icmpv6rpl_vars.dao.rplinstanceId         = 0x00;        ///< TODO: put correct value
-!    icmpv6rpl_vars.dao.K_D_flags             = FLAG_DAO_A   | \
-!                                               FLAG_DAO_B   | \
-!                                               FLAG_DAO_C   | \
-!                                               FLAG_DAO_D   | \
-!                                               FLAG_DAO_E   | \
-!                                               PRF_DIO_C    | \
-!                                               FLAG_DAO_F   | \
-!                                               D_DAO        |
-!                                               K_DAO;
-!    icmpv6rpl_vars.dao.reserved              = 0x00;
-!    icmpv6rpl_vars.dao.DAOSequence           = 0x00;
-!    // DODAGID: to be populated upon receiving DIO
-!    
-!    icmpv6rpl_vars.dao_transit.type          = OPTION_TRANSIT_INFORMATION_TYPE;
-!    // optionLength: to be populated upon TX
-!    icmpv6rpl_vars.dao_transit.E_flags       = E_DAO_Transit_Info;
-!    icmpv6rpl_vars.dao_transit.PathControl   = PC1_A_DAO_Transit_Info | \
-!                                               PC1_B_DAO_Transit_Info | \
-!                                               PC2_A_DAO_Transit_Info | \
-!                                               PC2_B_DAO_Transit_Info | \
-!                                               PC3_A_DAO_Transit_Info | \
-!                                               PC3_B_DAO_Transit_Info | \
-!                                               PC4_A_DAO_Transit_Info | \
-!                                               PC4_B_DAO_Transit_Info;  
-!    icmpv6rpl_vars.dao_transit.PathSequence  = 0x00; // to be incremented at each TX
-!    icmpv6rpl_vars.dao_transit.PathLifetime  = 0xAA;
-!    //target information
-!    icmpv6rpl_vars.dao_target.type  = OPTION_TARGET_INFORMATION_TYPE;
-!    icmpv6rpl_vars.dao_target.optionLength  = 0;
-!    icmpv6rpl_vars.dao_target.flags  = 0;
-!    icmpv6rpl_vars.dao_target.prefixLength = 0;
-!    
-!    icmpv6rpl_vars.periodDAO                 = TIMER_DAO_TIMEOUT+(openrandom_get16b()&0xff);
-!    icmpv6rpl_vars.timerIdDAO                = opentimers_start(
-!                                                 icmpv6rpl_vars.periodDAO,
-!                                                 TIMER_PERIODIC,
-!                                                 TIME_MS,
-!                                                 icmpv6rpl_timer_DAO_cb
-!                                              );
-!    
-! }
-! 
-! uint8_t icmpv6rpl_getRPLIntanceID(void){
-! 	return icmpv6rpl_vars.dao.rplinstanceId;
-! }
-! 
-! /**
-! \brief Called when DIO/DAO was sent.
-! 
-! \param[in] msg   Pointer to the message just sent.
-! \param[in] error Outcome of the sending.
-! */
-! void icmpv6rpl_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    
-!    // take ownership over that packet
-!    msg->owner = COMPONENT_ICMPv6RPL;
-!    
-!    // make sure I created it
-!    if (msg->creator!=COMPONENT_ICMPv6RPL) {
-!       openserial_printError(COMPONENT_ICMPv6RPL,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    
-!    // free packet
-!    openqueue_freePacketBuffer(msg);
-!    
-!    // I'm not busy sending anymore
-!    icmpv6rpl_vars.busySending = FALSE;
-! }
-! 
-! /**
-! \brief Called when RPL message received.
-! 
-! \param[in] msg   Pointer to the received message.
-! */
-! void icmpv6rpl_receive(OpenQueueEntry_t* msg) {
-!    uint8_t      icmpv6code;
-!    open_addr_t  myPrefix;
-!    
-!    // take ownership
-!    msg->owner      = COMPONENT_ICMPv6RPL;
-!    
-!    // retrieve ICMPv6 code
-!    icmpv6code      = (((ICMPv6_ht*)(msg->payload))->code);
-!    
-!    // toss ICMPv6 header
-!    packetfunctions_tossHeader(msg,sizeof(ICMPv6_ht));
-!    
-!    // handle message
-!    switch (icmpv6code) {
-!       
-!       case IANA_ICMPv6_RPL_DIO:
-!          if (idmanager_getIsBridge()==TRUE) {
-!             // stop here if I'm in bridge mode
-!             break; // break, don't return
-!          }
-!          
-!          // update neighbor table
-!          neighbors_indicateRxDIO(msg);
-!          
-!          // update DODAGID in DIO/DAO
-!          memcpy(
-!             &(icmpv6rpl_vars.dio.DODAGID[0]),
-!             &(((icmpv6rpl_dio_ht*)(msg->payload))->DODAGID[0]),
-!             sizeof(icmpv6rpl_vars.dio.DODAGID)
-!          );
-!          memcpy(
-!             &(icmpv6rpl_vars.dao.DODAGID[0]),
-!             &(((icmpv6rpl_dio_ht*)(msg->payload))->DODAGID[0]),
-!             sizeof(icmpv6rpl_vars.dao.DODAGID)
-!          );
-!          
-!          // remember I got a DODAGID
-!          icmpv6rpl_vars.DODAGIDFlagSet=1;
-!          
-!          // update my prefix
-!          myPrefix.type = ADDR_PREFIX;
-!          memcpy(
-!             myPrefix.prefix,
-!             &((icmpv6rpl_dio_ht*)(msg->payload))->DODAGID[0],
-!             sizeof(myPrefix.prefix)
-!          );
-!          idmanager_setMyID(&myPrefix);
-!          
-!          break;
-!       
-!       case IANA_ICMPv6_RPL_DAO:
-!          // this should never happen
-!          openserial_printCritical(COMPONENT_ICMPv6RPL,ERR_UNEXPECTED_DAO,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          break;
-!       
-!       default:
-!          // this should never happen
-!          openserial_printCritical(COMPONENT_ICMPv6RPL,ERR_MSG_UNKNOWN_TYPE,
-!                                (errorparameter_t)icmpv6code,
-!                                (errorparameter_t)0);
-!          break;
-!       
-!    }
-!    
-!    // free message
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! //=========================== private =========================================
-! 
-! //===== DIO-related
-! 
-! /**
-! \brief DIO timer callback function.
-! 
-! \note This function is executed in interrupt context, and should only push a 
-!    task.
-! */
-! void icmpv6rpl_timer_DIO_cb(void) {
-!    scheduler_push_task(icmpv6rpl_timer_DIO_task,TASKPRIO_RPL);
-!    /*thread_create(openwsn_icmpv6rpl_DIO_stack, KERNEL_CONF_STACKSIZE_MAIN, 
-!                   PRIORITY_OPENWSN_ICMPV6RPL, CREATE_STACKTEST, 
-!                   icmpv6rpl_timer_DIO_task, "icmpv6rpl_timer_DIO_task");*/
-! }
-! 
-! /**
-! \brief Handler for DIO timer event.
-! 
-! \note This function is executed in task context, called by the scheduler.
-! */
-! void icmpv6rpl_timer_DIO_task(void) {
-!    
-!    // update the delayDIO
-!    icmpv6rpl_vars.delayDIO = (icmpv6rpl_vars.delayDIO+1)%5;
-!    
-!    // check whether we need to send DIO
-!    if (icmpv6rpl_vars.delayDIO==0) {
-!       
-!       // send DIO
-!       sendDIO();
-!       
-!       // pick a new pseudo-random periodDIO
-!       icmpv6rpl_vars.periodDIO = TIMER_DIO_TIMEOUT+(openrandom_get16b()&0xff);
-!       
-!       // arm the DIO timer with this new value
-!       opentimers_setPeriod(
-!          icmpv6rpl_vars.timerIdDIO,
-!          TIME_MS,
-!          icmpv6rpl_vars.periodDIO
-!       );
-!    }
-! }
-! 
-! /**
-! \brief Prepare and a send a RPL DIO.
-! */
-! void sendDIO(void) {
-!    OpenQueueEntry_t*    msg;
-!    
-!    // stop if I'm not sync'ed
-!    if (ieee154e_isSynch()==FALSE) {
-!       
-!       // remove packets genereted by this module (DIO and DAO) from openqueue
-!       openqueue_removeAllCreatedBy(COMPONENT_ICMPv6RPL);
-!       
-!       // I'm not busy sending a DIO/DAO
-!       icmpv6rpl_vars.busySending  = FALSE;
-!       
-!       // stop here
-!       return;
-!    }
-!       
-!    // do not send DIO if I'm in in bridge mode
-!    if (idmanager_getIsBridge()==TRUE) {
-!       return;
-!    }
-!    
-!    // do not send DIO if I have the default DAG rank
-!    if (neighbors_getMyDAGrank()==DEFAULTDAGRANK) {
-!       return;
-!    }
-!    
-!    // do not send DIO if I'm already busy sending
-!    if (icmpv6rpl_vars.busySending==TRUE) {
-!       return;
-!    }
-!    
-!    // if you get here, all good to send a DIO
-!    
-!    // I'm now busy sending
-!    icmpv6rpl_vars.busySending = TRUE;
-!    
-!    // reserve a free packet buffer for DIO
-!    msg = openqueue_getFreePacketBuffer(COMPONENT_ICMPv6RPL);
-!    if (msg==NULL) {
-!       openserial_printError(COMPONENT_ICMPv6RPL,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       icmpv6rpl_vars.busySending = FALSE;
-!       
-!       return;
-!    }
-!    
-!    // take ownership
-!    msg->creator                             = COMPONENT_ICMPv6RPL;
-!    msg->owner                               = COMPONENT_ICMPv6RPL;
-!    
-!    // set transport information
-!    msg->l4_protocol                         = IANA_ICMPv6;
-!    msg->l4_sourcePortORicmpv6Type           = IANA_ICMPv6_RPL;
-!    
-!    // set DIO destination
-!    memcpy(&(msg->l3_destinationAdd),&icmpv6rpl_vars.dioDestination,sizeof(open_addr_t));
-!    
-!    //===== DIO payload
-!    // note: DIO is already mostly populated
-!    icmpv6rpl_vars.dio.rank                  = neighbors_getMyDAGrank();
-!    packetfunctions_reserveHeaderSize(msg,sizeof(icmpv6rpl_dio_ht));
-!    memcpy(
-!       ((icmpv6rpl_dio_ht*)(msg->payload)),
-!       &(icmpv6rpl_vars.dio),
-!       sizeof(icmpv6rpl_dio_ht)
-!    );
-!    
-!    //===== ICMPv6 header
-!    packetfunctions_reserveHeaderSize(msg,sizeof(ICMPv6_ht));
-!    ((ICMPv6_ht*)(msg->payload))->type       = msg->l4_sourcePortORicmpv6Type;
-!    ((ICMPv6_ht*)(msg->payload))->code       = IANA_ICMPv6_RPL_DIO;
-!    packetfunctions_calculateChecksum(msg,(uint8_t*)&(((ICMPv6_ht*)(msg->payload))->checksum));//call last
-!    
-!    //send
-!    if (icmpv6_send(msg)!=E_SUCCESS) {
-!       icmpv6rpl_vars.busySending = FALSE;
-!       openqueue_freePacketBuffer(msg);
-!    } else {
-!       icmpv6rpl_vars.busySending = FALSE; 
-!    }
-! }
-! 
-! //===== DAO-related
-! 
-! /**
-! \brief DAO timer callback function.
-! 
-! \note This function is executed in interrupt context, and should only push a
-!    task.
-! */
-! void icmpv6rpl_timer_DAO_cb(void) {
-!     scheduler_push_task(icmpv6rpl_timer_DAO_task,TASKPRIO_RPL);
-!     /*thread_create(openwsn_icmpv6rpl_DAO_stack, KERNEL_CONF_STACKSIZE_MAIN, 
-!                   PRIORITY_OPENWSN_ICMPV6RPL, CREATE_STACKTEST, 
-!                   icmpv6rpl_timer_DAO_task, "icmpv6rpl_timer_DAO_task");*/
-! }
-! 
-! /**
-! \brief Handler for DAO timer event.
-! 
-! \note This function is executed in task context, called by the scheduler.
-! */
-! void icmpv6rpl_timer_DAO_task(void) {
-!    
-!    // update the delayDAO
-!    icmpv6rpl_vars.delayDAO = (icmpv6rpl_vars.delayDAO+1)%5;
-!    
-!    // check whether we need to send DAO
-!    if (icmpv6rpl_vars.delayDAO==0) {
-!       
-!       // send DAO
-!       sendDAO();
-!       
-!       // pick a new pseudo-random periodDAO
-!       icmpv6rpl_vars.periodDAO = TIMER_DAO_TIMEOUT+(openrandom_get16b()&0xff);
-!       
-!       // arm the DAO timer with this new value
-!       opentimers_setPeriod(
-!          icmpv6rpl_vars.timerIdDAO,
-!          TIME_MS,
-!          icmpv6rpl_vars.periodDAO
-!       );
-!    }
-! }
-! 
-! /**
-! \brief Prepare and a send a RPL DAO.
-! */
-! void sendDAO(void) {
-!    OpenQueueEntry_t*    msg;                // pointer to DAO messages
-!    uint8_t              nbrIdx;             // running neighbor index
-!    uint8_t              numTransitParents,numTargetParents;  // the number of parents indicated in transit option
-!    open_addr_t         address;
-!    open_addr_t*        prefix;
-!    
-!    if (ieee154e_isSynch()==FALSE) {
-!       // I'm not sync'ed 
-!       
-!       // delete packets genereted by this module (DIO and DAO) from openqueue
-!       openqueue_removeAllCreatedBy(COMPONENT_ICMPv6RPL);
-!       
-!       // I'm not busy sending a DIO/DAO
-!       icmpv6rpl_vars.busySending = FALSE;
-!       
-!       // stop here
-!       return;
-!    }
-!    
-!    // dont' send a DAO if you're in bridge mode
-!    if (idmanager_getIsBridge()==TRUE) {
-!       return;
-!    }
-!    
-!    // dont' send a DAO if you did not acquire a DAGrank
-!    if (neighbors_getMyDAGrank()==DEFAULTDAGRANK) {
-!        return;
-!    }
-!    
-!    // dont' send a DAO if you're still busy sending the previous one
-!    if (icmpv6rpl_vars.busySending==TRUE) {
-!       return;
-!    }
-!    
-!    // if you get here, you start construct DAO
-!    
-!    // reserve a free packet buffer for DAO
-!    msg = openqueue_getFreePacketBuffer(COMPONENT_ICMPv6RPL);
-!    if (msg==NULL) {
-!       openserial_printError(COMPONENT_ICMPv6RPL,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    
-!    // take ownership
-!    msg->creator                             = COMPONENT_ICMPv6RPL;
-!    msg->owner                               = COMPONENT_ICMPv6RPL;
-!    
-!    // set transport information
-!    msg->l4_protocol                         = IANA_ICMPv6;
-!    msg->l4_sourcePortORicmpv6Type           = IANA_ICMPv6_RPL;
-!    
-!    // set DAO destination
-!    msg->l3_destinationAdd.type=ADDR_128B;
-!    memcpy(msg->l3_destinationAdd.addr_128b,icmpv6rpl_vars.dio.DODAGID,sizeof(icmpv6rpl_vars.dio.DODAGID));
-!    
-!    //===== fill in packet
-!    
-!    //NOTE: limit to preferrred parent only the number of DAO transit addresses to send
-!    
-!    //=== transit option -- from RFC 6550, page 55 - 1 transit information header per parent is required. 
-!    //getting only preferred parent as transit
-!    numTransitParents=0;
-!    neighbors_getPreferredParentEui64(&address);
-!    packetfunctions_writeAddress(msg,&address,OW_BIG_ENDIAN);
-!    prefix=idmanager_getMyID(ADDR_PREFIX);
-!    packetfunctions_writeAddress(msg,prefix,OW_BIG_ENDIAN);
-!    // update transit info fields
-!    // from rfc6550 p.55 -- Variable, depending on whether or not the DODAG ParentAddress subfield is present.
-!    // poipoi xv: it is not very clear if this includes all fields in the header. or as target info 2 bytes are removed.
-!    // using the same pattern as in target information.
-!    icmpv6rpl_vars.dao_transit.optionLength  = LENGTH_ADDR128b + sizeof(icmpv6rpl_dao_transit_ht)-2;
-!    icmpv6rpl_vars.dao_transit.PathControl=0; //todo. this is to set the preference of this parent.      
-!    icmpv6rpl_vars.dao_transit.type=OPTION_TRANSIT_INFORMATION_TYPE;
-!            
-!    // write transit info in packet
-!    packetfunctions_reserveHeaderSize(msg,sizeof(icmpv6rpl_dao_transit_ht));
-!    memcpy(
-!           ((icmpv6rpl_dao_transit_ht*)(msg->payload)),
-!           &(icmpv6rpl_vars.dao_transit),
-!           sizeof(icmpv6rpl_dao_transit_ht)
-!    );
-!    numTransitParents++;
-!    
-!    //target information is required. RFC 6550 page 55.
-!    /*
-!    One or more Transit Information options MUST be preceded by one or
-!    more RPL Target options.   
-!    */
-!     numTargetParents                        = 0;
-!     for (nbrIdx=0;nbrIdx<MAXNUMNEIGHBORS;nbrIdx++) {
-!       if ((neighbors_isNeighborWithHigherDAGrank(nbrIdx))==TRUE) {
-!          // this neighbor is of higher DAGrank as I am. so it is my child
-!          
-!          // write it's address in DAO RFC6550 page 80 check point 1.
-!          neighbors_getNeighbor(&address,ADDR_64B,nbrIdx); 
-!          packetfunctions_writeAddress(msg,&address,OW_BIG_ENDIAN);
-!          prefix=idmanager_getMyID(ADDR_PREFIX);
-!          packetfunctions_writeAddress(msg,prefix,OW_BIG_ENDIAN);
-!         
-!          // update target info fields 
-!          // from rfc6550 p.55 -- Variable, length of the option in octets excluding the Type and Length fields.
-!          // poipoi xv: assuming that type and length fields refer to the 2 first bytes of the header
-!          icmpv6rpl_vars.dao_target.optionLength  = LENGTH_ADDR128b +sizeof(icmpv6rpl_dao_target_ht) - 2; //no header type and length
-!          icmpv6rpl_vars.dao_target.type  = OPTION_TARGET_INFORMATION_TYPE;
-!          icmpv6rpl_vars.dao_target.flags  = 0;       //must be 0
-!          icmpv6rpl_vars.dao_target.prefixLength = 128; //128 leading bits  -- full address.
-!          
-!          // write transit info in packet
-!          packetfunctions_reserveHeaderSize(msg,sizeof(icmpv6rpl_dao_target_ht));
-!          memcpy(
-!                ((icmpv6rpl_dao_target_ht*)(msg->payload)),
-!                &(icmpv6rpl_vars.dao_target),
-!                sizeof(icmpv6rpl_dao_target_ht)
-!          );
-!          
-!          // remember I found it
-!          numTargetParents++;
-!       }  
-!       //limit to MAX_TARGET_PARENTS the number of DAO target addresses to send
-!       //section 8.2.1 pag 67 RFC6550 -- using a subset
-!       // poipoi TODO base selection on ETX rather than first X.
-!       if (numTargetParents>=MAX_TARGET_PARENTS) break;
-!    }
-!    
-!    
-!    // stop here if no parents found
-!    if (numTransitParents==0) {
-!       openqueue_freePacketBuffer(msg);
-!       return;
-!    }
-!    
-!    icmpv6rpl_vars.dao_transit.PathSequence++; //increment path sequence.
-!    // if you get here, you will send a DAO
-!    
-!    
-!    //=== DAO header
-!    packetfunctions_reserveHeaderSize(msg,sizeof(icmpv6rpl_dao_ht));
-!    memcpy(
-!       ((icmpv6rpl_dao_ht*)(msg->payload)),
-!       &(icmpv6rpl_vars.dao),
-!       sizeof(icmpv6rpl_dao_ht)
-!    );
-!    
-!    //=== ICMPv6 header
-!    packetfunctions_reserveHeaderSize(msg,sizeof(ICMPv6_ht));
-!    ((ICMPv6_ht*)(msg->payload))->type       = msg->l4_sourcePortORicmpv6Type;
-!    ((ICMPv6_ht*)(msg->payload))->code       = IANA_ICMPv6_RPL_DAO;
-!    packetfunctions_calculateChecksum(msg,(uint8_t*)&(((ICMPv6_ht*)(msg->payload))->checksum)); //call last
-!    
-!    //===== send
-!    if (icmpv6_send(msg)==E_SUCCESS) {
-!       icmpv6rpl_vars.busySending = TRUE;
-!    } else {
-!       openqueue_freePacketBuffer(msg);
-!    }
-! }
-diff -crB openwsn/03b-IPv6/icmpv6rpl.h ../../../sys/net/openwsn/03b-IPv6/icmpv6rpl.h
-*** openwsn/03b-IPv6/icmpv6rpl.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/03b-IPv6/icmpv6rpl.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,140 ****
-! #ifndef __ICMPv6RPL_H
-! #define __ICMPv6RPL_H
-! 
-! /**
-! \addtogroup IPv6
-! \{
-! \addtogroup ICMPv6RPL
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! #define TIMER_DIO_TIMEOUT         1700
-! #define TIMER_DAO_TIMEOUT         10000
-! 
-! #define MOP_DIO_A                 1<<5
-! #define MOP_DIO_B                 1<<4
-! #define MOP_DIO_C                 1<<3
-! #define PRF_DIO_A                 0<<2
-! #define PRF_DIO_B                 0<<1
-! #define PRF_DIO_C                 0<<0
-! #define G_DIO                     1<<7
-! 
-! #define FLAG_DAO_A                0<<0
-! #define FLAG_DAO_B                0<<1
-! #define FLAG_DAO_C                0<<2
-! #define FLAG_DAO_D                0<<3
-! #define FLAG_DAO_E                0<<4
-! #define FLAG_DAO_F                0<<5
-! #define D_DAO                     1<<6
-! #define K_DAO                     0<<7
-! 
-! #define E_DAO_Transit_Info        0<<7
-! 
-! #define PC1_A_DAO_Transit_Info    0<<7
-! #define PC1_B_DAO_Transit_Info    1<<6
-! 
-! #define PC2_A_DAO_Transit_Info    0<<5
-! #define PC2_B_DAO_Transit_Info    0<<4
-! 
-! #define PC3_A_DAO_Transit_Info    0<<3
-! #define PC3_B_DAO_Transit_Info    0<<2
-! 
-! #define PC4_A_DAO_Transit_Info    0<<1
-! #define PC4_B_DAO_Transit_Info    0<<0
-! 
-! #define Prf_A_dio_options         0<<4
-! #define Prf_B_dio_options         0<<3
-! 
-! enum{
-!   OPTION_ROUTE_INFORMATION_TYPE   = 0x03,
-!   OPTION_DODAG_CONFIGURATION_TYPE = 0x04,
-!   OPTION_TARGET_INFORMATION_TYPE  = 0x05,
-!   OPTION_TRANSIT_INFORMATION_TYPE = 0x06,
-! };
-! 
-! //=========================== static ==========================================
-! 
-! /**
-! \brief Well-known IPv6 multicast address for "all routers".
-! */
-! static const uint8_t all_routers_multicast[] = {
-!    0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
-!    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! //===== DIO
-! 
-! /**
-! \brief Header format of a RPL DIO packet.
-! */
-! PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         rplinstanceId;      ///< set by the DODAG root.
-!    uint8_t         verNumb;
-!    dagrank_t       rank;
-!    uint8_t         rplOptions;
-!    uint8_t         DTSN;
-!    uint8_t         flags;
-!    uint8_t         reserved;
-!    uint8_t         DODAGID[16];    
-! } icmpv6rpl_dio_ht;
-! PRAGMA(pack());
-! 
-! //===== DAO
-! 
-! /**
-! \brief Header format of a RPL DAO packet.
-! */
-! PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         rplinstanceId;      ///< set by the DODAG root.
-!    uint8_t         K_D_flags;
-!    uint8_t         reserved;
-!    uint8_t         DAOSequance;
-!    uint8_t         DODAGID[16];
-! } icmpv6rpl_dao_ht;
-! PRAGMA(pack());
-! 
-! /**
-! \brief Header format of a RPL DAO "Transit Information" option.
-! */
-! PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         type;               ///< set by the DODAG root.
-!    uint8_t         optionLength;
-!    uint8_t         E_flags;
-!    uint8_t         PathControl;
-!    uint8_t         PathSequence;   
-!    uint8_t         PathLifetime;   
-! } icmpv6rpl_dao_transit_ht;
-! PRAGMA(pack());
-! 
-! /**
-! \brief Header format of a RPL DAO "Target" option.
-! */
-! PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         type;               ///< set by the DODAG root.
-!    uint8_t         optionLength;
-!    uint8_t         flags;
-!    uint8_t         prefixLength;  
-! } icmpv6rpl_dao_target_ht;
-! PRAGMA(pack());
-! 
-! 
-! //=========================== prototypes ======================================
-! 
-! void icmpv6rpl_init();
-! void icmpv6rpl_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void icmpv6rpl_receive(OpenQueueEntry_t* msg);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,167 ----
-! #ifndef __ICMPv6RPL_H
-! #define __ICMPv6RPL_H
-! 
-! /**
-! \addtogroup IPv6
-! \{
-! \addtogroup ICMPv6RPL
-! \{
-! */
-! 
-! #include "opentimers.h"
-! 
-! //=========================== define ==========================================
-! 
-! #define TIMER_DIO_TIMEOUT         1700
-! #define TIMER_DAO_TIMEOUT         10000
-! 
-! #define MOP_DIO_A                 1<<5
-! #define MOP_DIO_B                 1<<4
-! #define MOP_DIO_C                 1<<3
-! #define PRF_DIO_A                 0<<2
-! #define PRF_DIO_B                 0<<1
-! #define PRF_DIO_C                 0<<0
-! #define G_DIO                     1<<7
-! 
-! #define FLAG_DAO_A                0<<0
-! #define FLAG_DAO_B                0<<1
-! #define FLAG_DAO_C                0<<2
-! #define FLAG_DAO_D                0<<3
-! #define FLAG_DAO_E                0<<4
-! #define FLAG_DAO_F                0<<5
-! #define D_DAO                     1<<6
-! #define K_DAO                     0<<7
-! 
-! #define E_DAO_Transit_Info        0<<7
-! 
-! #define PC1_A_DAO_Transit_Info    0<<7
-! #define PC1_B_DAO_Transit_Info    1<<6
-! 
-! #define PC2_A_DAO_Transit_Info    0<<5
-! #define PC2_B_DAO_Transit_Info    0<<4
-! 
-! #define PC3_A_DAO_Transit_Info    0<<3
-! #define PC3_B_DAO_Transit_Info    0<<2
-! 
-! #define PC4_A_DAO_Transit_Info    0<<1
-! #define PC4_B_DAO_Transit_Info    0<<0
-! 
-! #define Prf_A_dio_options         0<<4
-! #define Prf_B_dio_options         0<<3
-! 
-! // max number of parents and children to send in DAO
-! //section 8.2.1 pag 67 RFC6550 -- using a subset
-! #define MAX_TARGET_PARENTS        0x01
-! 
-! enum{
-!   OPTION_ROUTE_INFORMATION_TYPE   = 0x03,
-!   OPTION_DODAG_CONFIGURATION_TYPE = 0x04,
-!   OPTION_TARGET_INFORMATION_TYPE  = 0x05,
-!   OPTION_TRANSIT_INFORMATION_TYPE = 0x06,
-! };
-! 
-! //=========================== static ==========================================
-! 
-! /**
-! \brief Well-known IPv6 multicast address for "all routers".
-! */
-! static const uint8_t all_routers_multicast[] = {
-!    0xff, 0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, \
-!    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! //===== DIO
-! 
-! /**
-! \brief Header format of a RPL DIO packet.
-! */
-! //PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         rplinstanceId;      ///< set by the DODAG root.
-!    uint8_t         verNumb;
-!    dagrank_t       rank;
-!    uint8_t         rplOptions;
-!    uint8_t         DTSN;
-!    uint8_t         flags;
-!    uint8_t         reserved;
-!    uint8_t         DODAGID[16];    
-! } icmpv6rpl_dio_ht;
-! //PRAGMA(pack());
-! 
-! //===== DAO
-! 
-! /**
-! \brief Header format of a RPL DAO packet.
-! */
-! //PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         rplinstanceId;      ///< set by the DODAG root.
-!    uint8_t         K_D_flags;
-!    uint8_t         reserved;
-!    uint8_t         DAOSequence;
-!    uint8_t         DODAGID[16];
-! } icmpv6rpl_dao_ht;
-! //PRAGMA(pack());
-! 
-! /**
-! \brief Header format of a RPL DAO "Transit Information" option.
-! */
-! //PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         type;               ///< set by the DODAG root.
-!    uint8_t         optionLength;
-!    uint8_t         E_flags;
-!    uint8_t         PathControl;
-!    uint8_t         PathSequence;   
-!    uint8_t         PathLifetime;   
-! } icmpv6rpl_dao_transit_ht;
-! //PRAGMA(pack());
-! 
-! /**
-! \brief Header format of a RPL DAO "Target" option.
-! */
-! //PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t         type;               ///< set by the DODAG root.
-!    uint8_t         optionLength;
-!    uint8_t         flags;
-!    uint8_t         prefixLength;  
-! } icmpv6rpl_dao_target_ht;
-! //PRAGMA(pack());
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    // admin
-!    bool                      busySending;             ///< currently sending DIO/DAO.
-!    uint8_t                   DODAGIDFlagSet;          ///< is DODAGID set already?
-!    // DIO-related
-!    icmpv6rpl_dio_ht          dio;                     ///< pre-populated DIO packet.
-!    open_addr_t               dioDestination;          ///< IPv6 destination address for DIOs.
-!    uint16_t                  periodDIO;               ///< duration, in ms, of a timerIdDIO timeout.
-!    opentimer_id_t            timerIdDIO;              ///< ID of the timer used to send DIOs.
-!    uint8_t                   delayDIO;                ///< number of timerIdDIO events before actually sending a DIO.
-!    // DAO-related
-!    icmpv6rpl_dao_ht          dao;                     ///< pre-populated DAO packet.
-!    icmpv6rpl_dao_transit_ht  dao_transit;             ///< pre-populated DAO "Transit Info" option header.
-!    icmpv6rpl_dao_target_ht  dao_target;             ///< pre-populated DAO "Transit Info" option header.
-!    opentimer_id_t            timerIdDAO;              ///< ID of the timer used to send DAOs.
-!    uint16_t                  periodDAO;               ///< duration, in ms, of a timerIdDAO timeout.
-!    uint8_t                   delayDAO;                ///< number of timerIdDIO events before actually sending a DAO.
-! } icmpv6rpl_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! void icmpv6rpl_init(void);
-! void icmpv6rpl_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void icmpv6rpl_receive(OpenQueueEntry_t* msg);
-! uint8_t icmpv6rpl_getRPLIntanceID(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/04-TRAN/Makefile ../../../sys/net/openwsn/04-TRAN/Makefile
-*** openwsn/04-TRAN/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/04-TRAN/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,42 ----
-+ SUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/ 
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/07-App/ohlone
-+ INCLUDES += -I$(CURDIR)/07-App/tcpecho
-+ INCLUDES += -I$(CURDIR)/07-App/tcpinject
-+ INCLUDES += -I$(CURDIR)/07-App/tcpprint
-+ INCLUDES += -I$(CURDIR)/07-App/udpecho
-+ INCLUDES += -I$(CURDIR)/07-App/udpinject
-+ INCLUDES += -I$(CURDIR)/07-App/udplatency
-+ INCLUDES += -I$(CURDIR)/07-App/udpprint
-+ INCLUDES += -I$(CURDIR)/07-App/udprand
-+ INCLUDES += -I$(CURDIR)/07-App/udpstorm
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBMOD)
-+ 
-+ $(BINDIR)$(SUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/04-TRAN/opencoap.c ../../../sys/net/openwsn/04-TRAN/opencoap.c
-*** openwsn/04-TRAN/opencoap.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/04-TRAN/opencoap.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,335 ****
-! #include "openwsn.h"
-! #include "opencoap.h"
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "packetfunctions.h"
-! #include "idmanager.h"
-! #include "opentimers.h"
-! #include "scheduler.h"
-! 
-! //=========================== variables =======================================
-! 
-! // general variable to the CoAP core
-! typedef struct {
-!    coap_resource_desc_t* resources;
-!    bool                  busySending;
-!    uint8_t               delayCounter;
-!    uint16_t              messageID;
-!    opentimer_id_t        timerId;
-! } opencoap_vars_t;
-! 
-! opencoap_vars_t opencoap_vars;
-! 
-! //=========================== prototype =======================================
-! 
-! void icmpv6coap_timer_cb();
-! 
-! //=========================== public ==========================================
-! 
-! //===== from stack
-! 
-! void opencoap_init() {
-!    // initialize the resource linked list
-!    opencoap_vars.resources     = NULL;
-!    
-!    // initialize the messageID
-!    opencoap_vars.messageID     = openrandom_get16b();
-!    
-!    // start the timer
-!    if (idmanager_getIsDAGroot()==FALSE) {
-!       opencoap_vars.timerId = opentimers_start(1000,
-!                                                TIMER_PERIODIC,TIME_MS,
-!                                                icmpv6coap_timer_cb);
-!    }
-! }
-! 
-! void opencoap_receive(OpenQueueEntry_t* msg) {
-!    uint16_t                  temp_l4_destination_port;
-!    uint8_t                   i;
-!    uint8_t                   index;
-!    coap_option_t             last_option;
-!    coap_resource_desc_t*     temp_desc;
-!    bool                      found;
-!    error_t                   outcome;
-!    // local variables passed to the handlers (with msg)
-!    coap_header_iht           coap_header;
-!    coap_option_iht           coap_options[MAX_COAP_OPTIONS];
-!    
-!    // take ownership over the received packet
-!    msg->owner                = COMPONENT_OPENCOAP;
-!    
-!    //=== step 1. parse the packet
-!    
-!    // parse the CoAP header and remove from packet
-!    index = 0;
-!    coap_header.Ver           = (msg->payload[index] & 0xc0) >> 6;
-!    coap_header.T             = (coap_type_t)((msg->payload[index] & 0x30) >> 4);
-!    coap_header.OC            = (msg->payload[index] & 0x0f);
-!    index++;
-!    coap_header.Code          = (coap_code_t)(msg->payload[index]);
-!    index++;
-!    coap_header.messageID     = msg->payload[index]*256+msg->payload[index+1];
-!    index+=2;
-!    // reject unsupported header
-!    if (
-!          coap_header.Ver!=COAP_VERSION ||
-!          coap_header.OC>MAX_COAP_OPTIONS
-!       ) {
-!       openserial_printError(COMPONENT_OPENCOAP,ERR_6LOWPAN_UNSUPPORTED,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)coap_header.Ver);
-!       openqueue_freePacketBuffer(msg);
-!       return;
-!    }
-!    // initialize the coap_options
-!    for (i=0;i<MAX_COAP_OPTIONS;i++) {
-!       coap_options[i].type = COAP_OPTION_NONE;
-!    }
-!    // fill in the coap_options
-!    last_option = COAP_OPTION_NONE;
-!    for (i=0;i<coap_header.OC;i++) {
-!       coap_options[i].type        = (coap_option_t)((uint8_t)last_option+(uint8_t)((msg->payload[index] & 0xf0) >> 4));
-!       last_option                 = coap_options[i].type;
-!       coap_options[i].length      = (msg->payload[index] & 0x0f);
-!       index++;
-!       coap_options[i].pValue      = &(msg->payload[index]);
-!       index += coap_options[i].length;
-!    }
-!    // remove the CoAP header+options
-!    packetfunctions_tossHeader(msg,index);
-!    
-!    //=== step 2. find the resource to handle the packet
-!    
-!    // find the resource this applies to
-!    found = FALSE;
-!    if (coap_header.Code>=COAP_CODE_REQ_GET &&
-!        coap_header.Code<=COAP_CODE_REQ_DELETE) {
-!       // this is a request: target resource is indicated as COAP_OPTION_LOCATIONPATH option(s)
-!       
-!       // find the resource which matches    
-!       temp_desc = opencoap_vars.resources;
-!       while (found==FALSE) {
-!          if    (
-!                 coap_options[0].type==COAP_OPTION_URIPATH &&
-!                 coap_options[1].type==COAP_OPTION_URIPATH &&
-!                 temp_desc->path0len>0                     &&
-!                 temp_desc->path0val!=NULL                 &&
-!                 temp_desc->path1len>0                     &&
-!                 temp_desc->path1val!=NULL
-!             ) {
-!             // resource has a path of form path0/path1
-!                
-!             if (
-!                coap_options[0].length==temp_desc->path0len                               &&
-!                memcmp(coap_options[0].pValue,temp_desc->path0val,temp_desc->path0len)==0 &&
-!                coap_options[1].length==temp_desc->path1len                               &&
-!                memcmp(coap_options[1].pValue,temp_desc->path1val,temp_desc->path1len)==0
-!                ) {
-!                found = TRUE;
-!             };
-!          } else if (
-!                 coap_options[0].type==COAP_OPTION_URIPATH &&
-!                 temp_desc->path0len>0                     &&
-!                 temp_desc->path0val!=NULL
-!             ) {
-!             // resource has a path of form path0
-!                
-!             if (
-!                coap_options[0].length==temp_desc->path0len                               &&
-!                memcmp(coap_options[0].pValue,temp_desc->path0val,temp_desc->path0len)==0
-!                ) {
-!                found = TRUE;
-!             };
-!          };
-!          // iterate to next resource
-!          if (found==FALSE) {
-!             if (temp_desc->next!=NULL) {
-!                temp_desc = temp_desc->next;
-!             } else {
-!                break;
-!             }
-!          }
-!       };
-!    } else {
-!       // this is a response: target resource is indicated by message ID
-!       
-!       // find the resource which matches    
-!       temp_desc = opencoap_vars.resources;
-!       while (found==FALSE) {
-!          if (coap_header.messageID==temp_desc->messageID) {
-!             found=TRUE;
-!             if (temp_desc->callbackRx!=NULL) {
-!                temp_desc->callbackRx(msg,&coap_header,&coap_options[0]);
-!             }
-!          }
-!          // iterate to next resource
-!          if (found==FALSE) {
-!             if (temp_desc->next!=NULL) {
-!                temp_desc = temp_desc->next;
-!             } else {
-!                break;
-!             }
-!          }
-!       };
-!       openqueue_freePacketBuffer(msg);
-!       // stop here: will will not respond to a response
-!       return;
-!    }
-!    
-!    //=== step 3. ask the resource to prepare response
-!    
-!    if (found==TRUE) {
-!       outcome = temp_desc->callbackRx(msg,&coap_header,&coap_options[0]);
-!    } else {
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       // set the CoAP header
-!       coap_header.OC                   = 0;
-!       coap_header.Code                 = COAP_CODE_RESP_NOTFOUND;
-!    }
-!    
-!    if (outcome==E_FAIL) {
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       // set the CoAP header
-!       coap_header.OC                   = 0;
-!       coap_header.Code                 = COAP_CODE_RESP_METHODNOTALLOWED;
-!    }
-!    
-!    //=== step 4. send that packet back
-!    
-!    // fill in packet metadata
-!    if (found==TRUE) {
-!       msg->creator                  = temp_desc->componentID;
-!    } else {
-!       msg->creator                  = COMPONENT_OPENCOAP;
-!    }
-!    msg->l4_protocol                 = IANA_UDP;
-!    temp_l4_destination_port         = msg->l4_destination_port;
-!    msg->l4_destination_port         = msg->l4_sourcePortORicmpv6Type;
-!    msg->l4_sourcePortORicmpv6Type   = temp_l4_destination_port;
-!    
-!    // fill in CoAP header
-!    packetfunctions_reserveHeaderSize(msg,4);
-!    msg->payload[0]                  = (COAP_VERSION   << 6) |
-!                                       (COAP_TYPE_ACK  << 4) |
-!                                       (coap_header.OC << 0);
-!    msg->payload[1]                  = coap_header.Code;
-!    msg->payload[2]                  = coap_header.messageID/256;
-!    msg->payload[3]                  = coap_header.messageID%256;
-!    
-!    if ((openudp_send(msg))==E_FAIL) {
-!       openqueue_freePacketBuffer(msg);
-!    }
-! }
-! 
-! void opencoap_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    coap_resource_desc_t* temp_resource;
-!    
-!    // take ownership over that packet
-!    msg->owner = COMPONENT_OPENCOAP;
-!    
-!    // indicate sendDone to creator of that packet
-!    //=== mine
-!    if (msg->creator==COMPONENT_OPENCOAP) {
-!       openqueue_freePacketBuffer(msg);
-!       return;
-!    }
-!    //=== someone else's
-!    temp_resource = opencoap_vars.resources;
-!    while (temp_resource!=NULL) {
-!       if (temp_resource->componentID==msg->creator &&
-!           temp_resource->callbackSendDone!=NULL) {
-!          temp_resource->callbackSendDone(msg,error);
-!          return;
-!       }
-!       temp_resource = temp_resource->next;
-!    }
-!    
-!    openserial_printError(COMPONENT_OPENCOAP,ERR_UNEXPECTED_SENDDONE,
-!                          (errorparameter_t)0,
-!                          (errorparameter_t)0);
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void timers_coap_fired() {
-!    //do something here if necessary
-! }
-! 
-! //===== from CoAP resources
-! 
-! void opencoap_writeLinks(OpenQueueEntry_t* msg) {
-!    coap_resource_desc_t* temp_resource;
-!    
-!    temp_resource = opencoap_vars.resources;
-!    while (temp_resource!=NULL) {
-!       packetfunctions_reserveHeaderSize(msg,1);
-!       msg->payload[0] = '>';
-!       if (temp_resource->path1len>0) {
-!          packetfunctions_reserveHeaderSize(msg,temp_resource->path1len);
-!          memcpy(&msg->payload[0],temp_resource->path1val,temp_resource->path1len);
-!          packetfunctions_reserveHeaderSize(msg,1);
-!          msg->payload[0] = '/';
-!       }
-!       packetfunctions_reserveHeaderSize(msg,temp_resource->path0len);
-!       memcpy(msg->payload,temp_resource->path0val,temp_resource->path0len);
-!       packetfunctions_reserveHeaderSize(msg,2);
-!       msg->payload[1] = '/';
-!       msg->payload[0] = '<';
-!       if (temp_resource->next!=NULL) {
-!          packetfunctions_reserveHeaderSize(msg,1);
-!          msg->payload[0] = ',';
-!       }
-!       temp_resource = temp_resource->next;
-!    }
-! }
-! 
-! void opencoap_register(coap_resource_desc_t* desc) {
-!    coap_resource_desc_t* last_elem;
-!    
-!    if (opencoap_vars.resources==NULL) {
-!       opencoap_vars.resources = desc;
-!       return;
-!    }
-!    
-!    // add to the end of the resource linked list
-!    last_elem = opencoap_vars.resources;
-!    while (last_elem->next!=NULL) {
-!       last_elem = last_elem->next;
-!    }
-!    last_elem->next = desc;
-! }
-! 
-! error_t opencoap_send(OpenQueueEntry_t*     msg,
-!                       coap_type_t           type,
-!                       coap_code_t           code,
-!                       uint8_t               numOptions,
-!                       coap_resource_desc_t* descSender) {
-!    // change the global messageID
-!    opencoap_vars.messageID          = openrandom_get16b();
-!    // take ownership
-!    msg->owner                       = COMPONENT_OPENCOAP;
-!    // metadata
-!    msg->l4_sourcePortORicmpv6Type   = WKP_UDP_COAP;
-!    // fill in CoAP header
-!    packetfunctions_reserveHeaderSize(msg,4);
-!    msg->payload[0]                  = (COAP_VERSION   << 6) |
-!                                       (type           << 4) |
-!                                       (numOptions     << 0);
-!    msg->payload[1]                  = code;
-!    msg->payload[2]                  = (opencoap_vars.messageID>>8) & 0xff;
-!    msg->payload[3]                  = (opencoap_vars.messageID>>0) & 0xff;
-!    // record the messageID with this sender
-!    descSender->messageID            = opencoap_vars.messageID;
-!    return openudp_send(msg);
-! }
-! 
-! //=========================== private =========================================
-! 
-! void icmpv6coap_timer_cb() {
-!    scheduler_push_task(timers_coap_fired,TASKPRIO_COAP);
-  }
-\ No newline at end of file
---- 1,364 ----
-! #include "openwsn.h"
-! #include "opencoap.h"
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "packetfunctions.h"
-! #include "idmanager.h"
-! #include "opentimers.h"
-! #include "scheduler.h"
-! 
-! #include "thread.h"
-! 
-! //=========================== variables =======================================
-! 
-! opencoap_vars_t opencoap_vars;
-! //static char openwsn_coap_stack[KERNEL_CONF_STACKSIZE_MAIN];
-! 
-! //=========================== prototype =======================================
-! 
-! void icmpv6coap_timer_cb(void);
-! 
-! //=========================== public ==========================================
-! 
-! //===== from stack
-! 
-! void opencoap_init(void) {
-!    // initialize the resource linked list
-!    opencoap_vars.resources     = NULL;
-!    
-!    // initialize the messageID
-!    opencoap_vars.messageID     = openrandom_get16b();
-!    
-!    // start the timer
-!    if (idmanager_getIsDAGroot()==FALSE) {
-!       opencoap_vars.timerId = opentimers_start(1000,
-!                                                TIMER_PERIODIC,TIME_MS,
-!                                                icmpv6coap_timer_cb);
-!    }
-! }
-! 
-! void opencoap_receive(OpenQueueEntry_t* msg) {
-!    uint16_t                  temp_l4_destination_port;
-!    uint8_t                   i;
-!    uint8_t                   index;
-!    coap_option_t             last_option;
-!    coap_resource_desc_t*     temp_desc;
-!    bool                      found;
-!    owerror_t                 outcome = 0;
-!    // local variables passed to the handlers (with msg)
-!    coap_header_iht           coap_header;
-!    coap_option_iht           coap_options[MAX_COAP_OPTIONS];
-!    
-!    // take ownership over the received packet
-!    msg->owner                = COMPONENT_OPENCOAP;
-!    
-!    //=== step 1. parse the packet
-!    
-!    // parse the CoAP header and remove from packet
-!    index = 0;
-!    coap_header.Ver           = (msg->payload[index] & 0xc0) >> 6;
-!    coap_header.T             = (coap_type_t)((msg->payload[index] & 0x30) >> 4);
-!    coap_header.TKL           = (msg->payload[index] & 0x0f);
-!    index++;
-!    coap_header.Code          = (coap_code_t)(msg->payload[index]);
-!    index++;
-!    coap_header.messageID     = msg->payload[index]*256+msg->payload[index+1];
-!    index+=2;
-!    
-!    //poipoi xv. TKL tells us the length of the token. If we want to support tokens longer
-!    //than one token needs to be converted to an array and memcopy here for the length of TKL
-!    coap_header.token         = (msg->payload[index]);
-!    index+=coap_header.TKL;
-!    
-!    
-!    // reject unsupported header
-!    if (coap_header.Ver!=COAP_VERSION || coap_header.TKL>8) {
-!       openserial_printError(COMPONENT_OPENCOAP,ERR_WRONG_TRAN_PROTOCOL,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)coap_header.Ver);
-!       openqueue_freePacketBuffer(msg);
-!       return;
-!    }
-!    // initialize the coap_options
-!    for (i=0;i<MAX_COAP_OPTIONS;i++) {
-!       coap_options[i].type = COAP_OPTION_NONE;
-!    }
-!    // fill in the coap_options
-!    last_option = COAP_OPTION_NONE;
-!    for (i=0;i<MAX_COAP_OPTIONS;i++) {
-!      if (msg->payload[index]==0xFF){
-!        //found the payload spacer, options are already parsed.
-!        index++; //skip it and break.
-!        break;
-!      }
-!       coap_options[i].type        = (coap_option_t)((uint8_t)last_option+(uint8_t)((msg->payload[index] & 0xf0) >> 4));
-!       last_option                 = coap_options[i].type;
-!       coap_options[i].length      = (msg->payload[index] & 0x0f);
-!       index++;
-!       coap_options[i].pValue      = &(msg->payload[index]);
-!       index += coap_options[i].length; //includes length as well
-!    }
-!   
-!    // remove the CoAP header+options
-!    packetfunctions_tossHeader(msg,index);
-!    
-!    //=== step 2. find the resource to handle the packet
-!    
-!    // find the resource this applies to
-!    found = FALSE;
-!    if (coap_header.Code>=COAP_CODE_REQ_GET &&
-!        coap_header.Code<=COAP_CODE_REQ_DELETE) {
-!       // this is a request: target resource is indicated as COAP_OPTION_LOCATIONPATH option(s)
-!       
-!       // find the resource which matches    
-!       temp_desc = opencoap_vars.resources;
-!       while (found==FALSE) {
-!          if    (
-!                 coap_options[0].type==COAP_OPTION_NUM_URIPATH &&
-!                 coap_options[1].type==COAP_OPTION_NUM_URIPATH &&
-!                 temp_desc->path0len>0                     &&
-!                 temp_desc->path0val!=NULL                 &&
-!                 temp_desc->path1len>0                     &&
-!                 temp_desc->path1val!=NULL
-!             ) {
-!             // resource has a path of form path0/path1
-!                
-!             if (
-!                coap_options[0].length==temp_desc->path0len                               &&
-!                memcmp(coap_options[0].pValue,temp_desc->path0val,temp_desc->path0len)==0 &&
-!                coap_options[1].length==temp_desc->path1len                               &&
-!                memcmp(coap_options[1].pValue,temp_desc->path1val,temp_desc->path1len)==0
-!                ) {
-!                found = TRUE;
-!             };
-!          } else if (
-!                 coap_options[0].type==COAP_OPTION_NUM_URIPATH &&
-!                 temp_desc->path0len>0                     &&
-!                 temp_desc->path0val!=NULL
-!             ) {
-!             // resource has a path of form path0
-!                
-!             if (
-!                coap_options[0].length==temp_desc->path0len                               &&
-!                memcmp(coap_options[0].pValue,temp_desc->path0val,temp_desc->path0len)==0
-!                ) {
-!                found = TRUE;
-!             };
-!          };
-!          // iterate to next resource
-!          if (found==FALSE) {
-!             if (temp_desc->next!=NULL) {
-!                temp_desc = temp_desc->next;
-!             } else {
-!                break;
-!             }
-!          }
-!       };
-!    } else {
-!       // this is a response: target resource is indicated by message ID
-!       
-!       // find the resource which matches    
-!       temp_desc = opencoap_vars.resources;
-!       while (found==FALSE) {
-!          if (coap_header.messageID==temp_desc->messageID) {
-!             found=TRUE;
-!             if (temp_desc->callbackRx!=NULL) {
-!                temp_desc->callbackRx(msg,&coap_header,&coap_options[0]);
-!             }
-!          }
-!          // iterate to next resource
-!          if (found==FALSE) {
-!             if (temp_desc->next!=NULL) {
-!                temp_desc = temp_desc->next;
-!             } else {
-!                break;
-!             }
-!          }
-!       };
-!       openqueue_freePacketBuffer(msg);
-!       // stop here: will will not respond to a response
-!       return;
-!    }
-!    
-!    //=== step 3. ask the resource to prepare response
-!    
-!    if (found==TRUE) {
-!       outcome = temp_desc->callbackRx(msg,&coap_header,&coap_options[0]);
-!    } else {
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       // set the CoAP header
-!       coap_header.TKL                  = 0;
-!       coap_header.Code                 = COAP_CODE_RESP_NOTFOUND;
-!    }
-!    
-!    if (outcome==E_FAIL) {
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       // set the CoAP header
-!       coap_header.TKL                  = 0;
-!       coap_header.Code                 = COAP_CODE_RESP_METHODNOTALLOWED;
-!    }
-!    
-!    //=== step 4. send that packet back
-!    
-!    // fill in packet metadata
-!    if (found==TRUE) {
-!       msg->creator                  = temp_desc->componentID;
-!    } else {
-!       msg->creator                  = COMPONENT_OPENCOAP;
-!    }
-!    msg->l4_protocol                 = IANA_UDP;
-!    temp_l4_destination_port         = msg->l4_destination_port;
-!    msg->l4_destination_port         = msg->l4_sourcePortORicmpv6Type;
-!    msg->l4_sourcePortORicmpv6Type   = temp_l4_destination_port;
-!    
-!    //set destination address as the current source.
-!    msg->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&msg->l3_destinationAdd.addr_128b[0],&msg->l3_sourceAdd.addr_128b[0],LENGTH_ADDR128b);
-!    
-!    
-!    // fill in CoAP header
-!    packetfunctions_reserveHeaderSize(msg,5);
-!    msg->payload[0]                  = (COAP_VERSION   << 6) |
-!                                       (COAP_TYPE_ACK  << 4) |
-!                                       (coap_header.TKL << 0);
-!    msg->payload[1]                  = coap_header.Code;
-!    msg->payload[2]                  = coap_header.messageID/256;
-!    msg->payload[3]                  = coap_header.messageID%256;
-!    msg->payload[4]                  = coap_header.token; //this will be a memcopy for TKL size
-!    
-!    if ((openudp_send(msg))==E_FAIL) {
-!       openqueue_freePacketBuffer(msg);
-!    }
-! }
-! 
-! void opencoap_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    coap_resource_desc_t* temp_resource;
-!    
-!    // take ownership over that packet
-!    msg->owner = COMPONENT_OPENCOAP;
-!    
-!    // indicate sendDone to creator of that packet
-!    //=== mine
-!    if (msg->creator==COMPONENT_OPENCOAP) {
-!       openqueue_freePacketBuffer(msg);
-!       return;
-!    }
-!    //=== someone else's
-!    temp_resource = opencoap_vars.resources;
-!    while (temp_resource!=NULL) {
-!       if (temp_resource->componentID==msg->creator &&
-!           temp_resource->callbackSendDone!=NULL) {
-!          temp_resource->callbackSendDone(msg,error);
-!          return;
-!       }
-!       temp_resource = temp_resource->next;
-!    }
-!    
-!    openserial_printError(COMPONENT_OPENCOAP,ERR_UNEXPECTED_SENDDONE,
-!                          (errorparameter_t)0,
-!                          (errorparameter_t)0);
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void timers_coap_fired(void) {
-!    //do something here if necessary
-! }
-! 
-! //===== from CoAP resources
-! 
-! void opencoap_writeLinks(OpenQueueEntry_t* msg) {
-!    coap_resource_desc_t* temp_resource;
-!    
-!    temp_resource = opencoap_vars.resources;
-!    while (temp_resource!=NULL) {
-!       packetfunctions_reserveHeaderSize(msg,1);
-!       msg->payload[0] = '>';
-!       if (temp_resource->path1len>0) {
-!          packetfunctions_reserveHeaderSize(msg,temp_resource->path1len);
-!          memcpy(&msg->payload[0],temp_resource->path1val,temp_resource->path1len);
-!          packetfunctions_reserveHeaderSize(msg,1);
-!          msg->payload[0] = '/';
-!       }
-!       packetfunctions_reserveHeaderSize(msg,temp_resource->path0len);
-!       memcpy(msg->payload,temp_resource->path0val,temp_resource->path0len);
-!       packetfunctions_reserveHeaderSize(msg,2);
-!       msg->payload[1] = '/';
-!       msg->payload[0] = '<';
-!       if (temp_resource->next!=NULL) {
-!          packetfunctions_reserveHeaderSize(msg,1);
-!          msg->payload[0] = ',';
-!       }
-!       temp_resource = temp_resource->next;
-!    }
-! }
-! 
-! /**
-! \brief Register a new CoAP resource.
-! 
-! Registration consists in adding a new resource at the end of the linked list
-! of resources.
-! */
-! void opencoap_register(coap_resource_desc_t* desc) {
-!    coap_resource_desc_t* last_elem;
-!    
-!    // since this CoAP resource will be at the end of the list, its next element
-!    // should point to NULL, indicating the end of the linked list.
-!    desc->next = NULL;
-!    
-!    if (opencoap_vars.resources==NULL) {
-!       opencoap_vars.resources = desc;
-!       return;
-!    }
-!    
-!    // add to the end of the resource linked list
-!    last_elem = opencoap_vars.resources;
-!    while (last_elem->next!=NULL) {
-!       last_elem = last_elem->next;
-!    }
-!    last_elem->next = desc;
-! }
-! 
-! owerror_t opencoap_send(OpenQueueEntry_t*     msg,
-!                       coap_type_t           type,
-!                       coap_code_t           code,
-!                       uint8_t               TKL,
-!                       coap_resource_desc_t* descSender) {
-!    // change the global messageID
-!    opencoap_vars.messageID          = openrandom_get16b();
-!    // take ownership
-!    msg->owner                       = COMPONENT_OPENCOAP;
-!    // metadata
-!    msg->l4_sourcePortORicmpv6Type   = WKP_UDP_COAP;
-!    // fill in CoAP header
-!    packetfunctions_reserveHeaderSize(msg,5);
-!    msg->payload[0]                  = (COAP_VERSION   << 6) |
-!                                       (type           << 4) |
-!                                       (TKL            << 0);
-!    msg->payload[1]                  = code;
-!    msg->payload[2]                  = (opencoap_vars.messageID>>8) & 0xff;
-!    msg->payload[3]                  = (opencoap_vars.messageID>>0) & 0xff;
-!    //poipoi xv token needs to be defined by the app or here
-! #define TOKEN 123
-!    msg->payload[4]                  = TOKEN; //this will be a memcopy for TKL size
-!   
-!    // record the messageID with this sender
-!    descSender->messageID            = opencoap_vars.messageID;
-!    descSender->token                = TOKEN;
-!    
-!    return openudp_send(msg);
-! }
-! 
-! //=========================== private =========================================
-! 
-! void icmpv6coap_timer_cb(void) {
-!     scheduler_push_task(timers_coap_fired,TASKPRIO_COAP);
-!    /*thread_create(openwsn_coap_stack, KERNEL_CONF_STACKSIZE_MAIN, 
-!                   PRIORITY_OPENWSN_COAP, CREATE_STACKTEST, 
-!                   timers_coap_fired, "timers coap fired");*/
-  }
-\ No newline at end of file
-diff -crB openwsn/04-TRAN/opencoap.h ../../../sys/net/openwsn/04-TRAN/opencoap.h
-*** openwsn/04-TRAN/opencoap.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/04-TRAN/opencoap.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,161 ****
-! #ifndef __OPENCOAP_H
-! #define __OPENCOAP_H
-! 
-! /**
-! \addtogroup Transport
-! \{
-! \addtogroup openCoap
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! // IPv6 addresses of servers on the Internet
-! static const uint8_t ipAddr_ipsoRD[]    = {0x26, 0x07, 0xf7, 0x40, 0x00, 0x00, 0x00, 0x3f, \
-!                                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x29};
-! static const uint8_t ipAddr_motesEecs[] = {0x20, 0x01, 0x04, 0x70, 0x00, 0x66, 0x00, 0x19, \
-!                                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02};
-! //static const uint8_t ipAddr_local[]     = {0x20, 0x02, 0x80, 0x20, 0x21, 0x47, 0x00, 0x0c, \
-!                                            0x10, 0xcb, 0xc6, 0x52, 0x44, 0x17, 0xd4, 0x18};
-! // 2607:f140:400:1036:688e:fa3b:444:6211
-! //static const uint8_t ipAddr_local[]     = {0x26, 0x07, 0xf1, 0x40, 0x04, 0x00, 0x10, 0x36, \
-! //                                           0x68, 0x8e, 0xfa, 0x3b, 0x04, 0x44, 0x62, 0x11};
-! 
-! static const uint8_t ipAddr_local[]     = {0x26, 0x07, 0xf1, 0x40, 0x04, 0x00, 0x10, 0x36, \
-!                                            0x4d, 0xcd, 0xab, 0x54, 0x81, 0x99, 0xc1, 0xf7}; 
-!                                            
-! static const uint8_t ipAddr_motedata[]  = {0x20, 0x01, 0x04, 0x70, 0x00, 0x66, 0x00, 0x17, \
-!                                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02};
-! 
-! /// the maximum number of options in a RX'ed CoAP message
-! #define MAX_COAP_OPTIONS               3
-! 
-! #define COAP_VERSION                   1
-! 
-! typedef enum {
-!    COAP_TYPE_CON                       = 0,
-!    COAP_TYPE_NON                       = 1,
-!    COAP_TYPE_ACK                       = 2,
-!    COAP_TYPE_RES                       = 3,
-! } coap_type_t;
-! 
-! typedef enum {
-!    COAP_CODE_EMPTY                     = 0,
-!    // request
-!    COAP_CODE_REQ_GET                   = 1,
-!    COAP_CODE_REQ_POST                  = 2,
-!    COAP_CODE_REQ_PUT                   = 3,
-!    COAP_CODE_REQ_DELETE                = 4,
-!    // response
-!    // - OK
-!    COAP_CODE_RESP_CREATED              = 65,
-!    COAP_CODE_RESP_DELETED              = 66,
-!    COAP_CODE_RESP_VALID                = 67,
-!    COAP_CODE_RESP_CHANGED              = 68,
-!    COAP_CODE_RESP_CONTENT              = 69,
-!    // - not OK
-!    COAP_CODE_RESP_BADREQ               = 128,
-!    COAP_CODE_RESP_UNAUTHORIZED         = 129,
-!    COAP_CODE_RESP_BADOPTION            = 130,
-!    COAP_CODE_RESP_FORBIDDEN            = 131,
-!    COAP_CODE_RESP_NOTFOUND             = 132,
-!    COAP_CODE_RESP_METHODNOTALLOWED     = 133,
-!    COAP_CODE_RESP_PRECONDFAILED        = 140,
-!    COAP_CODE_RESP_REQTOOLARGE          = 141,
-!    COAP_CODE_RESP_UNSUPPMEDIATYPE      = 143,
-!    // - error
-!    COAP_CODE_RESP_SERVERERROR          = 160,
-!    COAP_CODE_RESP_NOTIMPLEMENTED       = 161,
-!    COAP_CODE_RESP_BADGATEWAY           = 162,
-!    COAP_CODE_RESP_UNAVAILABLE          = 163,
-!    COAP_CODE_RESP_GWTIMEOUT            = 164,
-!    COAP_CODE_RESP_PROXYINGNOTSUPP      = 165,
-! } coap_code_t;
-! 
-! typedef enum {
-!    COAP_OPTION_NONE                    =  0,
-!    COAP_OPTION_CONTENTTYPE             =  1,
-!    COAP_OPTION_MAXAGE                  =  2,
-!    COAP_OPTION_PROXYURI                =  3,
-!    COAP_OPTION_ETAG                    =  4,
-!    COAP_OPTION_URIHOST                 =  5,
-!    COAP_OPTION_LOCATIONPATH            =  6,
-!    COAP_OPTION_URIPORT                 =  7,
-!    COAP_OPTION_LOCATIONQUERY           =  8,
-!    COAP_OPTION_URIPATH                 =  9,
-!    COAP_OPTION_TOKEN                   = 11,
-!    COAP_OPTION_ACCEPT                  = 12,
-!    COAP_OPTION_IFMATCH                 = 13,
-!    COAP_OPTION_URIQUERY                = 15,
-!    COAP_OPTION_IFNONEMATCH             = 21,
-! } coap_option_t;
-! 
-! typedef enum {
-!    COAP_MEDTYPE_TEXTPLAIN              =  0,
-!    COAP_MEDTYPE_APPLINKFORMAT          = 40,
-!    COAP_MEDTYPE_APPXML                 = 41,
-!    COAP_MEDTYPE_APPOCTETSTREAM         = 42,
-!    COAP_MEDTYPE_APPEXI                 = 47,
-!    COAP_MEDTYPE_APPJSON                = 50,
-! } coap_media_type_t;
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    uint8_t       Ver;
-!    coap_type_t   T;
-!    uint8_t       OC;
-!    coap_code_t   Code;
-!    uint16_t      messageID;
-! } coap_header_iht;
-! 
-! typedef struct {
-!    coap_option_t type;
-!    uint8_t       length;
-!    uint8_t*      pValue;
-! } coap_option_iht;
-! 
-! typedef error_t (*callbackRx_t)(OpenQueueEntry_t* msg,
-!                                 coap_header_iht*  coap_header,
-!                                 coap_option_iht*  coap_options);
-! typedef void (*callbackTimer_t)(void);
-! typedef void (*callbackSendDone_t)(OpenQueueEntry_t* msg, error_t error);
-! 
-! typedef struct coap_resource_desc_t coap_resource_desc_t;
-! 
-! struct coap_resource_desc_t {
-!    uint8_t               path0len;
-!    uint8_t*              path0val;
-!    uint8_t               path1len;
-!    uint8_t*              path1val;
-!    uint8_t               componentID;
-!    uint16_t              messageID;
-!    callbackRx_t          callbackRx;
-!    callbackSendDone_t    callbackSendDone;
-!    coap_resource_desc_t* next;
-! };
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // from stack
-! void     opencoap_init();
-! void     opencoap_receive(OpenQueueEntry_t* msg);
-! void     opencoap_sendDone(OpenQueueEntry_t* msg, error_t error);
-! 
-! // from CoAP resources
-! void     opencoap_writeLinks(OpenQueueEntry_t* msg);
-! void     opencoap_register(coap_resource_desc_t* desc);
-! error_t  opencoap_send(OpenQueueEntry_t*     msg,
-!                        coap_type_t           type,
-!                        coap_code_t           code,
-!                        uint8_t               numOptions,
-!                        coap_resource_desc_t* descSender);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,175 ----
-! #ifndef __OPENCOAP_H
-! #define __OPENCOAP_H
-! 
-! /**
-! \addtogroup Transport
-! \{
-! \addtogroup openCoap
-! \{
-! */
-! 
-! #include "opentimers.h"
-! 
-! //=========================== define ==========================================
-! 
-! // IPv6 addresses of servers on the Internet
-! static const uint8_t ipAddr_ipsoRD[]    = {0x26, 0x07, 0xf7, 0x40, 0x00, 0x00, 0x00, 0x3f, \
-!                                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x0e, 0x29};
-! static const uint8_t ipAddr_motesEecs[] = {0x20, 0x01, 0x04, 0x70, 0x00, 0x66, 0x00, 0x19, \
-!                                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02};
-! /*static const uint8_t ipAddr_local[]     = {0x20, 0x02, 0x80, 0x20, 0x21, 0x47, 0x00, 0x0c, \
-!                                            0x10, 0xcb, 0xc6, 0x52, 0x44, 0x17, 0xd4, 0x18};
-! // 2607:f140:400:1036:688e:fa3b:444:6211
-! //static const uint8_t ipAddr_local[]     = {0x26, 0x07, 0xf1, 0x40, 0x04, 0x00, 0x10, 0x36, \
-! //                                           0x68, 0x8e, 0xfa, 0x3b, 0x04, 0x44, 0x62, 0x11};
-! */
-! static const uint8_t ipAddr_local[]     = {0x26, 0x07, 0xf1, 0x40, 0x04, 0x00, 0x10, 0x36, \
-!                                            0x4d, 0xcd, 0xab, 0x54, 0x81, 0x99, 0xc1, 0xf7}; 
-!                                            
-! static const uint8_t ipAddr_motedata[]  = {0x20, 0x01, 0x04, 0x70, 0x00, 0x66, 0x00, 0x17, \
-!                                            0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x02};
-! 
-! /// the maximum number of options in a RX'ed CoAP message
-! #define MAX_COAP_OPTIONS               10 //3 before but we want gets with more options
-! 
-! #define COAP_VERSION                   1
-! 
-! typedef enum {
-!    COAP_TYPE_CON                       = 0,
-!    COAP_TYPE_NON                       = 1,
-!    COAP_TYPE_ACK                       = 2,
-!    COAP_TYPE_RES                       = 3,
-! } coap_type_t;
-! 
-! typedef enum {
-!    COAP_CODE_EMPTY                     = 0,
-!    // request
-!    COAP_CODE_REQ_GET                   = 1,
-!    COAP_CODE_REQ_POST                  = 2,
-!    COAP_CODE_REQ_PUT                   = 3,
-!    COAP_CODE_REQ_DELETE                = 4,
-!    // response
-!    // - OK
-!    COAP_CODE_RESP_CREATED              = 65,
-!    COAP_CODE_RESP_DELETED              = 66,
-!    COAP_CODE_RESP_VALID                = 67,
-!    COAP_CODE_RESP_CHANGED              = 68,
-!    COAP_CODE_RESP_CONTENT              = 69,
-!    // - not OK
-!    COAP_CODE_RESP_BADREQ               = 128,
-!    COAP_CODE_RESP_UNAUTHORIZED         = 129,
-!    COAP_CODE_RESP_BADOPTION            = 130,
-!    COAP_CODE_RESP_FORBIDDEN            = 131,
-!    COAP_CODE_RESP_NOTFOUND             = 132,
-!    COAP_CODE_RESP_METHODNOTALLOWED     = 133,
-!    COAP_CODE_RESP_PRECONDFAILED        = 140,
-!    COAP_CODE_RESP_REQTOOLARGE          = 141,
-!    COAP_CODE_RESP_UNSUPPMEDIATYPE      = 143,
-!    // - error
-!    COAP_CODE_RESP_SERVERERROR          = 160,
-!    COAP_CODE_RESP_NOTIMPLEMENTED       = 161,
-!    COAP_CODE_RESP_BADGATEWAY           = 162,
-!    COAP_CODE_RESP_UNAVAILABLE          = 163,
-!    COAP_CODE_RESP_GWTIMEOUT            = 164,
-!    COAP_CODE_RESP_PROXYINGNOTSUPP      = 165,
-! } coap_code_t;
-! 
-! typedef enum {
-!    COAP_OPTION_NONE                            = 0,
-!    COAP_OPTION_NUM_IFMATCH                     = 1,
-!    COAP_OPTION_NUM_URIHOST                     = 3,
-!    COAP_OPTION_NUM_ETAG                        = 4,
-!    COAP_OPTION_NUM_IFNONEMATCH                 = 5,
-!    COAP_OPTION_NUM_URIPORT                     = 7,
-!    COAP_OPTION_NUM_LOCATIONPATH                = 8,
-!    COAP_OPTION_NUM_URIPATH                     = 11,
-!    COAP_OPTION_NUM_CONTENTFORMAT               = 12,
-!    COAP_OPTION_NUM_MAXAGE                      = 14,
-!    COAP_OPTION_NUM_URIQUERY                    = 15,
-!    COAP_OPTION_NUM_ACCEPT                      = 16,
-!    COAP_OPTION_NUM_LOCATIONQUERY               = 20,
-!    COAP_OPTION_NUM_PROXYURI                    = 35,
-!    COAP_OPTION_NUM_PROXYSCHEME                 = 39,
-! } coap_option_t;
-! 
-! 
-! 
-! typedef enum {
-!    COAP_MEDTYPE_TEXTPLAIN              =  0,
-!    COAP_MEDTYPE_APPLINKFORMAT          = 40,
-!    COAP_MEDTYPE_APPXML                 = 41,
-!    COAP_MEDTYPE_APPOCTETSTREAM         = 42,
-!    COAP_MEDTYPE_APPEXI                 = 47,
-!    COAP_MEDTYPE_APPJSON                = 50,
-! } coap_media_type_t;
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    uint8_t       Ver;
-!    coap_type_t   T;
-!    uint8_t       TKL;
-!    coap_code_t   Code;
-!    uint16_t      messageID;
-!    uint8_t       token; //this might be an array of 8 as tkl can be 8
-! } coap_header_iht;
-! 
-! typedef struct {
-!    coap_option_t type;
-!    uint8_t       length;
-!    uint8_t*      pValue;
-! } coap_option_iht;
-! 
-! typedef owerror_t (*callbackRx_cbt)(OpenQueueEntry_t* msg,
-!                                 coap_header_iht*  coap_header,
-!                                 coap_option_iht*  coap_options);
-! typedef void (*callbackSendDone_cbt)(OpenQueueEntry_t* msg,
-!                                       owerror_t error);
-! 
-! typedef struct coap_resource_desc_t coap_resource_desc_t;
-! 
-! struct coap_resource_desc_t {
-!    uint8_t               path0len;
-!    uint8_t*              path0val;
-!    uint8_t               path1len;
-!    uint8_t*              path1val;
-!    uint8_t               componentID;
-!    uint16_t              messageID;
-!    uint8_t               token; //should be 8bytes
-!    callbackRx_cbt        callbackRx;
-!    callbackSendDone_cbt  callbackSendDone;
-!    coap_resource_desc_t* next;
-! };
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    coap_resource_desc_t* resources;
-!    bool                  busySending;
-!    uint8_t               delayCounter;
-!    uint16_t              messageID;
-!    opentimer_id_t        timerId;
-! } opencoap_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! // from stack
-! void     opencoap_init(void);
-! void     opencoap_receive(OpenQueueEntry_t* msg);
-! void     opencoap_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! 
-! // from CoAP resources
-! void     opencoap_writeLinks(OpenQueueEntry_t* msg);
-! void     opencoap_register(coap_resource_desc_t* desc);
-! owerror_t  opencoap_send(OpenQueueEntry_t*     msg,
-!                        coap_type_t           type,
-!                        coap_code_t           code,
-!                        uint8_t               numOptions,
-!                        coap_resource_desc_t* descSender);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/04-TRAN/opentcp.c ../../../sys/net/openwsn/04-TRAN/opentcp.c
-*** openwsn/04-TRAN/opentcp.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/04-TRAN/opentcp.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,760 ****
-! #include "openwsn.h"
-! #include "opentcp.h"
-! #include "openserial.h"
-! #include "openqueue.h"
-! #include "forwarding.h"
-! #include "packetfunctions.h"
-! #include "bsp_timer.h"
-! #include "scheduler.h"
-! #include "opentimers.h"
-! //TCP applications
-! #include "ohlone.h"
-! #include "tcpecho.h"
-! #include "tcpinject.h"
-! #include "tcpprint.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    uint8_t              state;
-!    uint32_t             mySeqNum;
-!    uint16_t             myPort;
-!    uint32_t             hisNextSeqNum;
-!    uint16_t             hisPort;
-!    open_addr_t          hisIPv6Address;
-!    OpenQueueEntry_t*    dataToSend;
-!    OpenQueueEntry_t*    dataReceived;
-!    bool                 timerStarted;
-!    opentimer_id_t       timerId;
-! } tcp_vars_t;
-! 
-! tcp_vars_t tcp_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void prependTCPHeader(OpenQueueEntry_t* msg, bool ack, bool push, bool rst, bool syn, bool fin);
-! bool containsControlBits(OpenQueueEntry_t* msg, uint8_t ack, uint8_t rst, uint8_t syn, uint8_t fin);
-! void tcp_change_state(uint8_t new_state);
-! void reset();
-! void opentcp_timer_cb();
-! 
-! //=========================== public ==========================================
-! 
-! void opentcp_init() {
-!    // reset local variables
-!    memset(&tcp_vars,0,sizeof(tcp_vars_t));   
-!    // reset state machine
-!    reset();
-! }
-! 
-! error_t opentcp_connect(open_addr_t* dest, uint16_t param_tcp_hisPort, uint16_t param_tcp_myPort) {
-!    //[command] establishment
-!    OpenQueueEntry_t* tempPkt;
-!    if (tcp_vars.state!=TCP_STATE_CLOSED) {
-!       openserial_printError(COMPONENT_OPENTCP,ERR_WRONG_TCP_STATE,
-!                             (errorparameter_t)tcp_vars.state,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    tcp_vars.myPort  = param_tcp_myPort;
-!    tcp_vars.hisPort = param_tcp_hisPort;
-!    memcpy(&tcp_vars.hisIPv6Address,dest,sizeof(open_addr_t));
-!    //I receive command 'connect', I send SYNC
-!    tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!    if (tempPkt==NULL) {
-!       openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    tempPkt->creator                = COMPONENT_OPENTCP;
-!    tempPkt->owner                  = COMPONENT_OPENTCP;
-!    memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!    tcp_vars.mySeqNum = TCP_INITIAL_SEQNUM;
-!    prependTCPHeader(tempPkt,
-!          TCP_ACK_NO,
-!          TCP_PSH_NO,
-!          TCP_RST_NO,
-!          TCP_SYN_YES,
-!          TCP_FIN_NO);
-!    tcp_change_state(TCP_STATE_ALMOST_SYN_SENT);
-!    return forwarding_send(tempPkt);
-! }
-! 
-! error_t opentcp_send(OpenQueueEntry_t* msg) {             //[command] data
-!    msg->owner = COMPONENT_OPENTCP;
-!    if (tcp_vars.state!=TCP_STATE_ESTABLISHED) {
-!       openserial_printError(COMPONENT_OPENTCP,ERR_WRONG_TCP_STATE,
-!                             (errorparameter_t)tcp_vars.state,
-!                             (errorparameter_t)2);
-!       return E_FAIL;
-!    }
-!    if (tcp_vars.dataToSend!=NULL) {
-!       openserial_printError(COMPONENT_OPENTCP,ERR_BUSY_SENDING,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    //I receive command 'send', I send data
-!    msg->l4_protocol          = IANA_TCP;
-!    msg->l4_sourcePortORicmpv6Type       = tcp_vars.myPort;
-!    msg->l4_destination_port  = tcp_vars.hisPort;
-!    msg->l4_payload           = msg->payload;
-!    msg->l4_length            = msg->length;
-!    memcpy(&(msg->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!    tcp_vars.dataToSend = msg;
-!    prependTCPHeader(tcp_vars.dataToSend,
-!          TCP_ACK_YES,
-!          TCP_PSH_YES,
-!          TCP_RST_NO,
-!          TCP_SYN_NO,
-!          TCP_FIN_NO);
-!    tcp_vars.mySeqNum += tcp_vars.dataToSend->l4_length;
-!    tcp_change_state(TCP_STATE_ALMOST_DATA_SENT);
-!    return forwarding_send(tcp_vars.dataToSend);
-! }
-! 
-! void opentcp_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    OpenQueueEntry_t* tempPkt;
-!    msg->owner = COMPONENT_OPENTCP;
-!    switch (tcp_vars.state) {
-!       case TCP_STATE_ALMOST_SYN_SENT:                             //[sendDone] establishement
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_SYN_SENT);
-!          break;
-! 
-!       case TCP_STATE_ALMOST_SYN_RECEIVED:                         //[sendDone] establishement
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_SYN_RECEIVED);
-!          break;
-! 
-!       case TCP_STATE_ALMOST_ESTABLISHED:                          //[sendDone] establishement
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_ESTABLISHED);
-!          switch(tcp_vars.myPort) {
-!             case WKP_TCP_HTTP:
-!                ohlone_connectDone(E_SUCCESS);
-!                break;
-!             case WKP_TCP_ECHO:
-!                tcpecho_connectDone(E_SUCCESS);
-!                break;
-!             case WKP_TCP_INJECT:
-!                tcpinject_connectDone(E_SUCCESS);
-!                break;   
-!             case WKP_TCP_DISCARD:
-!                tcpprint_connectDone(E_SUCCESS);
-!                break;
-!             default:
-!                openserial_printError(COMPONENT_OPENTCP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                      (errorparameter_t)tcp_vars.myPort,
-!                                      (errorparameter_t)0);
-!                break;
-!          }
-!          break;
-! 
-!       case TCP_STATE_ALMOST_DATA_SENT:                            //[sendDone] data
-!          tcp_change_state(TCP_STATE_DATA_SENT);
-!          break;
-! 
-!       case TCP_STATE_ALMOST_DATA_RECEIVED:                        //[sendDone] data
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_ESTABLISHED);
-!          switch(tcp_vars.myPort) {
-!             case WKP_TCP_HTTP:
-!                ohlone_receive(tcp_vars.dataReceived);
-!                break;
-!             case WKP_TCP_ECHO:
-!                tcpecho_receive(tcp_vars.dataReceived);
-!                break;
-!             case WKP_TCP_INJECT:
-!                tcpinject_receive(tcp_vars.dataReceived);
-!                break;
-!             case WKP_TCP_DISCARD:
-!                tcpprint_receive(tcp_vars.dataReceived);
-!                break;
-!             default:
-!                openserial_printError(COMPONENT_OPENTCP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                      (errorparameter_t)tcp_vars.myPort,
-!                                      (errorparameter_t)1);
-!                openqueue_freePacketBuffer(msg);
-!                tcp_vars.dataReceived = NULL;
-!                break;
-!          }
-!          break;
-! 
-!       case TCP_STATE_ALMOST_FIN_WAIT_1:                           //[sendDone] teardown
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_FIN_WAIT_1);
-!          break;
-! 
-!       case TCP_STATE_ALMOST_CLOSING:                              //[sendDone] teardown
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_CLOSING);
-!          break;
-! 
-!       case TCP_STATE_ALMOST_TIME_WAIT:                            //[sendDone] teardown
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_TIME_WAIT);
-!          //TODO implement waiting timer
-!          reset();
-!          break;
-! 
-!       case TCP_STATE_ALMOST_CLOSE_WAIT:                           //[sendDone] teardown
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_CLOSE_WAIT);
-!          //I send FIN+ACK
-!          tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!          if (tempPkt==NULL) {
-!             openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                   (errorparameter_t)0,
-!                                   (errorparameter_t)0);
-!             openqueue_freePacketBuffer(msg);
-!             return;
-!          }
-!          tempPkt->creator       = COMPONENT_OPENTCP;
-!          tempPkt->owner         = COMPONENT_OPENTCP;
-!          memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!          prependTCPHeader(tempPkt,
-!                TCP_ACK_YES,
-!                TCP_PSH_NO,
-!                TCP_RST_NO,
-!                TCP_SYN_NO,
-!                TCP_FIN_YES);
-!          forwarding_send(tempPkt);
-!          tcp_change_state(TCP_STATE_ALMOST_LAST_ACK);
-!          break;
-! 
-!       case TCP_STATE_ALMOST_LAST_ACK:                             //[sendDone] teardown
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_LAST_ACK);
-!          break;
-! 
-!       default:
-!          openserial_printError(COMPONENT_OPENTCP,ERR_WRONG_TCP_STATE,
-!                                (errorparameter_t)tcp_vars.state,
-!                                (errorparameter_t)3);
-!          break;
-!    }
-! }
-! 
-! void opentcp_receive(OpenQueueEntry_t* msg) {
-!    OpenQueueEntry_t* tempPkt;
-!    bool shouldIlisten;
-!    msg->owner                     = COMPONENT_OPENTCP;
-!    msg->l4_protocol               = IANA_TCP;
-!    msg->l4_payload                = msg->payload;
-!    msg->l4_length                 = msg->length;
-!    msg->l4_sourcePortORicmpv6Type = packetfunctions_ntohs((uint8_t*)&(((tcp_ht*)msg->payload)->source_port));
-!    msg->l4_destination_port       = packetfunctions_ntohs((uint8_t*)&(((tcp_ht*)msg->payload)->destination_port));
-!    if ( 
-!          tcp_vars.state!=TCP_STATE_CLOSED &&
-!          (
-!           msg->l4_destination_port != tcp_vars.myPort  ||
-!           msg->l4_sourcePortORicmpv6Type      != tcp_vars.hisPort ||
-!           packetfunctions_sameAddress(&(msg->l3_destinationAdd),&tcp_vars.hisIPv6Address)==FALSE
-!          )
-!       ) {
-!       openqueue_freePacketBuffer(msg);
-!       return;
-!    }
-!    if (containsControlBits(msg,TCP_ACK_WHATEVER,TCP_RST_YES,TCP_SYN_WHATEVER,TCP_FIN_WHATEVER)) {
-!       //I receive RST[+*], I reset
-!       reset();
-!       openqueue_freePacketBuffer(msg);
-!    }
-!    switch (tcp_vars.state) {
-!       case TCP_STATE_CLOSED:                                      //[receive] establishement
-!          switch(msg->l4_destination_port) {
-!             case WKP_TCP_HTTP:
-!                shouldIlisten = ohlone_shouldIlisten();
-!                break;
-!             case WKP_TCP_ECHO:
-!                shouldIlisten = tcpecho_shouldIlisten();
-!                break;
-!             case WKP_TCP_INJECT:
-!                shouldIlisten = tcpinject_shouldIlisten();
-!                break;   
-!             case WKP_TCP_DISCARD:
-!                shouldIlisten = tcpprint_shouldIlisten();
-!                break;
-!             default:
-!                openserial_printError(COMPONENT_OPENTCP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                      (errorparameter_t)msg->l4_sourcePortORicmpv6Type,
-!                                      (errorparameter_t)2);
-!                shouldIlisten = FALSE;
-!                break;
-!          }
-!          if ( containsControlBits(msg,TCP_ACK_NO,TCP_RST_NO,TCP_SYN_YES,TCP_FIN_NO) && shouldIlisten==TRUE ) {
-!                   tcp_vars.myPort = msg->l4_destination_port;
-!                   //I receive SYN, I send SYN+ACK
-!                   tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+1;
-!                   tcp_vars.hisPort       = msg->l4_sourcePortORicmpv6Type;
-!                   memcpy(&tcp_vars.hisIPv6Address,&(msg->l3_destinationAdd),sizeof(open_addr_t));
-!                   tempPkt       = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!                   if (tempPkt==NULL) {
-!                      openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                            (errorparameter_t)0,
-!                                            (errorparameter_t)0);
-!                      openqueue_freePacketBuffer(msg);
-!                      return;
-!                   }
-!                   tempPkt->creator       = COMPONENT_OPENTCP;
-!                   tempPkt->owner         = COMPONENT_OPENTCP;
-!                   memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!                   prependTCPHeader(tempPkt,
-!                         TCP_ACK_YES,
-!                         TCP_PSH_NO,
-!                         TCP_RST_NO,
-!                         TCP_SYN_YES,
-!                         TCP_FIN_NO);
-!                   tcp_vars.mySeqNum++;
-!                   tcp_change_state(TCP_STATE_ALMOST_SYN_RECEIVED);
-!                   forwarding_send(tempPkt);
-!                } else {
-!                   reset();
-!                   openserial_printError(COMPONENT_OPENTCP,ERR_TCP_RESET,
-!                                         (errorparameter_t)tcp_vars.state,
-!                                         (errorparameter_t)0);
-!                }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_SYN_SENT:                                    //[receive] establishement
-!          if (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_YES,TCP_FIN_NO)) {
-!             //I receive SYN+ACK, I send ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+1;
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             tcp_change_state(TCP_STATE_ALMOST_ESTABLISHED);
-!             forwarding_send(tempPkt);
-!          } else if (containsControlBits(msg,TCP_ACK_NO,TCP_RST_NO,TCP_SYN_YES,TCP_FIN_NO)) {
-!             //I receive SYN, I send SYN+ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+1;
-!             tempPkt       = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_YES,
-!                   TCP_FIN_NO);
-!             tcp_vars.mySeqNum++;
-!             tcp_change_state(TCP_STATE_ALMOST_SYN_RECEIVED);
-!             forwarding_send(tempPkt);
-!          } else {
-!             reset();
-!             openserial_printError(COMPONENT_OPENTCP,ERR_TCP_RESET,
-!                                   (errorparameter_t)tcp_vars.state,
-!                                   (errorparameter_t)1);
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_SYN_RECEIVED:                                //[receive] establishement
-!          if (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_NO)) {
-!             //I receive ACK, the virtual circuit is established
-!             tcp_change_state(TCP_STATE_ESTABLISHED);
-!          } else {
-!             reset();
-!             openserial_printError(COMPONENT_OPENTCP,ERR_TCP_RESET,
-!                                   (errorparameter_t)tcp_vars.state,
-!                                   (errorparameter_t)2);
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_ESTABLISHED:                                 //[receive] data/teardown
-!          if (containsControlBits(msg,TCP_ACK_WHATEVER,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_YES)) {
-!             //I receive FIN[+ACK], I send ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+msg->length-sizeof(tcp_ht)+1;
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             forwarding_send(tempPkt);
-!             tcp_change_state(TCP_STATE_ALMOST_CLOSE_WAIT);
-!          } else if (containsControlBits(msg,TCP_ACK_WHATEVER,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_NO)) {
-!             //I receive data, I send ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+msg->length-sizeof(tcp_ht);
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             forwarding_send(tempPkt);
-!             packetfunctions_tossHeader(msg,sizeof(tcp_ht));
-!             tcp_vars.dataReceived = msg;
-!             tcp_change_state(TCP_STATE_ALMOST_DATA_RECEIVED);
-!          } else {
-!             reset();
-!             openserial_printError(COMPONENT_OPENTCP,ERR_TCP_RESET,
-!                                   (errorparameter_t)tcp_vars.state,
-!                                   (errorparameter_t)3);
-!             openqueue_freePacketBuffer(msg);
-!          }
-!          break;
-! 
-!       case TCP_STATE_DATA_SENT:                                   //[receive] data
-!          if (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_NO)) {
-!             //I receive ACK, data message sent
-!             switch(tcp_vars.myPort) {
-!                case WKP_TCP_HTTP:
-!                   ohlone_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                case WKP_TCP_ECHO:
-!                   tcpecho_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                case WKP_TCP_INJECT:
-!                   tcpinject_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                case WKP_TCP_DISCARD:
-!                   tcpprint_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                default:
-!                   openserial_printError(COMPONENT_OPENTCP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                         (errorparameter_t)tcp_vars.myPort,
-!                                         (errorparameter_t)3);
-!                   break;
-!             }
-!             tcp_vars.dataToSend = NULL;
-!             tcp_change_state(TCP_STATE_ESTABLISHED);
-!          } else if (containsControlBits(msg,TCP_ACK_WHATEVER,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_YES)) {
-!             //I receive FIN[+ACK], I send ACK
-!             switch(tcp_vars.myPort) {
-!                case WKP_TCP_HTTP:
-!                   ohlone_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                case WKP_TCP_ECHO:
-!                   tcpecho_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                case WKP_TCP_INJECT:
-!                   tcpinject_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                case WKP_TCP_DISCARD:
-!                   tcpprint_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                default:
-!                   openserial_printError(COMPONENT_OPENTCP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                         (errorparameter_t)tcp_vars.myPort,
-!                                         (errorparameter_t)4);
-!                   break;
-!             }
-!             tcp_vars.dataToSend = NULL;
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+msg->length-sizeof(tcp_ht)+1;
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             forwarding_send(tempPkt);
-!             tcp_change_state(TCP_STATE_ALMOST_CLOSE_WAIT);
-!          } else {
-!             reset();
-!             openserial_printError(COMPONENT_OPENTCP,ERR_TCP_RESET,
-!                                   (errorparameter_t)tcp_vars.state,
-!                                   (errorparameter_t)4);
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_FIN_WAIT_1:                                  //[receive] teardown
-!          if (containsControlBits(msg,TCP_ACK_NO,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_YES)) {
-!             //I receive FIN, I send ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+1;
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             forwarding_send(tempPkt);
-!             tcp_change_state(TCP_STATE_ALMOST_CLOSING);
-!          } else if (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_YES)) {
-!             //I receive FIN+ACK, I send ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+1;
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             forwarding_send(tempPkt);
-!             tcp_change_state(TCP_STATE_ALMOST_TIME_WAIT);
-!          } else if  (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_NO)) {
-!             //I receive ACK, I will receive FIN later
-!             tcp_change_state(TCP_STATE_FIN_WAIT_2);
-!          } else {
-!             reset();
-!             openserial_printError(COMPONENT_OPENTCP,ERR_TCP_RESET,
-!                                   (errorparameter_t)tcp_vars.state,
-!                                   (errorparameter_t)5);
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_FIN_WAIT_2:                                  //[receive] teardown
-!          if (containsControlBits(msg,TCP_ACK_WHATEVER,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_YES)) {
-!             //I receive FIN[+ACK], I send ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+1;
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             forwarding_send(tempPkt);
-!             tcp_change_state(TCP_STATE_ALMOST_TIME_WAIT);
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_CLOSING:                                     //[receive] teardown
-!          if (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_NO)) {
-!             //I receive ACK, I do nothing
-!             tcp_change_state(TCP_STATE_TIME_WAIT);
-!             //TODO implement waiting timer
-!             reset();
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_LAST_ACK:                                    //[receive] teardown
-!          if (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_NO)) {
-!             //I receive ACK, I reset
-!             reset();
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       default:
-!          openserial_printError(COMPONENT_OPENTCP,ERR_WRONG_TCP_STATE,
-!                                (errorparameter_t)tcp_vars.state,
-!                                (errorparameter_t)4);
-!          break;
-!    }
-! }
-! 
-! error_t opentcp_close() {    //[command] teardown
-!    OpenQueueEntry_t* tempPkt;
-!    if (  tcp_vars.state==TCP_STATE_ALMOST_CLOSE_WAIT ||
-!          tcp_vars.state==TCP_STATE_CLOSE_WAIT        ||
-!          tcp_vars.state==TCP_STATE_ALMOST_LAST_ACK   ||
-!          tcp_vars.state==TCP_STATE_LAST_ACK          ||
-!          tcp_vars.state==TCP_STATE_CLOSED) {
-!       //not an error, can happen when distant node has already started tearing down
-!       return E_SUCCESS;
-!    }
-!    //I receive command 'close', I send FIN+ACK
-!    tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!    if (tempPkt==NULL) {
-!       openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    tempPkt->creator       = COMPONENT_OPENTCP;
-!    tempPkt->owner         = COMPONENT_OPENTCP;
-!    memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!    prependTCPHeader(tempPkt,
-!          TCP_ACK_YES,
-!          TCP_PSH_NO,
-!          TCP_RST_NO,
-!          TCP_SYN_NO,
-!          TCP_FIN_YES);
-!    tcp_vars.mySeqNum++;
-!    tcp_change_state(TCP_STATE_ALMOST_FIN_WAIT_1);
-!    return forwarding_send(tempPkt);
-! }
-! 
-! bool tcp_debugPrint() {
-!    return FALSE;
-! }
-! 
-! //======= timer
-! 
-! //timer used to reset state when TCP state machine is stuck
-! void timers_tcp_fired() {
-!    reset();
-! }
-! 
-! //=========================== private =========================================
-! 
-! void prependTCPHeader(OpenQueueEntry_t* msg,
-!       bool ack,
-!       bool push,
-!       bool rst,
-!       bool syn,
-!       bool fin) {
-!    msg->l4_protocol = IANA_TCP;
-!    packetfunctions_reserveHeaderSize(msg,sizeof(tcp_ht));
-!    packetfunctions_htons(tcp_vars.myPort        ,(uint8_t*)&(((tcp_ht*)msg->payload)->source_port));
-!    packetfunctions_htons(tcp_vars.hisPort       ,(uint8_t*)&(((tcp_ht*)msg->payload)->destination_port));
-!    packetfunctions_htonl(tcp_vars.mySeqNum      ,(uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number));
-!    packetfunctions_htonl(tcp_vars.hisNextSeqNum ,(uint8_t*)&(((tcp_ht*)msg->payload)->ack_number));
-!    ((tcp_ht*)msg->payload)->data_offset      = TCP_DEFAULT_DATA_OFFSET;
-!    ((tcp_ht*)msg->payload)->control_bits     = 0;
-!    if (ack==TCP_ACK_YES) {
-!       ((tcp_ht*)msg->payload)->control_bits |= 1 << TCP_ACK;
-!    } else {
-!       packetfunctions_htonl(0,(uint8_t*)&(((tcp_ht*)msg->payload)->ack_number));
-!    }
-!    if (push==TCP_PSH_YES) {
-!       ((tcp_ht*)msg->payload)->control_bits |= 1 << TCP_PSH;
-!    }
-!    if (rst==TCP_RST_YES) {
-!       ((tcp_ht*)msg->payload)->control_bits |= 1 << TCP_RST;
-!    }
-!    if (syn==TCP_SYN_YES) {
-!       ((tcp_ht*)msg->payload)->control_bits |= 1 << TCP_SYN;
-!    }
-!    if (fin==TCP_FIN_YES) {
-!       ((tcp_ht*)msg->payload)->control_bits |= 1 << TCP_FIN;
-!    }
-!    packetfunctions_htons(TCP_DEFAULT_WINDOW_SIZE    ,(uint8_t*)&(((tcp_ht*)msg->payload)->window_size));
-!    packetfunctions_htons(TCP_DEFAULT_URGENT_POINTER ,(uint8_t*)&(((tcp_ht*)msg->payload)->urgent_pointer));
-!    //calculate checksum last to take all header fields into account
-!    packetfunctions_calculateChecksum(msg,(uint8_t*)&(((tcp_ht*)msg->payload)->checksum));
-! }
-! 
-! bool containsControlBits(OpenQueueEntry_t* msg, uint8_t ack, uint8_t rst, uint8_t syn, uint8_t fin) {
-!    bool return_value = TRUE;
-!    if (ack!=TCP_ACK_WHATEVER){
-!       return_value = return_value && ((bool)( (((tcp_ht*)msg->payload)->control_bits >> TCP_ACK) & 0x01) == ack);
-!    }
-!    if (rst!=TCP_RST_WHATEVER){
-!       return_value = return_value && ((bool)( (((tcp_ht*)msg->payload)->control_bits >> TCP_RST) & 0x01) == rst);
-!    }
-!    if (syn!=TCP_SYN_WHATEVER){
-!       return_value = return_value && ((bool)( (((tcp_ht*)msg->payload)->control_bits >> TCP_SYN) & 0x01) == syn);
-!    }
-!    if (fin!=TCP_FIN_WHATEVER){
-!       return_value = return_value && ((bool)( (((tcp_ht*)msg->payload)->control_bits >> TCP_FIN) & 0x01) == fin);
-!    }
-!    return return_value;
-! }
-! 
-! void reset() {
-!    tcp_change_state(TCP_STATE_CLOSED);
-!    tcp_vars.mySeqNum            = TCP_INITIAL_SEQNUM; 
-!    tcp_vars.hisNextSeqNum       = 0;
-!    tcp_vars.hisPort             = 0;
-!    tcp_vars.hisIPv6Address.type = ADDR_NONE;
-!    tcp_vars.dataToSend          = NULL;
-!    tcp_vars.dataReceived        = NULL;
-!    openqueue_removeAllOwnedBy(COMPONENT_OPENTCP);
-! }
-! 
-! void tcp_change_state(uint8_t new_tcp_state) {
-!    tcp_vars.state = new_tcp_state;
-!    if (tcp_vars.state==TCP_STATE_CLOSED) {
-!       if (tcp_vars.timerStarted==TRUE) {
-!          opentimers_stop(tcp_vars.timerId);
-!       }
-!    } else {
-!       if (tcp_vars.timerStarted==FALSE) {
-!          tcp_vars.timerId = opentimers_start(TCP_TIMEOUT,
-!                                              TIMER_ONESHOT,TIME_MS,
-!                                              opentcp_timer_cb);
-!          tcp_vars.timerStarted=TRUE;
-!       }
-!       
-!    }
-! }
-! 
-! void opentcp_timer_cb() {
-!    scheduler_push_task(timers_tcp_fired,TASKPRIO_TCP_TIMEOUT);
-  }
-\ No newline at end of file
---- 1,753 ----
-! #include "openwsn.h"
-! #include "opentcp.h"
-! #include "openserial.h"
-! #include "openqueue.h"
-! #include "forwarding.h"
-! #include "packetfunctions.h"
-! //#include "bsp_timer.h"
-! #include "scheduler.h"
-! #include "opentimers.h"
-! //TCP applications
-! #include "ohlone.h"
-! #include "tcpecho.h"
-! #include "tcpinject.h"
-! #include "tcpprint.h"
-! 
-! #include "thread.h"
-! 
-! //=========================== variables =======================================
-! 
-! tcp_vars_t tcp_vars;
-! //static char openwsn_opentcp_stack[KERNEL_CONF_STACKSIZE_MAIN];
-! 
-! //=========================== prototypes ======================================
-! 
-! void prependTCPHeader(OpenQueueEntry_t* msg, bool ack, bool push, bool rst, bool syn, bool fin);
-! bool containsControlBits(OpenQueueEntry_t* msg, uint8_t ack, uint8_t rst, uint8_t syn, uint8_t fin);
-! void tcp_change_state(uint8_t new_state);
-! void opentcp_reset(void);
-! void opentcp_timer_cb(void);
-! 
-! //=========================== public ==========================================
-! 
-! void opentcp_init(void) {
-!    // reset local variables
-!    memset(&tcp_vars,0,sizeof(tcp_vars_t));   
-!    // reset state machine
-!    opentcp_reset();
-! }
-! 
-! owerror_t opentcp_connect(open_addr_t* dest, uint16_t param_tcp_hisPort, uint16_t param_tcp_myPort) {
-!    //[command] establishment
-!    OpenQueueEntry_t* tempPkt;
-!    if (tcp_vars.state!=TCP_STATE_CLOSED) {
-!       openserial_printError(COMPONENT_OPENTCP,ERR_WRONG_TCP_STATE,
-!                             (errorparameter_t)tcp_vars.state,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    tcp_vars.myPort  = param_tcp_myPort;
-!    tcp_vars.hisPort = param_tcp_hisPort;
-!    memcpy(&tcp_vars.hisIPv6Address,dest,sizeof(open_addr_t));
-!    //I receive command 'connect', I send SYNC
-!    tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!    if (tempPkt==NULL) {
-!       openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    tempPkt->creator                = COMPONENT_OPENTCP;
-!    tempPkt->owner                  = COMPONENT_OPENTCP;
-!    memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!    tcp_vars.mySeqNum = TCP_INITIAL_SEQNUM;
-!    prependTCPHeader(tempPkt,
-!          TCP_ACK_NO,
-!          TCP_PSH_NO,
-!          TCP_RST_NO,
-!          TCP_SYN_YES,
-!          TCP_FIN_NO);
-!    tcp_change_state(TCP_STATE_ALMOST_SYN_SENT);
-!    return forwarding_send(tempPkt);
-! }
-! 
-! owerror_t opentcp_send(OpenQueueEntry_t* msg) {             //[command] data
-!    msg->owner = COMPONENT_OPENTCP;
-!    if (tcp_vars.state!=TCP_STATE_ESTABLISHED) {
-!       openserial_printError(COMPONENT_OPENTCP,ERR_WRONG_TCP_STATE,
-!                             (errorparameter_t)tcp_vars.state,
-!                             (errorparameter_t)2);
-!       return E_FAIL;
-!    }
-!    if (tcp_vars.dataToSend!=NULL) {
-!       openserial_printError(COMPONENT_OPENTCP,ERR_BUSY_SENDING,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    //I receive command 'send', I send data
-!    msg->l4_protocol          = IANA_TCP;
-!    msg->l4_sourcePortORicmpv6Type       = tcp_vars.myPort;
-!    msg->l4_destination_port  = tcp_vars.hisPort;
-!    msg->l4_payload           = msg->payload;
-!    msg->l4_length            = msg->length;
-!    memcpy(&(msg->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!    tcp_vars.dataToSend = msg;
-!    prependTCPHeader(tcp_vars.dataToSend,
-!          TCP_ACK_YES,
-!          TCP_PSH_YES,
-!          TCP_RST_NO,
-!          TCP_SYN_NO,
-!          TCP_FIN_NO);
-!    tcp_vars.mySeqNum += tcp_vars.dataToSend->l4_length;
-!    tcp_change_state(TCP_STATE_ALMOST_DATA_SENT);
-!    return forwarding_send(tcp_vars.dataToSend);
-! }
-! 
-! void opentcp_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    OpenQueueEntry_t* tempPkt;
-!    msg->owner = COMPONENT_OPENTCP;
-!    switch (tcp_vars.state) {
-!       case TCP_STATE_ALMOST_SYN_SENT:                             //[sendDone] establishement
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_SYN_SENT);
-!          break;
-! 
-!       case TCP_STATE_ALMOST_SYN_RECEIVED:                         //[sendDone] establishement
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_SYN_RECEIVED);
-!          break;
-! 
-!       case TCP_STATE_ALMOST_ESTABLISHED:                          //[sendDone] establishement
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_ESTABLISHED);
-!          switch(tcp_vars.myPort) {
-!             case WKP_TCP_HTTP:
-!                ohlone_connectDone(E_SUCCESS);
-!                break;
-!             case WKP_TCP_ECHO:
-!                tcpecho_connectDone(E_SUCCESS);
-!                break;
-!             case WKP_TCP_INJECT:
-!                tcpinject_connectDone(E_SUCCESS);
-!                break;   
-!             case WKP_TCP_DISCARD:
-!                tcpprint_connectDone(E_SUCCESS);
-!                break;
-!             default:
-!                openserial_printError(COMPONENT_OPENTCP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                      (errorparameter_t)tcp_vars.myPort,
-!                                      (errorparameter_t)0);
-!                break;
-!          }
-!          break;
-! 
-!       case TCP_STATE_ALMOST_DATA_SENT:                            //[sendDone] data
-!          tcp_change_state(TCP_STATE_DATA_SENT);
-!          break;
-! 
-!       case TCP_STATE_ALMOST_DATA_RECEIVED:                        //[sendDone] data
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_ESTABLISHED);
-!          switch(tcp_vars.myPort) {
-!             case WKP_TCP_HTTP:
-!                ohlone_receive(tcp_vars.dataReceived);
-!                break;
-!             case WKP_TCP_ECHO:
-!                tcpecho_receive(tcp_vars.dataReceived);
-!                break;
-!             case WKP_TCP_INJECT:
-!                tcpinject_receive(tcp_vars.dataReceived);
-!                break;
-!             case WKP_TCP_DISCARD:
-!                tcpprint_receive(tcp_vars.dataReceived);
-!                break;
-!             default:
-!                openserial_printError(COMPONENT_OPENTCP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                      (errorparameter_t)tcp_vars.myPort,
-!                                      (errorparameter_t)1);
-!                openqueue_freePacketBuffer(msg);
-!                tcp_vars.dataReceived = NULL;
-!                break;
-!          }
-!          break;
-! 
-!       case TCP_STATE_ALMOST_FIN_WAIT_1:                           //[sendDone] teardown
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_FIN_WAIT_1);
-!          break;
-! 
-!       case TCP_STATE_ALMOST_CLOSING:                              //[sendDone] teardown
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_CLOSING);
-!          break;
-! 
-!       case TCP_STATE_ALMOST_TIME_WAIT:                            //[sendDone] teardown
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_TIME_WAIT);
-!          //TODO implement waiting timer
-!          opentcp_reset();
-!          break;
-! 
-!       case TCP_STATE_ALMOST_CLOSE_WAIT:                           //[sendDone] teardown
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_CLOSE_WAIT);
-!          //I send FIN+ACK
-!          tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!          if (tempPkt==NULL) {
-!             openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                   (errorparameter_t)0,
-!                                   (errorparameter_t)0);
-!             openqueue_freePacketBuffer(msg);
-!             return;
-!          }
-!          tempPkt->creator       = COMPONENT_OPENTCP;
-!          tempPkt->owner         = COMPONENT_OPENTCP;
-!          memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!          prependTCPHeader(tempPkt,
-!                TCP_ACK_YES,
-!                TCP_PSH_NO,
-!                TCP_RST_NO,
-!                TCP_SYN_NO,
-!                TCP_FIN_YES);
-!          forwarding_send(tempPkt);
-!          tcp_change_state(TCP_STATE_ALMOST_LAST_ACK);
-!          break;
-! 
-!       case TCP_STATE_ALMOST_LAST_ACK:                             //[sendDone] teardown
-!          openqueue_freePacketBuffer(msg);
-!          tcp_change_state(TCP_STATE_LAST_ACK);
-!          break;
-! 
-!       default:
-!          openserial_printError(COMPONENT_OPENTCP,ERR_WRONG_TCP_STATE,
-!                                (errorparameter_t)tcp_vars.state,
-!                                (errorparameter_t)3);
-!          break;
-!    }
-! }
-! 
-! void opentcp_receive(OpenQueueEntry_t* msg) {
-!    OpenQueueEntry_t* tempPkt;
-!    bool shouldIlisten;
-!    msg->owner                     = COMPONENT_OPENTCP;
-!    msg->l4_protocol               = IANA_TCP;
-!    msg->l4_payload                = msg->payload;
-!    msg->l4_length                 = msg->length;
-!    msg->l4_sourcePortORicmpv6Type = packetfunctions_ntohs((uint8_t*)&(((tcp_ht*)msg->payload)->source_port));
-!    msg->l4_destination_port       = packetfunctions_ntohs((uint8_t*)&(((tcp_ht*)msg->payload)->destination_port));
-!    if ( 
-!          tcp_vars.state!=TCP_STATE_CLOSED &&
-!          (
-!           msg->l4_destination_port != tcp_vars.myPort  ||
-!           msg->l4_sourcePortORicmpv6Type      != tcp_vars.hisPort ||
-!           packetfunctions_sameAddress(&(msg->l3_destinationAdd),&tcp_vars.hisIPv6Address)==FALSE
-!          )
-!       ) {
-!       openqueue_freePacketBuffer(msg);
-!       return;
-!    }
-!    if (containsControlBits(msg,TCP_ACK_WHATEVER,TCP_RST_YES,TCP_SYN_WHATEVER,TCP_FIN_WHATEVER)) {
-!       //I receive RST[+*], I reset
-!       opentcp_reset();
-!       openqueue_freePacketBuffer(msg);
-!    }
-!    switch (tcp_vars.state) {
-!       case TCP_STATE_CLOSED:                                      //[receive] establishement
-!          switch(msg->l4_destination_port) {
-!             case WKP_TCP_HTTP:
-!                shouldIlisten = ohlone_shouldIlisten();
-!                break;
-!             case WKP_TCP_ECHO:
-!                shouldIlisten = tcpecho_shouldIlisten();
-!                break;
-!             case WKP_TCP_INJECT:
-!                shouldIlisten = tcpinject_shouldIlisten();
-!                break;   
-!             case WKP_TCP_DISCARD:
-!                shouldIlisten = tcpprint_shouldIlisten();
-!                break;
-!             default:
-!                openserial_printError(COMPONENT_OPENTCP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                      (errorparameter_t)msg->l4_sourcePortORicmpv6Type,
-!                                      (errorparameter_t)2);
-!                shouldIlisten = FALSE;
-!                break;
-!          }
-!          if ( containsControlBits(msg,TCP_ACK_NO,TCP_RST_NO,TCP_SYN_YES,TCP_FIN_NO) && shouldIlisten==TRUE ) {
-!                   tcp_vars.myPort = msg->l4_destination_port;
-!                   //I receive SYN, I send SYN+ACK
-!                   tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+1;
-!                   tcp_vars.hisPort       = msg->l4_sourcePortORicmpv6Type;
-!                   memcpy(&tcp_vars.hisIPv6Address,&(msg->l3_destinationAdd),sizeof(open_addr_t));
-!                   tempPkt       = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!                   if (tempPkt==NULL) {
-!                      openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                            (errorparameter_t)0,
-!                                            (errorparameter_t)0);
-!                      openqueue_freePacketBuffer(msg);
-!                      return;
-!                   }
-!                   tempPkt->creator       = COMPONENT_OPENTCP;
-!                   tempPkt->owner         = COMPONENT_OPENTCP;
-!                   memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!                   prependTCPHeader(tempPkt,
-!                         TCP_ACK_YES,
-!                         TCP_PSH_NO,
-!                         TCP_RST_NO,
-!                         TCP_SYN_YES,
-!                         TCP_FIN_NO);
-!                   tcp_vars.mySeqNum++;
-!                   tcp_change_state(TCP_STATE_ALMOST_SYN_RECEIVED);
-!                   forwarding_send(tempPkt);
-!                } else {
-!                   opentcp_reset();
-!                   openserial_printError(COMPONENT_OPENTCP,ERR_TCP_RESET,
-!                                         (errorparameter_t)tcp_vars.state,
-!                                         (errorparameter_t)0);
-!                }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_SYN_SENT:                                    //[receive] establishement
-!          if (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_YES,TCP_FIN_NO)) {
-!             //I receive SYN+ACK, I send ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+1;
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             tcp_change_state(TCP_STATE_ALMOST_ESTABLISHED);
-!             forwarding_send(tempPkt);
-!          } else if (containsControlBits(msg,TCP_ACK_NO,TCP_RST_NO,TCP_SYN_YES,TCP_FIN_NO)) {
-!             //I receive SYN, I send SYN+ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+1;
-!             tempPkt       = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_YES,
-!                   TCP_FIN_NO);
-!             tcp_vars.mySeqNum++;
-!             tcp_change_state(TCP_STATE_ALMOST_SYN_RECEIVED);
-!             forwarding_send(tempPkt);
-!          } else {
-!             opentcp_reset();
-!             openserial_printError(COMPONENT_OPENTCP,ERR_TCP_RESET,
-!                                   (errorparameter_t)tcp_vars.state,
-!                                   (errorparameter_t)1);
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_SYN_RECEIVED:                                //[receive] establishement
-!          if (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_NO)) {
-!             //I receive ACK, the virtual circuit is established
-!             tcp_change_state(TCP_STATE_ESTABLISHED);
-!          } else {
-!             opentcp_reset();
-!             openserial_printError(COMPONENT_OPENTCP,ERR_TCP_RESET,
-!                                   (errorparameter_t)tcp_vars.state,
-!                                   (errorparameter_t)2);
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_ESTABLISHED:                                 //[receive] data/teardown
-!          if (containsControlBits(msg,TCP_ACK_WHATEVER,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_YES)) {
-!             //I receive FIN[+ACK], I send ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+msg->length-sizeof(tcp_ht)+1;
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             forwarding_send(tempPkt);
-!             tcp_change_state(TCP_STATE_ALMOST_CLOSE_WAIT);
-!          } else if (containsControlBits(msg,TCP_ACK_WHATEVER,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_NO)) {
-!             //I receive data, I send ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+msg->length-sizeof(tcp_ht);
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             forwarding_send(tempPkt);
-!             packetfunctions_tossHeader(msg,sizeof(tcp_ht));
-!             tcp_vars.dataReceived = msg;
-!             tcp_change_state(TCP_STATE_ALMOST_DATA_RECEIVED);
-!          } else {
-!             opentcp_reset();
-!             openserial_printError(COMPONENT_OPENTCP,ERR_TCP_RESET,
-!                                   (errorparameter_t)tcp_vars.state,
-!                                   (errorparameter_t)3);
-!             openqueue_freePacketBuffer(msg);
-!          }
-!          break;
-! 
-!       case TCP_STATE_DATA_SENT:                                   //[receive] data
-!          if (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_NO)) {
-!             //I receive ACK, data message sent
-!             switch(tcp_vars.myPort) {
-!                case WKP_TCP_HTTP:
-!                   ohlone_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                case WKP_TCP_ECHO:
-!                   tcpecho_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                case WKP_TCP_INJECT:
-!                   tcpinject_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                case WKP_TCP_DISCARD:
-!                   tcpprint_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                default:
-!                   openserial_printError(COMPONENT_OPENTCP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                         (errorparameter_t)tcp_vars.myPort,
-!                                         (errorparameter_t)3);
-!                   break;
-!             }
-!             tcp_vars.dataToSend = NULL;
-!             tcp_change_state(TCP_STATE_ESTABLISHED);
-!          } else if (containsControlBits(msg,TCP_ACK_WHATEVER,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_YES)) {
-!             //I receive FIN[+ACK], I send ACK
-!             switch(tcp_vars.myPort) {
-!                case WKP_TCP_HTTP:
-!                   ohlone_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                case WKP_TCP_ECHO:
-!                   tcpecho_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                case WKP_TCP_INJECT:
-!                   tcpinject_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                case WKP_TCP_DISCARD:
-!                   tcpprint_sendDone(tcp_vars.dataToSend,E_SUCCESS);
-!                   break;
-!                default:
-!                   openserial_printError(COMPONENT_OPENTCP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                         (errorparameter_t)tcp_vars.myPort,
-!                                         (errorparameter_t)4);
-!                   break;
-!             }
-!             tcp_vars.dataToSend = NULL;
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+msg->length-sizeof(tcp_ht)+1;
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             forwarding_send(tempPkt);
-!             tcp_change_state(TCP_STATE_ALMOST_CLOSE_WAIT);
-!          } else {
-!             opentcp_reset();
-!             openserial_printError(COMPONENT_OPENTCP,ERR_TCP_RESET,
-!                                   (errorparameter_t)tcp_vars.state,
-!                                   (errorparameter_t)4);
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_FIN_WAIT_1:                                  //[receive] teardown
-!          if (containsControlBits(msg,TCP_ACK_NO,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_YES)) {
-!             //I receive FIN, I send ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+1;
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             forwarding_send(tempPkt);
-!             tcp_change_state(TCP_STATE_ALMOST_CLOSING);
-!          } else if (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_YES)) {
-!             //I receive FIN+ACK, I send ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+1;
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             forwarding_send(tempPkt);
-!             tcp_change_state(TCP_STATE_ALMOST_TIME_WAIT);
-!          } else if  (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_NO)) {
-!             //I receive ACK, I will receive FIN later
-!             tcp_change_state(TCP_STATE_FIN_WAIT_2);
-!          } else {
-!             opentcp_reset();
-!             openserial_printError(COMPONENT_OPENTCP,ERR_TCP_RESET,
-!                                   (errorparameter_t)tcp_vars.state,
-!                                   (errorparameter_t)5);
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_FIN_WAIT_2:                                  //[receive] teardown
-!          if (containsControlBits(msg,TCP_ACK_WHATEVER,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_YES)) {
-!             //I receive FIN[+ACK], I send ACK
-!             tcp_vars.hisNextSeqNum = (packetfunctions_ntohl((uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number)))+1;
-!             tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!             if (tempPkt==NULL) {
-!                openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                                      (errorparameter_t)0,
-!                                      (errorparameter_t)0);
-!                openqueue_freePacketBuffer(msg);
-!                return;
-!             }
-!             tempPkt->creator       = COMPONENT_OPENTCP;
-!             tempPkt->owner         = COMPONENT_OPENTCP;
-!             memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!             prependTCPHeader(tempPkt,
-!                   TCP_ACK_YES,
-!                   TCP_PSH_NO,
-!                   TCP_RST_NO,
-!                   TCP_SYN_NO,
-!                   TCP_FIN_NO);
-!             forwarding_send(tempPkt);
-!             tcp_change_state(TCP_STATE_ALMOST_TIME_WAIT);
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_CLOSING:                                     //[receive] teardown
-!          if (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_NO)) {
-!             //I receive ACK, I do nothing
-!             tcp_change_state(TCP_STATE_TIME_WAIT);
-!             //TODO implement waiting timer
-!             opentcp_reset();
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       case TCP_STATE_LAST_ACK:                                    //[receive] teardown
-!          if (containsControlBits(msg,TCP_ACK_YES,TCP_RST_NO,TCP_SYN_NO,TCP_FIN_NO)) {
-!             //I receive ACK, I reset
-!             opentcp_reset();
-!          }
-!          openqueue_freePacketBuffer(msg);
-!          break;
-! 
-!       default:
-!          openserial_printError(COMPONENT_OPENTCP,ERR_WRONG_TCP_STATE,
-!                                (errorparameter_t)tcp_vars.state,
-!                                (errorparameter_t)4);
-!          break;
-!    }
-! }
-! 
-! owerror_t opentcp_close(void) {    //[command] teardown
-!    OpenQueueEntry_t* tempPkt;
-!    if (  tcp_vars.state==TCP_STATE_ALMOST_CLOSE_WAIT ||
-!          tcp_vars.state==TCP_STATE_CLOSE_WAIT        ||
-!          tcp_vars.state==TCP_STATE_ALMOST_LAST_ACK   ||
-!          tcp_vars.state==TCP_STATE_LAST_ACK          ||
-!          tcp_vars.state==TCP_STATE_CLOSED) {
-!       //not an error, can happen when distant node has already started tearing down
-!       return E_SUCCESS;
-!    }
-!    //I receive command 'close', I send FIN+ACK
-!    tempPkt = openqueue_getFreePacketBuffer(COMPONENT_OPENTCP);
-!    if (tempPkt==NULL) {
-!       openserial_printError(COMPONENT_OPENTCP,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return E_FAIL;
-!    }
-!    tempPkt->creator       = COMPONENT_OPENTCP;
-!    tempPkt->owner         = COMPONENT_OPENTCP;
-!    memcpy(&(tempPkt->l3_destinationAdd),&tcp_vars.hisIPv6Address,sizeof(open_addr_t));
-!    prependTCPHeader(tempPkt,
-!          TCP_ACK_YES,
-!          TCP_PSH_NO,
-!          TCP_RST_NO,
-!          TCP_SYN_NO,
-!          TCP_FIN_YES);
-!    tcp_vars.mySeqNum++;
-!    tcp_change_state(TCP_STATE_ALMOST_FIN_WAIT_1);
-!    return forwarding_send(tempPkt);
-! }
-! 
-! bool tcp_debugPrint(void) {
-!    return FALSE;
-! }
-! 
-! //======= timer
-! 
-! //timer used to reset state when TCP state machine is stuck
-! void timers_tcp_fired(void) {
-!    opentcp_reset();
-! }
-! 
-! //=========================== private =========================================
-! 
-! void prependTCPHeader(OpenQueueEntry_t* msg,
-!       bool ack,
-!       bool push,
-!       bool rst,
-!       bool syn,
-!       bool fin) {
-!    msg->l4_protocol = IANA_TCP;
-!    packetfunctions_reserveHeaderSize(msg,sizeof(tcp_ht));
-!    packetfunctions_htons(tcp_vars.myPort        ,(uint8_t*)&(((tcp_ht*)msg->payload)->source_port));
-!    packetfunctions_htons(tcp_vars.hisPort       ,(uint8_t*)&(((tcp_ht*)msg->payload)->destination_port));
-!    packetfunctions_htonl(tcp_vars.mySeqNum      ,(uint8_t*)&(((tcp_ht*)msg->payload)->sequence_number));
-!    packetfunctions_htonl(tcp_vars.hisNextSeqNum ,(uint8_t*)&(((tcp_ht*)msg->payload)->ack_number));
-!    ((tcp_ht*)msg->payload)->data_offset      = TCP_DEFAULT_DATA_OFFSET;
-!    ((tcp_ht*)msg->payload)->control_bits     = 0;
-!    if (ack==TCP_ACK_YES) {
-!       ((tcp_ht*)msg->payload)->control_bits |= 1 << TCP_ACK;
-!    } else {
-!       packetfunctions_htonl(0,(uint8_t*)&(((tcp_ht*)msg->payload)->ack_number));
-!    }
-!    if (push==TCP_PSH_YES) {
-!       ((tcp_ht*)msg->payload)->control_bits |= 1 << TCP_PSH;
-!    }
-!    if (rst==TCP_RST_YES) {
-!       ((tcp_ht*)msg->payload)->control_bits |= 1 << TCP_RST;
-!    }
-!    if (syn==TCP_SYN_YES) {
-!       ((tcp_ht*)msg->payload)->control_bits |= 1 << TCP_SYN;
-!    }
-!    if (fin==TCP_FIN_YES) {
-!       ((tcp_ht*)msg->payload)->control_bits |= 1 << TCP_FIN;
-!    }
-!    packetfunctions_htons(TCP_DEFAULT_WINDOW_SIZE    ,(uint8_t*)&(((tcp_ht*)msg->payload)->window_size));
-!    packetfunctions_htons(TCP_DEFAULT_URGENT_POINTER ,(uint8_t*)&(((tcp_ht*)msg->payload)->urgent_pointer));
-!    //calculate checksum last to take all header fields into account
-!    packetfunctions_calculateChecksum(msg,(uint8_t*)&(((tcp_ht*)msg->payload)->checksum));
-! }
-! 
-! bool containsControlBits(OpenQueueEntry_t* msg, uint8_t ack, uint8_t rst, uint8_t syn, uint8_t fin) {
-!    bool return_value = TRUE;
-!    if (ack!=TCP_ACK_WHATEVER){
-!       return_value = return_value && ((bool)( (((tcp_ht*)msg->payload)->control_bits >> TCP_ACK) & 0x01) == ack);
-!    }
-!    if (rst!=TCP_RST_WHATEVER){
-!       return_value = return_value && ((bool)( (((tcp_ht*)msg->payload)->control_bits >> TCP_RST) & 0x01) == rst);
-!    }
-!    if (syn!=TCP_SYN_WHATEVER){
-!       return_value = return_value && ((bool)( (((tcp_ht*)msg->payload)->control_bits >> TCP_SYN) & 0x01) == syn);
-!    }
-!    if (fin!=TCP_FIN_WHATEVER){
-!       return_value = return_value && ((bool)( (((tcp_ht*)msg->payload)->control_bits >> TCP_FIN) & 0x01) == fin);
-!    }
-!    return return_value;
-! }
-! 
-! void opentcp_reset(void) {
-!    tcp_change_state(TCP_STATE_CLOSED);
-!    tcp_vars.mySeqNum            = TCP_INITIAL_SEQNUM; 
-!    tcp_vars.hisNextSeqNum       = 0;
-!    tcp_vars.hisPort             = 0;
-!    tcp_vars.hisIPv6Address.type = ADDR_NONE;
-!    tcp_vars.dataToSend          = NULL;
-!    tcp_vars.dataReceived        = NULL;
-!    openqueue_removeAllOwnedBy(COMPONENT_OPENTCP);
-! }
-! 
-! void tcp_change_state(uint8_t new_tcp_state) {
-!    tcp_vars.state = new_tcp_state;
-!    if (tcp_vars.state==TCP_STATE_CLOSED) {
-!       if (tcp_vars.timerStarted==TRUE) {
-!          opentimers_stop(tcp_vars.timerId);
-!       }
-!    } else {
-!       if (tcp_vars.timerStarted==FALSE) {
-!          tcp_vars.timerId = opentimers_start(TCP_TIMEOUT,
-!                                              TIMER_ONESHOT,TIME_MS,
-!                                              opentcp_timer_cb);
-!          tcp_vars.timerStarted=TRUE;
-!       }
-!       
-!    }
-! }
-! 
-! void opentcp_timer_cb(void) {
-!     scheduler_push_task(timers_tcp_fired,TASKPRIO_TCP_TIMEOUT);
-!    /*thread_create(openwsn_opentcp_stack, KERNEL_CONF_STACKSIZE_MAIN, 
-!                   PRIORITY_OPENWSN_OPENTCP, CREATE_STACKTEST, 
-!                   timers_tcp_fired, "timers tcp fired");*/
-  }
-\ No newline at end of file
-diff -crB openwsn/04-TRAN/opentcp.h ../../../sys/net/openwsn/04-TRAN/opentcp.h
-*** openwsn/04-TRAN/opentcp.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/04-TRAN/opentcp.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,118 ****
-! #ifndef __OPENTCP_H
-! #define __OPENTCP_H
-! 
-! /**
-! \addtogroup Transport
-! \{
-! \addtogroup TCP
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! enum {
-!    TCP_INITIAL_SEQNUM             = 100,
-!    TCP_TIMEOUT                    = 1500, //in ms
-! };
-! 
-! enum TCP_STATE_enums {
-!    //listen state is not declared but emulated by a closed state with shouldIlisten==TRUE
-!    TCP_STATE_CLOSED               = 0,
-!    TCP_STATE_ALMOST_SYN_RECEIVED  = 1,
-!    TCP_STATE_SYN_RECEIVED         = 2,
-!    TCP_STATE_ALMOST_SYN_SENT      = 3,
-!    TCP_STATE_SYN_SENT             = 4,
-!    TCP_STATE_ALMOST_ESTABLISHED   = 5,
-!    TCP_STATE_ESTABLISHED          = 6,
-!    TCP_STATE_ALMOST_DATA_SENT     = 7,
-!    TCP_STATE_DATA_SENT            = 8,
-!    TCP_STATE_ALMOST_DATA_RECEIVED = 9,
-!    TCP_STATE_ALMOST_FIN_WAIT_1    = 10,
-!    TCP_STATE_FIN_WAIT_1           = 11,
-!    TCP_STATE_ALMOST_CLOSING       = 12,
-!    TCP_STATE_CLOSING              = 13,
-!    TCP_STATE_FIN_WAIT_2           = 14,
-!    TCP_STATE_ALMOST_TIME_WAIT     = 15,
-!    TCP_STATE_TIME_WAIT            = 16,
-!    TCP_STATE_ALMOST_CLOSE_WAIT    = 17,
-!    TCP_STATE_CLOSE_WAIT           = 18,
-!    TCP_STATE_ALMOST_LAST_ACK      = 19,
-!    TCP_STATE_LAST_ACK             = 20,
-! };
-! 
-! enum TCP_DEFAULTS_enum{
-!    TCP_DEFAULT_DATA_OFFSET        =   0x50,
-!    TCP_DEFAULT_WINDOW_SIZE        =     48,
-!    TCP_DEFAULT_URGENT_POINTER     = 0x0000,
-! };
-! 
-! enum TCP_ACK_FLAG_enum {
-!    TCP_ACK_WHATEVER               = 2,
-!    TCP_ACK_YES                    = 1,
-!    TCP_ACK_NO                     = 0,
-! };
-! 
-! enum TCP_PSH_FLAG_enum {
-!    TCP_PSH_WHATEVER               = 2,
-!    TCP_PSH_YES                    = 1,
-!    TCP_PSH_NO                     = 0,
-! };
-! 
-! enum TCP_RST_FLAG_enum {
-!    TCP_RST_WHATEVER               = 2,
-!    TCP_RST_YES                    = 1,
-!    TCP_RST_NO                     = 0,
-! };
-! 
-! enum TCP_SYN_FLAG_enum {
-!    TCP_SYN_WHATEVER               = 2,
-!    TCP_SYN_YES                    = 1,
-!    TCP_SYN_NO                     = 0,
-! };
-! 
-! enum TCP_FIN_FLAG_enum {
-!    TCP_FIN_WHATEVER               = 2,
-!    TCP_FIN_YES                    = 1,
-!    TCP_FIN_NO                     = 0,
-! };
-! 
-! enum TCP_FLAG_POSITIONS_enum {
-!    TCP_ACK                        = 4,
-!    TCP_PSH                        = 3,
-!    TCP_RST                        = 2,
-!    TCP_SYN                        = 1,
-!    TCP_FIN                        = 0,
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    uint16_t source_port;
-!    uint16_t destination_port;
-!    uint32_t sequence_number;
-!    uint32_t ack_number;
-!    uint8_t  data_offset;
-!    uint8_t  control_bits;
-!    uint16_t window_size;
-!    uint16_t checksum;
-!    uint16_t urgent_pointer;
-! } tcp_ht;
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void     opentcp_init();
-! error_t  opentcp_connect(open_addr_t* dest, uint16_t param_hisPort, uint16_t param_myPort);
-! error_t  opentcp_send(OpenQueueEntry_t* msg);
-! void     opentcp_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void     opentcp_receive(OpenQueueEntry_t* msg);
-! error_t  opentcp_close();
-! bool     opentcp_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,133 ----
-! #ifndef __OPENTCP_H
-! #define __OPENTCP_H
-! 
-! /**
-! \addtogroup Transport
-! \{
-! \addtogroup OpenTcp
-! \{
-! */
-! 
-! #include "opentimers.h"
-! 
-! //=========================== define ==========================================
-! 
-! enum {
-!    TCP_INITIAL_SEQNUM             = 100,
-!    TCP_TIMEOUT                    = 1500, //in ms
-! };
-! 
-! enum TCP_STATE_enums {
-!    //listen state is not declared but emulated by a closed state with shouldIlisten==TRUE
-!    TCP_STATE_CLOSED               = 0,
-!    TCP_STATE_ALMOST_SYN_RECEIVED  = 1,
-!    TCP_STATE_SYN_RECEIVED         = 2,
-!    TCP_STATE_ALMOST_SYN_SENT      = 3,
-!    TCP_STATE_SYN_SENT             = 4,
-!    TCP_STATE_ALMOST_ESTABLISHED   = 5,
-!    TCP_STATE_ESTABLISHED          = 6,
-!    TCP_STATE_ALMOST_DATA_SENT     = 7,
-!    TCP_STATE_DATA_SENT            = 8,
-!    TCP_STATE_ALMOST_DATA_RECEIVED = 9,
-!    TCP_STATE_ALMOST_FIN_WAIT_1    = 10,
-!    TCP_STATE_FIN_WAIT_1           = 11,
-!    TCP_STATE_ALMOST_CLOSING       = 12,
-!    TCP_STATE_CLOSING              = 13,
-!    TCP_STATE_FIN_WAIT_2           = 14,
-!    TCP_STATE_ALMOST_TIME_WAIT     = 15,
-!    TCP_STATE_TIME_WAIT            = 16,
-!    TCP_STATE_ALMOST_CLOSE_WAIT    = 17,
-!    TCP_STATE_CLOSE_WAIT           = 18,
-!    TCP_STATE_ALMOST_LAST_ACK      = 19,
-!    TCP_STATE_LAST_ACK             = 20,
-! };
-! 
-! enum TCP_DEFAULTS_enum{
-!    TCP_DEFAULT_DATA_OFFSET        =   0x50,
-!    TCP_DEFAULT_WINDOW_SIZE        =     48,
-!    TCP_DEFAULT_URGENT_POINTER     = 0x0000,
-! };
-! 
-! enum TCP_ACK_FLAG_enum {
-!    TCP_ACK_WHATEVER               = 2,
-!    TCP_ACK_YES                    = 1,
-!    TCP_ACK_NO                     = 0,
-! };
-! 
-! enum TCP_PSH_FLAG_enum {
-!    TCP_PSH_WHATEVER               = 2,
-!    TCP_PSH_YES                    = 1,
-!    TCP_PSH_NO                     = 0,
-! };
-! 
-! enum TCP_RST_FLAG_enum {
-!    TCP_RST_WHATEVER               = 2,
-!    TCP_RST_YES                    = 1,
-!    TCP_RST_NO                     = 0,
-! };
-! 
-! enum TCP_SYN_FLAG_enum {
-!    TCP_SYN_WHATEVER               = 2,
-!    TCP_SYN_YES                    = 1,
-!    TCP_SYN_NO                     = 0,
-! };
-! 
-! enum TCP_FIN_FLAG_enum {
-!    TCP_FIN_WHATEVER               = 2,
-!    TCP_FIN_YES                    = 1,
-!    TCP_FIN_NO                     = 0,
-! };
-! 
-! enum TCP_FLAG_POSITIONS_enum {
-!    TCP_ACK                        = 4,
-!    TCP_PSH                        = 3,
-!    TCP_RST                        = 2,
-!    TCP_SYN                        = 1,
-!    TCP_FIN                        = 0,
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    uint16_t source_port;
-!    uint16_t destination_port;
-!    uint32_t sequence_number;
-!    uint32_t ack_number;
-!    uint8_t  data_offset;
-!    uint8_t  control_bits;
-!    uint16_t window_size;
-!    uint16_t checksum;
-!    uint16_t urgent_pointer;
-! } tcp_ht;
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    uint8_t              state;
-!    uint32_t             mySeqNum;
-!    uint16_t             myPort;
-!    uint32_t             hisNextSeqNum;
-!    uint16_t             hisPort;
-!    open_addr_t          hisIPv6Address;
-!    OpenQueueEntry_t*    dataToSend;
-!    OpenQueueEntry_t*    dataReceived;
-!    bool                 timerStarted;
-!    opentimer_id_t       timerId;
-! } tcp_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! void     opentcp_init(void);
-! owerror_t  opentcp_connect(open_addr_t* dest, uint16_t param_hisPort, uint16_t param_myPort);
-! owerror_t  opentcp_send(OpenQueueEntry_t* msg);
-! void     opentcp_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void     opentcp_receive(OpenQueueEntry_t* msg);
-! owerror_t  opentcp_close(void);
-! bool     opentcp_debugPrint(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/04-TRAN/openudp.c ../../../sys/net/openwsn/04-TRAN/openudp.c
-*** openwsn/04-TRAN/openudp.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/04-TRAN/openudp.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,158 ****
-! #include "openwsn.h"
-! #include "openudp.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! #include "forwarding.h"
-! #include "openqueue.h"
-! //UDP applications
-! #include "opencoap.h"
-! #include "udpecho.h"
-! #include "udpinject.h"
-! #include "udpprint.h"
-! #include "udprand.h"
-! #include "udpstorm.h"
-! #include "udplatency.h"
-! //#include "heli.h"
-! //#include "imu.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void openudp_init() {
-! }
-! 
-! error_t openudp_send(OpenQueueEntry_t* msg) {
-!    msg->owner       = COMPONENT_OPENUDP;
-!    msg->l4_protocol = IANA_UDP;
-!    msg->l4_payload  = msg->payload;
-!    msg->l4_length   = msg->length;
-!    packetfunctions_reserveHeaderSize(msg,sizeof(udp_ht));
-!    packetfunctions_htons(msg->l4_sourcePortORicmpv6Type,&(msg->payload[0]));
-!    packetfunctions_htons(msg->l4_destination_port,&(msg->payload[2]));
-!    packetfunctions_htons(msg->length,&(msg->payload[4]));
-!    packetfunctions_calculateChecksum(msg,(uint8_t*)&(((udp_ht*)msg->payload)->checksum));
-!    return forwarding_send(msg);
-! }
-! 
-! void openudp_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_OPENUDP;
-!    switch(msg->l4_sourcePortORicmpv6Type) {
-!       case WKP_UDP_COAP:
-!          opencoap_sendDone(msg,error);
-!          break;
-!       /*    
-!       case WKP_UDP_HELI:
-!          appudpheli_sendDone(msg,error);
-!          break;
-!       case WKP_UDP_IMU:
-!          appudpgina_sendDone(msg,error);
-!          break;
-!       */
-!       case WKP_UDP_ECHO:
-!          udpecho_sendDone(msg,error);
-!          break;
-!       case WKP_UDP_INJECT:
-!          udpinject_sendDone(msg,error);
-!          break;
-!       case WKP_UDP_DISCARD:
-!          udpprint_sendDone(msg,error);
-!          break;
-!       case WKP_UDP_RAND:
-!          udprand_sendDone(msg,error);
-!          break;
-!       case WKP_UDP_LATENCY:
-!          udplatency_sendDone(msg,error);
-!          break;
-!          
-!       default:
-!          openserial_printError(COMPONENT_OPENUDP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                (errorparameter_t)msg->l4_sourcePortORicmpv6Type,
-!                                (errorparameter_t)5);
-!          openqueue_freePacketBuffer(msg);         
-!    }
-! }
-! 
-! void openudp_receive(OpenQueueEntry_t* msg) {
-!    uint8_t temp_8b;
-!       
-!    msg->owner                      = COMPONENT_OPENUDP;
-!    if (msg->l4_protocol_compressed==TRUE) {
-!       // get the UDP header encoding byte
-!       temp_8b = *((uint8_t*)(msg->payload));
-!       packetfunctions_tossHeader(msg,sizeof(temp_8b));
-!       switch (temp_8b & NHC_UDP_PORTS_MASK) {
-!          case NHC_UDP_PORTS_INLINE:
-!             // source port:         16 bits in-line
-!             // dest port:           16 bits in-line
-!             msg->l4_sourcePortORicmpv6Type  = msg->payload[0]*256+msg->payload[1];
-!             msg->l4_destination_port        = msg->payload[2]*256+msg->payload[3];
-!             packetfunctions_tossHeader(msg,2+2);
-!             break;
-!          case NHC_UDP_PORTS_16S_8D:
-!             // source port:         16 bits in-line
-!             // dest port:   0xf0  +  8 bits in-line
-!             msg->l4_sourcePortORicmpv6Type  = msg->payload[0]*256+msg->payload[1];
-!             msg->l4_destination_port        = 0xf000 +            msg->payload[2];
-!             packetfunctions_tossHeader(msg,2+1);
-!             break;
-!          case NHC_UDP_PORTS_8S_8D:
-!             // source port: 0xf0  +  8 bits in-line
-!             // dest port:   0xf0  +  8 bits in-line
-!             msg->l4_sourcePortORicmpv6Type  = 0xf000 +            msg->payload[0];
-!             msg->l4_destination_port        = 0xf000 +            msg->payload[1];
-!             packetfunctions_tossHeader(msg,1+1);
-!             break;
-!          case NHC_UDP_PORTS_4S_4D:
-!             // source port: 0xf0b +  4 bits in-line
-!             // dest port:   0xf0b +  4 bits in-line
-!             msg->l4_sourcePortORicmpv6Type  = 0xf0b0 + (msg->payload[0] >> 4) & 0x0f;
-!             msg->l4_destination_port        = 0xf0b0 + (msg->payload[0] >> 0) & 0x0f;
-!             packetfunctions_tossHeader(msg,1);
-!             break;
-!       }
-!    } else {
-!       msg->l4_sourcePortORicmpv6Type  = msg->payload[0]*256+msg->payload[1];
-!       msg->l4_destination_port        = msg->payload[2]*256+msg->payload[3];
-!       packetfunctions_tossHeader(msg,sizeof(udp_ht));
-!    }
-!    
-!    switch(msg->l4_destination_port) {
-!       case WKP_UDP_COAP:
-!          opencoap_receive(msg);
-!          break;
-!       /* 
-!       case WKP_UDP_HELI:
-!          appudpheli_receive(msg);
-!          break;
-!       case WKP_UDP_IMU:
-!          imu_receive(msg);
-!          break;
-!       */
-!       case WKP_UDP_ECHO:
-!          udpecho_receive(msg);
-!          break;
-!       case WKP_UDP_INJECT:
-!          udpinject_receive(msg);
-!          break;
-!       case WKP_UDP_DISCARD:
-!          udpprint_receive(msg);
-!          break;
-!       case WKP_UDP_RAND:
-!          udprand_receive(msg);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_OPENUDP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                (errorparameter_t)msg->l4_destination_port,
-!                                (errorparameter_t)6);
-!          openqueue_freePacketBuffer(msg);         
-!    }
-! }
-! 
-! bool openudp_debugPrint() {
-!    return FALSE;
-! }
-! 
-! //=========================== private =========================================
---- 1,158 ----
-! #include "openwsn.h"
-! #include "openudp.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! #include "forwarding.h"
-! #include "openqueue.h"
-! //UDP applications
-! #include "opencoap.h"
-! #include "udpecho.h"
-! #include "udpinject.h"
-! #include "udpprint.h"
-! #include "udprand.h"
-! #include "udpstorm.h"
-! #include "udplatency.h"
-! //#include "heli.h"
-! //#include "imu.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void openudp_init(void) {
-! }
-! 
-! owerror_t openudp_send(OpenQueueEntry_t* msg) {
-!    msg->owner       = COMPONENT_OPENUDP;
-!    msg->l4_protocol = IANA_UDP;
-!    msg->l4_payload  = msg->payload;
-!    msg->l4_length   = msg->length;
-!    packetfunctions_reserveHeaderSize(msg,sizeof(udp_ht));
-!    packetfunctions_htons(msg->l4_sourcePortORicmpv6Type,&(msg->payload[0]));
-!    packetfunctions_htons(msg->l4_destination_port,&(msg->payload[2]));
-!    packetfunctions_htons(msg->length,&(msg->payload[4]));
-!    packetfunctions_calculateChecksum(msg,(uint8_t*)&(((udp_ht*)msg->payload)->checksum));
-!    return forwarding_send(msg);
-! }
-! 
-! void openudp_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_OPENUDP;
-!    switch(msg->l4_sourcePortORicmpv6Type) {
-!       case WKP_UDP_COAP:
-!          opencoap_sendDone(msg,error);
-!          break;
-!       /*    
-!       case WKP_UDP_HELI:
-!          appudpheli_sendDone(msg,error);
-!          break;
-!       case WKP_UDP_IMU:
-!          appudpgina_sendDone(msg,error);
-!          break;
-!       */
-!       case WKP_UDP_ECHO:
-!          udpecho_sendDone(msg,error);
-!          break;
-!       case WKP_UDP_INJECT:
-!          udpinject_sendDone(msg,error);
-!          break;
-!       case WKP_UDP_DISCARD:
-!          udpprint_sendDone(msg,error);
-!          break;
-!       case WKP_UDP_RAND:
-!          udprand_sendDone(msg,error);
-!          break;
-!       case WKP_UDP_LATENCY:
-!          udplatency_sendDone(msg,error);
-!          break;
-!          
-!       default:
-!          openserial_printError(COMPONENT_OPENUDP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                (errorparameter_t)msg->l4_sourcePortORicmpv6Type,
-!                                (errorparameter_t)5);
-!          openqueue_freePacketBuffer(msg);         
-!    }
-! }
-! 
-! void openudp_receive(OpenQueueEntry_t* msg) {
-!    uint8_t temp_8b;
-!       
-!    msg->owner                      = COMPONENT_OPENUDP;
-!    if (msg->l4_protocol_compressed==TRUE) {
-!       // get the UDP header encoding byte
-!       temp_8b = *((uint8_t*)(msg->payload));
-!       packetfunctions_tossHeader(msg,sizeof(temp_8b));
-!       switch (temp_8b & NHC_UDP_PORTS_MASK) {
-!          case NHC_UDP_PORTS_INLINE:
-!             // source port:         16 bits in-line
-!             // dest port:           16 bits in-line
-!             msg->l4_sourcePortORicmpv6Type  = msg->payload[0]*256+msg->payload[1];
-!             msg->l4_destination_port        = msg->payload[2]*256+msg->payload[3];
-!             packetfunctions_tossHeader(msg,2+2);
-!             break;
-!          case NHC_UDP_PORTS_16S_8D:
-!             // source port:         16 bits in-line
-!             // dest port:   0xf0  +  8 bits in-line
-!             msg->l4_sourcePortORicmpv6Type  = msg->payload[0]*256+msg->payload[1];
-!             msg->l4_destination_port        = 0xf000 +            msg->payload[2];
-!             packetfunctions_tossHeader(msg,2+1);
-!             break;
-!          case NHC_UDP_PORTS_8S_8D:
-!             // source port: 0xf0  +  8 bits in-line
-!             // dest port:   0xf0  +  8 bits in-line
-!             msg->l4_sourcePortORicmpv6Type  = 0xf000 +            msg->payload[0];
-!             msg->l4_destination_port        = 0xf000 +            msg->payload[1];
-!             packetfunctions_tossHeader(msg,1+1);
-!             break;
-!          case NHC_UDP_PORTS_4S_4D:
-!             // source port: 0xf0b +  4 bits in-line
-!             // dest port:   0xf0b +  4 bits in-line
-!             msg->l4_sourcePortORicmpv6Type  = 0xf0b0 + ((msg->payload[0] >> 4) & 0x0f);
-!             msg->l4_destination_port        = 0xf0b0 + ((msg->payload[0] >> 0) & 0x0f);
-!             packetfunctions_tossHeader(msg,1);
-!             break;
-!       }
-!    } else {
-!       msg->l4_sourcePortORicmpv6Type  = msg->payload[0]*256+msg->payload[1];
-!       msg->l4_destination_port        = msg->payload[2]*256+msg->payload[3];
-!       packetfunctions_tossHeader(msg,sizeof(udp_ht));
-!    }
-!    
-!    switch(msg->l4_destination_port) {
-!       case WKP_UDP_COAP:
-!          opencoap_receive(msg);
-!          break;
-!       /* 
-!       case WKP_UDP_HELI:
-!          appudpheli_receive(msg);
-!          break;
-!       case WKP_UDP_IMU:
-!          imu_receive(msg);
-!          break;
-!       */
-!       case WKP_UDP_ECHO:
-!          udpecho_receive(msg);
-!          break;
-!       case WKP_UDP_INJECT:
-!          udpinject_receive(msg);
-!          break;
-!       case WKP_UDP_DISCARD:
-!          udpprint_receive(msg);
-!          break;
-!       case WKP_UDP_RAND:
-!          udprand_receive(msg);
-!          break;
-!       default:
-!          openserial_printError(COMPONENT_OPENUDP,ERR_UNSUPPORTED_PORT_NUMBER,
-!                                (errorparameter_t)msg->l4_destination_port,
-!                                (errorparameter_t)6);
-!          openqueue_freePacketBuffer(msg);         
-!    }
-! }
-! 
-! bool openudp_debugPrint(void) {
-!    return FALSE;
-! }
-! 
-! //=========================== private =========================================
-diff -crB openwsn/04-TRAN/openudp.h ../../../sys/net/openwsn/04-TRAN/openudp.h
-*** openwsn/04-TRAN/openudp.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/04-TRAN/openudp.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,59 ****
-! #ifndef __OPENUDP_H
-! #define __OPENUDP_H
-! 
-! /**
-! \addtogroup Transport
-! \{
-! \addtogroup UDP
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! enum UDP_enums {
-!    UDP_ID        = 3,
-!    UDP_CHECKSUM  = 2,
-!    UDP_PORTS     = 0,
-! };
-! 
-! enum UDP_ID_enums {
-!    UDP_ID_DEFAULT = 0x1E,
-! };
-! 
-! enum UDP_CHECKSUM_enums {
-!    UDP_CHECKSUM_INLINE  = 0,
-!    UDP_CHECKSUM_ELIDED  = 1,
-! };
-! 
-! enum UDP_PORTS_enums {
-!    UDP_PORTS_16b_SRC_16b_DEST_INLINE = 0,
-!    UDP_PORTS_16b_SRC_8b_DEST_INLINE  = 1,
-!    UDP_PORTS_8b_SRC_16b_DEST_INLINE  = 2,
-!    UDP_PORTS_4b_SRC_4b_DEST_INLINE   = 3,
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    uint16_t port_src;
-!    uint16_t port_dest;
-!    uint16_t length;
-!    uint16_t checksum;
-! } udp_ht;
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    openudp_init();
-! error_t openudp_send(OpenQueueEntry_t* msg);
-! void    openudp_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void    openudp_receive(OpenQueueEntry_t* msg);
-! bool    openudp_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
---- 1,59 ----
-! #ifndef __OPENUDP_H
-! #define __OPENUDP_H
-! 
-! /**
-! \addtogroup Transport
-! \{
-! \addtogroup OpenUdp
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! enum UDP_enums {
-!    UDP_ID        = 3,
-!    UDP_CHECKSUM  = 2,
-!    UDP_PORTS     = 0,
-! };
-! 
-! enum UDP_ID_enums {
-!    UDP_ID_DEFAULT = 0x1E,
-! };
-! 
-! enum UDP_CHECKSUM_enums {
-!    UDP_CHECKSUM_INLINE  = 0,
-!    UDP_CHECKSUM_ELIDED  = 1,
-! };
-! 
-! enum UDP_PORTS_enums {
-!    UDP_PORTS_16b_SRC_16b_DEST_INLINE = 0,
-!    UDP_PORTS_16b_SRC_8b_DEST_INLINE  = 1,
-!    UDP_PORTS_8b_SRC_16b_DEST_INLINE  = 2,
-!    UDP_PORTS_4b_SRC_4b_DEST_INLINE   = 3,
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    uint16_t port_src;
-!    uint16_t port_dest;
-!    uint16_t length;
-!    uint16_t checksum;
-! } udp_ht;
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    openudp_init(void);
-! owerror_t openudp_send(OpenQueueEntry_t* msg);
-! void    openudp_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void    openudp_receive(OpenQueueEntry_t* msg);
-! bool    openudp_debugPrint(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
-diff -crB openwsn/04-TRAN/rsvp.c ../../../sys/net/openwsn/04-TRAN/rsvp.c
-*** openwsn/04-TRAN/rsvp.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/04-TRAN/rsvp.c	Wed Jan 15 13:48:27 2014
-***************
-*** 17,27 ****
-     uint8_t rsvp_timer_id;
-  }rsvp_vars_t;
-  
-! void rsvp_timer_cb();
-  
-  rsvp_vars_t rsvp_vars;
-  
-! void rsvp_init(){
-     rsvp_vars.rsvp_period    = 0;
-     rsvp_vars.rsvp_timer_id  = 0;
-  }
---- 17,27 ----
-     uint8_t rsvp_timer_id;
-  }rsvp_vars_t;
-  
-! void rsvp_timer_cb(void);
-  
-  rsvp_vars_t rsvp_vars;
-  
-! void rsvp_init(void){
-     rsvp_vars.rsvp_period    = 0;
-     rsvp_vars.rsvp_timer_id  = 0;
-  }
-***************
-*** 35,42 ****
-  void rsvp_qos_request(uint8_t bandwith, uint16_t refresh_period, open_addr_t dest){
-     
-        OpenQueueEntry_t* pkt;
-!       error_t           outcome;
-        uint8_t           i,j;
-       
-        pkt = openqueue_getFreePacketBuffer(COMPONENT_RSVP);
-        if (pkt==NULL) {
---- 35,46 ----
-  void rsvp_qos_request(uint8_t bandwith, uint16_t refresh_period, open_addr_t dest){
-     
-        OpenQueueEntry_t* pkt;
-!       owerror_t           outcome;
-        uint8_t           i,j;
-+       
-+       (void)outcome;
-+       (void)i;
-+       (void)j;
-       
-        pkt = openqueue_getFreePacketBuffer(COMPONENT_RSVP);
-        if (pkt==NULL) {
-diff -crB openwsn/04-TRAN/rsvp.h ../../../sys/net/openwsn/04-TRAN/rsvp.h
-*** openwsn/04-TRAN/rsvp.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/04-TRAN/rsvp.h	Wed Jan 15 13:48:27 2014
-***************
-*** 157,163 ****
-  
-  
-  
-! void    rsvp_init();
-  void    rsvp_qos_request(uint8_t bandwith, uint16_t refresh_period,open_addr_t dest);
-  
-  #endif
---- 157,163 ----
-  
-  
-  
-! void    rsvp_init(void);
-  void    rsvp_qos_request(uint8_t bandwith, uint16_t refresh_period,open_addr_t dest);
-  
-  #endif
-diff -crB openwsn/07-App/Makefile ../../../sys/net/openwsn/07-App/Makefile
-*** openwsn/07-App/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,49 ----
-+ SUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/ 
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/07-App/ohlone
-+ INCLUDES += -I$(CURDIR)/07-App/tcpecho
-+ INCLUDES += -I$(CURDIR)/07-App/tcpinject
-+ INCLUDES += -I$(CURDIR)/07-App/tcpprint
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ DIRS += rinfo
-+ DIRS += rwellknown
-+ DIRS += ohlone
-+ DIRS += tcpecho
-+ DIRS += tcpinject
-+ DIRS += tcpprint
-+ DIRS += udpecho
-+ DIRS += udpinject
-+ DIRS += udplatency
-+ DIRS += udpprint
-+ DIRS += udprand
-+ DIRS += udpstorm
-+ 
-+ all: $(BINDIR)$(SUBMOD)
-+ 	@for i in $(DIRS) ; do "$(MAKE)" -C $$i || exit 1; done ;
-+ 
-+ $(BINDIR)$(SUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	mkdir -p $(BINDIR)
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)"|cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ clean::
-+ 	@for i in $(DIRS) ; do "$(MAKE)" -C $$i clean || exit 1; done ;
-diff -crB openwsn/07-App/heli/heli.c ../../../sys/net/openwsn/07-App/heli/heli.c
-*** openwsn/07-App/heli/heli.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/heli/heli.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,87 ****
-! #include "openwsn.h"
-! #include "heli.h"
-! //openwsn stack
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! 
-! #define MOTORPERIOD 100
-! #define MOTORMAX    MOTORPERIOD
-! #define MOTORMIN    0
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void heli_setmotor(uint8_t which, uint16_t value);
-! uint16_t heli_threshold(uint16_t value);
-! 
-! //=========================== public ==========================================
-! 
-! void heli_init() {
-!    P1DIR   |= 0x0C;                              // P1.2,3 output
-!    P1SEL   |= 0x0C;                              // P1.2,3 in PWM mode
-!    TACTL    = TBSSEL_1 + ID_3 + MC_1;            // ACLK, count up to TACCR0
-!    TACCR0   = MOTORPERIOD;                       // ~320 Hz frequency
-!    TACCTL1  = OUTMOD_7;
-!    TACCR1   = MOTORMIN;
-!    TACCTL2  = OUTMOD_7;
-!    TACCR2   = MOTORMIN;
-! }
-! 
-! //this is called when the corresponding button is pressed on the OpenVisualizer interface
-! void heli_trigger() {
-! }
-! 
-! uint16_t heli_threshold(uint16_t value) {
-!    /*if (value < MOTORMIN) { //causes warning because set to zero
-!       return MOTORMIN;
-!    }*/
-!    if (value > MOTORMAX) {
-!       return MOTORMAX;
-!    }
-!    return value;
-! }
-! 
-! //I just received a request
-! void heli_receive(OpenQueueEntry_t* msg) {
-!    msg->owner = COMPONENT_HELI;
-!    if (msg->length==4) {
-!       heli_setmotor(1,heli_threshold(packetfunctions_ntohs(&(msg->payload[0]))));
-!       heli_setmotor(2,heli_threshold(packetfunctions_ntohs(&(msg->payload[2]))));
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! //I just sent a IMU packet, check I need to resend one
-! void heli_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_HELI;
-!    if (msg->creator!=COMPONENT_HELI) {
-!       openserial_printError(COMPONENT_HELI,ERR_SENDDONE_FOR_MSG_I_DID_NOT_SEND,0,0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! bool heli_debugPrint() {
-!    return FALSE;
-! }
-! 
-! //=========================== private =========================================
-! 
-! void heli_setmotor(uint8_t which, uint16_t value) {
-!    /*if (value < MOTORMIN) {
-!       value = MOTORMIN;
-!    }*/
-!    if (value > MOTORMAX) {
-!       value = MOTORMAX;
-!    }
-!    switch (which) {
-!       case 1:
-!          TACCR1 = value;
-!          break;
-!       case 2:
-!          TACCR2 = value;
-!          break;
-!    }
-! } 
---- 1,87 ----
-! #include "openwsn.h"
-! #include "heli.h"
-! //openwsn stack
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! 
-! #define MOTORPERIOD 100
-! #define MOTORMAX    MOTORPERIOD
-! #define MOTORMIN    0
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void heli_setmotor(uint8_t which, uint16_t value);
-! uint16_t heli_threshold(uint16_t value);
-! 
-! //=========================== public ==========================================
-! 
-! void heli_init() {
-!    P1DIR   |= 0x0C;                              // P1.2,3 output
-!    P1SEL   |= 0x0C;                              // P1.2,3 in PWM mode
-!    TACTL    = TBSSEL_1 + ID_3 + MC_1;            // ACLK, count up to TACCR0
-!    TACCR0   = MOTORPERIOD;                       // ~320 Hz frequency
-!    TACCTL1  = OUTMOD_7;
-!    TACCR1   = MOTORMIN;
-!    TACCTL2  = OUTMOD_7;
-!    TACCR2   = MOTORMIN;
-! }
-! 
-! //this is called when the corresponding button is pressed on the OpenVisualizer interface
-! void heli_trigger() {
-! }
-! 
-! uint16_t heli_threshold(uint16_t value) {
-!    /*if (value < MOTORMIN) { //causes warning because set to zero
-!       return MOTORMIN;
-!    }*/
-!    if (value > MOTORMAX) {
-!       return MOTORMAX;
-!    }
-!    return value;
-! }
-! 
-! //I just received a request
-! void heli_receive(OpenQueueEntry_t* msg) {
-!    msg->owner = COMPONENT_HELI;
-!    if (msg->length==4) {
-!       heli_setmotor(1,heli_threshold(packetfunctions_ntohs(&(msg->payload[0]))));
-!       heli_setmotor(2,heli_threshold(packetfunctions_ntohs(&(msg->payload[2]))));
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! //I just sent a IMU packet, check I need to resend one
-! void heli_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_HELI;
-!    if (msg->creator!=COMPONENT_HELI) {
-!       openserial_printError(COMPONENT_HELI,ERR_SENDDONE_FOR_MSG_I_DID_NOT_SEND,0,0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! bool heli_debugPrint() {
-!    return FALSE;
-! }
-! 
-! //=========================== private =========================================
-! 
-! void heli_setmotor(uint8_t which, uint16_t value) {
-!    /*if (value < MOTORMIN) {
-!       value = MOTORMIN;
-!    }*/
-!    if (value > MOTORMAX) {
-!       value = MOTORMAX;
-!    }
-!    switch (which) {
-!       case 1:
-!          TACCR1 = value;
-!          break;
-!       case 2:
-!          TACCR2 = value;
-!          break;
-!    }
-! } 
-diff -crB openwsn/07-App/heli/heli.h ../../../sys/net/openwsn/07-App/heli/heli.h
-*** openwsn/07-App/heli/heli.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/heli/heli.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,30 ****
-! #ifndef __HELI_H
-! #define __HELI_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup Heli
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void heli_init();
-! void heli_trigger();
-! void heli_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void heli_receive(OpenQueueEntry_t* msg);
-! bool heli_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,32 ----
-! #ifndef __HELI_H
-! #define __HELI_H
-! 
-! /**
-! \addtogroup AppUdp
-! \{
-! \addtogroup Heli
-! \{
-! */
-! 
-! 
-! #include "openwsn.h"
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void heli_init();
-! void heli_trigger();
-! void heli_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void heli_receive(OpenQueueEntry_t* msg);
-! bool heli_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/heli/heli.py ../../../sys/net/openwsn/07-App/heli/heli.py
-*** openwsn/07-App/heli/heli.py	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/heli/heli.py	Wed Jan 15 13:48:27 2014
-***************
-*** 1,185 ****
-! import socket
-! import binascii
-! import time
-! import os
-! import Tkinter
-! import sys
-! 
-! MOTOR_MAX        = 800
-! MOTOR_MIN        =   0
-! MOTOR_STEP       =  10
-! 
-! myAddress        = ''    # means 'any suitable interface'
-! myPort           = 2158
-! hisAddress       = '2001:470:1f05:dff:1415:9209:22b:51'
-! hisPort          = 2192
-! 
-! motor1_command = 0
-! motor2_command = 0
-! 
-! print "Testing heli..."
-! 
-! def heli_up():
-!    global motor1_command, motor2_command
-!    if (motor1_command+MOTOR_STEP<=MOTOR_MAX and motor2_command+MOTOR_STEP<=MOTOR_MAX):
-!       motor1_command += MOTOR_STEP
-!       motor2_command += MOTOR_STEP
-!       sendCommand()
-! 
-! def heli_down():
-!    global motor1_command, motor2_command
-!    if (motor1_command-MOTOR_STEP>=MOTOR_MIN and motor2_command-MOTOR_STEP>=MOTOR_MIN):
-!       motor1_command -= MOTOR_STEP
-!       motor2_command -= MOTOR_STEP
-!       sendCommand()
-! 
-! def heli_left():
-!    global motor1_command
-!    if (motor1_command+MOTOR_STEP<=MOTOR_MAX):
-!       motor1_command += MOTOR_STEP
-!       sendCommand()
-! 
-! def heli_right():
-!    global motor1_command
-!    if (motor1_command-MOTOR_STEP>=MOTOR_MIN):
-!       motor1_command -= MOTOR_STEP
-!       sendCommand()
-! 
-! def heli_stop():
-!    global motor1_command, motor2_command
-!    motor1_command = 0
-!    motor2_command = 0
-!    sendCommand()
-! 
-! def heli_takeoff():
-!    global motor1_command, motor2_command
-!    motor1_command = 0x0260
-!    motor2_command = 0x0260
-!    sendCommand()
-! 
-! def heli_land():
-!    global motor1_command, motor2_command
-!    motor1_command = 0x0200
-!    motor2_command = 0x0200
-!    sendCommand()
-! 
-! def key_pressed(event):
-!    if (event.char=='i'):
-!       heli_up()
-!    if (event.char=='j'):
-!       heli_left()
-!    if (event.char=='l'):
-!       heli_right()
-!    if (event.char=='k'):
-!       heli_down()
-!    if (event.char==' '):
-!       heli_stop()
-!    if (event.char=='a'):
-!       heli_takeoff()
-!    if (event.char=='q'):
-!       heli_land()
-! 
-! def gui_clicked(event):
-!    global motor1_command, motor2_command
-!    if (event.x>100 and event.x<200 and event.y>0   and event.y<100):
-!       heli_up()
-!    if (event.x>0   and event.x<100 and event.y>100 and event.y<200):
-!       heli_left()
-!    if (event.x>200 and event.x<300 and event.y>100 and event.y<200):
-!       heli_right()
-!    if (event.x>100 and event.x<200 and event.y>200 and event.y<300):
-!       heli_down()
-!    if (event.x>100 and event.x<200 and event.y>100 and event.y<200):
-!       heli_stop()
-!    if (event.x>200 and event.x<300 and event.y>0   and event.y<100):
-!       heli_takeoff()
-!    if (event.x>200 and event.x<300 and event.y>200 and event.y<300):
-!       heli_land()
-!    if (event.y>310 and event.y<340):
-!       motor1_command = event.x/300.0*800.0
-!       sendCommand()
-!    if (event.y>340 and event.y<360):
-!       motor_diff = motor1_command-motor2_command
-!       motor1_command = (event.x/300.0*800.0)+(motor_diff/2.0)
-!       if motor1_command>800:
-!          motor1_command=800
-!       motor2_command = (event.x/300.0*800.0)-(motor_diff/2.0)
-!       if motor2_command>800:
-!          motor2_command=800
-!       sendCommand()
-!    if (event.y>360 and event.y<390):
-!       motor2_command = event.x/300.0*800.0
-!       sendCommand()
-! 
-! def sendCommand():
-!    #update the sliders
-!    buttonCanvas.delete("temp_slider")
-!    buttonCanvas.create_rectangle(0  ,310,(motor1_command/800.0)*300.0,340,fill="yellow",tag="temp_slider")
-!    buttonCanvas.create_rectangle(0  ,360,(motor2_command/800.0)*300.0,390,fill="yellow",tag="temp_slider")
-!    #send the command over UDP
-!    request = []
-!    request.append(chr(int(motor1_command/256)))
-!    request.append(chr(int(motor1_command%256)))
-!    request.append(chr(int(motor2_command/256)))
-!    request.append(chr(int(motor2_command%256)))
-!    request = ''.join(request)
-!    hisAddress = addressText.get(1.0,Tkinter.END)
-!    hisAddress = hisAddress[0:len(hisAddress)-1]
-!    try:
-!       socket_handler = socket.socket(socket.AF_INET6,socket.SOCK_DGRAM)
-!       socket_handler.settimeout(5)
-!       socket_handler.bind((myAddress,myPort))
-!       socket_handler.sendto(request,(hisAddress,hisPort))
-!    except:
-!       addressText.config(background="red")
-!    else:
-!       addressText.config(background="green")
-! 
-! #================================= GUI functions ====================
-! 
-! def releaseAndQuit():
-!    root.quit()
-!    sys.exit()
-! 
-! #================================= GUI definition ===================
-! 
-! root=Tkinter.Tk()
-! root.title("OpenHelicopter")
-! root.protocol("WM_DELETE_WINDOW",releaseAndQuit)
-! root.resizable(0,0)
-! 
-! root.bind("<Key>",key_pressed)
-! 
-! addressText = Tkinter.Text(root,width=50,height=1)
-! #displayElements[motePort]["cellTable"]["TextField"].delete("1.0",Tkinter.END)
-! addressText.insert(Tkinter.END,'2001:470:1f05:dff:1415:9209:22b:51')
-! addressText.grid(row=0,column=0)
-! 
-! buttonCanvas=Tkinter.Canvas(root,width=300,height=400)
-! buttonCanvas.bind("<Button-1>",gui_clicked)
-! buttonCanvas.bind("<Button-2>",gui_clicked)
-! buttonCanvas.bind("<Button-3>",gui_clicked)
-! buttonCanvas.create_rectangle(100,  0,200,100,fill="blue")
-! buttonCanvas.create_text(150,50,text="up <i>")
-! buttonCanvas.create_rectangle(  0,100,100,200,fill="blue")
-! buttonCanvas.create_text(50,150,text="left <j>")
-! buttonCanvas.create_rectangle(200,100,300,200,fill="blue")
-! buttonCanvas.create_text(250,150,text="right <l>")
-! buttonCanvas.create_rectangle(100,200,200,300,fill="blue")
-! buttonCanvas.create_text(150,250,text="down <k>")
-! buttonCanvas.create_oval(120,120,180,180,fill="red")
-! buttonCanvas.create_text(150,150,text="stop!\n<space>")
-! buttonCanvas.create_oval(220, 20,280, 80,fill="green")
-! buttonCanvas.create_text(250, 50,text="takeoff <a>")
-! buttonCanvas.create_oval(220,220,280,280,fill="green")
-! buttonCanvas.create_text(250,250,text="land <q>")
-! 
-! buttonCanvas.create_rectangle(0  ,310,300,340)
-! buttonCanvas.create_text(150,325,text="motor 1")
-! buttonCanvas.create_rectangle(0  ,360,300,390)
-! buttonCanvas.create_text(150,375,text="motor 2")
-! buttonCanvas.grid(row=1,column=0)
-! 
-! #================================= main =============================
-! 
-! root.mainloop()
---- 1,185 ----
-! import socket
-! import binascii
-! import time
-! import os
-! import Tkinter
-! import sys
-! 
-! MOTOR_MAX        = 800
-! MOTOR_MIN        =   0
-! MOTOR_STEP       =  10
-! 
-! myAddress        = ''    # means 'any suitable interface'
-! myPort           = 2158
-! hisAddress       = '2001:470:1f05:dff:1415:9209:22b:51'
-! hisPort          = 2192
-! 
-! motor1_command = 0
-! motor2_command = 0
-! 
-! print "Testing heli..."
-! 
-! def heli_up():
-!    global motor1_command, motor2_command
-!    if (motor1_command+MOTOR_STEP<=MOTOR_MAX and motor2_command+MOTOR_STEP<=MOTOR_MAX):
-!       motor1_command += MOTOR_STEP
-!       motor2_command += MOTOR_STEP
-!       sendCommand()
-! 
-! def heli_down():
-!    global motor1_command, motor2_command
-!    if (motor1_command-MOTOR_STEP>=MOTOR_MIN and motor2_command-MOTOR_STEP>=MOTOR_MIN):
-!       motor1_command -= MOTOR_STEP
-!       motor2_command -= MOTOR_STEP
-!       sendCommand()
-! 
-! def heli_left():
-!    global motor1_command
-!    if (motor1_command+MOTOR_STEP<=MOTOR_MAX):
-!       motor1_command += MOTOR_STEP
-!       sendCommand()
-! 
-! def heli_right():
-!    global motor1_command
-!    if (motor1_command-MOTOR_STEP>=MOTOR_MIN):
-!       motor1_command -= MOTOR_STEP
-!       sendCommand()
-! 
-! def heli_stop():
-!    global motor1_command, motor2_command
-!    motor1_command = 0
-!    motor2_command = 0
-!    sendCommand()
-! 
-! def heli_takeoff():
-!    global motor1_command, motor2_command
-!    motor1_command = 0x0260
-!    motor2_command = 0x0260
-!    sendCommand()
-! 
-! def heli_land():
-!    global motor1_command, motor2_command
-!    motor1_command = 0x0200
-!    motor2_command = 0x0200
-!    sendCommand()
-! 
-! def key_pressed(event):
-!    if (event.char=='i'):
-!       heli_up()
-!    if (event.char=='j'):
-!       heli_left()
-!    if (event.char=='l'):
-!       heli_right()
-!    if (event.char=='k'):
-!       heli_down()
-!    if (event.char==' '):
-!       heli_stop()
-!    if (event.char=='a'):
-!       heli_takeoff()
-!    if (event.char=='q'):
-!       heli_land()
-! 
-! def gui_clicked(event):
-!    global motor1_command, motor2_command
-!    if (event.x>100 and event.x<200 and event.y>0   and event.y<100):
-!       heli_up()
-!    if (event.x>0   and event.x<100 and event.y>100 and event.y<200):
-!       heli_left()
-!    if (event.x>200 and event.x<300 and event.y>100 and event.y<200):
-!       heli_right()
-!    if (event.x>100 and event.x<200 and event.y>200 and event.y<300):
-!       heli_down()
-!    if (event.x>100 and event.x<200 and event.y>100 and event.y<200):
-!       heli_stop()
-!    if (event.x>200 and event.x<300 and event.y>0   and event.y<100):
-!       heli_takeoff()
-!    if (event.x>200 and event.x<300 and event.y>200 and event.y<300):
-!       heli_land()
-!    if (event.y>310 and event.y<340):
-!       motor1_command = event.x/300.0*800.0
-!       sendCommand()
-!    if (event.y>340 and event.y<360):
-!       motor_diff = motor1_command-motor2_command
-!       motor1_command = (event.x/300.0*800.0)+(motor_diff/2.0)
-!       if motor1_command>800:
-!          motor1_command=800
-!       motor2_command = (event.x/300.0*800.0)-(motor_diff/2.0)
-!       if motor2_command>800:
-!          motor2_command=800
-!       sendCommand()
-!    if (event.y>360 and event.y<390):
-!       motor2_command = event.x/300.0*800.0
-!       sendCommand()
-! 
-! def sendCommand():
-!    #update the sliders
-!    buttonCanvas.delete("temp_slider")
-!    buttonCanvas.create_rectangle(0  ,310,(motor1_command/800.0)*300.0,340,fill="yellow",tag="temp_slider")
-!    buttonCanvas.create_rectangle(0  ,360,(motor2_command/800.0)*300.0,390,fill="yellow",tag="temp_slider")
-!    #send the command over UDP
-!    request = []
-!    request.append(chr(int(motor1_command/256)))
-!    request.append(chr(int(motor1_command%256)))
-!    request.append(chr(int(motor2_command/256)))
-!    request.append(chr(int(motor2_command%256)))
-!    request = ''.join(request)
-!    hisAddress = addressText.get(1.0,Tkinter.END)
-!    hisAddress = hisAddress[0:len(hisAddress)-1]
-!    try:
-!       socket_handler = socket.socket(socket.AF_INET6,socket.SOCK_DGRAM)
-!       socket_handler.settimeout(5)
-!       socket_handler.bind((myAddress,myPort))
-!       socket_handler.sendto(request,(hisAddress,hisPort))
-!    except:
-!       addressText.config(background="red")
-!    else:
-!       addressText.config(background="green")
-! 
-! #================================= GUI functions ====================
-! 
-! def releaseAndQuit():
-!    root.quit()
-!    sys.exit()
-! 
-! #================================= GUI definition ===================
-! 
-! root=Tkinter.Tk()
-! root.title("OpenHelicopter")
-! root.protocol("WM_DELETE_WINDOW",releaseAndQuit)
-! root.resizable(0,0)
-! 
-! root.bind("<Key>",key_pressed)
-! 
-! addressText = Tkinter.Text(root,width=50,height=1)
-! #displayElements[motePort]["cellTable"]["TextField"].delete("1.0",Tkinter.END)
-! addressText.insert(Tkinter.END,'2001:470:1f05:dff:1415:9209:22b:51')
-! addressText.grid(row=0,column=0)
-! 
-! buttonCanvas=Tkinter.Canvas(root,width=300,height=400)
-! buttonCanvas.bind("<Button-1>",gui_clicked)
-! buttonCanvas.bind("<Button-2>",gui_clicked)
-! buttonCanvas.bind("<Button-3>",gui_clicked)
-! buttonCanvas.create_rectangle(100,  0,200,100,fill="blue")
-! buttonCanvas.create_text(150,50,text="up <i>")
-! buttonCanvas.create_rectangle(  0,100,100,200,fill="blue")
-! buttonCanvas.create_text(50,150,text="left <j>")
-! buttonCanvas.create_rectangle(200,100,300,200,fill="blue")
-! buttonCanvas.create_text(250,150,text="right <l>")
-! buttonCanvas.create_rectangle(100,200,200,300,fill="blue")
-! buttonCanvas.create_text(150,250,text="down <k>")
-! buttonCanvas.create_oval(120,120,180,180,fill="red")
-! buttonCanvas.create_text(150,150,text="stop!\n<space>")
-! buttonCanvas.create_oval(220, 20,280, 80,fill="green")
-! buttonCanvas.create_text(250, 50,text="takeoff <a>")
-! buttonCanvas.create_oval(220,220,280,280,fill="green")
-! buttonCanvas.create_text(250,250,text="land <q>")
-! 
-! buttonCanvas.create_rectangle(0  ,310,300,340)
-! buttonCanvas.create_text(150,325,text="motor 1")
-! buttonCanvas.create_rectangle(0  ,360,300,390)
-! buttonCanvas.create_text(150,375,text="motor 2")
-! buttonCanvas.grid(row=1,column=0)
-! 
-! #================================= main =============================
-! 
-! root.mainloop()
-diff -crB openwsn/07-App/imu/imu.c ../../../sys/net/openwsn/07-App/imu/imu.c
-*** openwsn/07-App/imu/imu.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/imu/imu.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,123 ****
-! #include "openwsn.h"
-! #include "imu.h"
-! //drivers
-! #include "gyro.h"
-! #include "large_range_accel.h"
-! #include "magnetometer.h"
-! #include "sensitive_accel_temperature.h"
-! //openwsn stack
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    uint8_t              mesurements_left;
-!    OpenQueueEntry_t*    pktReceived;
-! } imu_vars_t;
-! 
-! imu_vars_t imu_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void imu_send();
-! void imu_reset();
-! 
-! //=========================== public ==========================================
-! 
-! void imu_init() {
-!    if (*(&eui64+3)==0x09) {                      // this is a GINA board (not a basestation)
-!       gyro_init();
-!       large_range_accel_init();
-!       magnetometer_init();
-!       sensitive_accel_temperature_init();
-!    }
-!    imu_vars.mesurements_left = 0;
-! }
-! 
-! //this is called when the UdpGina button is pressed on the OpenVisualizer interface
-! void imu_trigger() {
-! }
-! 
-! //I just received a request, send a packet with IMU data
-! void imu_receive(OpenQueueEntry_t* msg) {
-!    msg->owner = COMPONENT_IMU;
-!    if (imu_vars.pktReceived==NULL) {
-!       imu_vars.pktReceived      = msg;
-!       imu_vars.mesurements_left = imu_vars.pktReceived->payload[0];
-!       imu_send();
-!    } else {
-!       openqueue_freePacketBuffer(msg);
-!    }
-! }
-! 
-! //I just sent a IMU packet, check I need to resend one
-! void imu_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_IMU;
-!    if (msg->creator!=COMPONENT_IMU) {
-!       openserial_printError(COMPONENT_IMU,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-!    if (imu_vars.mesurements_left>0) {
-!       imu_send();
-!    } else {
-!       imu_reset();
-!    }
-! }
-! 
-! bool imu_debugPrint() {
-!    return FALSE;
-! }
-! 
-! //=========================== private =========================================
-! 
-! void imu_send() {
-!    OpenQueueEntry_t* packetToSend;
-!    packetToSend = openqueue_getFreePacketBuffer();
-!    if (packetToSend==NULL) {
-!       openserial_printError(COMPONENT_IMU,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       imu_reset();
-!       return;
-!    }
-!    packetToSend->creator                     = COMPONENT_IMU;
-!    packetToSend->owner                       = COMPONENT_IMU;
-!    packetToSend->l4_protocol                 = IANA_UDP;
-!    packetToSend->l4_sourcePortORicmpv6Type   = imu_vars.pktReceived->l4_destination_port;
-!    packetToSend->l4_destination_port         = imu_vars.pktReceived->l4_sourcePortORicmpv6Type;
-!    packetToSend->l3_destinationORsource.type = ADDR_128B;
-!    memcpy(&(packetToSend->l3_destinationORsource.addr_128b[0]),
-!          &(imu_vars.pktReceived->l3_destinationORsource.addr_128b[0]),
-!          16);
-!    //payload, gyro data
-!    packetfunctions_reserveHeaderSize(packetToSend,8);
-!    gyro_get_measurement(&(packetToSend->payload[0]));
-!    //payload, large_range_accel data
-!    packetfunctions_reserveHeaderSize(packetToSend,6);
-!    large_range_accel_get_measurement(&(packetToSend->payload[0]));
-!    //payload, magnetometer data
-!    packetfunctions_reserveHeaderSize(packetToSend,6);
-!    magnetometer_get_measurement(&(packetToSend->payload[0]));
-!    //payload, sensitive_accel_temperature data
-!    packetfunctions_reserveHeaderSize(packetToSend,10);
-!    sensitive_accel_temperature_get_measurement(&(packetToSend->payload[0]));
-!    //send packet
-!    if ((openudp_send(packetToSend))==E_FAIL) {
-!       openqueue_freePacketBuffer(packetToSend);
-!       imu_reset();
-!    }
-!    imu_vars.mesurements_left--;
-! }
-! 
-! void imu_reset() {
-!    imu_vars.mesurements_left=0;
-!    if (imu_vars.pktReceived!=NULL) {
-!       openqueue_freePacketBuffer(imu_vars.pktReceived);
-!       imu_vars.pktReceived = NULL;
-!    }
-! }
---- 1,123 ----
-! #include "openwsn.h"
-! #include "imu.h"
-! //drivers
-! #include "gyro.h"
-! #include "large_range_accel.h"
-! #include "magnetometer.h"
-! #include "sensitive_accel_temperature.h"
-! //openwsn stack
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    uint8_t              mesurements_left;
-!    OpenQueueEntry_t*    pktReceived;
-! } imu_vars_t;
-! 
-! imu_vars_t imu_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void imu_send();
-! void imu_reset();
-! 
-! //=========================== public ==========================================
-! 
-! void imu_init() {
-!    if (*(&eui64+3)==0x09) {                      // this is a GINA board (not a basestation)
-!       gyro_init();
-!       large_range_accel_init();
-!       magnetometer_init();
-!       sensitive_accel_temperature_init();
-!    }
-!    imu_vars.mesurements_left = 0;
-! }
-! 
-! //this is called when the UdpGina button is pressed on the OpenVisualizer interface
-! void imu_trigger() {
-! }
-! 
-! //I just received a request, send a packet with IMU data
-! void imu_receive(OpenQueueEntry_t* msg) {
-!    msg->owner = COMPONENT_IMU;
-!    if (imu_vars.pktReceived==NULL) {
-!       imu_vars.pktReceived      = msg;
-!       imu_vars.mesurements_left = imu_vars.pktReceived->payload[0];
-!       imu_send();
-!    } else {
-!       openqueue_freePacketBuffer(msg);
-!    }
-! }
-! 
-! //I just sent a IMU packet, check I need to resend one
-! void imu_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_IMU;
-!    if (msg->creator!=COMPONENT_IMU) {
-!       openserial_printError(COMPONENT_IMU,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-!    if (imu_vars.mesurements_left>0) {
-!       imu_send();
-!    } else {
-!       imu_reset();
-!    }
-! }
-! 
-! bool imu_debugPrint() {
-!    return FALSE;
-! }
-! 
-! //=========================== private =========================================
-! 
-! void imu_send() {
-!    OpenQueueEntry_t* packetToSend;
-!    packetToSend = openqueue_getFreePacketBuffer();
-!    if (packetToSend==NULL) {
-!       openserial_printError(COMPONENT_IMU,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       imu_reset();
-!       return;
-!    }
-!    packetToSend->creator                     = COMPONENT_IMU;
-!    packetToSend->owner                       = COMPONENT_IMU;
-!    packetToSend->l4_protocol                 = IANA_UDP;
-!    packetToSend->l4_sourcePortORicmpv6Type   = imu_vars.pktReceived->l4_destination_port;
-!    packetToSend->l4_destination_port         = imu_vars.pktReceived->l4_sourcePortORicmpv6Type;
-!    packetToSend->l3_destinationORsource.type = ADDR_128B;
-!    memcpy(&(packetToSend->l3_destinationORsource.addr_128b[0]),
-!          &(imu_vars.pktReceived->l3_destinationORsource.addr_128b[0]),
-!          16);
-!    //payload, gyro data
-!    packetfunctions_reserveHeaderSize(packetToSend,8);
-!    gyro_get_measurement(&(packetToSend->payload[0]));
-!    //payload, large_range_accel data
-!    packetfunctions_reserveHeaderSize(packetToSend,6);
-!    large_range_accel_get_measurement(&(packetToSend->payload[0]));
-!    //payload, magnetometer data
-!    packetfunctions_reserveHeaderSize(packetToSend,6);
-!    magnetometer_get_measurement(&(packetToSend->payload[0]));
-!    //payload, sensitive_accel_temperature data
-!    packetfunctions_reserveHeaderSize(packetToSend,10);
-!    sensitive_accel_temperature_get_measurement(&(packetToSend->payload[0]));
-!    //send packet
-!    if ((openudp_send(packetToSend))==E_FAIL) {
-!       openqueue_freePacketBuffer(packetToSend);
-!       imu_reset();
-!    }
-!    imu_vars.mesurements_left--;
-! }
-! 
-! void imu_reset() {
-!    imu_vars.mesurements_left=0;
-!    if (imu_vars.pktReceived!=NULL) {
-!       openqueue_freePacketBuffer(imu_vars.pktReceived);
-!       imu_vars.pktReceived = NULL;
-!    }
-! }
-diff -crB openwsn/07-App/imu/imu.h ../../../sys/net/openwsn/07-App/imu/imu.h
-*** openwsn/07-App/imu/imu.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/imu/imu.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,30 ****
-! #ifndef __IMU_H
-! #define __IMU_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup imu
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void imu_init();
-! void imu_trigger();
-! void imu_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void imu_receive(OpenQueueEntry_t* msg);
-! bool imu_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,30 ----
-! #ifndef __IMU_H
-! #define __IMU_H
-! 
-! /**
-! \addtogroup AppUdp
-! \{
-! \addtogroup imu
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void imu_init();
-! void imu_trigger();
-! void imu_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void imu_receive(OpenQueueEntry_t* msg);
-! bool imu_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/imu/imu.py ../../../sys/net/openwsn/07-App/imu/imu.py
-*** openwsn/07-App/imu/imu.py	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/imu/imu.py	Wed Jan 15 13:48:27 2014
-***************
-*** 1,62 ****
-! import socket
-! import binascii
-! import time
-! import os
-! 
-! num_measurements = str(chr(0x64))  # (100)d
-! myAddress        = ''    # means 'any suitable interface'
-! myPort           = 2158
-! hisAddress       = '2001:470:1f05:dff:1415:9209:22b:51'
-! hisPort          = 2190
-! 
-! print "Testing imu..."
-! 
-! socket_handler = socket.socket(socket.AF_INET6,socket.SOCK_DGRAM)
-! socket_handler.settimeout(5)
-! socket_handler.bind((myAddress,myPort))
-! socket_handler.sendto(num_measurements,(hisAddress,hisPort))
-! print "\nrequest "+myAddress+"%"+str(myPort)+" -> "+hisAddress+"%"+str(hisPort)
-! print num_measurements+" ("+str(len(num_measurements))+" bytes)"
-! 
-! time_first = time.time()
-! replycounter = 0
-! while (1):
-!    try:
-!       reply,dist_addr = socket_handler.recvfrom(1024)
-!    except socket.timeout:
-!       print "\nno further replies, it seems\n"
-!       break
-!    else:
-!       time_last = time.time()
-!       os.system("CLS")
-!       print "\nreply "+str(replycounter)+": "+str(dist_addr[0])+"%"+str(dist_addr[1])+" -> "+myAddress+"%"+str(myPort)+" ("+str(len(reply))+" bytes)\n"
-!       replycounter += 1
-! 
-!       print "sensitive_accel X   : "+str(ord(reply[0]))
-!       print "                Y   : "+binascii.hexlify(reply[ 2: 4])
-!       print "                Z1  : "+binascii.hexlify(reply[ 4: 6])
-!       print "                Z3  : "+binascii.hexlify(reply[ 6: 8])+"\n"
-! 
-!       print "temperature         : "+binascii.hexlify(reply[ 8:10])+"\n"
-! 
-!       print "magnetometer X      : "+binascii.hexlify(reply[10:12])
-!       print "             Y      : "+binascii.hexlify(reply[12:14])
-!       print "             Z      : "+binascii.hexlify(reply[14:16])+"\n"
-! 
-!       print "large_range_accel X : "+binascii.hexlify(reply[16:18])
-!       print "                  Y : "+binascii.hexlify(reply[18:20])
-!       print "                  Z : "+binascii.hexlify(reply[20:22])+"\n"
-! 
-!       print "gyro_temperature    : "+binascii.hexlify(reply[22:24])
-!       print "gyro X              : "+binascii.hexlify(reply[24:26])
-!       print "     Y              : "+binascii.hexlify(reply[26:28])
-!       print "     Z              : "+binascii.hexlify(reply[28:30])
-! 
-! socket_handler.close()
-! 
-! try:
-!    print str(replycounter)+" replies in "+str(time_last-time_first)+"s (one every "+str((time_last-time_first)/(replycounter-1))+"s)"
-! except:
-!    pass
-! 
-! raw_input("\nPress return to close this window...")
---- 1,62 ----
-! import socket
-! import binascii
-! import time
-! import os
-! 
-! num_measurements = str(chr(0x64))  # (100)d
-! myAddress        = ''    # means 'any suitable interface'
-! myPort           = 2158
-! hisAddress       = '2001:470:1f05:dff:1415:9209:22b:51'
-! hisPort          = 2190
-! 
-! print "Testing imu..."
-! 
-! socket_handler = socket.socket(socket.AF_INET6,socket.SOCK_DGRAM)
-! socket_handler.settimeout(5)
-! socket_handler.bind((myAddress,myPort))
-! socket_handler.sendto(num_measurements,(hisAddress,hisPort))
-! print "\nrequest "+myAddress+"%"+str(myPort)+" -> "+hisAddress+"%"+str(hisPort)
-! print num_measurements+" ("+str(len(num_measurements))+" bytes)"
-! 
-! time_first = time.time()
-! replycounter = 0
-! while (1):
-!    try:
-!       reply,dist_addr = socket_handler.recvfrom(1024)
-!    except socket.timeout:
-!       print "\nno further replies, it seems\n"
-!       break
-!    else:
-!       time_last = time.time()
-!       os.system("CLS")
-!       print "\nreply "+str(replycounter)+": "+str(dist_addr[0])+"%"+str(dist_addr[1])+" -> "+myAddress+"%"+str(myPort)+" ("+str(len(reply))+" bytes)\n"
-!       replycounter += 1
-! 
-!       print "sensitive_accel X   : "+str(ord(reply[0]))
-!       print "                Y   : "+binascii.hexlify(reply[ 2: 4])
-!       print "                Z1  : "+binascii.hexlify(reply[ 4: 6])
-!       print "                Z3  : "+binascii.hexlify(reply[ 6: 8])+"\n"
-! 
-!       print "temperature         : "+binascii.hexlify(reply[ 8:10])+"\n"
-! 
-!       print "magnetometer X      : "+binascii.hexlify(reply[10:12])
-!       print "             Y      : "+binascii.hexlify(reply[12:14])
-!       print "             Z      : "+binascii.hexlify(reply[14:16])+"\n"
-! 
-!       print "large_range_accel X : "+binascii.hexlify(reply[16:18])
-!       print "                  Y : "+binascii.hexlify(reply[18:20])
-!       print "                  Z : "+binascii.hexlify(reply[20:22])+"\n"
-! 
-!       print "gyro_temperature    : "+binascii.hexlify(reply[22:24])
-!       print "gyro X              : "+binascii.hexlify(reply[24:26])
-!       print "     Y              : "+binascii.hexlify(reply[26:28])
-!       print "     Z              : "+binascii.hexlify(reply[28:30])
-! 
-! socket_handler.close()
-! 
-! try:
-!    print str(replycounter)+" replies in "+str(time_last-time_first)+"s (one every "+str((time_last-time_first)/(replycounter-1))+"s)"
-! except:
-!    pass
-! 
-! raw_input("\nPress return to close this window...")
-diff -crB openwsn/07-App/layerdebug/layerdebug.c ../../../sys/net/openwsn/07-App/layerdebug/layerdebug.c
-*** openwsn/07-App/layerdebug/layerdebug.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/layerdebug/layerdebug.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,301 ****
-! #include "openwsn.h"
-! #include "layerdebug.h"
-! #include "opencoap.h"
-! #include "opentimers.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "scheduler.h"
-! 
-! 
-! // include layer files to debug
-! #include "neighbors.h"
-! #include "schedule.h"
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in ms)
-! #define DEBUGPERIODNBS    11000
-! #define DEBUGPERIODSCH    7000
-! 
-! const uint8_t schedule_layerdebug_path0[]  = "d_s"; // debug/scheduling
-! const uint8_t neighbors_layerdebug_path0[] = "d_n"; // debug/neighbours
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t schdesc;    ///< descriptor for shedule table
-!    coap_resource_desc_t nbsdesc;    ///< descriptor for neigbour table
-!    opentimer_id_t       schtimerId; ///< schedule timer
-!    opentimer_id_t       nbstimerId; ///< neigbour timer
-! } layerdebug_vars_t;
-! 
-! layerdebug_vars_t layerdebug_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t layerdebug_schedule_receive(OpenQueueEntry_t* msg,
-!                     coap_header_iht*  coap_header,
-!                     coap_option_iht*  coap_options);
-! 
-! 
-! error_t layerdebug_neighbors_receive(OpenQueueEntry_t* msg,
-!                     coap_header_iht*  coap_header,
-!                     coap_option_iht*  coap_options);
-! 
-! void    layerdebug_timer_schedule_cb();
-! void    layerdebug_timer_neighbors_cb();
-! 
-! void    layerdebug_task_schedule_cb();
-! void    layerdebug_task_neighbors_cb();
-! 
-! void    layerdebug_sendDone(OpenQueueEntry_t* msg,
-!                        error_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void layerdebug_init() {
-!    
-!    // prepare the resource descriptor for the scheduling path
-!    layerdebug_vars.schdesc.path0len             = sizeof(schedule_layerdebug_path0)-1;
-!    layerdebug_vars.schdesc.path0val             = (uint8_t*)(&schedule_layerdebug_path0);
-!    layerdebug_vars.schdesc.path1len             = 0;
-!    layerdebug_vars.schdesc.path1val             = NULL;
-!    layerdebug_vars.schdesc.componentID          = COMPONENT_LAYERDEBUG;
-!    layerdebug_vars.schdesc.callbackRx           = &layerdebug_schedule_receive;
-!    layerdebug_vars.schdesc.callbackSendDone     = &layerdebug_sendDone;
-!    opencoap_register(&layerdebug_vars.schdesc);
-!     
-!    layerdebug_vars.schtimerId     = opentimers_start(DEBUGPERIODSCH,
-!                                                      TIMER_PERIODIC,TIME_MS,
-!                                                      layerdebug_timer_schedule_cb);
-!    
-!    // prepare the resource descriptor for the neighbors path
-!    layerdebug_vars.nbsdesc.path0len             = sizeof(schedule_layerdebug_path0)-1;
-!    layerdebug_vars.nbsdesc.path0val             = (uint8_t*)(&schedule_layerdebug_path0);
-!    layerdebug_vars.nbsdesc.path1len             = 0;
-!    layerdebug_vars.nbsdesc.path1val             = NULL;
-!    layerdebug_vars.nbsdesc.componentID          = COMPONENT_LAYERDEBUG;
-!    layerdebug_vars.nbsdesc.callbackRx           = &layerdebug_neighbors_receive;
-!    layerdebug_vars.nbsdesc.callbackSendDone     = &layerdebug_sendDone;
-!    opencoap_register(&layerdebug_vars.nbsdesc);
-!    
-!    layerdebug_vars.nbstimerId     = opentimers_start(DEBUGPERIODNBS,
-!                                                      TIMER_PERIODIC,TIME_MS,
-!                                                      layerdebug_timer_neighbors_cb);
-! }
-! 
-! //=========================== private =========================================
-! 
-! //timer fired, but we don't want to execute task in ISR mode
-! //instead, push task to scheduler with COAP priority, and let scheduler take care of it
-! void layerdebug_timer_schedule_cb(){
-!    scheduler_push_task(layerdebug_task_schedule_cb,TASKPRIO_COAP);
-! }
-! 
-! void layerdebug_timer_neighbors_cb(){
-!    scheduler_push_task(layerdebug_task_neighbors_cb,TASKPRIO_COAP);
-! }
-! 
-! //schedule stats
-! void layerdebug_task_schedule_cb() {
-!    OpenQueueEntry_t* pkt;
-!    error_t           outcome;
-!    uint8_t           numOptions;
-!    uint8_t           size;
-! 
-!    // create a CoAP RD packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_LAYERDEBUG);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_LAYERDEBUG,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_LAYERDEBUG;
-!    pkt->owner      = COMPONENT_LAYERDEBUG;
-!    // CoAP payload
-!    size=sizeof(netDebugScheduleEntry_t)*MAXACTIVESLOTS;
-!    packetfunctions_reserveHeaderSize(pkt,size);//reserve for some schedule entries
-!    //get the schedule information from the mac layer 
-!    schedule_getNetDebugInfo((netDebugScheduleEntry_t*)pkt->payload);
-!    
-!    packetfunctions_reserveHeaderSize(pkt,1);//reserve for the size of schedule entries
-!    pkt->payload[0] = MAXACTIVESLOTS;
-!   
-!    
-!    numOptions = 0;
-!    // location-path option
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(schedule_layerdebug_path0)-1);
-!    memcpy(&pkt->payload[0],&schedule_layerdebug_path0,sizeof(schedule_layerdebug_path0)-1);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0]                  = (COAP_OPTION_LOCATIONPATH-COAP_OPTION_CONTENTTYPE) << 4 |
-!       sizeof(schedule_layerdebug_path0)-1;
-!    numOptions++;
-!    // content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                  = COAP_OPTION_CONTENTTYPE << 4 |
-!       1;
-!    pkt->payload[1]                  = COAP_MEDTYPE_APPOCTETSTREAM;
-!    numOptions++;
-!    // metadata
-!    pkt->l4_destination_port         = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_local,16);
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_NON,
-!                            COAP_CODE_REQ_PUT,
-!                            numOptions,
-!                            &layerdebug_vars.schdesc);
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    return;
-! }
-! 
-! //neighbours stats
-! void layerdebug_task_neighbors_cb() {
-!   
-!    OpenQueueEntry_t* pkt;
-!    error_t           outcome;
-!    uint8_t           numOptions;
-!    uint8_t           size;
-!    
-!    // create a CoAP RD packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_LAYERDEBUG);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_LAYERDEBUG,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_LAYERDEBUG;
-!    pkt->owner      = COMPONENT_LAYERDEBUG;
-!    // CoAP payload
-! 
-!    size=neighbors_getNumNeighbors(); //compute the number of neigbours sent   
-!    packetfunctions_reserveHeaderSize(pkt,size*sizeof(netDebugNeigborEntry_t));//reserve for the size of schedule entries
-!   
-!    debugNetPrint_neighbors((netDebugNeigborEntry_t*) pkt->payload);
-!    
-!    //now we know the size of the neihbours. Put it on the packet.
-!    packetfunctions_reserveHeaderSize(pkt,1);//reserve for the size of neighbours entries
-!    pkt->payload[0] = size;
-! 
-!    //coap options
-!    numOptions = 0;
-!    // location-path option
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(neighbors_layerdebug_path0)-1);
-!    memcpy(&pkt->payload[0],&neighbors_layerdebug_path0,sizeof(neighbors_layerdebug_path0)-1);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0]                  = (COAP_OPTION_LOCATIONPATH-COAP_OPTION_CONTENTTYPE) << 4 |
-!       sizeof(neighbors_layerdebug_path0)-1;
-!    numOptions++;
-!    // content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                  = COAP_OPTION_CONTENTTYPE << 4 |
-!       1;
-!    pkt->payload[1]                  = COAP_MEDTYPE_APPOCTETSTREAM;
-!    numOptions++;
-!    // metadata
-!    pkt->l4_destination_port         = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_local,16);
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_NON,
-!                            COAP_CODE_REQ_PUT,
-!                            numOptions,
-!                            &layerdebug_vars.nbsdesc);
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    return;
-! }
-! 
-! void layerdebug_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! 
-! error_t layerdebug_schedule_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht* coap_header,
-!                       coap_option_iht* coap_options) {
-!    error_t outcome;
-!    uint8_t size;
-!   
-!    
-!   if (coap_header->Code==COAP_CODE_REQ_GET) {
-!       // return current schedule value
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!            
-!       size=sizeof(netDebugScheduleEntry_t)*MAXACTIVESLOTS;
-!       packetfunctions_reserveHeaderSize(msg,size);//reserve for some schedule entries
-!       //get the schedule information from the mac layer 
-!       schedule_getNetDebugInfo((netDebugScheduleEntry_t*)msg->payload);
-! 
-!       packetfunctions_reserveHeaderSize(msg,1);//reserve for the size of schedule entries
-!       msg->payload[0] = MAXACTIVESLOTS;
-!            
-!       // set the CoAP header
-!       coap_header->OC                  = 0;
-!       coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    
-!    } else {
-!       // return an error message
-!       outcome = E_FAIL;
-!    }
-!    
-!    return outcome;
-! }
-! 
-! error_t layerdebug_neighbors_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht* coap_header,
-!                       coap_option_iht* coap_options) {
-!    error_t outcome;
-!    uint8_t size;
-!   
-!    
-!   if (coap_header->Code==COAP_CODE_REQ_GET) {
-!       // return current schedule value
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!            
-!       size=neighbors_getNumNeighbors(); //compute the number of neigbours sent   
-!       packetfunctions_reserveHeaderSize(msg,size*sizeof(netDebugNeigborEntry_t));//reserve for the size of schedule entries
-!   
-!       debugNetPrint_neighbors((netDebugNeigborEntry_t*)msg->payload);
-!     
-!      //now we know the size of the neihbours. Put it on the packet.
-!       packetfunctions_reserveHeaderSize(msg,1);//reserve for the size of neighbours entries
-!       msg->payload[0] = size;
-!            
-!       // set the CoAP header
-!       coap_header->OC                  = 0;
-!       coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    
-!    } else {
-!       // return an error message
-!       outcome = E_FAIL;
-!    }
-!    
-!    return outcome;
-  }
-\ No newline at end of file
---- 1,310 ----
-! #include "openwsn.h"
-! #include "layerdebug.h"
-! #include "opencoap.h"
-! #include "opentimers.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "scheduler.h"
-! #include "IEEE802154E.h"
-! #include "idmanager.h"
-! 
-! // include layer files to debug
-! #include "neighbors.h"
-! #include "schedule.h"
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in ms)
-! #define DEBUGPERIODNBS    11000
-! #define DEBUGPERIODSCH    7000
-! 
-! const uint8_t schedule_layerdebug_path0[]  = "d_s"; // debug/scheduling
-! const uint8_t neighbors_layerdebug_path0[] = "d_n"; // debug/neighbours
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t schdesc;    ///< descriptor for shedule table
-!    coap_resource_desc_t nbsdesc;    ///< descriptor for neigbour table
-!    opentimer_id_t       schtimerId; ///< schedule timer
-!    opentimer_id_t       nbstimerId; ///< neigbour timer
-! } layerdebug_vars_t;
-! 
-! layerdebug_vars_t layerdebug_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t layerdebug_schedule_receive(OpenQueueEntry_t* msg,
-!                     coap_header_iht*  coap_header,
-!                     coap_option_iht*  coap_options);
-! 
-! 
-! owerror_t layerdebug_neighbors_receive(OpenQueueEntry_t* msg,
-!                     coap_header_iht*  coap_header,
-!                     coap_option_iht*  coap_options);
-! 
-! void    layerdebug_timer_schedule_cb();
-! void    layerdebug_timer_neighbors_cb();
-! 
-! void    layerdebug_task_schedule_cb();
-! void    layerdebug_task_neighbors_cb();
-! 
-! void    layerdebug_sendDone(OpenQueueEntry_t* msg,
-!                        owerror_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void layerdebug_init() {
-!    
-!    // prepare the resource descriptor for the scheduling path
-!    layerdebug_vars.schdesc.path0len             = sizeof(schedule_layerdebug_path0)-1;
-!    layerdebug_vars.schdesc.path0val             = (uint8_t*)(&schedule_layerdebug_path0);
-!    layerdebug_vars.schdesc.path1len             = 0;
-!    layerdebug_vars.schdesc.path1val             = NULL;
-!    layerdebug_vars.schdesc.componentID          = COMPONENT_LAYERDEBUG;
-!    layerdebug_vars.schdesc.callbackRx           = &layerdebug_schedule_receive;
-!    layerdebug_vars.schdesc.callbackSendDone     = &layerdebug_sendDone;
-!    opencoap_register(&layerdebug_vars.schdesc);
-!     
-!    layerdebug_vars.schtimerId     = opentimers_start(DEBUGPERIODSCH,
-!                                                      TIMER_PERIODIC,TIME_MS,
-!                                                      layerdebug_timer_schedule_cb);
-!    
-!    // prepare the resource descriptor for the neighbors path
-!    layerdebug_vars.nbsdesc.path0len             = sizeof(schedule_layerdebug_path0)-1;
-!    layerdebug_vars.nbsdesc.path0val             = (uint8_t*)(&schedule_layerdebug_path0);
-!    layerdebug_vars.nbsdesc.path1len             = 0;
-!    layerdebug_vars.nbsdesc.path1val             = NULL;
-!    layerdebug_vars.nbsdesc.componentID          = COMPONENT_LAYERDEBUG;
-!    layerdebug_vars.nbsdesc.callbackRx           = &layerdebug_neighbors_receive;
-!    layerdebug_vars.nbsdesc.callbackSendDone     = &layerdebug_sendDone;
-!    opencoap_register(&layerdebug_vars.nbsdesc);
-!    
-!    layerdebug_vars.nbstimerId     = opentimers_start(DEBUGPERIODNBS,
-!                                                      TIMER_PERIODIC,TIME_MS,
-!                                                      layerdebug_timer_neighbors_cb);
-! }
-! 
-! //=========================== private =========================================
-! 
-! //timer fired, but we don't want to execute task in ISR mode
-! //instead, push task to scheduler with COAP priority, and let scheduler take care of it
-! void layerdebug_timer_schedule_cb(){
-!    scheduler_push_task(layerdebug_task_schedule_cb,TASKPRIO_COAP);
-! }
-! 
-! void layerdebug_timer_neighbors_cb(){
-!    scheduler_push_task(layerdebug_task_neighbors_cb,TASKPRIO_COAP);
-! }
-! 
-! //schedule stats
-! void layerdebug_task_schedule_cb() {
-!    OpenQueueEntry_t* pkt;
-!    owerror_t           outcome;
-!    uint8_t           numOptions;
-!    uint8_t           size;
-! 
-!    // don't run if not synch
-!    if (ieee154e_isSynch() == FALSE) return;
-!    
-!     // don't run on dagroot
-!    if (idmanager_getIsDAGroot()) {
-!        opentimers_stop( layerdebug_vars.schtimerId);
-!        opentimers_stop( layerdebug_vars.nbstimerId);
-!        return;
-!    }
-!    
-!    // create a CoAP RD packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_LAYERDEBUG);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_LAYERDEBUG,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_LAYERDEBUG;
-!    pkt->owner      = COMPONENT_LAYERDEBUG;
-!    // CoAP payload
-!    size=sizeof(netDebugScheduleEntry_t)*MAXACTIVESLOTS;
-!    packetfunctions_reserveHeaderSize(pkt,size);//reserve for some schedule entries
-!    //get the schedule information from the mac layer 
-!    schedule_getNetDebugInfo((netDebugScheduleEntry_t*)pkt->payload);
-!    
-!    packetfunctions_reserveHeaderSize(pkt,1);//reserve for the size of schedule entries
-!    pkt->payload[0] = MAXACTIVESLOTS;
-!   
-!    
-!    numOptions = 0;
-!    // location-path option
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(schedule_layerdebug_path0)-1);
-!    memcpy(&pkt->payload[0],&schedule_layerdebug_path0,sizeof(schedule_layerdebug_path0)-1);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0]                  = (COAP_OPTION_NUM_URIPATH) << 4 |
-!       sizeof(schedule_layerdebug_path0)-1;
-!    numOptions++;
-!    // content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                  = COAP_OPTION_NUM_CONTENTFORMAT << 4 |
-!       1;
-!    pkt->payload[1]                  = COAP_MEDTYPE_APPOCTETSTREAM;
-!    numOptions++;
-!    // metadata
-!    pkt->l4_destination_port         = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_local,16);
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_NON,
-!                            COAP_CODE_REQ_PUT,
-!                            numOptions,
-!                            &layerdebug_vars.schdesc);
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    return;
-! }
-! 
-! //neighbours stats
-! void layerdebug_task_neighbors_cb() {
-!   
-!    OpenQueueEntry_t* pkt;
-!    owerror_t           outcome;
-!    uint8_t           numOptions;
-!    uint8_t           size;
-!    
-!    // create a CoAP RD packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_LAYERDEBUG);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_LAYERDEBUG,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_LAYERDEBUG;
-!    pkt->owner      = COMPONENT_LAYERDEBUG;
-!    // CoAP payload
-! 
-!    size=neighbors_getNumNeighbors(); //compute the number of neigbours sent   
-!    packetfunctions_reserveHeaderSize(pkt,size*sizeof(netDebugNeigborEntry_t));//reserve for the size of schedule entries
-!   
-!    debugNetPrint_neighbors((netDebugNeigborEntry_t*) pkt->payload);
-!    
-!    //now we know the size of the neihbours. Put it on the packet.
-!    packetfunctions_reserveHeaderSize(pkt,1);//reserve for the size of neighbours entries
-!    pkt->payload[0] = size;
-! 
-!    //coap options
-!    numOptions = 0;
-!    // location-path option
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(neighbors_layerdebug_path0)-1);
-!    memcpy(&pkt->payload[0],&neighbors_layerdebug_path0,sizeof(neighbors_layerdebug_path0)-1);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0]                  = (COAP_OPTION_NUM_URIPATH) << 4 |
-!       sizeof(neighbors_layerdebug_path0)-1;
-!    numOptions++;
-!    // content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                  = COAP_OPTION_NUM_CONTENTFORMAT << 4 |
-!       1;
-!    pkt->payload[1]                  = COAP_MEDTYPE_APPOCTETSTREAM;
-!    numOptions++;
-!    // metadata
-!    pkt->l4_destination_port         = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_local,16);
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_NON,
-!                            COAP_CODE_REQ_PUT,
-!                            numOptions,
-!                            &layerdebug_vars.nbsdesc);
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    return;
-! }
-! 
-! void layerdebug_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! 
-! owerror_t layerdebug_schedule_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht* coap_header,
-!                       coap_option_iht* coap_options) {
-!    owerror_t outcome;
-!    uint8_t size;
-!   
-!    
-!   if (coap_header->Code==COAP_CODE_REQ_GET) {
-!       // return current schedule value
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!            
-!       size=sizeof(netDebugScheduleEntry_t)*MAXACTIVESLOTS;
-!       packetfunctions_reserveHeaderSize(msg,size);//reserve for some schedule entries
-!       //get the schedule information from the mac layer 
-!       schedule_getNetDebugInfo((netDebugScheduleEntry_t*)msg->payload);
-! 
-!       packetfunctions_reserveHeaderSize(msg,1);//reserve for the size of schedule entries
-!       msg->payload[0] = MAXACTIVESLOTS;
-!            
-!       // set the CoAP header
-!       coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    
-!    } else {
-!       // return an error message
-!       outcome = E_FAIL;
-!    }
-!    
-!    return outcome;
-! }
-! 
-! owerror_t layerdebug_neighbors_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht* coap_header,
-!                       coap_option_iht* coap_options) {
-!    owerror_t outcome;
-!    uint8_t size;
-!   
-!    
-!   if (coap_header->Code==COAP_CODE_REQ_GET) {
-!       // return current schedule value
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!            
-!       size=neighbors_getNumNeighbors(); //compute the number of neigbours sent   
-!       packetfunctions_reserveHeaderSize(msg,size*sizeof(netDebugNeigborEntry_t));//reserve for the size of schedule entries
-!   
-!       debugNetPrint_neighbors((netDebugNeigborEntry_t*)msg->payload);
-!     
-!      //now we know the size of the neihbours. Put it on the packet.
-!       packetfunctions_reserveHeaderSize(msg,1);//reserve for the size of neighbours entries
-!       msg->payload[0] = size;
-!            
-!       // set the CoAP header
-!       coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    
-!    } else {
-!       // return an error message
-!       outcome = E_FAIL;
-!    }
-!    
-!    return outcome;
-  }
-\ No newline at end of file
-diff -crB openwsn/07-App/layerdebug/layerdebug.h ../../../sys/net/openwsn/07-App/layerdebug/layerdebug.h
-*** openwsn/07-App/layerdebug/layerdebug.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/layerdebug/layerdebug.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,26 ****
-! #ifndef __LAYERDEBUG_H
-! #define __LAYERDEBUG_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup rT
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void layerdebug_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,26 ----
-! #ifndef __LAYERDEBUG_H
-! #define __LAYERDEBUG_H
-! 
-! /**
-! \addtogroup AppCoAP
-! \{
-! \addtogroup rT
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void layerdebug_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/ohlone/Makefile ../../../sys/net/openwsn/07-App/ohlone/Makefile
-*** openwsn/07-App/ohlone/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/ohlone/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBSUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBSUBMOD)
-+ 
-+ $(BINDIR)$(SUBSUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/07-App/ohlone/ohlone.c ../../../sys/net/openwsn/07-App/ohlone/ohlone.c
-*** openwsn/07-App/ohlone/ohlone.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/ohlone/ohlone.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,120 ****
-! #include "openwsn.h"
-! #include "ohlone.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "opentcp.h"
-! 
-! #include "ohlone_webpages.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    OpenQueueEntry_t*    pkt;
-!    bool                 sending;
-!    uint16_t             httpChunk;
-!    uint8_t              getRequest[TCP_DEFAULT_WINDOW_SIZE];
-! } ohlone_vars_t;
-! 
-! ohlone_vars_t ohlone_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void ohlone_sendpkt();
-! bool ohlone_check4chars(uint8_t c1[4], uint8_t c2[4]);
-! 
-! //=========================== public ==========================================
-! 
-! void ohlone_init() {
-!    ohlone_vars.httpChunk = 0;
-!    ohlone_vars.getRequest[0] = '/';
-!    ohlone_vars.getRequest[1] = ' ';
-!    ohlone_webpages_init();
-! }
-! 
-! bool ohlone_shouldIlisten() {
-!    return TRUE;
-! }
-! 
-! void ohlone_sendpkt() {
-!    uint8_t buffer[TCP_DEFAULT_WINDOW_SIZE];
-!    uint8_t buffer_len;
-!   
-!    buffer_len = ohlone_webpage(ohlone_vars.getRequest, ohlone_vars.httpChunk++, buffer);
-!    
-!    if (buffer_len == 0) {
-!       // No more to send
-!       // close TCP session, but keep listening
-!       ohlone_vars.getRequest[0] = '/';
-!       ohlone_vars.getRequest[1] = ' ';
-!       opentcp_close();
-!       return;
-!    }
-! 
-!    ohlone_vars.pkt = openqueue_getFreePacketBuffer(COMPONENT_OHLONE);
-!    if (ohlone_vars.pkt==NULL) {
-!       openserial_printError(COMPONENT_OHLONE,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       opentcp_close();
-!       return;
-!    }
-!    ohlone_vars.pkt->creator = COMPONENT_OHLONE;
-!    ohlone_vars.pkt->owner   = COMPONENT_OHLONE;
-!    
-!    packetfunctions_reserveHeaderSize(ohlone_vars.pkt, buffer_len);
-!    memcpy(ohlone_vars.pkt->payload, buffer, buffer_len);
-!    
-!    if ((opentcp_send(ohlone_vars.pkt))==E_FAIL) {
-!       openqueue_freePacketBuffer(ohlone_vars.pkt);
-!       opentcp_close();
-!    }
-! 
-! }
-! 
-! bool ohlone_check4chars(uint8_t c1[4], uint8_t c2[4]) {
-!   return ((c1[0] == c2[0]) && 
-!           (c1[1] == c2[1]) && 
-!           (c1[2] == c2[2]) && 
-!           (c1[3] == c2[3]));
-! }
-! 
-! void ohlone_receive(OpenQueueEntry_t* msg) {
-!    uint8_t payload_index;
-!    
-!    for (payload_index=0;payload_index<msg->length-3;payload_index++) {
-!       if (ohlone_check4chars(msg->payload+payload_index,(unsigned char *) "GET "))
-!          memcpy(ohlone_vars.getRequest, 
-!                 msg->payload + payload_index + 4, 
-!                 msg->length - payload_index - 4);
-! 
-!       if (ohlone_check4chars(msg->payload+payload_index, (unsigned char *)"\r\n\r\n")) {
-!          ohlone_vars.httpChunk = 0;
-!          ohlone_sendpkt();
-!          return;
-!       }
-!    }
-!    openserial_printData((uint8_t*)(msg->payload),msg->length);
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void ohlone_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_OHLONE;
-!    if (msg->creator!=COMPONENT_OHLONE) {
-!       openserial_printError(COMPONENT_OHLONE,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    
-!    ohlone_sendpkt();
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void ohlone_connectDone(error_t error) {
-! }
-! 
-! bool ohlone_debugPrint() {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,113 ----
-! #include "openwsn.h"
-! #include "ohlone.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "opentcp.h"
-! 
-! #include "ohlone_webpages.h"
-! 
-! //=========================== variables =======================================
-! 
-! ohlone_vars_t ohlone_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void ohlone_sendpkt(void);
-! bool ohlone_check4chars(uint8_t c1[4], uint8_t c2[4]);
-! 
-! //=========================== public ==========================================
-! 
-! void ohlone_init(void) {
-!    ohlone_vars.httpChunk = 0;
-!    ohlone_vars.getRequest[0] = '/';
-!    ohlone_vars.getRequest[1] = ' ';
-!    ohlone_webpages_init();
-! }
-! 
-! bool ohlone_shouldIlisten(void) {
-!    return TRUE;
-! }
-! 
-! void ohlone_sendpkt(void) {
-!    uint8_t buffer[TCP_DEFAULT_WINDOW_SIZE];
-!    uint8_t buffer_len;
-!   
-!    buffer_len = ohlone_webpage(ohlone_vars.getRequest, ohlone_vars.httpChunk++, buffer);
-!    
-!    if (buffer_len == 0) {
-!       // No more to send
-!       // close TCP session, but keep listening
-!       ohlone_vars.getRequest[0] = '/';
-!       ohlone_vars.getRequest[1] = ' ';
-!       opentcp_close();
-!       return;
-!    }
-! 
-!    ohlone_vars.pkt = openqueue_getFreePacketBuffer(COMPONENT_OHLONE);
-!    if (ohlone_vars.pkt==NULL) {
-!       openserial_printError(COMPONENT_OHLONE,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       opentcp_close();
-!       return;
-!    }
-!    ohlone_vars.pkt->creator = COMPONENT_OHLONE;
-!    ohlone_vars.pkt->owner   = COMPONENT_OHLONE;
-!    
-!    packetfunctions_reserveHeaderSize(ohlone_vars.pkt, buffer_len);
-!    memcpy(ohlone_vars.pkt->payload, buffer, buffer_len);
-!    
-!    if ((opentcp_send(ohlone_vars.pkt))==E_FAIL) {
-!       openqueue_freePacketBuffer(ohlone_vars.pkt);
-!       opentcp_close();
-!    }
-! 
-! }
-! 
-! bool ohlone_check4chars(uint8_t c1[4], uint8_t c2[4]) {
-!   return ((c1[0] == c2[0]) && 
-!           (c1[1] == c2[1]) && 
-!           (c1[2] == c2[2]) && 
-!           (c1[3] == c2[3]));
-! }
-! 
-! void ohlone_receive(OpenQueueEntry_t* msg) {
-!    uint8_t payload_index;
-!    
-!    for (payload_index=0;payload_index<msg->length-3;payload_index++) {
-!       if (ohlone_check4chars(msg->payload+payload_index,(unsigned char *) "GET "))
-!          memcpy(ohlone_vars.getRequest, 
-!                 msg->payload + payload_index + 4, 
-!                 msg->length - payload_index - 4);
-! 
-!       if (ohlone_check4chars(msg->payload+payload_index, (unsigned char *)"\r\n\r\n")) {
-!          ohlone_vars.httpChunk = 0;
-!          ohlone_sendpkt();
-!          return;
-!       }
-!    }
-!    openserial_printData((uint8_t*)(msg->payload),msg->length);
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void ohlone_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_OHLONE;
-!    if (msg->creator!=COMPONENT_OHLONE) {
-!       openserial_printError(COMPONENT_OHLONE,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    
-!    ohlone_sendpkt();
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void ohlone_connectDone(owerror_t error) {
-! }
-! 
-! bool ohlone_debugPrint(void) {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/07-App/ohlone/ohlone.h ../../../sys/net/openwsn/07-App/ohlone/ohlone.h
-*** openwsn/07-App/ohlone/ohlone.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/ohlone/ohlone.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,31 ****
-! #ifndef __OHLONE_H
-! #define __OHLONE_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup ohlone
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void ohlone_init();
-! bool ohlone_shouldIlisten();
-! void ohlone_receive(OpenQueueEntry_t* msg);
-! void ohlone_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void ohlone_connectDone(error_t error);
-! bool ohlone_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,40 ----
-! #ifndef __OHLONE_H
-! #define __OHLONE_H
-! 
-! /**
-! \addtogroup AppTcp
-! \{
-! \addtogroup ohlone
-! \{
-! */
-! 
-! #include "opentcp.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    OpenQueueEntry_t*    pkt;
-!    bool                 sending;
-!    uint16_t             httpChunk;
-!    uint8_t              getRequest[TCP_DEFAULT_WINDOW_SIZE];
-! } ohlone_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! void ohlone_init(void);
-! bool ohlone_shouldIlisten(void);
-! void ohlone_receive(OpenQueueEntry_t* msg);
-! void ohlone_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void ohlone_connectDone(owerror_t error);
-! bool ohlone_debugPrint(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/ohlone/ohlone_webpages.c ../../../sys/net/openwsn/07-App/ohlone/ohlone_webpages.c
-*** openwsn/07-App/ohlone/ohlone_webpages.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/ohlone/ohlone_webpages.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,94 ****
-! /**
-! \brief Webpgages for Ohlone
-! 
-! \author Ankur Mehta <mehtank@eecs.berkeley.edu>, September 2010
-! */
-! 
-! #include "openwsn.h"
-! #include "ohlone_webpages.h"
-! 
-! /*
-! #include "gyro.h"
-! #include "large_range_accel.h"
-! #include "magnetometer.h"
-! #include "sensitive_accel_temperature.h"
-! */
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! uint16_t ohlone_replace_digit(uint8_t *buffer, uint16_t value, uint16_t place);
-! void     ohlone_line_replace16(uint8_t *buffer, uint16_t value);
-! uint8_t  ohlone_insert3sensors(uint8_t *buffer, uint8_t *sensors); 
-! uint8_t  ohlone_insert4sensors(uint8_t *buffer, uint8_t *sensors); 
-! 
-! //=========================== public ==========================================
-! 
-! void ohlone_webpages_init() {
-!    /*
-!    if (*(&eui64+3)==0x09) {                      // this is a GINA board (not a basestation)
-!       gyro_init();
-!       large_range_accel_init();
-!       magnetometer_init();
-!       sensitive_accel_temperature_init();
-!    }
-!    */
-! }
-! 
-! uint8_t ohlone_webpage(uint8_t *getRequest, uint16_t chunk, uint8_t *packet) {
-!   // TODO : enforce max of TCP_DEFAULT_WINDOW_SIZE
-!   uint8_t len = 0;
-!   uint8_t current_line = 0;
-!   current_line--;
-!   
-!   HTTP_LINE("HTTP/1.1 200 OK\r\n\r\n");
-!   
-!   switch (*(getRequest + 1)) {
-!     
-!      default:
-!         memcpy(packet + len, ":)", 2);
-!        len += 2;
-!      }
-!   
-!   return len;
-! }
-! 
-! //=========================== private =========================================
-! 
-! uint16_t ohlone_replace_digit(uint8_t *buffer, uint16_t value, uint16_t place) {
-!   uint8_t digit = '0';
-!   while (value > place) {
-!     value -= place;
-!     digit++;
-!   }
-!   *buffer = digit;
-!   return value;
-! }
-! 
-! void ohlone_line_replace16(uint8_t *buffer, uint16_t value) {
-!   value = ohlone_replace_digit(buffer++, value, 10000);
-!   value = ohlone_replace_digit(buffer++, value, 1000);
-!   value = ohlone_replace_digit(buffer++, value, 100);
-!   value = ohlone_replace_digit(buffer++, value, 10);
-!   value = ohlone_replace_digit(buffer++, value, 1);
-! }
-! 
-! uint8_t ohlone_insert3sensors(uint8_t *buffer, uint8_t *sensordata) {
-!   uint8_t len = 0;
-!   ohlone_line_replace16(buffer + len, (sensordata[0] << 8) + sensordata[1]);
-!   len += 5; buffer[len++] = ',';    
-!   ohlone_line_replace16(buffer + len, (sensordata[2] << 8) + sensordata[3]);
-!   len += 5; buffer[len++] = ',';    
-!   ohlone_line_replace16(buffer + len, (sensordata[4] << 8) + sensordata[5]);
-!   len += 5;
-!   return len;
-! }
-! 
-! uint8_t ohlone_insert4sensors(uint8_t *buffer, uint8_t *sensordata) {
-!   uint8_t len = ohlone_insert3sensors(buffer, sensordata);
-!   buffer[len++] = ',';
-!   ohlone_line_replace16(buffer + len, (sensordata[6] << 8) + sensordata[7]);
-!   len += 5; 
-!   return len;
-  }
-\ No newline at end of file
---- 1,94 ----
-! /**
-! \brief Webpgages for Ohlone
-! 
-! \author Ankur Mehta <mehtank@eecs.berkeley.edu>, September 2010
-! */
-! 
-! #include "openwsn.h"
-! #include "ohlone_webpages.h"
-! 
-! /*
-! #include "gyro.h"
-! #include "large_range_accel.h"
-! #include "magnetometer.h"
-! #include "sensitive_accel_temperature.h"
-! */
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! uint16_t ohlone_replace_digit(uint8_t *buffer, uint16_t value, uint16_t place);
-! void     ohlone_line_replace16(uint8_t *buffer, uint16_t value);
-! uint8_t  ohlone_insert3sensors(uint8_t *buffer, uint8_t *sensors); 
-! uint8_t  ohlone_insert4sensors(uint8_t *buffer, uint8_t *sensors); 
-! 
-! //=========================== public ==========================================
-! 
-! void ohlone_webpages_init(void) {
-!    /*
-!    if (*(&eui64+3)==0x09) {                      // this is a GINA board (not a basestation)
-!       gyro_init();
-!       large_range_accel_init();
-!       magnetometer_init();
-!       sensitive_accel_temperature_init();
-!    }
-!    */
-! }
-! 
-! uint8_t ohlone_webpage(uint8_t *getRequest, uint16_t chunk, uint8_t *packet) {
-!   // TODO : enforce max of TCP_DEFAULT_WINDOW_SIZE
-!   uint8_t len = 0;
-!   uint8_t current_line = 0;
-!   current_line--;
-!   
-!   HTTP_LINE("HTTP/1.1 200 OK\r\n\r\n");
-!   
-!   switch (*(getRequest + 1)) {
-!     
-!      default:
-!         memcpy(packet + len, ":)", 2);
-!        len += 2;
-!      }
-!   
-!   return len;
-! }
-! 
-! //=========================== private =========================================
-! 
-! uint16_t ohlone_replace_digit(uint8_t *buffer, uint16_t value, uint16_t place) {
-!   uint8_t digit = '0';
-!   while (value > place) {
-!     value -= place;
-!     digit++;
-!   }
-!   *buffer = digit;
-!   return value;
-! }
-! 
-! void ohlone_line_replace16(uint8_t *buffer, uint16_t value) {
-!   value = ohlone_replace_digit(buffer++, value, 10000);
-!   value = ohlone_replace_digit(buffer++, value, 1000);
-!   value = ohlone_replace_digit(buffer++, value, 100);
-!   value = ohlone_replace_digit(buffer++, value, 10);
-!   value = ohlone_replace_digit(buffer++, value, 1);
-! }
-! 
-! uint8_t ohlone_insert3sensors(uint8_t *buffer, uint8_t *sensordata) {
-!   uint8_t len = 0;
-!   ohlone_line_replace16(buffer + len, (sensordata[0] << 8) + sensordata[1]);
-!   len += 5; buffer[len++] = ',';    
-!   ohlone_line_replace16(buffer + len, (sensordata[2] << 8) + sensordata[3]);
-!   len += 5; buffer[len++] = ',';    
-!   ohlone_line_replace16(buffer + len, (sensordata[4] << 8) + sensordata[5]);
-!   len += 5;
-!   return len;
-! }
-! 
-! uint8_t ohlone_insert4sensors(uint8_t *buffer, uint8_t *sensordata) {
-!   uint8_t len = ohlone_insert3sensors(buffer, sensordata);
-!   buffer[len++] = ',';
-!   ohlone_line_replace16(buffer + len, (sensordata[6] << 8) + sensordata[7]);
-!   len += 5; 
-!   return len;
-  }
-\ No newline at end of file
-diff -crB openwsn/07-App/ohlone/ohlone_webpages.h ../../../sys/net/openwsn/07-App/ohlone/ohlone_webpages.h
-*** openwsn/07-App/ohlone/ohlone_webpages.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/ohlone/ohlone_webpages.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,33 ****
-! /**
-! \brief Webpages for Ohlone
-! 
-! \author Ankur Mehta <mehtank@eecs.berkeley.edu>, September 2010
-! */
-! 
-! #ifndef __OHLONEWEBPAGES_H
-! #define __OHLONEWEBPAGES_H
-! 
-! //=========================== define ==========================================
-! 
-! #define HTTP_LINE(str) {                         \
-!   if (chunk == ++current_line) {                 \
-!     memcpy(packet, str, sizeof(str)-1);          \
-!     len = sizeof(str)-1;                         \
-!   }                                              \
-! }
-! 
-! #define HTTP_LINE_REPLACE16(offset, value) {     \
-!   if (chunk == current_line)                     \
-!     ohlone_line_replace16(packet+offset, value); \
-! }
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void     ohlone_webpages_init();
-! uint8_t  ohlone_webpage(uint8_t *getRequest, uint16_t chunk, uint8_t *packet);
-! 
-  #endif
-\ No newline at end of file
---- 1,33 ----
-! /**
-! \brief Webpages for Ohlone
-! 
-! \author Ankur Mehta <mehtank@eecs.berkeley.edu>, September 2010
-! */
-! 
-! #ifndef __OHLONEWEBPAGES_H
-! #define __OHLONEWEBPAGES_H
-! 
-! //=========================== define ==========================================
-! 
-! #define HTTP_LINE(str) {                         \
-!   if (chunk == ++current_line) {                 \
-!     memcpy(packet, str, sizeof(str)-1);          \
-!     len = sizeof(str)-1;                         \
-!   }                                              \
-! }
-! 
-! #define HTTP_LINE_REPLACE16(offset, value) {     \
-!   if (chunk == current_line)                     \
-!     ohlone_line_replace16(packet+offset, value); \
-! }
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void     ohlone_webpages_init(void);
-! uint8_t  ohlone_webpage(uint8_t *getRequest, uint16_t chunk, uint8_t *packet);
-! 
-  #endif
-\ No newline at end of file
-diff -crB openwsn/07-App/r6tus/r6tus.c ../../../sys/net/openwsn/07-App/r6tus/r6tus.c
-*** openwsn/07-App/r6tus/r6tus.c	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/r6tus/r6tus.c	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,211 ----
-+ /**
-+ \brief CoAP schedule manager application.
-+ 
-+ \author Xavi Vilajosana <xvilajosana@eecs.berkeley.edu>, Feb. 2013.
-+ 
-+ */
-+ 
-+ #include "openwsn.h"
-+ #include "r6tus.h"
-+ #include "opentimers.h"
-+ #include "openqueue.h"
-+ #include "packetfunctions.h"
-+ #include "openserial.h"
-+ #include "scheduler.h"
-+ #include "schedule.h"
-+ #include "idmanager.h"
-+ 
-+ //=========================== defines =========================================
-+ 
-+ #define TSCH_GET_OPTIONS 4 //how many params in a get request.
-+ 
-+ const uint8_t r6tus_path0[] = "6tus";
-+ 
-+ //=========================== variables =======================================
-+ 
-+ r6tus_vars_t r6tus_vars;
-+ 
-+ //=========================== prototypes ======================================
-+ 
-+ owerror_t r6tus_receive(OpenQueueEntry_t* msg,
-+                     coap_header_iht*  coap_header,
-+                     coap_option_iht*  coap_options);
-+ 
-+ void    r6tus_sendDone(OpenQueueEntry_t* msg,
-+                        owerror_t error);
-+ 
-+ //=========================== public ==========================================
-+ 
-+ void r6tus_init() {
-+    
-+    if(idmanager_getIsDAGroot()==TRUE) return; 
-+    // prepare the resource descriptor for the /r6tus path
-+    r6tus_vars.desc.path0len            = sizeof(r6tus_path0)-1;
-+    r6tus_vars.desc.path0val            = (uint8_t*)(&r6tus_path0);
-+    r6tus_vars.desc.path1len            = 0;
-+    r6tus_vars.desc.path1val            = NULL;
-+    r6tus_vars.desc.componentID         = COMPONENT_R6TUS;
-+    r6tus_vars.desc.callbackRx          = &r6tus_receive;
-+    r6tus_vars.desc.callbackSendDone    = &r6tus_sendDone;
-+    
-+    opencoap_register(&r6tus_vars.desc);
-+ }
-+ 
-+ //=========================== private =========================================
-+ 
-+ /**
-+ \brief Receives a command and a list of items to be used by the command.
-+ 
-+ the coap payload contains, command_type (CREATE,READ,UPDATE,DELETE) number of
-+ items to be processed.
-+ A tuple including address,slotoffset,choffset,whether is shared or not and link
-+ type.
-+ 
-+ According to the command it returns the list of responses or the required
-+ information.
-+ */
-+ owerror_t r6tus_receive(OpenQueueEntry_t* msg,
-+                       coap_header_iht*  coap_header,
-+                       coap_option_iht*  coap_options) {
-+                         
-+    uint8_t              i;
-+    owerror_t              outcome;
-+    r6tus_command_t*     link_command;
-+    r6tus_command_t      getResponse;
-+    slotinfo_element_t*  link_element;
-+    slotinfo_element_t   getLink_elementResponse;
-+    open_addr_t          temp_addr;
-+    owerror_t              responses[R6TUS_MAXRESPONSES];
-+    //assuming data comes in binary format.
-+     
-+    if (coap_header->Code==COAP_CODE_REQ_GET) {
-+       outcome = E_SUCCESS;    
-+       // parsing the options from header
-+       // assuming the following header: /6tus/LinkComandType/targetSlot/targetAddress
-+       // if (coap_header->OC != TSCH_GET_OPTIONS) {
-+          //option[0] is 6tus
-+          getResponse.type=(link_command_t)coap_options[1].pValue[0];
-+          if (getResponse.type != READ_LINK){
-+             //fail if this is not a READ REQUEST
-+             outcome                    = E_FAIL;
-+             coap_header->Code          = COAP_CODE_RESP_CONTENT;
-+             //return as this is not the right request.
-+             return outcome;
-+          }
-+          
-+          getResponse.numelem = 1; //get is always for 1 element.
-+          getLink_elementResponse.slotOffset=coap_options[2].pValue[0];
-+          
-+          switch (coap_options[3].length){
-+             case ADDR_16B:
-+                temp_addr.type=ADDR_16B;
-+                memcpy(&(temp_addr.addr_16b[0]), &(coap_options[3].pValue[0]),LENGTH_ADDR16b);
-+                schedule_getSlotInfo(getLink_elementResponse.slotOffset, &temp_addr, &getLink_elementResponse);
-+                outcome                 = E_SUCCESS;
-+                break;
-+             case ADDR_64B:
-+                temp_addr.type=ADDR_64B;
-+                memcpy(&(temp_addr.addr_64b[0]), &(coap_options[3].pValue[0]),LENGTH_ADDR64b);
-+                schedule_getSlotInfo(getLink_elementResponse.slotOffset, &temp_addr, &getLink_elementResponse);
-+                outcome                 = E_SUCCESS;
-+                break;
-+             case ADDR_128B:
-+                // not supported
-+                outcome                 = E_FAIL;
-+                break;
-+             default:
-+                outcome                 = E_FAIL;
-+                break;  
-+          }
-+       
-+       coap_header->Code                = COAP_CODE_RESP_CONTENT;
-+       // By using the same link_element we don't need to write the packet.
-+       // It returns the same payload  but with the correct values.
-+       if (outcome==E_SUCCESS) {
-+          // write the payload in the response.
-+          packetfunctions_reserveHeaderSize(msg,sizeof(slotinfo_element_t));
-+          memcpy(&msg->payload[0],&getLink_elementResponse,sizeof(slotinfo_element_t));
-+       }
-+    } else if (coap_header->Code==COAP_CODE_REQ_PUT) {     
-+       link_command = (r6tus_command_t*) msg->payload; 
-+       //parsing all cases at post as we want params. once tested we can decide. GET does not accept params
-+       //so params should be encoded in the url.
-+       switch (link_command->type){
-+          case READ_LINK:
-+             outcome=E_FAIL; 
-+             //cannot put READ operation
-+             break;
-+          case CREATE_LINK:
-+          case UPDATE_LINK: //update should be post according to REST architecture.
-+             outcome=E_FAIL; 
-+             if (link_command->numelem<R6TUS_MAXRESPONSES) {
-+                for (i=0;i<link_command->numelem;i++) {
-+                   link_element=(slotinfo_element_t*) &(msg->payload[sizeof(r6tus_command_t)+i*sizeof(slotinfo_element_t)]);
-+                   temp_addr.type=ADDR_64B;
-+                   memcpy(&(temp_addr.addr_64b[0]), &(link_element->address[0]),LENGTH_ADDR64b);
-+                   responses[i]=schedule_addActiveSlot(link_element->slotOffset,link_element->link_type,link_element->shared,link_element->channelOffset,&temp_addr,(link_command->type==UPDATE_LINK));
-+                }
-+                outcome=E_SUCCESS; 
-+             }
-+             break;
-+          case DELETE_LINK:
-+             outcome=E_FAIL; 
-+             //cannot delete with PUT/POST
-+             break;
-+          default:
-+             openserial_printError(COMPONENT_R6TUS,ERR_COMMAND_NOT_ALLOWED,
-+                (errorparameter_t)0,
-+                (errorparameter_t)0
-+             );
-+             //who clears the packet??
-+             //error. Print error and send error msg.
-+             outcome                    = E_FAIL;
-+             break; 
-+       }
-+       //response of the post
-+       if (outcome==E_SUCCESS){
-+          
-+          // reset packet payload
-+          msg->payload                  = &(msg->packet[127]);
-+          msg->length                   = 0;
-+          //copy the response.
-+          
-+          //packetfunctions_reserveHeaderSize(msg,link_command->numelem); 
-+          //memcpy(&(msg->payload[0]), &(responses[0]),link_command->numelem);
-+          
-+          // set the CoAP header
-+          coap_header->Code             = COAP_CODE_RESP_CONTENT;
-+       }
-+    } else if (coap_header->Code==COAP_CODE_REQ_DELETE) {  
-+       link_command = (r6tus_command_t*) msg->payload; 
-+       switch (link_command->type){
-+          case DELETE_LINK:
-+             outcome=E_FAIL; 
-+             if (link_command->numelem<R6TUS_MAXRESPONSES){    
-+                for(i=0;i<link_command->numelem;i++) {
-+                   link_element=(slotinfo_element_t*) &(msg->payload[sizeof(r6tus_command_t)+i*sizeof(slotinfo_element_t)]);
-+                   temp_addr.type=ADDR_64B;
-+                   memcpy(&(temp_addr.addr_64b[0]), &(link_element->address[0]),LENGTH_ADDR64b);
-+                   //remove the required links.
-+                   responses[i]=schedule_removeActiveSlot(link_element->slotOffset,&temp_addr);
-+                }
-+                outcome=E_SUCCESS; 
-+             }
-+             break;
-+          default:
-+             openserial_printError(COMPONENT_R6TUS,ERR_COMMAND_NOT_ALLOWED,
-+                             (errorparameter_t)0,
-+                             (errorparameter_t)0);
-+             //who clears the packet??
-+             //error. Print error and send error msg.        
-+             outcome                          = E_FAIL;
-+             break;
-+       }
-+    }
-+    return outcome;
-+ }
-+ 
-+ 
-+ void r6tus_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-+    openqueue_freePacketBuffer(msg);
-+ }
-diff -crB openwsn/07-App/r6tus/r6tus.h ../../../sys/net/openwsn/07-App/r6tus/r6tus.h
-*** openwsn/07-App/r6tus/r6tus.h	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/r6tus/r6tus.h	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,60 ----
-+ /**
-+ \brief CoAP schedule manager application.
-+ 
-+ \author Xavi Vilajosana <xvilajosana@eecs.berkeley.edu>, Feb. 2013.
-+ 
-+ */
-+ 
-+ 
-+ #ifndef __RSCHED_H
-+ #define __RSCHED_H
-+ 
-+ /**
-+ \addtogroup AppCoAP
-+ \{
-+ \addtogroup rsched
-+ \{
-+ */
-+ 
-+ #include "openwsn.h"
-+ #include "opencoap.h"
-+ #include "schedule.h"
-+ 
-+ //=========================== define ==========================================
-+ 
-+ #define R6TUS_MAXRESPONSES 20 //max number of elements to be processed by a command.
-+ 
-+ //=========================== typedef =========================================
-+ 
-+ //CRUD OPERATIONS FOR LINKS.
-+ typedef enum {
-+    CREATE_LINK                           = 0,          
-+    READ_LINK                             = 1,
-+    UPDATE_LINK                           = 2,
-+    DELETE_LINK                           = 3,
-+ }link_command_t;
-+ 
-+ //header
-+ PRAGMA(pack(1)); //elements for slot info 
-+ typedef struct {
-+   link_command_t type; 
-+   uint8_t numelem;//number of elements 
-+ }r6tus_command_t;
-+ PRAGMA(pack());
-+ 
-+ //=========================== variables =======================================
-+ 
-+ typedef struct {
-+    coap_resource_desc_t desc;
-+ } r6tus_vars_t;
-+ 
-+ //=========================== prototypes ======================================
-+ 
-+ void r6tus_init();
-+ 
-+ /**
-+ \}
-+ \}
-+ */
-+ 
-+ #endif
-diff -crB openwsn/07-App/rex/rex.c ../../../sys/net/openwsn/07-App/rex/rex.c
-*** openwsn/07-App/rex/rex.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rex/rex.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,149 ****
-! #include "openwsn.h"
-! #include "rex.h"
-! #include "opencoap.h"
-! #include "opentimers.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "scheduler.h"
-! //#include "ADC_Channel.h"
-! 
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in ms)
-! #define REXPERIOD    10000
-! #define PAYLOADLEN    62
-! 
-! const uint8_t rex_path0[] = "rex";
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-!    opentimer_id_t  timerId;
-! } rex_vars_t;
-! 
-! rex_vars_t rex_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t rex_receive(OpenQueueEntry_t* msg,
-!                     coap_header_iht*  coap_header,
-!                     coap_option_iht*  coap_options);
-! void    rex_timer_cb();
-! void    rex_task_cb();
-! void    rex_sendDone(OpenQueueEntry_t* msg,
-!                        error_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rex_init() {
-!    
-!    // prepare the resource descriptor for the /rex path
-!    rex_vars.desc.path0len             = sizeof(rex_path0)-1;
-!    rex_vars.desc.path0val             = (uint8_t*)(&rex_path0);
-!    rex_vars.desc.path1len             = 0;
-!    rex_vars.desc.path1val             = NULL;
-!    rex_vars.desc.componentID          = COMPONENT_REX;
-!    rex_vars.desc.callbackRx           = &rex_receive;
-!    rex_vars.desc.callbackSendDone     = &rex_sendDone;
-!    
-!    
-!    opencoap_register(&rex_vars.desc);
-!    rex_vars.timerId    = opentimers_start(REXPERIOD,
-!                                                 TIMER_PERIODIC,TIME_MS,
-!                                                 rex_timer_cb);
-! }
-! 
-! //=========================== private =========================================
-! 
-! error_t rex_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht* coap_header,
-!                       coap_option_iht* coap_options) {
-!    return E_FAIL;
-! }
-! 
-! //timer fired, but we don't want to execute task in ISR mode
-! //instead, push task to scheduler with COAP priority, and let scheduler take care of it
-! void rex_timer_cb(){
-!    scheduler_push_task(rex_task_cb,TASKPRIO_COAP);
-! }
-! 
-! void rex_task_cb() {
-!    OpenQueueEntry_t* pkt;
-!    error_t           outcome;
-!    uint8_t           numOptions;
-!    uint8_t           i;
-!    
-!    uint16_t       x_int       = 0;
-!    //uint16_t*      p_x_int     = &x_int;
-!    uint16_t       sum         = 0;
-!    uint16_t       avg         = 0;
-!    uint8_t        N_avg       = 10;
-!    
-!    for (int i = 0; i < N_avg; i++)
-!    {
-!      //ADC_getvoltage(p_x_int);
-!       
-!      sum += x_int;
-!    }
-!    avg = sum/N_avg;
-!    
-!    
-!    // create a CoAP RD packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_REX);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_REX,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_REX;
-!    pkt->owner      = COMPONENT_REX;
-!    // CoAP payload
-!    packetfunctions_reserveHeaderSize(pkt,PAYLOADLEN);
-!    for (i=0;i<PAYLOADLEN;i++) {
-!       pkt->payload[i] = i;
-!    }
-!    avg = openrandom_get16b();
-!    pkt->payload[0] = (avg>>8)&0xff;
-!    pkt->payload[1] = (avg>>0)&0xff;
-!    
-!    numOptions = 0;
-!    // location-path option
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(rex_path0)-1);
-!    memcpy(&pkt->payload[0],&rex_path0,sizeof(rex_path0)-1);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0]                  = (COAP_OPTION_LOCATIONPATH-COAP_OPTION_CONTENTTYPE) << 4 |
-!       sizeof(rex_path0)-1;
-!    numOptions++;
-!    // content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                  = COAP_OPTION_CONTENTTYPE << 4 |
-!       1;
-!    pkt->payload[1]                  = COAP_MEDTYPE_APPOCTETSTREAM;
-!    numOptions++;
-!    // metadata
-!    pkt->l4_destination_port         = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_motesEecs,16);
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_NON,
-!                            COAP_CODE_REQ_PUT,
-!                            numOptions,
-!                            &rex_vars.desc);
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    return;
-! }
-! 
-! void rex_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    openqueue_freePacketBuffer(msg);
-! }
---- 1,159 ----
-! #include "openwsn.h"
-! #include "rex.h"
-! #include "opencoap.h"
-! #include "opentimers.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "scheduler.h"
-! //#include "ADC_Channel.h"
-! #include "idmanager.h"
-! #include "IEEE802154E.h"
-! 
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in ms)
-! #define REXPERIOD    10000
-! #define PAYLOADLEN    62
-! 
-! const uint8_t rex_path0[] = "rex";
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-!    opentimer_id_t  timerId;
-! } rex_vars_t;
-! 
-! rex_vars_t rex_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t rex_receive(OpenQueueEntry_t* msg,
-!                     coap_header_iht*  coap_header,
-!                     coap_option_iht*  coap_options);
-! void    rex_timer_cb();
-! void    rex_task_cb();
-! void    rex_sendDone(OpenQueueEntry_t* msg,
-!                        owerror_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rex_init() {
-!    
-!    // prepare the resource descriptor for the /rex path
-!    rex_vars.desc.path0len             = sizeof(rex_path0)-1;
-!    rex_vars.desc.path0val             = (uint8_t*)(&rex_path0);
-!    rex_vars.desc.path1len             = 0;
-!    rex_vars.desc.path1val             = NULL;
-!    rex_vars.desc.componentID          = COMPONENT_REX;
-!    rex_vars.desc.callbackRx           = &rex_receive;
-!    rex_vars.desc.callbackSendDone     = &rex_sendDone;
-!    
-!    
-!    opencoap_register(&rex_vars.desc);
-!    rex_vars.timerId    = opentimers_start(REXPERIOD,
-!                                                 TIMER_PERIODIC,TIME_MS,
-!                                                 rex_timer_cb);
-! }
-! 
-! //=========================== private =========================================
-! 
-! owerror_t rex_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht* coap_header,
-!                       coap_option_iht* coap_options) {
-!    return E_FAIL;
-! }
-! 
-! //timer fired, but we don't want to execute task in ISR mode
-! //instead, push task to scheduler with COAP priority, and let scheduler take care of it
-! void rex_timer_cb(){
-!    scheduler_push_task(rex_task_cb,TASKPRIO_COAP);
-! }
-! 
-! void rex_task_cb() {
-!    OpenQueueEntry_t* pkt;
-!    owerror_t           outcome;
-!    uint8_t           numOptions;
-!    uint8_t           i;
-!    
-!    uint16_t       x_int       = 0;
-!    //uint16_t*      p_x_int     = &x_int;
-!    uint16_t       sum         = 0;
-!    uint16_t       avg         = 0;
-!    uint8_t        N_avg       = 10;
-!    
-!    // don't run if not synch
-!    if (ieee154e_isSynch() == FALSE) return;
-!    
-!        // don't run on dagroot
-!    if (idmanager_getIsDAGroot()) {
-!        opentimers_stop(rex_vars.timerId);
-!        return;
-!    }
-!    
-!    
-!    for (i = 0; i < N_avg; i++) {
-!       //ADC_getvoltage(p_x_int);
-!       sum += x_int;
-!    }
-!    avg = sum/N_avg;
-!    
-!    
-!    // create a CoAP RD packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_REX);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_REX,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_REX;
-!    pkt->owner      = COMPONENT_REX;
-!    // CoAP payload
-!    packetfunctions_reserveHeaderSize(pkt,PAYLOADLEN);
-!    for (i=0;i<PAYLOADLEN;i++) {
-!       pkt->payload[i] = i;
-!    }
-!    avg = openrandom_get16b();
-!    pkt->payload[0] = (avg>>8)&0xff;
-!    pkt->payload[1] = (avg>>0)&0xff;
-!    
-!    numOptions = 0;
-!    // location-path option
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(rex_path0)-1);
-!    memcpy(&pkt->payload[0],&rex_path0,sizeof(rex_path0)-1);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0]                  = (COAP_OPTION_NUM_URIPATH) << 4 |
-!       sizeof(rex_path0)-1;
-!    numOptions++;
-!    // content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                  = COAP_OPTION_NUM_CONTENTFORMAT << 4 |
-!       1;
-!    pkt->payload[1]                  = COAP_MEDTYPE_APPOCTETSTREAM;
-!    numOptions++;
-!    // metadata
-!    pkt->l4_destination_port         = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_motesEecs,16);
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_NON,
-!                            COAP_CODE_REQ_PUT,
-!                            numOptions,
-!                            &rex_vars.desc);
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    return;
-! }
-! 
-! void rex_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    openqueue_freePacketBuffer(msg);
-! }
-diff -crB openwsn/07-App/rex/rex.h ../../../sys/net/openwsn/07-App/rex/rex.h
-*** openwsn/07-App/rex/rex.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rex/rex.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,26 ****
-! #ifndef __REX_H
-! #define __REX_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup rT
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rex_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,26 ----
-! #ifndef __REX_H
-! #define __REX_H
-! 
-! /**
-! \addtogroup AppUdp
-! \{
-! \addtogroup rT
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rex_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/rheli/rheli.c ../../../sys/net/openwsn/07-App/rheli/rheli.c
-*** openwsn/07-App/rheli/rheli.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rheli/rheli.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,84 ****
-! #include "openwsn.h"
-! #include "rheli.h"
-! #include "opentimers.h"
-! #include "opencoap.h"
-! #include "packetfunctions.h"
-! #include "heli.h"
-! #include "openqueue.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-!    opentimer_id_t  timerId;
-! } rheli_vars_t;
-! 
-! rheli_vars_t rheli_vars;
-! 
-! const uint8_t rheli_path0[]        = "h";
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t rheli_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options);
-! void    rheli_timer();
-! void    rheli_sendDone(OpenQueueEntry_t* msg,
-!                        error_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rheli_init() {
-!    // initialize the heli drivers
-!    heli_init();
-!    
-!    // prepare the resource descriptor
-!    rheli_vars.desc.path0len            = sizeof(rheli_path0)-1;
-!    rheli_vars.desc.path0val            = (uint8_t*)(&rheli_path0);
-!    rheli_vars.desc.path1len            = 0;
-!    rheli_vars.desc.path1val            = NULL;
-!    rheli_vars.desc.componentID         = COMPONENT_RHELI;
-!    rheli_vars.desc.callbackRx          = &rheli_receive;
-!    rheli_vars.desc.callbackSendDone    = &rheli_sendDone;
-!    
-!    opencoap_register(&rheli_vars.desc);
-!    rheli_vars.timerId    = opentimers_start(1000,
-!                                             TIMER_PERIODIC,TIME_MS,
-!                                             rheli_timer);
-! }
-! 
-! //=========================== private =========================================
-! 
-! error_t rheli_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options) {      
-!    error_t outcome;
-!    
-!    if (coap_header->Code==COAP_CODE_REQ_POST) {
-!       
-!       // switch on the heli
-!       heli_on();
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // set the CoAP header
-!       coap_header->OC                  = 0;
-!       coap_header->Code                = COAP_CODE_RESP_CHANGED;
-!       
-!       outcome                          = E_SUCCESS;
-!    } else {
-!       outcome                          = E_FAIL;
-!    }
-!    return outcome;
-! }
-! 
-! void rheli_timer() {
-!    // switch off the heli
-!    heli_off();
-! }
-! 
-! void rheli_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
---- 1,83 ----
-! #include "openwsn.h"
-! #include "rheli.h"
-! #include "opentimers.h"
-! #include "opencoap.h"
-! #include "packetfunctions.h"
-! #include "heli.h"
-! #include "openqueue.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-!    opentimer_id_t  timerId;
-! } rheli_vars_t;
-! 
-! rheli_vars_t rheli_vars;
-! 
-! const uint8_t rheli_path0[]        = "h";
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t rheli_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options);
-! void    rheli_timer();
-! void    rheli_sendDone(OpenQueueEntry_t* msg,
-!                        owerror_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rheli_init() {
-!    // initialize the heli drivers
-!    heli_init();
-!    
-!    // prepare the resource descriptor
-!    rheli_vars.desc.path0len            = sizeof(rheli_path0)-1;
-!    rheli_vars.desc.path0val            = (uint8_t*)(&rheli_path0);
-!    rheli_vars.desc.path1len            = 0;
-!    rheli_vars.desc.path1val            = NULL;
-!    rheli_vars.desc.componentID         = COMPONENT_RHELI;
-!    rheli_vars.desc.callbackRx          = &rheli_receive;
-!    rheli_vars.desc.callbackSendDone    = &rheli_sendDone;
-!    
-!    opencoap_register(&rheli_vars.desc);
-!    rheli_vars.timerId    = opentimers_start(1000,
-!                                             TIMER_PERIODIC,TIME_MS,
-!                                             rheli_timer);
-! }
-! 
-! //=========================== private =========================================
-! 
-! owerror_t rheli_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options) {      
-!    owerror_t outcome;
-!    
-!    if (coap_header->Code==COAP_CODE_REQ_POST) {
-!       
-!       // switch on the heli
-!       heli_on();
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // set the CoAP header
-!       coap_header->Code                = COAP_CODE_RESP_CHANGED;
-!       
-!       outcome                          = E_SUCCESS;
-!    } else {
-!       outcome                          = E_FAIL;
-!    }
-!    return outcome;
-! }
-! 
-! void rheli_timer() {
-!    // switch off the heli
-!    heli_off();
-! }
-! 
-! void rheli_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
-diff -crB openwsn/07-App/rheli/rheli.h ../../../sys/net/openwsn/07-App/rheli/rheli.h
-*** openwsn/07-App/rheli/rheli.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rheli/rheli.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,26 ****
-! #ifndef __RHELI_H
-! #define __RHELI_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup rHeli
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rheli_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,26 ----
-! #ifndef __RHELI_H
-! #define __RHELI_H
-! 
-! /**
-! \addtogroup AppCoAP
-! \{
-! \addtogroup rHeli
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rheli_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/rinfo/Makefile ../../../sys/net/openwsn/07-App/rinfo/Makefile
-*** openwsn/07-App/rinfo/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/rinfo/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBSUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBSUBMOD)
-+ 
-+ $(BINDIR)$(SUBSUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/07-App/rinfo/rinfo.c ../../../sys/net/openwsn/07-App/rinfo/rinfo.c
-*** openwsn/07-App/rinfo/rinfo.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rinfo/rinfo.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,99 ****
-! #include "openwsn.h"
-! #include "rinfo.h"
-! #include "opencoap.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "board.h"
-! 
-! //=========================== defines =========================================
-! 
-! const uint8_t rinfo_path0[] = "i";
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-! } rinfo_vars_t;
-! 
-! rinfo_vars_t rinfo_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t rinfo_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options);
-! void    rinfo_sendDone(OpenQueueEntry_t* msg,
-!                        error_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rinfo_init() {
-!    // prepare the resource descriptor for the /temp path
-!    rinfo_vars.desc.path0len             = sizeof(rinfo_path0)-1;
-!    rinfo_vars.desc.path0val             = (uint8_t*)(&rinfo_path0);
-!    rinfo_vars.desc.path1len             = 0;
-!    rinfo_vars.desc.path1val             = NULL;
-!    rinfo_vars.desc.componentID          = COMPONENT_RINFO;
-!    rinfo_vars.desc.callbackRx           = &rinfo_receive;
-!    rinfo_vars.desc.callbackSendDone     = &rinfo_sendDone;
-!    
-!    opencoap_register(&rinfo_vars.desc);
-! }
-! 
-! //=========================== private =========================================
-! 
-! error_t rinfo_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht* coap_header,
-!                       coap_option_iht* coap_options) {
-!    error_t outcome;
-!    
-!    if (coap_header->Code==COAP_CODE_REQ_GET) {
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // CoAP payload
-!       //==radio name
-!       packetfunctions_reserveHeaderSize(msg,sizeof(infoRadioName)-1);
-!       memcpy(&msg->payload[0],&infoRadioName,sizeof(infoRadioName)-1);
-!       //==uC name
-!       packetfunctions_reserveHeaderSize(msg,1);
-!       msg->payload[0] = '\n';
-!       packetfunctions_reserveHeaderSize(msg,sizeof(infouCName)-1);
-!       memcpy(&msg->payload[0],&infouCName,sizeof(infouCName)-1);
-!       //==board name
-!       packetfunctions_reserveHeaderSize(msg,1);
-!       msg->payload[0] = '\n';
-!       packetfunctions_reserveHeaderSize(msg,sizeof(infoBoardname)-1);
-!       memcpy(&msg->payload[0],&infoBoardname,sizeof(infoBoardname)-1);
-!       //==stackname
-!       packetfunctions_reserveHeaderSize(msg,1);
-!       msg->payload[0] = '\n';
-!       packetfunctions_reserveHeaderSize(msg,sizeof(infoStackName)-1+5);
-!       memcpy(&msg->payload[0],&infoStackName,sizeof(infoStackName)-1);
-!       msg->payload[sizeof(infoStackName)-1+5-5] = '0'+OPENWSN_VERSION_MAJOR;
-!       msg->payload[sizeof(infoStackName)-1+5-4] = '.';
-!       msg->payload[sizeof(infoStackName)-1+5-3] = '0'+OPENWSN_VERSION_MINOR;
-!       msg->payload[sizeof(infoStackName)-1+5-2] = '.';
-!       msg->payload[sizeof(infoStackName)-1+5-1] = '0'+OPENWSN_VERSION_PATCH;
-!          
-!       // set the CoAP header
-!       coap_header->OC                  = 0;
-!       coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    
-!    } else {
-!       // return an error message
-!       outcome = E_FAIL;
-!    }
-!    
-!    return outcome;
-! }
-! 
-! void rinfo_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
---- 1,102 ----
-! #include "openwsn.h"
-! #include "rinfo.h"
-! #include "opencoap.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "board.h"
-! #include "idmanager.h"
-! 
-! //=========================== defines =========================================
-! 
-! const uint8_t rinfo_path0[] = "i";
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-! } rinfo_vars_t;
-! 
-! rinfo_vars_t rinfo_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t rinfo_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options);
-! void    rinfo_sendDone(OpenQueueEntry_t* msg,
-!                        owerror_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rinfo_init(void) {
-!   
-!   
-!    if(idmanager_getIsDAGroot()==TRUE) return; 
-!    // prepare the resource descriptor for the /temp path
-!    rinfo_vars.desc.path0len             = sizeof(rinfo_path0)-1;
-!    rinfo_vars.desc.path0val             = (uint8_t*)(&rinfo_path0);
-!    rinfo_vars.desc.path1len             = 0;
-!    rinfo_vars.desc.path1val             = NULL;
-!    rinfo_vars.desc.componentID          = COMPONENT_RINFO;
-!    rinfo_vars.desc.callbackRx           = &rinfo_receive;
-!    rinfo_vars.desc.callbackSendDone     = &rinfo_sendDone;
-!    
-!    opencoap_register(&rinfo_vars.desc);
-! }
-! 
-! //=========================== private =========================================
-! 
-! owerror_t rinfo_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht* coap_header,
-!                       coap_option_iht* coap_options) {
-!    owerror_t outcome;
-!    
-!    if (coap_header->Code==COAP_CODE_REQ_GET) {
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // CoAP payload
-!       //==radio name
-!       packetfunctions_reserveHeaderSize(msg,sizeof(infoRadioName)-1);
-!       memcpy(&msg->payload[0],&infoRadioName,sizeof(infoRadioName)-1);
-!       //==uC name
-!       packetfunctions_reserveHeaderSize(msg,1);
-!       msg->payload[0] = '\n';
-!       packetfunctions_reserveHeaderSize(msg,sizeof(infouCName)-1);
-!       memcpy(&msg->payload[0],&infouCName,sizeof(infouCName)-1);
-!       //==board name
-!       packetfunctions_reserveHeaderSize(msg,1);
-!       msg->payload[0] = '\n';
-!       packetfunctions_reserveHeaderSize(msg,sizeof(infoBoardname)-1);
-!       memcpy(&msg->payload[0],&infoBoardname,sizeof(infoBoardname)-1);
-!       //==stackname
-!       packetfunctions_reserveHeaderSize(msg,1);
-!       msg->payload[0] = '\n';
-!       packetfunctions_reserveHeaderSize(msg,sizeof(infoStackName)-1+5);
-!       memcpy(&msg->payload[0],&infoStackName,sizeof(infoStackName)-1);
-!       msg->payload[sizeof(infoStackName)-1+5-5] = '0'+OPENWSN_VERSION_MAJOR;
-!       msg->payload[sizeof(infoStackName)-1+5-4] = '.';
-!       msg->payload[sizeof(infoStackName)-1+5-3] = '0'+OPENWSN_VERSION_MINOR;
-!       msg->payload[sizeof(infoStackName)-1+5-2] = '.';
-!       msg->payload[sizeof(infoStackName)-1+5-1] = '0'+OPENWSN_VERSION_PATCH;
-!          
-!       // set the CoAP header
-!        coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    
-!    } else {
-!       // return an error message
-!       outcome = E_FAIL;
-!    }
-!    
-!    return outcome;
-! }
-! 
-! void rinfo_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
-diff -crB openwsn/07-App/rinfo/rinfo.h ../../../sys/net/openwsn/07-App/rinfo/rinfo.h
-*** openwsn/07-App/rinfo/rinfo.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rinfo/rinfo.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,26 ****
-! #ifndef __RINFO_H
-! #define __RINFO_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup rXL1
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rinfo_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,26 ----
-! #ifndef __RINFO_H
-! #define __RINFO_H
-! 
-! /**
-! \addtogroup AppCoAP
-! \{
-! \addtogroup rXL1
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rinfo_init(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/rleds/rleds.c ../../../sys/net/openwsn/07-App/rleds/rleds.c
-*** openwsn/07-App/rleds/rleds.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rleds/rleds.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,94 ****
-! #include "openwsn.h"
-! #include "rleds.h"
-! #include "opencoap.h"
-! #include "packetfunctions.h"
-! #include "leds.h"
-! #include "openqueue.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-! } rleds_vars_t;
-! 
-! rleds_vars_t rleds_vars;
-! 
-! const uint8_t rleds_path0[]        = "l";
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t rleds_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options);
-! void    rleds_sendDone(OpenQueueEntry_t* msg,
-!                        error_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rleds_init() {
-!    // prepare the resource descriptor for the /.well-known/core path
-!    rleds_vars.desc.path0len            = sizeof(rleds_path0)-1;
-!    rleds_vars.desc.path0val            = (uint8_t*)(&rleds_path0);
-!    rleds_vars.desc.path1len            = 0;
-!    rleds_vars.desc.path1val            = NULL;
-!    rleds_vars.desc.componentID         = COMPONENT_RLEDS;
-!    rleds_vars.desc.callbackRx          = &rleds_receive;
-!    rleds_vars.desc.callbackSendDone    = &rleds_sendDone;
-!    
-!    opencoap_register(&rleds_vars.desc);
-! }
-! 
-! //=========================== private =========================================
-! 
-! error_t rleds_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options) {      
-!    error_t outcome;
-!    
-!    if        (coap_header->Code==COAP_CODE_REQ_GET) {
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // add CoAP payload
-!       packetfunctions_reserveHeaderSize(msg,1);
-!       if (leds_error_isOn()==1) {
-!          msg->payload[0]               = '1';
-!       } else {
-!          msg->payload[0]               = '0';
-!       }
-!          
-!       // set the CoAP header
-!       coap_header->OC                  = 0;
-!       coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    } else if (coap_header->Code==COAP_CODE_REQ_PUT) {
-!       
-!       // change the LED's state
-!       if (msg->payload[0]=='1') {
-!          leds_debug_on();
-!       } else if (msg->payload[0]=='2') {
-!          leds_debug_toggle();
-!       } else {
-!          leds_debug_off();
-!       }
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // set the CoAP header
-!       coap_header->OC                  = 0;
-!       coap_header->Code                = COAP_CODE_RESP_CHANGED;
-!       
-!       outcome                          = E_SUCCESS;
-!    } else {
-!       outcome                          = E_FAIL;
-!    }
-!    return outcome;
-! }
-! 
-! void rleds_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
---- 1,92 ----
-! #include "openwsn.h"
-! #include "rleds.h"
-! #include "opencoap.h"
-! #include "packetfunctions.h"
-! #include "leds.h"
-! #include "openqueue.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-! } rleds_vars_t;
-! 
-! rleds_vars_t rleds_vars;
-! 
-! const uint8_t rleds_path0[]        = "l";
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t rleds_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options);
-! void    rleds_sendDone(OpenQueueEntry_t* msg,
-!                        owerror_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rleds__init() {
-!    // prepare the resource descriptor for the /.well-known/core path
-!    rleds_vars.desc.path0len            = sizeof(rleds_path0)-1;
-!    rleds_vars.desc.path0val            = (uint8_t*)(&rleds_path0);
-!    rleds_vars.desc.path1len            = 0;
-!    rleds_vars.desc.path1val            = NULL;
-!    rleds_vars.desc.componentID         = COMPONENT_RLEDS;
-!    rleds_vars.desc.callbackRx          = &rleds_receive;
-!    rleds_vars.desc.callbackSendDone    = &rleds_sendDone;
-!    
-!    opencoap_register(&rleds_vars.desc);
-! }
-! 
-! //=========================== private =========================================
-! 
-! owerror_t rleds_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options) {      
-!    owerror_t outcome;
-!    
-!    if        (coap_header->Code==COAP_CODE_REQ_GET) {
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // add CoAP payload
-!       packetfunctions_reserveHeaderSize(msg,1);
-!       if (leds_error_isOn()==1) {
-!          msg->payload[0]               = '1';
-!       } else {
-!          msg->payload[0]               = '0';
-!       }
-!          
-!       // set the CoAP header
-!       coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    } else if (coap_header->Code==COAP_CODE_REQ_PUT) {
-!       
-!       // change the LED's state
-!       if (msg->payload[0]=='1') {
-!          leds_debug_on();
-!       } else if (msg->payload[0]=='2') {
-!          leds_debug_toggle();
-!       } else {
-!          leds_debug_off();
-!       }
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // set the CoAP header
-!       coap_header->Code                = COAP_CODE_RESP_CHANGED;
-!       
-!       outcome                          = E_SUCCESS;
-!    } else {
-!       outcome                          = E_FAIL;
-!    }
-!    return outcome;
-! }
-! 
-! void rleds_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
-diff -crB openwsn/07-App/rleds/rleds.h ../../../sys/net/openwsn/07-App/rleds/rleds.h
-*** openwsn/07-App/rleds/rleds.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rleds/rleds.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,26 ****
-! #ifndef __RLEDS_H
-! #define __RLEDS_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup netLeds
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rleds_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,26 ----
-! #ifndef __RLEDS_H
-! #define __RLEDS_H
-! 
-! /**
-! \addtogroup AppCoAP
-! \{
-! \addtogroup netLeds
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rleds__init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/rreg/rreg.c ../../../sys/net/openwsn/07-App/rreg/rreg.c
-*** openwsn/07-App/rreg/rreg.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rreg/rreg.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,164 ****
-! #include "openwsn.h"
-! #include "rreg.h"
-! #include "opentimers.h"
-! #include "opencoap.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "idmanager.h"
-! #include "board.h"
-! #include "scheduler.h"
-! 
-! //=========================== variables =======================================
-! 
-! #define RREGPERIOD       30000
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-!    opentimer_id_t  timerId;
-! } rreg_vars_t;
-! 
-! rreg_vars_t rreg_vars;
-! 
-! const uint8_t rreg_path0[]    = "r";
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t rreg_receive(OpenQueueEntry_t* msg,
-!                      coap_header_iht*  coap_header,
-!                      coap_option_iht*  coap_options);
-! void    rreg_timer();
-! void    rreg_sendDone(OpenQueueEntry_t* msg,
-!                       error_t error);
-! uint8_t hexToAscii(uint8_t hex);
-! 
-! //=========================== public ==========================================
-! 
-! void rreg_init() {
-!    // prepare the resource descriptor for the /.well-known/core path
-!    rreg_vars.desc.path0len             = sizeof(rreg_path0)-1;
-!    rreg_vars.desc.path0val             = (uint8_t*)(&rreg_path0);
-!    rreg_vars.desc.path1len             = 0;
-!    rreg_vars.desc.path1val             = NULL;
-!    rreg_vars.desc.componentID          = COMPONENT_RREG;
-!    rreg_vars.desc.callbackRx           = &rreg_receive;
-!    rreg_vars.desc.callbackSendDone     = &rreg_sendDone;
-!    
-! 
-!    
-!    opencoap_register(&rreg_vars.desc);
-!    // register to the RD server every 30s
-!    rreg_vars.timerId    = opentimers_start(RREGPERIOD,
-!                                           TIMER_PERIODIC,TIME_MS,
-!                                           rreg_timer);
-! }
-! 
-! //=========================== private =========================================
-! 
-! error_t rreg_receive(OpenQueueEntry_t* msg,
-!                    coap_header_iht* coap_header,
-!                    coap_option_iht* coap_options) {
-!                       
-!    error_t outcome;
-!    
-!    if (coap_header->Code==COAP_CODE_REQ_POST) {
-!       // request to register received
-!       
-!       // triggered: schedule task to execute timer function next
-!       scheduler_push_task(rreg_timer,TASKPRIO_COAP);
-!       //call timer here, but reset timer after
-!       
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // set the CoAP header
-!       coap_header->OC                  = 0;
-!       coap_header->Code                = COAP_CODE_RESP_VALID;
-!       
-!       outcome = E_SUCCESS;
-!    } else if (coap_header->T==COAP_TYPE_ACK) {
-!       // it worked!
-!    } else {
-!       outcome = E_FAIL;
-!    }
-!    
-!    return outcome;
-! }
-! 
-! void rreg_timer() {
-!    OpenQueueEntry_t* pkt;
-!    uint8_t           temp8b;
-!    error_t           outcome;
-!    uint8_t           numOptions;
-!    
-! 
-!    // create a CoAP RD packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_RREG);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_RREG,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_RREG;
-!    pkt->owner      = COMPONENT_RREG;
-!    // CoAP payload
-!    opencoap_writeLinks(pkt);
-!    numOptions = 0;
-!    // URI-query
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(rreg_uriquery)-1+2);
-!    memcpy(&pkt->payload[0],&rreg_uriquery,sizeof(rreg_uriquery)-1);
-!    temp8b = idmanager_getMyID(ADDR_16B)->addr_16b[1];
-!    pkt->payload[sizeof(rreg_uriquery)-1] = hexToAscii((temp8b>>4) & 0x0f);
-!    pkt->payload[sizeof(rreg_uriquery)-0] = hexToAscii((temp8b>>0) & 0x0f);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0] = (COAP_OPTION_URIQUERY-COAP_OPTION_URIPATH) << 4 |
-!       sizeof(rreg_uriquery)-1+2;
-!    numOptions++;
-!    // URI-path
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0] = 'r';
-!    pkt->payload[1] = 'd';
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0] = (COAP_OPTION_URIPATH-COAP_OPTION_CONTENTTYPE) << 4 |
-!       2;
-!    numOptions++;
-!    // add content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                  = COAP_OPTION_CONTENTTYPE << 4 |
-!       1;
-!    pkt->payload[1]                  = COAP_MEDTYPE_APPLINKFORMAT;
-!    numOptions++;
-!    // metadata
-!    pkt->l4_destination_port         = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_ipsoRD,16);
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_CON,
-!                            COAP_CODE_REQ_POST,
-!                            numOptions,
-!                            &rreg_vars.desc);
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    return;
-! }
-! 
-! void rreg_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! port_INLINE uint8_t hexToAscii(uint8_t hex) {
-!    if (hex<0x0a) {
-!       return '0'+(hex-0x00);
-!    } else {
-!       return 'A'+(hex-0x0a);
-!    }
-  }
-\ No newline at end of file
---- 1,166 ----
-! #include "openwsn.h"
-! #include "rreg.h"
-! #include "opentimers.h"
-! #include "opencoap.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "idmanager.h"
-! #include "board.h"
-! #include "scheduler.h"
-! 
-! //=========================== variables =======================================
-! 
-! #define RREGPERIOD       30000
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-!    opentimer_id_t  timerId;
-! } rreg_vars_t;
-! 
-! rreg_vars_t rreg_vars;
-! 
-! const uint8_t rreg_path0[]    = "r";
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t rreg_receive(OpenQueueEntry_t* msg,
-!                      coap_header_iht*  coap_header,
-!                      coap_option_iht*  coap_options);
-! void    rreg_timer();
-! void    rreg_sendDone(OpenQueueEntry_t* msg,
-!                       owerror_t error);
-! uint8_t hexToAscii(uint8_t hex);
-! 
-! //=========================== public ==========================================
-! 
-! void rreg_init() {
-!   //dagroot does not run upper layers.
-!    if(idmanager_getIsDAGroot()==TRUE) return; 
-!  
-!   // prepare the resource descriptor for the /.well-known/core path
-!    rreg_vars.desc.path0len             = sizeof(rreg_path0)-1;
-!    rreg_vars.desc.path0val             = (uint8_t*)(&rreg_path0);
-!    rreg_vars.desc.path1len             = 0;
-!    rreg_vars.desc.path1val             = NULL;
-!    rreg_vars.desc.componentID          = COMPONENT_RREG;
-!    rreg_vars.desc.callbackRx           = &rreg_receive;
-!    rreg_vars.desc.callbackSendDone     = &rreg_sendDone;
-!    
-! 
-!    
-!    opencoap_register(&rreg_vars.desc);
-!    // register to the RD server every 30s
-!    rreg_vars.timerId    = opentimers_start(RREGPERIOD,
-!                                           TIMER_PERIODIC,TIME_MS,
-!                                           rreg_timer);
-! }
-! 
-! //=========================== private =========================================
-! 
-! owerror_t rreg_receive(OpenQueueEntry_t* msg,
-!                    coap_header_iht* coap_header,
-!                    coap_option_iht* coap_options) {
-!                       
-!    owerror_t outcome;
-!    
-!    if (coap_header->Code==COAP_CODE_REQ_POST) {
-!       // request to register received
-!       
-!       // triggered: schedule task to execute timer function next
-!       scheduler_push_task(rreg_timer,TASKPRIO_COAP);
-!       //call timer here, but reset timer after
-!       
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // set the CoAP header
-!        coap_header->Code                = COAP_CODE_RESP_VALID;
-!       
-!       outcome = E_SUCCESS;
-!    } else if (coap_header->T==COAP_TYPE_ACK) {
-!       // it worked!
-!    } else {
-!       outcome = E_FAIL;
-!    }
-!    
-!    return outcome;
-! }
-! 
-! void rreg_timer() {
-!    OpenQueueEntry_t* pkt;
-!    uint8_t           temp8b;
-!    owerror_t           outcome;
-!    uint8_t           numOptions;
-!    
-! 
-!    // create a CoAP RD packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_RREG);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_RREG,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       //openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_RREG;
-!    pkt->owner      = COMPONENT_RREG;
-!    // CoAP payload
-!    opencoap_writeLinks(pkt);
-!    numOptions = 0;
-!    // URI-query
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(rreg_uriquery)-1+2);
-!    memcpy(&pkt->payload[0],&rreg_uriquery,sizeof(rreg_uriquery)-1);
-!    temp8b = idmanager_getMyID(ADDR_16B)->addr_16b[1];
-!    pkt->payload[sizeof(rreg_uriquery)-1] = hexToAscii((temp8b>>4) & 0x0f);
-!    pkt->payload[sizeof(rreg_uriquery)-0] = hexToAscii((temp8b>>0) & 0x0f);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0] = (COAP_OPTION_NUM_URIQUERY-COAP_OPTION_NUM_URIPATH) << 4 |
-!       sizeof(rreg_uriquery)-1+2;
-!    numOptions++;
-!    // URI-path
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0] = 'r';
-!    pkt->payload[1] = 'd';
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0] = (COAP_OPTION_NUM_URIPATH) << 4 |
-!       2;
-!    numOptions++;
-!    // add content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                  = COAP_OPTION_NUM_CONTENTFORMAT << 4 |
-!       1;
-!    pkt->payload[1]                  = COAP_MEDTYPE_APPLINKFORMAT;
-!    numOptions++;
-!    // metadata
-!    pkt->l4_destination_port         = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_ipsoRD,16);
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_CON,
-!                            COAP_CODE_REQ_POST,
-!                            numOptions,
-!                            &rreg_vars.desc);
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    return;
-! }
-! 
-! void rreg_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! port_INLINE uint8_t hexToAscii(uint8_t hex) {
-!    if (hex<0x0a) {
-!       return '0'+(hex-0x00);
-!    } else {
-!       return 'A'+(hex-0x0a);
-!    }
-  }
-\ No newline at end of file
-diff -crB openwsn/07-App/rreg/rreg.h ../../../sys/net/openwsn/07-App/rreg/rreg.h
-*** openwsn/07-App/rreg/rreg.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rreg/rreg.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,26 ****
-! #ifndef __RREG_H
-! #define __RREG_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup rReg
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rreg_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,26 ----
-! #ifndef __RREG_H
-! #define __RREG_H
-! 
-! /**
-! \addtogroup AppCoAP
-! \{
-! \addtogroup rReg
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rreg_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/rrube/rrube.c ../../../sys/net/openwsn/07-App/rrube/rrube.c
-*** openwsn/07-App/rrube/rrube.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rrube/rrube.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,243 ****
-! #include "openwsn.h"
-! #include "rrube.h"
-! #include "opencoap.h"
-! #include "opentimers.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "idmanager.h"
-! #include "board.h"
-! #include "heli.h"
-! #include "leds.h"
-! 
-! //=========================== defines =========================================
-! 
-! static const uint8_t ipAddr_rubeServer[] = {0x24, 0x06, 0xa0, 0x00, 0xf0, 0xff, 0xff, 0xfe, \
-!                                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xbf};
-! 
-! typedef enum {
-!    RRUBE_ST_IDLE,
-!    RRUBE_ST_WAITTXPUT,
-!    RRUBE_ST_PUTRXD,
-!    RRUBE_ST_WAITACK,
-! } rrube_state_t;
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    rrube_state_t        rrube_state;
-!    coap_resource_desc_t desc;
-!    open_addr_t          nextHop;
-!    opentimer_id_t  timerId;
-! } rrube_vars_t;
-! 
-! rrube_vars_t rrube_vars;
-! 
-! const uint8_t rrube_path0[]    = "g";
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t rrube_receive(OpenQueueEntry_t* msg,
-!                      coap_header_iht*  coap_header,
-!                      coap_option_iht*  coap_options);
-! void    rrube_timer();
-! void    rrube_sendDone(OpenQueueEntry_t* msg,
-!                       error_t error);
-! uint8_t hexToAscii(uint8_t hex);
-! 
-! //=========================== public ==========================================
-! 
-! void rrube_init() {
-!    heli_init();
-!    
-!    rrube_vars.nextHop.type              = ADDR_128B;
-!    rrube_vars.rrube_state               = RRUBE_ST_IDLE;
-!    
-!    // prepare the resource descriptor for the /.well-known/core path
-!    rrube_vars.desc.path0len             = sizeof(rrube_path0)-1;
-!    rrube_vars.desc.path0val             = (uint8_t*)(&rrube_path0);
-!    rrube_vars.desc.path1len             = 0;
-!    rrube_vars.desc.path1val             = NULL;
-!    rrube_vars.desc.componentID          = COMPONENT_RRUBE;
-!    rrube_vars.desc.callbackRx           = &rrube_receive;
-!    rrube_vars.desc.callbackSendDone     = &rrube_sendDone;
-!    
-!    opencoap_register(&rrube_vars.desc);
-!    rrube_vars.timerId    = opentimers_start(1000,
-!                                            TIMER_PERIODIC,TIME_MS,
-!                                            rrube_timer);
-! }
-! 
-! //=========================== private =========================================
-! 
-! error_t rrube_receive(OpenQueueEntry_t* msg,
-!                    coap_header_iht* coap_header,
-!                    coap_option_iht* coap_options) {
-!                       
-!    error_t outcome;
-!    
-!    if (rrube_vars.rrube_state==RRUBE_ST_IDLE &&
-!        coap_header->Code==COAP_CODE_REQ_POST) {
-!       
-!       // turn on LED
-!       leds_debug_on();
-!          
-!       // record the next hop's address
-!       memcpy(&rrube_vars.nextHop.addr_128b[0],&msg->payload[0],16);
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // set the CoAP header
-!       coap_header->OC                  = 0;
-!       coap_header->Code                = COAP_CODE_RESP_VALID;
-!       
-!       // advance state machine
-!       rrube_vars.rrube_state           = RRUBE_ST_WAITTXPUT;
-!       
-!       outcome = E_SUCCESS;
-! 
-!    } else if (rrube_vars.rrube_state==RRUBE_ST_IDLE &&
-!       coap_header->Code==COAP_CODE_REQ_PUT) {
-!    
-!       // turn on LED
-!       leds_debug_on();
-!       
-!       // turn heli on
-!       heli_on();
-!       
-!       // advance state machine
-!       rrube_vars.rrube_state           = RRUBE_ST_PUTRXD;
-!    
-!    } else if (rrube_vars.rrube_state==RRUBE_ST_WAITACK &&
-!               coap_header->T==COAP_TYPE_ACK) {
-!       // record the next hop's address
-!       memcpy(&rrube_vars.nextHop.addr_128b[0],&msg->payload[0],16);
-!       
-!       // advance state machine
-!       rrube_vars.rrube_state           = RRUBE_ST_WAITTXPUT;
-!       
-!       outcome = E_SUCCESS;
-!    
-!    } else {
-!       // didn't expect that packet
-!       
-!       // reset state machine
-!       outcome = E_FAIL;
-!       
-!       // turn off LED
-!       leds_debug_off();
-!    }
-!    
-!    return outcome;
-! }
-! 
-! void rrube_timer() {
-!    OpenQueueEntry_t* pkt;
-!    uint8_t           numOptions;
-!    error_t           outcome;
-!    
-!    // turn off heli
-!    heli_off();
-!    
-!    if (rrube_vars.rrube_state == RRUBE_ST_WAITTXPUT) {
-!       // I received a POST from the server, I need to send data to the next hop
-!       
-!       // create a CoAP RD packet
-!       pkt = openqueue_getFreePacketBuffer(COMPONENT_RREG);
-!       if (pkt==NULL) {
-!          openserial_printError(COMPONENT_RREG,ERR_NO_FREE_PACKET_BUFFER,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          openqueue_freePacketBuffer(pkt);
-!          return;
-!       }
-!       // take ownership over that packet
-!       pkt->creator    = COMPONENT_RRUBE;
-!       pkt->owner      = COMPONENT_RRUBE;
-!       numOptions      = 0;
-!       // URI-path
-!       packetfunctions_reserveHeaderSize(pkt,sizeof(rrube_path0)-1);
-!       memcpy(&pkt->payload[0],&rrube_path0,sizeof(rrube_path0)-1);
-!       packetfunctions_reserveHeaderSize(pkt,1);
-!       pkt->payload[0] = (COAP_OPTION_URIPATH) << 4 |
-!                         sizeof(rrube_path0)-1;
-!       numOptions++;
-!       // metadata
-!       pkt->l4_destination_port         = WKP_UDP_COAP;
-!       pkt->l3_destinationAdd.type = ADDR_128B;
-!       memcpy(&pkt->l3_destinationAdd,&rrube_vars.nextHop,sizeof(open_addr_t));
-!       // send
-!       outcome = opencoap_send(pkt,
-!                               COAP_TYPE_NON,
-!                               COAP_CODE_REQ_PUT,
-!                               numOptions,
-!                               &rrube_vars.desc);
-!       // avoid overflowing the queue if fails
-!       if (outcome==E_FAIL) {
-!          rrube_vars.rrube_state        = RRUBE_ST_IDLE;
-!          openqueue_freePacketBuffer(pkt);
-!       }
-!       // advance state machine
-!       rrube_vars.rrube_state           = RRUBE_ST_IDLE;
-!       
-!       // turn off LED
-!       leds_debug_off();
-!   
-!    } else if (rrube_vars.rrube_state == RRUBE_ST_PUTRXD) {
-!       // I received a PUT from the previous hop, I need ask the server for the next address
-!       
-!       // create a CoAP RD packet
-!       pkt = openqueue_getFreePacketBuffer(COMPONENT_RREG);
-!       if (pkt==NULL) {
-!          openserial_printError(COMPONENT_RREG,ERR_NO_FREE_PACKET_BUFFER,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          openqueue_freePacketBuffer(pkt);
-!          return;
-!       }
-!       // take ownership over that packet
-!       pkt->creator    = COMPONENT_RRUBE;
-!       pkt->owner      = COMPONENT_RRUBE;
-!       numOptions      = 0;
-!       // URI-path
-!       packetfunctions_reserveHeaderSize(pkt,sizeof(rrube_path0)-1);
-!       memcpy(&pkt->payload[0],&rrube_path0,sizeof(rrube_path0)-1);
-!       packetfunctions_reserveHeaderSize(pkt,1);
-!       pkt->payload[0] = (COAP_OPTION_URIPATH) << 4 |
-!                         sizeof(rrube_path0)-1;
-!       numOptions++;
-!       // metadata
-!       pkt->l4_destination_port         = WKP_UDP_COAP;
-!       pkt->l3_destinationAdd.type = ADDR_128B;
-!       memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_rubeServer,16);
-!       // send
-!       outcome = opencoap_send(pkt,
-!                               COAP_TYPE_CON,
-!                               COAP_CODE_REQ_GET,
-!                               numOptions,
-!                               &rrube_vars.desc);
-!       // avoid overflowing the queue if fails
-!       if (outcome==E_FAIL) {
-!          rrube_vars.rrube_state        = RRUBE_ST_IDLE;
-!          openqueue_freePacketBuffer(pkt);
-!       }
-!       // advance state machine
-!       rrube_vars.rrube_state           = RRUBE_ST_WAITACK;
-!       
-!    } else {
-!       // timer expired while not in expected state
-!       
-!       // reset state machine
-!       rrube_vars.rrube_state           = RRUBE_ST_IDLE;
-!       
-!       // turn off LED
-!       leds_debug_off();
-!    }
-!    return;
-! }
-! 
-! void rrube_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
---- 1,242 ----
-! #include "openwsn.h"
-! #include "rrube.h"
-! #include "opencoap.h"
-! #include "opentimers.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "idmanager.h"
-! #include "board.h"
-! #include "heli.h"
-! #include "leds.h"
-! 
-! //=========================== defines =========================================
-! 
-! static const uint8_t ipAddr_rubeServer[] = {0x24, 0x06, 0xa0, 0x00, 0xf0, 0xff, 0xff, 0xfe, \
-!                                             0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x43, 0xbf};
-! 
-! typedef enum {
-!    RRUBE_ST_IDLE,
-!    RRUBE_ST_WAITTXPUT,
-!    RRUBE_ST_PUTRXD,
-!    RRUBE_ST_WAITACK,
-! } rrube_state_t;
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    rrube_state_t        rrube_state;
-!    coap_resource_desc_t desc;
-!    open_addr_t          nextHop;
-!    opentimer_id_t  timerId;
-! } rrube_vars_t;
-! 
-! rrube_vars_t rrube_vars;
-! 
-! const uint8_t rrube_path0[]    = "g";
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t rrube_receive(OpenQueueEntry_t* msg,
-!                      coap_header_iht*  coap_header,
-!                      coap_option_iht*  coap_options);
-! void    rrube_timer();
-! void    rrube_sendDone(OpenQueueEntry_t* msg,
-!                       owerror_t error);
-! uint8_t hexToAscii(uint8_t hex);
-! 
-! //=========================== public ==========================================
-! 
-! void rrube_init() {
-!    heli_init();
-!    
-!    rrube_vars.nextHop.type              = ADDR_128B;
-!    rrube_vars.rrube_state               = RRUBE_ST_IDLE;
-!    
-!    // prepare the resource descriptor for the /.well-known/core path
-!    rrube_vars.desc.path0len             = sizeof(rrube_path0)-1;
-!    rrube_vars.desc.path0val             = (uint8_t*)(&rrube_path0);
-!    rrube_vars.desc.path1len             = 0;
-!    rrube_vars.desc.path1val             = NULL;
-!    rrube_vars.desc.componentID          = COMPONENT_RRUBE;
-!    rrube_vars.desc.callbackRx           = &rrube_receive;
-!    rrube_vars.desc.callbackSendDone     = &rrube_sendDone;
-!    
-!    opencoap_register(&rrube_vars.desc);
-!    rrube_vars.timerId    = opentimers_start(1000,
-!                                            TIMER_PERIODIC,TIME_MS,
-!                                            rrube_timer);
-! }
-! 
-! //=========================== private =========================================
-! 
-! owerror_t rrube_receive(OpenQueueEntry_t* msg,
-!                    coap_header_iht* coap_header,
-!                    coap_option_iht* coap_options) {
-!                       
-!    owerror_t outcome;
-!    
-!    if (rrube_vars.rrube_state==RRUBE_ST_IDLE &&
-!        coap_header->Code==COAP_CODE_REQ_POST) {
-!       
-!       // turn on LED
-!       leds_debug_on();
-!          
-!       // record the next hop's address
-!       memcpy(&rrube_vars.nextHop.addr_128b[0],&msg->payload[0],16);
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // set the CoAP header
-!       coap_header->Code                = COAP_CODE_RESP_VALID;
-!       
-!       // advance state machine
-!       rrube_vars.rrube_state           = RRUBE_ST_WAITTXPUT;
-!       
-!       outcome = E_SUCCESS;
-! 
-!    } else if (rrube_vars.rrube_state==RRUBE_ST_IDLE &&
-!       coap_header->Code==COAP_CODE_REQ_PUT) {
-!    
-!       // turn on LED
-!       leds_debug_on();
-!       
-!       // turn heli on
-!       heli_on();
-!       
-!       // advance state machine
-!       rrube_vars.rrube_state           = RRUBE_ST_PUTRXD;
-!    
-!    } else if (rrube_vars.rrube_state==RRUBE_ST_WAITACK &&
-!               coap_header->T==COAP_TYPE_ACK) {
-!       // record the next hop's address
-!       memcpy(&rrube_vars.nextHop.addr_128b[0],&msg->payload[0],16);
-!       
-!       // advance state machine
-!       rrube_vars.rrube_state           = RRUBE_ST_WAITTXPUT;
-!       
-!       outcome = E_SUCCESS;
-!    
-!    } else {
-!       // didn't expect that packet
-!       
-!       // reset state machine
-!       outcome = E_FAIL;
-!       
-!       // turn off LED
-!       leds_debug_off();
-!    }
-!    
-!    return outcome;
-! }
-! 
-! void rrube_timer() {
-!    OpenQueueEntry_t* pkt;
-!    uint8_t           numOptions;
-!    owerror_t           outcome;
-!    
-!    // turn off heli
-!    heli_off();
-!    
-!    if (rrube_vars.rrube_state == RRUBE_ST_WAITTXPUT) {
-!       // I received a POST from the server, I need to send data to the next hop
-!       
-!       // create a CoAP RD packet
-!       pkt = openqueue_getFreePacketBuffer(COMPONENT_RREG);
-!       if (pkt==NULL) {
-!          openserial_printError(COMPONENT_RREG,ERR_NO_FREE_PACKET_BUFFER,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          openqueue_freePacketBuffer(pkt);
-!          return;
-!       }
-!       // take ownership over that packet
-!       pkt->creator    = COMPONENT_RRUBE;
-!       pkt->owner      = COMPONENT_RRUBE;
-!       numOptions      = 0;
-!       // URI-path
-!       packetfunctions_reserveHeaderSize(pkt,sizeof(rrube_path0)-1);
-!       memcpy(&pkt->payload[0],&rrube_path0,sizeof(rrube_path0)-1);
-!       packetfunctions_reserveHeaderSize(pkt,1);
-!       pkt->payload[0] = (COAP_OPTION_NUM_URIPATH) << 4 |
-!                         sizeof(rrube_path0)-1;
-!       numOptions++;
-!       // metadata
-!       pkt->l4_destination_port         = WKP_UDP_COAP;
-!       pkt->l3_destinationAdd.type = ADDR_128B;
-!       memcpy(&pkt->l3_destinationAdd,&rrube_vars.nextHop,sizeof(open_addr_t));
-!       // send
-!       outcome = opencoap_send(pkt,
-!                               COAP_TYPE_NON,
-!                               COAP_CODE_REQ_PUT,
-!                               numOptions,
-!                               &rrube_vars.desc);
-!       // avoid overflowing the queue if fails
-!       if (outcome==E_FAIL) {
-!          rrube_vars.rrube_state        = RRUBE_ST_IDLE;
-!          openqueue_freePacketBuffer(pkt);
-!       }
-!       // advance state machine
-!       rrube_vars.rrube_state           = RRUBE_ST_IDLE;
-!       
-!       // turn off LED
-!       leds_debug_off();
-!   
-!    } else if (rrube_vars.rrube_state == RRUBE_ST_PUTRXD) {
-!       // I received a PUT from the previous hop, I need ask the server for the next address
-!       
-!       // create a CoAP RD packet
-!       pkt = openqueue_getFreePacketBuffer(COMPONENT_RREG);
-!       if (pkt==NULL) {
-!          openserial_printError(COMPONENT_RREG,ERR_NO_FREE_PACKET_BUFFER,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          openqueue_freePacketBuffer(pkt);
-!          return;
-!       }
-!       // take ownership over that packet
-!       pkt->creator    = COMPONENT_RRUBE;
-!       pkt->owner      = COMPONENT_RRUBE;
-!       numOptions      = 0;
-!       // URI-path
-!       packetfunctions_reserveHeaderSize(pkt,sizeof(rrube_path0)-1);
-!       memcpy(&pkt->payload[0],&rrube_path0,sizeof(rrube_path0)-1);
-!       packetfunctions_reserveHeaderSize(pkt,1);
-!       pkt->payload[0] = (COAP_OPTION_NUM_URIPATH) << 4 |
-!                         sizeof(rrube_path0)-1;
-!       numOptions++;
-!       // metadata
-!       pkt->l4_destination_port         = WKP_UDP_COAP;
-!       pkt->l3_destinationAdd.type = ADDR_128B;
-!       memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_rubeServer,16);
-!       // send
-!       outcome = opencoap_send(pkt,
-!                               COAP_TYPE_CON,
-!                               COAP_CODE_REQ_GET,
-!                               numOptions,
-!                               &rrube_vars.desc);
-!       // avoid overflowing the queue if fails
-!       if (outcome==E_FAIL) {
-!          rrube_vars.rrube_state        = RRUBE_ST_IDLE;
-!          openqueue_freePacketBuffer(pkt);
-!       }
-!       // advance state machine
-!       rrube_vars.rrube_state           = RRUBE_ST_WAITACK;
-!       
-!    } else {
-!       // timer expired while not in expected state
-!       
-!       // reset state machine
-!       rrube_vars.rrube_state           = RRUBE_ST_IDLE;
-!       
-!       // turn off LED
-!       leds_debug_off();
-!    }
-!    return;
-! }
-! 
-! void rrube_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
-diff -crB openwsn/07-App/rrube/rrube.h ../../../sys/net/openwsn/07-App/rrube/rrube.h
-*** openwsn/07-App/rrube/rrube.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rrube/rrube.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,26 ****
-! #ifndef __RRUBE_H
-! #define __RRUBE_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup rRube
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rrube_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,26 ----
-! #ifndef __RRUBE_H
-! #define __RRUBE_H
-! 
-! /**
-! \addtogroup AppCoAP
-! \{
-! \addtogroup rRube
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rrube_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/rt/rt.c ../../../sys/net/openwsn/07-App/rt/rt.c
-*** openwsn/07-App/rt/rt.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rt/rt.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,171 ****
-! #include "openwsn.h"
-! #include "rt.h"
-! #include  "opentimers.h"
-! #include "opencoap.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "sensitive_accel_temperature.h"
-! 
-! 
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in mseconds)
-! #define RTPERIOD     20000
-! 
-! const uint8_t rt_path0[] = "t";
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    opentimer_id_t  timerId;
-!    coap_resource_desc_t desc;
-! } rt_vars_t;
-! 
-! rt_vars_t rt_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t rt_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options);
-! void    rt_timer();
-! void    rt_sendDone(OpenQueueEntry_t* msg,
-!                        error_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rt_init() {
-!    // startup the sensor
-!    sensitive_accel_temperature_init();
-!    
-!    // prepare the resource descriptor for the /temp path
-!    rt_vars.desc.path0len             = sizeof(rt_path0)-1;
-!    rt_vars.desc.path0val             = (uint8_t*)(&rt_path0);
-!    rt_vars.desc.path1len             = 0;
-!    rt_vars.desc.path1val             = NULL;
-!    rt_vars.desc.componentID          = COMPONENT_RT;
-!    rt_vars.desc.callbackRx           = &rt_receive;
-!    rt_vars.desc.callbackSendDone     = &rt_sendDone;
-!    
-! 
-!    rt_vars.timerId    = opentimers_start(openrandom_get16b()%RTPERIOD,
-!                                           TIMER_PERIODIC,TIME_MS,
-!                                           rt_timer);
-!    opencoap_register(&rt_vars.desc);
-! }
-! 
-! //=========================== private =========================================
-! 
-! error_t rt_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht* coap_header,
-!                       coap_option_iht* coap_options) {
-!    error_t outcome;
-!    uint8_t rawdata[SENSITIVE_ACCEL_TEMPERATURE_DATALEN];
-!    
-!    if (coap_header->Code==COAP_CODE_REQ_POST) {
-!       // start/stop the data generation to data server
-!       
-!       if (msg->payload[0]=='1') {
-!          opentimers_restart(rt_vars.timerId);
-!       } else {
-!          opentimers_stop(rt_vars.timerId);
-!       }
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // CoAP header
-!       coap_header->OC                  = 0;
-!       coap_header->Code                = COAP_CODE_RESP_VALID;
-!       
-!       outcome = E_SUCCESS;
-!    
-!    } else if (coap_header->Code==COAP_CODE_REQ_GET) {
-!       // return current sensor value
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // CoAP payload (2 bytes of temperature data)
-!       packetfunctions_reserveHeaderSize(msg,2);
-!       sensitive_accel_temperature_get_measurement(&rawdata[0]);
-!       msg->payload[0] = rawdata[8];
-!       msg->payload[1] = rawdata[9];
-!          
-!       // set the CoAP header
-!       coap_header->OC                  = 0;
-!       coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    
-!    } else {
-!       // return an error message
-!       outcome = E_FAIL;
-!    }
-!    
-!    return outcome;
-! }
-! 
-! void rt_timer() {
-!    OpenQueueEntry_t* pkt;
-!    error_t           outcome;
-!    uint8_t           numOptions;
-!    uint8_t           rawdata[SENSITIVE_ACCEL_TEMPERATURE_DATALEN];
-!    
-!    
-!    // create a CoAP RD packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_RT);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_RT,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_RT;
-!    pkt->owner      = COMPONENT_RT;
-!    // CoAP payload (2 bytes of temperature data)
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    sensitive_accel_temperature_get_measurement(&rawdata[0]);
-!    pkt->payload[0] = rawdata[8];
-!    pkt->payload[1] = rawdata[9];
-!    numOptions = 0;
-!    // location-path option
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(rt_path0)-1);
-!    memcpy(&pkt->payload[0],&rt_path0,sizeof(rt_path0)-1);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0]                  = (COAP_OPTION_LOCATIONPATH-COAP_OPTION_CONTENTTYPE) << 4 |
-!       sizeof(rt_path0)-1;
-!    numOptions++;
-!    // content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                  = COAP_OPTION_CONTENTTYPE << 4 |
-!       1;
-!    pkt->payload[1]                  = COAP_MEDTYPE_APPOCTETSTREAM;
-!    numOptions++;
-!    // metadata
-!    pkt->l4_destination_port         = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_motesEecs,16);
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_NON,
-!                            COAP_CODE_REQ_PUT,
-!                            numOptions,
-!                            &rt_vars.desc);
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    return;
-! }
-! 
-! void rt_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
---- 1,169 ----
-! #include "openwsn.h"
-! #include "rt.h"
-! #include  "opentimers.h"
-! #include "opencoap.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "sensitive_accel_temperature.h"
-! 
-! 
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in mseconds)
-! #define RTPERIOD     20000
-! 
-! const uint8_t rt_path0[] = "t";
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    opentimer_id_t  timerId;
-!    coap_resource_desc_t desc;
-! } rt_vars_t;
-! 
-! rt_vars_t rt_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t rt_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options);
-! void    rt_timer();
-! void    rt_sendDone(OpenQueueEntry_t* msg,
-!                        owerror_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rt_init() {
-!    // startup the sensor
-!    sensitive_accel_temperature_init();
-!    
-!    // prepare the resource descriptor for the /temp path
-!    rt_vars.desc.path0len             = sizeof(rt_path0)-1;
-!    rt_vars.desc.path0val             = (uint8_t*)(&rt_path0);
-!    rt_vars.desc.path1len             = 0;
-!    rt_vars.desc.path1val             = NULL;
-!    rt_vars.desc.componentID          = COMPONENT_RT;
-!    rt_vars.desc.callbackRx           = &rt_receive;
-!    rt_vars.desc.callbackSendDone     = &rt_sendDone;
-!    
-! 
-!    rt_vars.timerId    = opentimers_start(openrandom_get16b()%RTPERIOD,
-!                                           TIMER_PERIODIC,TIME_MS,
-!                                           rt_timer);
-!    opencoap_register(&rt_vars.desc);
-! }
-! 
-! //=========================== private =========================================
-! 
-! owerror_t rt_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht* coap_header,
-!                       coap_option_iht* coap_options) {
-!    owerror_t outcome;
-!    uint8_t rawdata[SENSITIVE_ACCEL_TEMPERATURE_DATALEN];
-!    
-!    if (coap_header->Code==COAP_CODE_REQ_POST) {
-!       // start/stop the data generation to data server
-!       
-!       if (msg->payload[0]=='1') {
-!          opentimers_restart(rt_vars.timerId);
-!       } else {
-!          opentimers_stop(rt_vars.timerId);
-!       }
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // CoAP header
-!       coap_header->Code                = COAP_CODE_RESP_VALID;
-!       
-!       outcome = E_SUCCESS;
-!    
-!    } else if (coap_header->Code==COAP_CODE_REQ_GET) {
-!       // return current sensor value
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // CoAP payload (2 bytes of temperature data)
-!       packetfunctions_reserveHeaderSize(msg,2);
-!       sensitive_accel_temperature_get_measurement(&rawdata[0]);
-!       msg->payload[0] = rawdata[8];
-!       msg->payload[1] = rawdata[9];
-!          
-!       // set the CoAP header
-!        coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    
-!    } else {
-!       // return an error message
-!       outcome = E_FAIL;
-!    }
-!    
-!    return outcome;
-! }
-! 
-! void rt_timer() {
-!    OpenQueueEntry_t* pkt;
-!    owerror_t           outcome;
-!    uint8_t           numOptions;
-!    uint8_t           rawdata[SENSITIVE_ACCEL_TEMPERATURE_DATALEN];
-!    
-!    
-!    // create a CoAP RD packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_RT);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_RT,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_RT;
-!    pkt->owner      = COMPONENT_RT;
-!    // CoAP payload (2 bytes of temperature data)
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    sensitive_accel_temperature_get_measurement(&rawdata[0]);
-!    pkt->payload[0] = rawdata[8];
-!    pkt->payload[1] = rawdata[9];
-!    numOptions = 0;
-!    // location-path option
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(rt_path0)-1);
-!    memcpy(&pkt->payload[0],&rt_path0,sizeof(rt_path0)-1);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0]                  = (COAP_OPTION_NUM_URIPATH) << 4 |
-!       sizeof(rt_path0)-1;
-!    numOptions++;
-!    // content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                  = COAP_OPTION_NUM_CONTENTFORMAT << 4 |
-!       1;
-!    pkt->payload[1]                  = COAP_MEDTYPE_APPOCTETSTREAM;
-!    numOptions++;
-!    // metadata
-!    pkt->l4_destination_port         = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_motesEecs,16);
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_NON,
-!                            COAP_CODE_REQ_PUT,
-!                            numOptions,
-!                            &rt_vars.desc);
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    return;
-! }
-! 
-! void rt_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
-diff -crB openwsn/07-App/rt/rt.h ../../../sys/net/openwsn/07-App/rt/rt.h
-*** openwsn/07-App/rt/rt.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rt/rt.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,26 ****
-! #ifndef __RT_H
-! #define __RT_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup rT
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rt_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,26 ----
-! #ifndef __RT_H
-! #define __RT_H
-! 
-! /**
-! \addtogroup AppCoAP
-! \{
-! \addtogroup rT
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rt_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/rwellknown/Makefile ../../../sys/net/openwsn/07-App/rwellknown/Makefile
-*** openwsn/07-App/rwellknown/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/rwellknown/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBSUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBSUBMOD)
-+ 
-+ $(BINDIR)$(SUBSUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/07-App/rwellknown/rwellknown.c ../../../sys/net/openwsn/07-App/rwellknown/rwellknown.c
-*** openwsn/07-App/rwellknown/rwellknown.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rwellknown/rwellknown.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,77 ****
-! #include "openwsn.h"
-! #include "rwellknown.h"
-! #include "opencoap.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-! } rwellknown_vars_t;
-! 
-! rwellknown_vars_t rwellknown_vars;
-! 
-! const uint8_t rwellknown_path0[]        = ".well-known";
-! const uint8_t rwellknown_path1[]        = "core";
-! const uint8_t rwellknown_testlink[]  = "</led>;if=\"actuator\";rt=\"ipso:light\";ct=\"0\"";
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t rwellknown_receive(OpenQueueEntry_t* msg,
-!                            coap_header_iht*  coap_header,
-!                            coap_option_iht*  coap_options);
-! void    rwellknown_sendDone(OpenQueueEntry_t* msg,
-!                             error_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rwellknown_init() {
-!    // prepare the resource descriptor for the /.well-known/core path
-!    rwellknown_vars.desc.path0len            = sizeof(rwellknown_path0)-1;
-!    rwellknown_vars.desc.path0val            = (uint8_t*)(&rwellknown_path0);
-!    rwellknown_vars.desc.path1len            = sizeof(rwellknown_path1)-1;
-!    rwellknown_vars.desc.path1val            = (uint8_t*)(&rwellknown_path1);
-!    rwellknown_vars.desc.componentID         = COMPONENT_RWELLKNOWN;
-!    rwellknown_vars.desc.callbackRx          = &rwellknown_receive;
-!    rwellknown_vars.desc.callbackSendDone    = &rwellknown_sendDone;
-!    
-!    opencoap_register(&rwellknown_vars.desc);
-! }
-! 
-! //=========================== private =========================================
-! 
-! error_t rwellknown_receive(OpenQueueEntry_t* msg,
-!                            coap_header_iht*  coap_header,
-!                            coap_option_iht*  coap_options) {
-!    error_t outcome;
-!    
-!    if (coap_header->Code==COAP_CODE_REQ_GET) {
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // add link descriptors to the packet
-!       opencoap_writeLinks(msg);
-!          
-!       // add return option
-!       packetfunctions_reserveHeaderSize(msg,2);
-!       msg->payload[0]                  = COAP_OPTION_CONTENTTYPE << 4 |
-!                                          1;
-!       msg->payload[1]                  = COAP_MEDTYPE_APPLINKFORMAT;
-!       
-!       // set the CoAP header
-!       coap_header->OC                  = 1;
-!       coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    } else {
-!       outcome                          = E_FAIL;
-!    }
-!    return outcome;
-! }
-! 
-! void rwellknown_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
---- 1,80 ----
-! #include "openwsn.h"
-! #include "rwellknown.h"
-! #include "opencoap.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "idmanager.h"
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-! } rwellknown_vars_t;
-! 
-! rwellknown_vars_t rwellknown_vars;
-! 
-! const uint8_t rwellknown_path0[]        = ".well-known";
-! const uint8_t rwellknown_path1[]        = "core";
-! const uint8_t rwellknown_testlink[]  = "</led>;if=\"actuator\";rt=\"ipso:light\";ct=\"0\"";
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t rwellknown_receive(OpenQueueEntry_t* msg,
-!                            coap_header_iht*  coap_header,
-!                            coap_option_iht*  coap_options);
-! void    rwellknown_sendDone(OpenQueueEntry_t* msg,
-!                             owerror_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rwellknown_init(void) {
-!   
-!   
-!    if(idmanager_getIsDAGroot()==TRUE) return; 
-!    
-!    // prepare the resource descriptor for the /.well-known/core path
-!    rwellknown_vars.desc.path0len            = sizeof(rwellknown_path0)-1;
-!    rwellknown_vars.desc.path0val            = (uint8_t*)(&rwellknown_path0);
-!    rwellknown_vars.desc.path1len            = sizeof(rwellknown_path1)-1;
-!    rwellknown_vars.desc.path1val            = (uint8_t*)(&rwellknown_path1);
-!    rwellknown_vars.desc.componentID         = COMPONENT_RWELLKNOWN;
-!    rwellknown_vars.desc.callbackRx          = &rwellknown_receive;
-!    rwellknown_vars.desc.callbackSendDone    = &rwellknown_sendDone;
-!    
-!    opencoap_register(&rwellknown_vars.desc);
-! }
-! 
-! //=========================== private =========================================
-! 
-! owerror_t rwellknown_receive(OpenQueueEntry_t* msg,
-!                            coap_header_iht*  coap_header,
-!                            coap_option_iht*  coap_options) {
-!    owerror_t outcome;
-!    
-!    if (coap_header->Code==COAP_CODE_REQ_GET) {
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // add link descriptors to the packet
-!       opencoap_writeLinks(msg);
-!          
-!       // add return option
-!       packetfunctions_reserveHeaderSize(msg,2);
-!       msg->payload[0]                  = COAP_OPTION_NUM_CONTENTFORMAT << 4 |
-!                                          1;
-!       msg->payload[1]                  = COAP_MEDTYPE_APPLINKFORMAT;
-!       
-!       // set the CoAP header
-!        coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    } else {
-!       outcome                          = E_FAIL;
-!    }
-!    return outcome;
-! }
-! 
-! void rwellknown_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
-diff -crB openwsn/07-App/rwellknown/rwellknown.h ../../../sys/net/openwsn/07-App/rwellknown/rwellknown.h
-*** openwsn/07-App/rwellknown/rwellknown.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rwellknown/rwellknown.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,26 ****
-! #ifndef __RWELLKNOWN_H
-! #define __RWELLKNOWN_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup rWellKnown
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rwellknown_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,26 ----
-! #ifndef __RWELLKNOWN_H
-! #define __RWELLKNOWN_H
-! 
-! /**
-! \addtogroup AppCoAP
-! \{
-! \addtogroup rWellKnown
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rwellknown_init(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/rxl1/rxl1.c ../../../sys/net/openwsn/07-App/rxl1/rxl1.c
-*** openwsn/07-App/rxl1/rxl1.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rxl1/rxl1.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,176 ****
-! #include "openwsn.h"
-! #include "rxl1.h"
-! #include "opentimers.h"
-! #include "opencoap.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "sensitive_accel_temperature.h"
-! 
-! 
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in mseconds)
-! #define RXL1PERIOD     6000
-! 
-! const uint8_t rxl1_path0[] = "x";
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-!    opentimer_id_t  timerId;
-! } rxl1_vars_t;
-! 
-! rxl1_vars_t rxl1_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t rxl1_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options);
-! void    rxl1_timer();
-! void    rxl1_sendDone(OpenQueueEntry_t* msg,
-!                        error_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rxl1_init() {
-!    // startup the sensor
-!    sensitive_accel_temperature_init();
-!    
-!    // prepare the resource descriptor for the /temp path
-!    rxl1_vars.desc.path0len             = sizeof(rxl1_path0)-1;
-!    rxl1_vars.desc.path0val             = (uint8_t*)(&rxl1_path0);
-!    rxl1_vars.desc.path1len             = 0;
-!    rxl1_vars.desc.path1val             = NULL;
-!    rxl1_vars.desc.componentID          = COMPONENT_RXL1;
-!    rxl1_vars.desc.callbackRx           = &rxl1_receive;
-!    rxl1_vars.desc.callbackSendDone     = &rxl1_sendDone;
-!    
-!    //we start a timer, but just to get a timer ID, we stop it immediately
-!    rxl1_vars.timerId    = opentimers_start(openrandom_get16b()%RXL1PERIOD,
-!                                           TIMER_PERIODIC,TIME_MS,
-!                                           rxl1_timer);
-!    opentimers_stop(rxl1_vars.timerId);
-!    
-!    opencoap_register(&rxl1_vars.desc);
-! }
-! 
-! //=========================== private =========================================
-! 
-! error_t rxl1_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht* coap_header,
-!                       coap_option_iht* coap_options) {
-!    error_t outcome;
-!    uint8_t rawdata[SENSITIVE_ACCEL_TEMPERATURE_DATALEN];
-!    
-!    if (coap_header->Code==COAP_CODE_REQ_POST) {
-!       // start/stop the data generation to data server
-!       
-!       if (msg->payload[0]=='1') {
-!          //restart timer
-!          opentimers_restart(rxl1_vars.timerId);
-!          
-!       } else {
-!          //stop timer
-!          opentimers_stop(rxl1_vars.timerId);   
-!       }
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // CoAP header
-!       coap_header->OC                  = 0;
-!       coap_header->Code                = COAP_CODE_RESP_VALID;
-!       
-!       outcome = E_SUCCESS;
-!    
-!    } else if (coap_header->Code==COAP_CODE_REQ_GET) {
-!       // return current sensor value
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // CoAP payload (8 bytes of XL data)
-!       packetfunctions_reserveHeaderSize(msg,8);
-!       sensitive_accel_temperature_get_measurement(&rawdata[0]);
-!       memcpy(&msg->payload[0],&rawdata[8],8);
-!          
-!       // set the CoAP header
-!       coap_header->OC                  = 0;
-!       coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    
-!    } else {
-!       // return an error message
-!       outcome = E_FAIL;
-!    }
-!    
-!    return outcome;
-! }
-! 
-! void rxl1_timer() {
-!    OpenQueueEntry_t* pkt;
-!    error_t           outcome;
-!    uint8_t           numOptions;
-!    uint8_t           rawdata[SENSITIVE_ACCEL_TEMPERATURE_DATALEN];
-!    
-!    
-!    // create a CoAP RD packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_RXL1);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_RXL1,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_RXL1;
-!    pkt->owner      = COMPONENT_RXL1;
-!    // CoAP payload (2 bytes of temperature data)
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    sensitive_accel_temperature_get_measurement(&rawdata[0]);
-!    pkt->payload[0] = rawdata[8];
-!    pkt->payload[1] = rawdata[9];
-!    numOptions = 0;
-!    // location-path option
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(rxl1_path0)-1);
-!    memcpy(&pkt->payload[0],&rxl1_path0,sizeof(rxl1_path0)-1);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0]                  = (COAP_OPTION_LOCATIONPATH-COAP_OPTION_CONTENTTYPE) << 4 |
-!       sizeof(rxl1_path0)-1;
-!    numOptions++;
-!    // content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                  = COAP_OPTION_CONTENTTYPE << 4 |
-!       1;
-!    pkt->payload[1]                  = COAP_MEDTYPE_APPOCTETSTREAM;
-!    numOptions++;
-!    // metadata
-!    pkt->l4_destination_port         = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_motesEecs,16);
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_NON,
-!                            COAP_CODE_REQ_PUT,
-!                            numOptions,
-!                            &rxl1_vars.desc);
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    
-!    return;
-! }
-! 
-! void rxl1_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    openqueue_freePacketBuffer(msg);
-! }
---- 1,174 ----
-! #include "openwsn.h"
-! #include "rxl1.h"
-! #include "opentimers.h"
-! #include "opencoap.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "sensitive_accel_temperature.h"
-! 
-! 
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in mseconds)
-! #define RXL1PERIOD     6000
-! 
-! const uint8_t rxl1_path0[] = "x";
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-!    opentimer_id_t  timerId;
-! } rxl1_vars_t;
-! 
-! rxl1_vars_t rxl1_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t rxl1_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht*  coap_header,
-!                       coap_option_iht*  coap_options);
-! void    rxl1_timer();
-! void    rxl1_sendDone(OpenQueueEntry_t* msg,
-!                        owerror_t error);
-! 
-! //=========================== public ==========================================
-! 
-! void rxl1_init() {
-!    // startup the sensor
-!    sensitive_accel_temperature_init();
-!    
-!    // prepare the resource descriptor for the /temp path
-!    rxl1_vars.desc.path0len             = sizeof(rxl1_path0)-1;
-!    rxl1_vars.desc.path0val             = (uint8_t*)(&rxl1_path0);
-!    rxl1_vars.desc.path1len             = 0;
-!    rxl1_vars.desc.path1val             = NULL;
-!    rxl1_vars.desc.componentID          = COMPONENT_RXL1;
-!    rxl1_vars.desc.callbackRx           = &rxl1_receive;
-!    rxl1_vars.desc.callbackSendDone     = &rxl1_sendDone;
-!    
-!    //we start a timer, but just to get a timer ID, we stop it immediately
-!    rxl1_vars.timerId    = opentimers_start(openrandom_get16b()%RXL1PERIOD,
-!                                           TIMER_PERIODIC,TIME_MS,
-!                                           rxl1_timer);
-!    opentimers_stop(rxl1_vars.timerId);
-!    
-!    opencoap_register(&rxl1_vars.desc);
-! }
-! 
-! //=========================== private =========================================
-! 
-! owerror_t rxl1_receive(OpenQueueEntry_t* msg,
-!                       coap_header_iht* coap_header,
-!                       coap_option_iht* coap_options) {
-!    owerror_t outcome;
-!    uint8_t rawdata[SENSITIVE_ACCEL_TEMPERATURE_DATALEN];
-!    
-!    if (coap_header->Code==COAP_CODE_REQ_POST) {
-!       // start/stop the data generation to data server
-!       
-!       if (msg->payload[0]=='1') {
-!          //restart timer
-!          opentimers_restart(rxl1_vars.timerId);
-!          
-!       } else {
-!          //stop timer
-!          opentimers_stop(rxl1_vars.timerId);   
-!       }
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // CoAP header
-!       coap_header->Code                = COAP_CODE_RESP_VALID;
-!       
-!       outcome = E_SUCCESS;
-!    
-!    } else if (coap_header->Code==COAP_CODE_REQ_GET) {
-!       // return current sensor value
-!       
-!       // reset packet payload
-!       msg->payload                     = &(msg->packet[127]);
-!       msg->length                      = 0;
-!       
-!       // CoAP payload (8 bytes of XL data)
-!       packetfunctions_reserveHeaderSize(msg,8);
-!       sensitive_accel_temperature_get_measurement(&rawdata[0]);
-!       memcpy(&msg->payload[0],&rawdata[8],8);
-!          
-!       // set the CoAP header
-!       coap_header->Code                = COAP_CODE_RESP_CONTENT;
-!       
-!       outcome                          = E_SUCCESS;
-!    
-!    } else {
-!       // return an error message
-!       outcome = E_FAIL;
-!    }
-!    
-!    return outcome;
-! }
-! 
-! void rxl1_timer() {
-!    OpenQueueEntry_t* pkt;
-!    owerror_t           outcome;
-!    uint8_t           numOptions;
-!    uint8_t           rawdata[SENSITIVE_ACCEL_TEMPERATURE_DATALEN];
-!    
-!    
-!    // create a CoAP RD packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_RXL1);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_RXL1,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_RXL1;
-!    pkt->owner      = COMPONENT_RXL1;
-!    // CoAP payload (2 bytes of temperature data)
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    sensitive_accel_temperature_get_measurement(&rawdata[0]);
-!    pkt->payload[0] = rawdata[8];
-!    pkt->payload[1] = rawdata[9];
-!    numOptions = 0;
-!    // location-path option
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(rxl1_path0)-1);
-!    memcpy(&pkt->payload[0],&rxl1_path0,sizeof(rxl1_path0)-1);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0]                  = (COAP_OPTION_NUM_URIPATH) << 4 |
-!       sizeof(rxl1_path0)-1;
-!    numOptions++;
-!    // content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                  = COAP_OPTION_NUM_CONTENTFORMAT << 4 |
-!       1;
-!    pkt->payload[1]                  = COAP_MEDTYPE_APPOCTETSTREAM;
-!    numOptions++;
-!    // metadata
-!    pkt->l4_destination_port         = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_motesEecs,16);
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_NON,
-!                            COAP_CODE_REQ_PUT,
-!                            numOptions,
-!                            &rxl1_vars.desc);
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    
-!    return;
-! }
-! 
-! void rxl1_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    openqueue_freePacketBuffer(msg);
-! }
-diff -crB openwsn/07-App/rxl1/rxl1.h ../../../sys/net/openwsn/07-App/rxl1/rxl1.h
-*** openwsn/07-App/rxl1/rxl1.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/rxl1/rxl1.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,26 ****
-! #ifndef __RXL1_H
-! #define __RXL1_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup rXL1
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rxl1_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,26 ----
-! #ifndef __RXL1_H
-! #define __RXL1_H
-! 
-! /**
-! \addtogroup AppCoAP
-! \{
-! \addtogroup rXL1
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void rxl1_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/tcpecho/Makefile ../../../sys/net/openwsn/07-App/tcpecho/Makefile
-*** openwsn/07-App/tcpecho/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/tcpecho/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBSUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBSUBMOD)
-+ 
-+ $(BINDIR)$(SUBSUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/07-App/tcpecho/tcpecho.c ../../../sys/net/openwsn/07-App/tcpecho/tcpecho.c
-*** openwsn/07-App/tcpecho/tcpecho.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/tcpecho/tcpecho.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,53 ****
-! #include "openwsn.h"
-! #include "tcpecho.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "opentcp.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void tcpecho_init() {
-! }
-! 
-! bool tcpecho_shouldIlisten() {
-!    return TRUE;
-! }
-! 
-! void tcpecho_receive(OpenQueueEntry_t* msg) {
-!    uint16_t temp_l4_destination_port;
-!    msg->owner   = COMPONENT_TCPECHO;
-!    //reply with the same OpenQueueEntry_t
-!    msg->creator                   = COMPONENT_TCPECHO;
-!    msg->l4_protocol               = IANA_TCP;
-!    temp_l4_destination_port       = msg->l4_destination_port;
-!    msg->l4_destination_port       = msg->l4_sourcePortORicmpv6Type;
-!    msg->l4_sourcePortORicmpv6Type = temp_l4_destination_port;
-!    if (opentcp_send(msg)==E_FAIL) {
-!       openqueue_freePacketBuffer(msg);
-!    }
-! }
-! 
-! void tcpecho_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_TCPECHO;
-!    if (msg->creator!=COMPONENT_TCPECHO) {
-!       openserial_printError(COMPONENT_TCPECHO,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    //close TCP session, but keep listening
-!    opentcp_close();
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void tcpecho_connectDone() {
-! }
-! 
-! bool tcpecho_debugPrint() {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,53 ----
-! #include "openwsn.h"
-! #include "tcpecho.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "opentcp.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void tcpecho_init(void) {
-! }
-! 
-! bool tcpecho_shouldIlisten(void) {
-!    return TRUE;
-! }
-! 
-! void tcpecho_receive(OpenQueueEntry_t* msg) {
-!    uint16_t temp_l4_destination_port;
-!    msg->owner   = COMPONENT_TCPECHO;
-!    //reply with the same OpenQueueEntry_t
-!    msg->creator                   = COMPONENT_TCPECHO;
-!    msg->l4_protocol               = IANA_TCP;
-!    temp_l4_destination_port       = msg->l4_destination_port;
-!    msg->l4_destination_port       = msg->l4_sourcePortORicmpv6Type;
-!    msg->l4_sourcePortORicmpv6Type = temp_l4_destination_port;
-!    if (opentcp_send(msg)==E_FAIL) {
-!       openqueue_freePacketBuffer(msg);
-!    }
-! }
-! 
-! void tcpecho_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_TCPECHO;
-!    if (msg->creator!=COMPONENT_TCPECHO) {
-!       openserial_printError(COMPONENT_TCPECHO,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    //close TCP session, but keep listening
-!    opentcp_close();
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void tcpecho_connectDone(owerror_t error) {
-! }
-! 
-! bool tcpecho_debugPrint(void) {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/07-App/tcpecho/tcpecho.h ../../../sys/net/openwsn/07-App/tcpecho/tcpecho.h
-*** openwsn/07-App/tcpecho/tcpecho.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/tcpecho/tcpecho.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,31 ****
-! #ifndef __TCPECHO_H
-! #define __TCPECHO_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup tcpEcho
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void tcpecho_init();
-! bool tcpecho_shouldIlisten();
-! void tcpecho_receive(OpenQueueEntry_t* msg);
-! void tcpecho_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void tcpecho_connectDone();
-! bool tcpecho_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,31 ----
-! #ifndef __TCPECHO_H
-! #define __TCPECHO_H
-! 
-! /**
-! \addtogroup AppTcp
-! \{
-! \addtogroup tcpEcho
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void tcpecho_init(void);
-! bool tcpecho_shouldIlisten(void);
-! void tcpecho_receive(OpenQueueEntry_t* msg);
-! void tcpecho_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void tcpecho_connectDone(owerror_t error);
-! bool tcpecho_debugPrint(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/tcpinject/Makefile ../../../sys/net/openwsn/07-App/tcpinject/Makefile
-*** openwsn/07-App/tcpinject/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/tcpinject/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBSUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBSUBMOD)
-+ 
-+ $(BINDIR)$(SUBSUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/07-App/tcpinject/tcpinject.c ../../../sys/net/openwsn/07-App/tcpinject/tcpinject.c
-*** openwsn/07-App/tcpinject/tcpinject.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/tcpinject/tcpinject.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,95 ****
-! #include "openwsn.h"
-! #include "tcpinject.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! #include "opentcp.h"
-! #include "openqueue.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    OpenQueueEntry_t*    pkt;
-!    bool                 sending;
-!    open_addr_t          hisAddress;
-!    uint16_t             hisPort;
-! } tcpinject_vars_t;
-! 
-! tcpinject_vars_t tcpinject_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void tcpinject_init() {
-! }
-! 
-! bool tcpinject_shouldIlisten() {
-!    return FALSE;
-! }
-! 
-! void tcpinject_trigger() {
-!    uint8_t number_bytes_from_input_buffer;
-!    uint8_t input_buffer[18];
-!    //get command from OpenSerial (16B IPv6 destination address, 2B destination port)
-!    number_bytes_from_input_buffer = openserial_getInputBuffer(&(input_buffer[0]),sizeof(input_buffer));
-!    if (number_bytes_from_input_buffer!=sizeof(input_buffer)) {
-!       openserial_printError(COMPONENT_TCPINJECT,ERR_INPUTBUFFER_LENGTH,
-!                             (errorparameter_t)number_bytes_from_input_buffer,
-!                             (errorparameter_t)0);
-!       return;
-!    };
-!    tcpinject_vars.hisAddress.type = ADDR_128B;
-!    memcpy(&(tcpinject_vars.hisAddress.addr_128b[0]),&(input_buffer[0]),16);
-!    tcpinject_vars.hisPort = packetfunctions_ntohs(&(input_buffer[16]));
-!    //connect
-!    opentcp_connect(&tcpinject_vars.hisAddress,tcpinject_vars.hisPort,WKP_TCP_INJECT);
-! }
-! 
-! void tcpinject_connectDone(error_t error) {
-!    if (error==E_SUCCESS) {
-!       tcpinject_vars.pkt = openqueue_getFreePacketBuffer(COMPONENT_TCPINJECT);
-!       if (tcpinject_vars.pkt==NULL) {
-!          openserial_printError(COMPONENT_TCPINJECT,ERR_NO_FREE_PACKET_BUFFER,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          return;
-!       }
-!       tcpinject_vars.pkt->creator                      = COMPONENT_TCPINJECT;
-!       tcpinject_vars.pkt->owner                        = COMPONENT_TCPINJECT;
-!       tcpinject_vars.pkt->l4_protocol                  = IANA_UDP;
-!       tcpinject_vars.pkt->l4_sourcePortORicmpv6Type    = WKP_TCP_INJECT;
-!       tcpinject_vars.pkt->l4_destination_port          = tcpinject_vars.hisPort;
-!       memcpy(&(tcpinject_vars.pkt->l3_destinationAdd),&tcpinject_vars.hisAddress,sizeof(open_addr_t));
-!       packetfunctions_reserveHeaderSize(tcpinject_vars.pkt,6);
-!       ((uint8_t*)tcpinject_vars.pkt->payload)[0] = 'p';
-!       ((uint8_t*)tcpinject_vars.pkt->payload)[1] = 'o';
-!       ((uint8_t*)tcpinject_vars.pkt->payload)[2] = 'i';
-!       ((uint8_t*)tcpinject_vars.pkt->payload)[3] = 'p';
-!       ((uint8_t*)tcpinject_vars.pkt->payload)[4] = 'o';
-!       ((uint8_t*)tcpinject_vars.pkt->payload)[5] = 'i';
-!       if (opentcp_send(tcpinject_vars.pkt)==E_FAIL) {
-!          openqueue_freePacketBuffer(tcpinject_vars.pkt);
-!       }
-!       return;
-!    }
-! }
-! 
-! void tcpinject_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_TCPINJECT;
-!    if (msg->creator!=COMPONENT_TCPINJECT) {
-!       openserial_printError(COMPONENT_TCPINJECT,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    opentcp_close();
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void tcpinject_receive(OpenQueueEntry_t* msg) {
-! }
-! 
-! bool tcpinject_debugPrint() {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,88 ----
-! #include "openwsn.h"
-! #include "tcpinject.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! #include "opentcp.h"
-! #include "openqueue.h"
-! 
-! //=========================== variables =======================================
-! 
-! tcpinject_vars_t tcpinject_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void tcpinject_init(void) {
-! }
-! 
-! bool tcpinject_shouldIlisten(void) {
-!    return FALSE;
-! }
-! 
-! void tcpinject_trigger(void) {
-!    uint8_t number_bytes_from_input_buffer;
-!    uint8_t input_buffer[18];
-!    //get command from OpenSerial (16B IPv6 destination address, 2B destination port)
-!    number_bytes_from_input_buffer = openserial_getInputBuffer(&(input_buffer[0]),sizeof(input_buffer));
-!    if (number_bytes_from_input_buffer!=sizeof(input_buffer)) {
-!       openserial_printError(COMPONENT_TCPINJECT,ERR_INPUTBUFFER_LENGTH,
-!                             (errorparameter_t)number_bytes_from_input_buffer,
-!                             (errorparameter_t)0);
-!       return;
-!    };
-!    tcpinject_vars.hisAddress.type = ADDR_128B;
-!    memcpy(&(tcpinject_vars.hisAddress.addr_128b[0]),&(input_buffer[0]),16);
-!    tcpinject_vars.hisPort = packetfunctions_ntohs(&(input_buffer[16]));
-!    //connect
-!    opentcp_connect(&tcpinject_vars.hisAddress,tcpinject_vars.hisPort,WKP_TCP_INJECT);
-! }
-! 
-! void tcpinject_connectDone(owerror_t error) {
-!    if (error==E_SUCCESS) {
-!       tcpinject_vars.pkt = openqueue_getFreePacketBuffer(COMPONENT_TCPINJECT);
-!       if (tcpinject_vars.pkt==NULL) {
-!          openserial_printError(COMPONENT_TCPINJECT,ERR_NO_FREE_PACKET_BUFFER,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          return;
-!       }
-!       tcpinject_vars.pkt->creator                      = COMPONENT_TCPINJECT;
-!       tcpinject_vars.pkt->owner                        = COMPONENT_TCPINJECT;
-!       tcpinject_vars.pkt->l4_protocol                  = IANA_UDP;
-!       tcpinject_vars.pkt->l4_sourcePortORicmpv6Type    = WKP_TCP_INJECT;
-!       tcpinject_vars.pkt->l4_destination_port          = tcpinject_vars.hisPort;
-!       memcpy(&(tcpinject_vars.pkt->l3_destinationAdd),&tcpinject_vars.hisAddress,sizeof(open_addr_t));
-!       packetfunctions_reserveHeaderSize(tcpinject_vars.pkt,6);
-!       ((uint8_t*)tcpinject_vars.pkt->payload)[0] = 'p';
-!       ((uint8_t*)tcpinject_vars.pkt->payload)[1] = 'o';
-!       ((uint8_t*)tcpinject_vars.pkt->payload)[2] = 'i';
-!       ((uint8_t*)tcpinject_vars.pkt->payload)[3] = 'p';
-!       ((uint8_t*)tcpinject_vars.pkt->payload)[4] = 'o';
-!       ((uint8_t*)tcpinject_vars.pkt->payload)[5] = 'i';
-!       if (opentcp_send(tcpinject_vars.pkt)==E_FAIL) {
-!          openqueue_freePacketBuffer(tcpinject_vars.pkt);
-!       }
-!       return;
-!    }
-! }
-! 
-! void tcpinject_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_TCPINJECT;
-!    if (msg->creator!=COMPONENT_TCPINJECT) {
-!       openserial_printError(COMPONENT_TCPINJECT,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    opentcp_close();
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void tcpinject_receive(OpenQueueEntry_t* msg) {
-! }
-! 
-! bool tcpinject_debugPrint(void) {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/07-App/tcpinject/tcpinject.h ../../../sys/net/openwsn/07-App/tcpinject/tcpinject.h
-*** openwsn/07-App/tcpinject/tcpinject.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/tcpinject/tcpinject.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,32 ****
-! #ifndef __TCPINJECT_H
-! #define __TCPINJECT_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup tcpInject
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void tcpinject_init();
-! bool tcpinject_shouldIlisten();
-! void tcpinject_trigger();
-! void tcpinject_connectDone(error_t error);
-! void tcpinject_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void tcpinject_receive(OpenQueueEntry_t* msg);
-! bool tcpinject_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,39 ----
-! #ifndef __TCPINJECT_H
-! #define __TCPINJECT_H
-! 
-! /**
-! \addtogroup AppTcp
-! \{
-! \addtogroup tcpInject
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    OpenQueueEntry_t*    pkt;
-!    bool                 sending;
-!    open_addr_t          hisAddress;
-!    uint16_t             hisPort;
-! } tcpinject_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! void tcpinject_init(void);
-! bool tcpinject_shouldIlisten(void);
-! void tcpinject_trigger(void);
-! void tcpinject_connectDone(owerror_t error);
-! void tcpinject_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void tcpinject_receive(OpenQueueEntry_t* msg);
-! bool tcpinject_debugPrint(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/tcpprint/Makefile ../../../sys/net/openwsn/07-App/tcpprint/Makefile
-*** openwsn/07-App/tcpprint/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/tcpprint/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBSUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBSUBMOD)
-+ 
-+ $(BINDIR)$(SUBSUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/07-App/tcpprint/tcpprint.c ../../../sys/net/openwsn/07-App/tcpprint/tcpprint.c
-*** openwsn/07-App/tcpprint/tcpprint.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/tcpprint/tcpprint.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,37 ****
-! #include "openwsn.h"
-! #include "tcpprint.h"
-! #include "openserial.h"
-! #include "openqueue.h"
-! #include "opentcp.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void tcpprint_init() {
-! }
-! 
-! bool tcpprint_shouldIlisten(){
-!    return TRUE;
-! }
-! 
-! void tcpprint_receive(OpenQueueEntry_t* msg) {
-!    openserial_printData((uint8_t*)(msg->payload),msg->length);
-!    //close TCP session, but keep listening
-!    opentcp_close();
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void tcpprint_connectDone(error_t error) {
-! }
-! 
-! void tcpprint_sendDone(OpenQueueEntry_t* msg, error_t error) {
-! }
-! 
-! bool tcpprint_debugPrint() {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,37 ----
-! #include "openwsn.h"
-! #include "tcpprint.h"
-! #include "openserial.h"
-! #include "openqueue.h"
-! #include "opentcp.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void tcpprint_init(void) {
-! }
-! 
-! bool tcpprint_shouldIlisten(void){
-!    return TRUE;
-! }
-! 
-! void tcpprint_receive(OpenQueueEntry_t* msg) {
-!    openserial_printData((uint8_t*)(msg->payload),msg->length);
-!    //close TCP session, but keep listening
-!    opentcp_close();
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void tcpprint_connectDone(owerror_t error) {
-! }
-! 
-! void tcpprint_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-! }
-! 
-! bool tcpprint_debugPrint(void) {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/07-App/tcpprint/tcpprint.h ../../../sys/net/openwsn/07-App/tcpprint/tcpprint.h
-*** openwsn/07-App/tcpprint/tcpprint.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/tcpprint/tcpprint.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,31 ****
-! #ifndef __TCPPRINT_H
-! #define __TCPPRINT_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup tcpPrint
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void tcpprint_init();
-! bool tcpprint_shouldIlisten();
-! void tcpprint_receive(OpenQueueEntry_t* msg);
-! void tcpprint_connectDone(error_t error);
-! void tcpprint_sendDone(OpenQueueEntry_t* msg, error_t error);
-! bool tcpprint_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,31 ----
-! #ifndef __TCPPRINT_H
-! #define __TCPPRINT_H
-! 
-! /**
-! \addtogroup AppTcp
-! \{
-! \addtogroup tcpPrint
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void tcpprint_init(void);
-! bool tcpprint_shouldIlisten(void);
-! void tcpprint_receive(OpenQueueEntry_t* msg);
-! void tcpprint_connectDone(owerror_t error);
-! void tcpprint_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! bool tcpprint_debugPrint(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/udpecho/Makefile ../../../sys/net/openwsn/07-App/udpecho/Makefile
-*** openwsn/07-App/udpecho/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/udpecho/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBSUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBSUBMOD)
-+ 
-+ $(BINDIR)$(SUBSUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/07-App/udpecho/udpecho.c ../../../sys/net/openwsn/07-App/udpecho/udpecho.c
-*** openwsn/07-App/udpecho/udpecho.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udpecho/udpecho.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,61 ****
-! #include "openwsn.h"
-! #include "udpecho.h"
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void udpecho_init() {
-! }
-! 
-! void udpecho_receive(OpenQueueEntry_t* msg) {
-!    uint16_t temp_l4_destination_port;
-!    
-!    OpenQueueEntry_t * pkt = openqueue_getFreePacketBuffer(COMPONENT_UDPECHO);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_UDPLATENCY,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    
-!    pkt->owner   = COMPONENT_UDPECHO;
-!    //reply with the same OpenQueueEntry_t
-!    pkt->creator                       = COMPONENT_UDPECHO;
-!    pkt->l4_protocol                   = IANA_UDP;
-!    temp_l4_destination_port           = msg->l4_destination_port;
-!    pkt->l4_destination_port           = msg->l4_sourcePortORicmpv6Type;
-!    pkt->l4_sourcePortORicmpv6Type     = temp_l4_destination_port;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    //copy source to destination to echo.
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&msg->l3_sourceAdd.addr_128b[0],16);
-!    
-!    packetfunctions_reserveHeaderSize(pkt,msg->length);
-!    memcpy(&pkt->payload[0],&msg->payload[0],msg->length);
-!    openqueue_freePacketBuffer(msg);
-!    
-!    if ((openudp_send(pkt))==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-! }
-! 
-! void udpecho_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_UDPECHO;
-!    if (msg->creator!=COMPONENT_UDPECHO) {
-!       openserial_printError(COMPONENT_UDPECHO,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! bool udpecho_debugPrint() {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,61 ----
-! #include "openwsn.h"
-! #include "udpecho.h"
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void udpecho_init(void) {
-! }
-! 
-! void udpecho_receive(OpenQueueEntry_t* msg) {
-!    uint16_t temp_l4_destination_port;
-!    
-!    OpenQueueEntry_t * pkt = openqueue_getFreePacketBuffer(COMPONENT_UDPECHO);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_UDPLATENCY,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    
-!    pkt->owner   = COMPONENT_UDPECHO;
-!    //reply with the same OpenQueueEntry_t
-!    pkt->creator                       = COMPONENT_UDPECHO;
-!    pkt->l4_protocol                   = IANA_UDP;
-!    temp_l4_destination_port           = msg->l4_destination_port;
-!    pkt->l4_destination_port           = msg->l4_sourcePortORicmpv6Type;
-!    pkt->l4_sourcePortORicmpv6Type     = temp_l4_destination_port;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    //copy source to destination to echo.
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&msg->l3_sourceAdd.addr_128b[0],16);
-!    
-!    packetfunctions_reserveHeaderSize(pkt,msg->length);
-!    memcpy(&pkt->payload[0],&msg->payload[0],msg->length);
-!    openqueue_freePacketBuffer(msg);
-!    
-!    if ((openudp_send(pkt))==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-! }
-! 
-! void udpecho_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_UDPECHO;
-!    if (msg->creator!=COMPONENT_UDPECHO) {
-!       openserial_printError(COMPONENT_UDPECHO,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! bool udpecho_debugPrint(void) {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/07-App/udpecho/udpecho.h ../../../sys/net/openwsn/07-App/udpecho/udpecho.h
-*** openwsn/07-App/udpecho/udpecho.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udpecho/udpecho.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,29 ****
-! #ifndef __UDPECHO_H
-! #define __UDPECHO_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup udpEcho
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void udpecho_init();
-! void udpecho_receive(OpenQueueEntry_t* msg);
-! void udpecho_sendDone(OpenQueueEntry_t* msg, error_t error);
-! bool udpecho_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,29 ----
-! #ifndef __UDPECHO_H
-! #define __UDPECHO_H
-! 
-! /**
-! \addtogroup AppUdp
-! \{
-! \addtogroup udpEcho
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void udpecho_init(void);
-! void udpecho_receive(OpenQueueEntry_t* msg);
-! void udpecho_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! bool udpecho_debugPrint(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/udpecho/udpecho.py ../../../sys/net/openwsn/07-App/udpecho/udpecho.py
-*** openwsn/07-App/udpecho/udpecho.py	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udpecho/udpecho.py	Wed Jan 15 13:48:27 2014
-***************
-*** 1,26 ****
-! import socket
-! 
-! request    = "poipoipoipoi"
-! myAddress  = '' #means 'all'
-! myPort     = 21568
-! hisAddress = '2001:470:48b8:cfde:1415:9200:12:e63b'
-! hisPort    = 7
-! 
-! print "Testing udpEcho..."
-! 
-! socket_handler = socket.socket(socket.AF_INET6,socket.SOCK_DGRAM)
-! socket_handler.settimeout(5)
-! socket_handler.bind((myAddress,myPort))
-! socket_handler.sendto(request,(hisAddress,hisPort))
-! print "\nrequest "+myAddress+"%"+str(myPort)+" -> "+hisAddress+"%"+str(hisPort)
-! print request+" ("+str(len(request))+" bytes)"
-! try:
-!    reply,dist_addr = socket_handler.recvfrom(1024)
-! except socket.timeout:
-!    print "\nno reply"
-! else:
-!    print "\nreply "+str(dist_addr[0])+"%"+str(dist_addr[1])+" -> "+myAddress+"%"+str(myPort)
-!    print reply+" ("+str(len(reply))+" bytes)"
-! socket_handler.close()
-! 
-! raw_input("\nPress return to close this window...")
---- 1,32 ----
-! import socket
-! 
-! request    = "poipoipoipoi"
-! myAddress  = '' #means 'all'
-! myPort     = 21568
-! hisAddress = 'bbbb::1415:920b:0301:00e9'
-! hisPort    = 7
-! succ       = 0
-! fail       = 0
-! print "Testing udpEcho..."
-! 
-! for i in range(10):
-!    print "echo " + str(i)
-!    socket_handler = socket.socket(socket.AF_INET6,socket.SOCK_DGRAM)
-!    socket_handler.settimeout(5)
-!    socket_handler.bind((myAddress,myPort))
-!    socket_handler.sendto(request,(hisAddress,hisPort))
-!    print "\nrequest "+myAddress+"%"+str(myPort)+" -> "+hisAddress+"%"+str(hisPort)
-!    print request+" ("+str(len(request))+" bytes)"
-!    try:
-!       reply,dist_addr = socket_handler.recvfrom(1024)
-!    except socket.timeout:
-!       print "\nno reply"
-!       fail=fail+1
-!    else:
-!       print "\nreply "+str(dist_addr[0])+"%"+str(dist_addr[1])+" -> "+myAddress+"%"+str(myPort)
-!       print reply+" ("+str(len(reply))+" bytes)"
-!       succ=succ+1
-!    socket_handler.close()
-! 
-! print "success " + str(succ) + " fail " + str(fail)
-! raw_input("\nPress return to close this window...")
-diff -crB openwsn/07-App/udpinject/Makefile ../../../sys/net/openwsn/07-App/udpinject/Makefile
-*** openwsn/07-App/udpinject/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/udpinject/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBSUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBSUBMOD)
-+ 
-+ $(BINDIR)$(SUBSUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/07-App/udpinject/udpinject.c ../../../sys/net/openwsn/07-App/udpinject/udpinject.c
-*** openwsn/07-App/udpinject/udpinject.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udpinject/udpinject.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,75 ****
-! #include "openwsn.h"
-! #include "udpinject.h"
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void udpinject_init() {
-! }
-! 
-! void udpinject_trigger() {
-!    OpenQueueEntry_t* pkt;
-!    uint8_t number_bytes_from_input_buffer;
-!    uint8_t input_buffer[18];
-!    //get command from OpenSerial (16B IPv6 destination address, 2B destination port)
-!    number_bytes_from_input_buffer = openserial_getInputBuffer(&(input_buffer[0]),sizeof(input_buffer));
-!    if (number_bytes_from_input_buffer!=sizeof(input_buffer)) {
-!       openserial_printError(COMPONENT_UDPINJECT,ERR_INPUTBUFFER_LENGTH,
-!                             (errorparameter_t)number_bytes_from_input_buffer,
-!                             (errorparameter_t)0);
-!       return;
-!    };
-!    //prepare packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_UDPINJECT);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_UDPINJECT,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    pkt->creator                     = COMPONENT_UDPINJECT;
-!    pkt->owner                       = COMPONENT_UDPINJECT;
-!    pkt->l4_protocol                 = IANA_UDP;
-!    pkt->l4_sourcePortORicmpv6Type   = WKP_UDP_INJECT;
-!    pkt->l4_destination_port         = packetfunctions_ntohs(&(input_buffer[16]));
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&(pkt->l3_destinationAdd.addr_128b[0]),&(input_buffer[0]),16);
-!    packetfunctions_reserveHeaderSize(pkt,6);
-!    ((uint8_t*)pkt->payload)[0]      = 'p';
-!    ((uint8_t*)pkt->payload)[1]      = 'o';
-!    ((uint8_t*)pkt->payload)[2]      = 'i';
-!    ((uint8_t*)pkt->payload)[3]      = 'p';
-!    ((uint8_t*)pkt->payload)[4]      = 'o';
-!    ((uint8_t*)pkt->payload)[5]      = 'i';
-!    //send packet
-!    if ((openudp_send(pkt))==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-! }
-! 
-! void udpinject_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_UDPINJECT;
-!    if (msg->creator!=COMPONENT_UDPINJECT) {
-!       openserial_printError(COMPONENT_UDPINJECT,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void udpinject_receive(OpenQueueEntry_t* msg) {
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! bool udpinject_debugPrint() {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,75 ----
-! #include "openwsn.h"
-! #include "udpinject.h"
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void udpinject_init(void) {
-! }
-! 
-! void udpinject_trigger(void) {
-!    OpenQueueEntry_t* pkt;
-!    uint8_t number_bytes_from_input_buffer;
-!    uint8_t input_buffer[18];
-!    //get command from OpenSerial (16B IPv6 destination address, 2B destination port)
-!    number_bytes_from_input_buffer = openserial_getInputBuffer(&(input_buffer[0]),sizeof(input_buffer));
-!    if (number_bytes_from_input_buffer!=sizeof(input_buffer)) {
-!       openserial_printError(COMPONENT_UDPINJECT,ERR_INPUTBUFFER_LENGTH,
-!                             (errorparameter_t)number_bytes_from_input_buffer,
-!                             (errorparameter_t)0);
-!       return;
-!    };
-!    //prepare packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_UDPINJECT);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_UDPINJECT,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    pkt->creator                     = COMPONENT_UDPINJECT;
-!    pkt->owner                       = COMPONENT_UDPINJECT;
-!    pkt->l4_protocol                 = IANA_UDP;
-!    pkt->l4_sourcePortORicmpv6Type   = WKP_UDP_INJECT;
-!    pkt->l4_destination_port         = packetfunctions_ntohs(&(input_buffer[16]));
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&(pkt->l3_destinationAdd.addr_128b[0]),&(input_buffer[0]),16);
-!    packetfunctions_reserveHeaderSize(pkt,6);
-!    ((uint8_t*)pkt->payload)[0]      = 'p';
-!    ((uint8_t*)pkt->payload)[1]      = 'o';
-!    ((uint8_t*)pkt->payload)[2]      = 'i';
-!    ((uint8_t*)pkt->payload)[3]      = 'p';
-!    ((uint8_t*)pkt->payload)[4]      = 'o';
-!    ((uint8_t*)pkt->payload)[5]      = 'i';
-!    //send packet
-!    if ((openudp_send(pkt))==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-! }
-! 
-! void udpinject_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_UDPINJECT;
-!    if (msg->creator!=COMPONENT_UDPINJECT) {
-!       openserial_printError(COMPONENT_UDPINJECT,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void udpinject_receive(OpenQueueEntry_t* msg) {
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! bool udpinject_debugPrint(void) {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/07-App/udpinject/udpinject.h ../../../sys/net/openwsn/07-App/udpinject/udpinject.h
-*** openwsn/07-App/udpinject/udpinject.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udpinject/udpinject.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,30 ****
-! #ifndef __UDPINJECT_H
-! #define __UDPINJECT_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup udpInject
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void udpinject_init();
-! void udpinject_trigger();
-! void udpinject_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void udpinject_receive(OpenQueueEntry_t* msg);
-! bool udpinject_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,30 ----
-! #ifndef __UDPINJECT_H
-! #define __UDPINJECT_H
-! 
-! /**
-! \addtogroup AppUdp
-! \{
-! \addtogroup udpInject
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void udpinject_init(void);
-! void udpinject_trigger(void);
-! void udpinject_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void udpinject_receive(OpenQueueEntry_t* msg);
-! bool udpinject_debugPrint(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/udplatency/Makefile ../../../sys/net/openwsn/07-App/udplatency/Makefile
-*** openwsn/07-App/udplatency/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/udplatency/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBSUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBSUBMOD)
-+ 
-+ $(BINDIR)$(SUBSUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/07-App/udplatency/udplatency.c ../../../sys/net/openwsn/07-App/udplatency/udplatency.c
-*** openwsn/07-App/udplatency/udplatency.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udplatency/udplatency.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,117 ****
-! #include "openwsn.h"
-! #include "udplatency.h"
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! #include "opentimers.h"
-! #include "openrandom.h"
-! #include "opencoap.h"
-! #include "scheduler.h"
-! #include "IEEE802154E.h"
-! #include "idmanager.h"
-! #include "neighbors.h"
-! 
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in mseconds)
-! #define UDPLATENCYPERIOD     30000
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    opentimer_id_t  timerId;
-! } udplatency_vars_t;
-! 
-! udplatency_vars_t udplatency_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void udplatency_timer();
-! 
-! //=========================== public ==========================================
-! 
-! void udplatency_init() {
-!  //don't run on dagroot 
-!  if (idmanager_getIsDAGroot()) return;
-!  
-!  udplatency_vars.timerId    = opentimers_start(UDPLATENCYPERIOD,
-!                                           TIMER_PERIODIC,TIME_MS,
-!                                           udplatency_timer);
-! }
-! 
-! void udplatency_task(){
-!    OpenQueueEntry_t* pkt;
-!    open_addr_t * p;
-!    open_addr_t  q;
-! 
-!    //prepare packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_UDPLATENCY);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_UDPLATENCY,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    pkt->creator                     = COMPONENT_UDPLATENCY;
-!    pkt->owner                       = COMPONENT_UDPLATENCY;
-!    pkt->l4_protocol                 = IANA_UDP;
-!    pkt->l4_sourcePortORicmpv6Type   = WKP_UDP_LATENCY;
-!    pkt->l4_destination_port         = WKP_UDP_LATENCY;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_motedata,16);
-!    
-! //the payload contains the 64bit address of the sender + the ASN
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(asn_t));
-!    asnWriteToPkt(pkt);//gets asn from mac layer.
-!    
-!    packetfunctions_reserveHeaderSize(pkt,8);
-!    p=idmanager_getMyID(ADDR_64B);
-!    pkt->payload[0]=p->addr_64b[0];
-!    pkt->payload[1]=p->addr_64b[1];
-!    pkt->payload[2]=p->addr_64b[2];
-!    pkt->payload[3]=p->addr_64b[3];
-!    pkt->payload[4]=p->addr_64b[4];
-!    pkt->payload[5]=p->addr_64b[5];
-!    pkt->payload[6]=p->addr_64b[6];
-!    pkt->payload[7]=p->addr_64b[7];
-!    
-!    neighbors_getPreferredParentEui64(&q);
-!    if (q.type==ADDR_64B){
-!       packetfunctions_reserveHeaderSize(pkt,8);
-!    
-!    //copy my preferred parent so we can build the topology
-!       pkt->payload[0]=q.addr_64b[0];
-!       pkt->payload[1]=q.addr_64b[1];
-!       pkt->payload[2]=q.addr_64b[2];
-!       pkt->payload[3]=q.addr_64b[3];
-!       pkt->payload[4]=q.addr_64b[4];
-!       pkt->payload[5]=q.addr_64b[5];
-!       pkt->payload[6]=q.addr_64b[6];
-!       pkt->payload[7]=q.addr_64b[7];
-!    }
-!    //send packet
-!    if ((openudp_send(pkt))==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-! }
-! 
-! void udplatency_timer() {
-!   scheduler_push_task(udplatency_task,TASKPRIO_COAP);
-! }
-! 
-! void udplatency_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_UDPLATENCY;
-!    if (msg->creator!=COMPONENT_UDPLATENCY) {
-!       openserial_printError(COMPONENT_UDPLATENCY,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void udplatency_receive(OpenQueueEntry_t* msg) {
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! //=========================== private =========================================
-\ No newline at end of file
---- 1,143 ----
-! #include "openwsn.h"
-! #include "udplatency.h"
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! #include "opentimers.h"
-! #include "openrandom.h"
-! #include "opencoap.h"
-! #include "scheduler.h"
-! #include "IEEE802154E.h"
-! #include "idmanager.h"
-! #include "neighbors.h"
-! 
-! #include "thread.h"
-! 
-! //=========================== defines =========================================
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    opentimer_id_t  timerId;
-! } udplatency_vars_t;
-! 
-! udplatency_vars_t udplatency_vars;
-! uint16_t          seqNum;
-! 
-! //static char openwsn_udplatency_stack[KERNEL_CONF_STACKSIZE_MAIN];
-! 
-! //=========================== prototypes ======================================
-! 
-! void udplatency_timer(void);
-! 
-! //=========================== public ==========================================
-! 
-! void udplatency_init(void) {
-!    seqNum = 0;
-!    udplatency_vars.timerId    = opentimers_start(UDPLATENCYPERIOD,
-!                                             TIMER_PERIODIC,TIME_MS,
-!                                             udplatency_timer);
-! }
-! 
-! void udplatency_task(void) {
-!    OpenQueueEntry_t* pkt;
-!    open_addr_t * p;
-!    open_addr_t  q;
-! 
-!    // don't run if not synch
-!    if (ieee154e_isSynch() == FALSE) return;
-! 
-!    // don't run on dagroot
-!    if (idmanager_getIsDAGroot()) {
-!        opentimers_stop(udplatency_vars.timerId);
-!        return;
-!    }
-! 
-!    // prepare packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_UDPLATENCY);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_UDPLATENCY,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    pkt->creator                     = COMPONENT_UDPLATENCY;
-!    pkt->owner                       = COMPONENT_UDPLATENCY;
-!    pkt->l4_protocol                 = IANA_UDP;
-!    pkt->l4_sourcePortORicmpv6Type   = WKP_UDP_LATENCY;
-!    pkt->l4_destination_port         = WKP_UDP_LATENCY;
-!    pkt->l3_destinationAdd.type      = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_motedata,16);
-!    
-!    // the payload contains the 64bit address of the sender + the ASN
-!    packetfunctions_reserveHeaderSize(pkt, sizeof(asn_t));
-!    ieee154e_getAsn(pkt->payload);//gets asn from mac layer.
-!    
-!    packetfunctions_reserveHeaderSize(pkt,8);
-!    p=idmanager_getMyID(ADDR_64B);
-!    pkt->payload[0]    = p->addr_64b[0];
-!    pkt->payload[1]    = p->addr_64b[1];
-!    pkt->payload[2]    = p->addr_64b[2];
-!    pkt->payload[3]    = p->addr_64b[3];
-!    pkt->payload[4]    = p->addr_64b[4];
-!    pkt->payload[5]    = p->addr_64b[5];
-!    pkt->payload[6]    = p->addr_64b[6];
-!    pkt->payload[7]    = p->addr_64b[7];
-!    
-!    neighbors_getPreferredParentEui64(&q);
-!    if (q.type==ADDR_64B) {
-!       packetfunctions_reserveHeaderSize(pkt,8);
-!    
-!    // copy my preferred parent so we can build the topology
-!       pkt->payload[0] = q.addr_64b[0];
-!       pkt->payload[1] = q.addr_64b[1];
-!       pkt->payload[2] = q.addr_64b[2];
-!       pkt->payload[3] = q.addr_64b[3];
-!       pkt->payload[4] = q.addr_64b[4];
-!       pkt->payload[5] = q.addr_64b[5];
-!       pkt->payload[6] = q.addr_64b[6];
-!       pkt->payload[7] = q.addr_64b[7];
-!    }
-! 
-!    // insert Sequence Number
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(seqNum));
-!    pkt->payload[0]    = (seqNum >> 8) & 0xff;
-!    pkt->payload[1]    = seqNum & 0xff;
-! 
-!    // send packet
-!    if ((openudp_send(pkt)) == E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-! 
-!    // increment seqNum
-!    seqNum++;
-! 
-!    // close timer when test finish
-!    if (seqNum > NUMPKTTEST) {
-!        opentimers_stop(udplatency_vars.timerId);
-!    }
-! }
-! 
-! void udplatency_timer(void) {
-!     scheduler_push_task(udplatency_task,TASKPRIO_COAP);
-!   /*thread_create(openwsn_udplatency_stack, KERNEL_CONF_STACKSIZE_MAIN, 
-!                  PRIORITY_OPENWSN_UDPLATENCY, CREATE_STACKTEST, 
-!                  udplatency_task, "udplatency task");*/
-! }
-! 
-! void udplatency_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_UDPLATENCY;
-!    if (msg->creator!=COMPONENT_UDPLATENCY) {
-!       openserial_printError(COMPONENT_UDPLATENCY,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void udplatency_receive(OpenQueueEntry_t* msg) {
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! //=========================== private =========================================
-diff -crB openwsn/07-App/udplatency/udplatency.h ../../../sys/net/openwsn/07-App/udplatency/udplatency.h
-*** openwsn/07-App/udplatency/udplatency.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udplatency/udplatency.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,31 ****
-! #ifndef __UDPLATENCY_H
-! #define __UDPLATENCY_H
-! 
-! /**
-! \addtogroup App
-! 
-! \addtogroup udpLatency
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void udplatency_init();
-! void udplatency_trigger();
-! void udplatency_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void udplatency_receive(OpenQueueEntry_t* msg);
-! bool udplatency_debugPrint();
-! void udplatency_task();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,35 ----
-! #ifndef __UDPLATENCY_H
-! #define __UDPLATENCY_H
-! 
-! /**
-! \addtogroup AppUdp
-! \{
-! \addtogroup UdpLatency
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! /// inter-packet period (in mseconds)
-! #define UDPLATENCYPERIOD     3000
-! #define NUMPKTTEST           300
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void udplatency_init(void);
-! void udplatency_trigger(void);
-! void udplatency_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void udplatency_receive(OpenQueueEntry_t* msg);
-! bool udplatency_debugPrint(void);
-! void udplatency_task(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/udpprint/Makefile ../../../sys/net/openwsn/07-App/udpprint/Makefile
-*** openwsn/07-App/udpprint/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/udpprint/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBSUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBSUBMOD)
-+ 
-+ $(BINDIR)$(SUBSUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/07-App/udpprint/udpprint.c ../../../sys/net/openwsn/07-App/udpprint/udpprint.c
-*** openwsn/07-App/udpprint/udpprint.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udpprint/udpprint.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,31 ****
-! #include "openwsn.h"
-! #include "udpprint.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void udpprint_init() {
-! }
-! 
-! void udpprint_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    openserial_printError(COMPONENT_UDPPRINT,ERR_UNEXPECTED_SENDDONE,
-!                          (errorparameter_t)0,
-!                          (errorparameter_t)0);
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void udpprint_receive(OpenQueueEntry_t* msg) {
-!    openserial_printData((uint8_t*)(msg->payload),msg->length);
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! bool udpprint_debugPrint() {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,31 ----
-! #include "openwsn.h"
-! #include "udpprint.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void udpprint_init(void) {
-! }
-! 
-! void udpprint_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    openserial_printError(COMPONENT_UDPPRINT,ERR_UNEXPECTED_SENDDONE,
-!                          (errorparameter_t)0,
-!                          (errorparameter_t)0);
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void udpprint_receive(OpenQueueEntry_t* msg) {
-!    openserial_printData((uint8_t*)(msg->payload),msg->length);
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! bool udpprint_debugPrint(void) {
-!    return FALSE;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/07-App/udpprint/udpprint.h ../../../sys/net/openwsn/07-App/udpprint/udpprint.h
-*** openwsn/07-App/udpprint/udpprint.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udpprint/udpprint.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,29 ****
-! #ifndef __UDPPRINT_H
-! #define __UDPPRINT_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup udpPrint
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void udpprint_init();
-! void udpprint_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void udpprint_receive(OpenQueueEntry_t* msg);
-! bool udpprint_debugPrint();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,29 ----
-! #ifndef __UDPPRINT_H
-! #define __UDPPRINT_H
-! 
-! /**
-! \addtogroup AppUdp
-! \{
-! \addtogroup udpPrint
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void udpprint_init(void);
-! void udpprint_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void udpprint_receive(OpenQueueEntry_t* msg);
-! bool udpprint_debugPrint(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/udprand/Makefile ../../../sys/net/openwsn/07-App/udprand/Makefile
-*** openwsn/07-App/udprand/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/udprand/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBSUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBSUBMOD)
-+ 
-+ $(BINDIR)$(SUBSUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/07-App/udprand/udprand.c ../../../sys/net/openwsn/07-App/udprand/udprand.c
-*** openwsn/07-App/udprand/udprand.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udprand/udprand.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,81 ****
-! #include "openwsn.h"
-! #include "udprand.h"
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! #include "opentimers.h"
-! #include "openrandom.h"
-! #include "opencoap.h"
-! #include "scheduler.h"
-! 
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in mseconds)
-! #define UDPRANDPERIOD     30000
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    opentimer_id_t  timerId;
-! } udprand_vars_t;
-! 
-! udprand_vars_t udprand_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void udprand_timer();
-! 
-! //=========================== public ==========================================
-! 
-! void udprand_init() {
-!    udprand_vars.timerId    = opentimers_start(openrandom_get16b()%UDPRANDPERIOD,
-!                                           TIMER_PERIODIC,TIME_MS,
-!                                           udprand_timer);
-! }
-! 
-! void udprand_task(){
-!     OpenQueueEntry_t* pkt;
-!    //prepare packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_UDPRAND);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_UDPRAND,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    pkt->creator                     = COMPONENT_UDPRAND;
-!    pkt->owner                       = COMPONENT_UDPRAND;
-!    pkt->l4_protocol                 = IANA_UDP;
-!    pkt->l4_sourcePortORicmpv6Type   = WKP_UDP_RAND;
-!    pkt->l4_destination_port         = WKP_UDP_RAND;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_motedata,16);
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    ((uint8_t*)pkt->payload)[0]      = openrandom_get16b()%0xff;
-!    ((uint8_t*)pkt->payload)[1]      = openrandom_get16b()%0xff;
-!    //send packet
-!    if ((openudp_send(pkt))==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-! }
-! 
-! void udprand_timer() {
-!   scheduler_push_task(udprand_task,TASKPRIO_COAP);
-! }
-! 
-! void udprand_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    msg->owner = COMPONENT_UDPRAND;
-!    if (msg->creator!=COMPONENT_UDPRAND) {
-!       openserial_printError(COMPONENT_UDPRAND,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void udprand_receive(OpenQueueEntry_t* msg) {
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,98 ----
-! #include "openwsn.h"
-! #include "udprand.h"
-! #include "openudp.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! #include "opentimers.h"
-! #include "openrandom.h"
-! #include "opencoap.h"
-! #include "scheduler.h"
-! #include "idmanager.h"
-! #include "IEEE802154E.h"
-! 
-! #include "thread.h"
-! 
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in mseconds)
-! #define UDPRANDPERIOD     30000
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    opentimer_id_t  timerId;
-! } udprand_vars_t;
-! 
-! udprand_vars_t udprand_vars;
-! //static char openwsn_udprand_stack[KERNEL_CONF_STACKSIZE_MAIN];
-! //=========================== prototypes ======================================
-! 
-! void udprand_timer(void);
-! 
-! //=========================== public ==========================================
-! 
-! void udprand_init(void) {
-!    udprand_vars.timerId    = opentimers_start(openrandom_get16b()%UDPRANDPERIOD,
-!                                           TIMER_PERIODIC,TIME_MS,
-!                                           udprand_timer);
-! }
-! 
-! void udprand_task(void){
-!     OpenQueueEntry_t* pkt;
-!    
-!    // don't run if not synch
-!    if (ieee154e_isSynch() == FALSE) return;
-!     
-!     // don't run on dagroot
-!    if (idmanager_getIsDAGroot()) {
-!       opentimers_stop(udprand_vars.timerId);
-!       return;
-!    }
-!    
-!    //prepare packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_UDPRAND);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_UDPRAND,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       return;
-!    }
-!    pkt->creator                     = COMPONENT_UDPRAND;
-!    pkt->owner                       = COMPONENT_UDPRAND;
-!    pkt->l4_protocol                 = IANA_UDP;
-!    pkt->l4_sourcePortORicmpv6Type   = WKP_UDP_RAND;
-!    pkt->l4_destination_port         = WKP_UDP_RAND;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_motedata,16);
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    ((uint8_t*)pkt->payload)[0]      = openrandom_get16b()%0xff;
-!    ((uint8_t*)pkt->payload)[1]      = openrandom_get16b()%0xff;
-!    //send packet
-!    if ((openudp_send(pkt))==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-! }
-! 
-! void udprand_timer(void) {
-!     scheduler_push_task(udprand_task,TASKPRIO_COAP);
-!   /*thread_create(openwsn_udprand_stack, KERNEL_CONF_STACKSIZE_MAIN, 
-!                  PRIORITY_OPENWSN_UDPRAND, CREATE_STACKTEST, 
-!                  udprand_task, "udprand task");*/
-! }
-! 
-! void udprand_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    msg->owner = COMPONENT_UDPRAND;
-!    if (msg->creator!=COMPONENT_UDPRAND) {
-!       openserial_printError(COMPONENT_UDPRAND,ERR_UNEXPECTED_SENDDONE,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!    }
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-! void udprand_receive(OpenQueueEntry_t* msg) {
-!    openqueue_freePacketBuffer(msg);
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/07-App/udprand/udprand.h ../../../sys/net/openwsn/07-App/udprand/udprand.h
-*** openwsn/07-App/udprand/udprand.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udprand/udprand.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,31 ****
-! #ifndef __UDPRAND_H
-! #define __UDPRAND_H
-! 
-! /**
-! \addtogroup App
-! 
-! \addtogroup udpRand
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void udprand_init();
-! void udprand_trigger();
-! void udprand_sendDone(OpenQueueEntry_t* msg, error_t error);
-! void udprand_receive(OpenQueueEntry_t* msg);
-! bool udprand_debugPrint();
-! void udprand_task();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,31 ----
-! #ifndef __UDPRAND_H
-! #define __UDPRAND_H
-! 
-! /**
-! \addtogroup AppUdp
-! \{
-! \addtogroup UdpRand
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void udprand_init(void);
-! void udprand_trigger(void);
-! void udprand_sendDone(OpenQueueEntry_t* msg, owerror_t error);
-! void udprand_receive(OpenQueueEntry_t* msg);
-! bool udprand_debugPrint(void);
-! void udprand_task(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/07-App/udpstorm/Makefile ../../../sys/net/openwsn/07-App/udpstorm/Makefile
-*** openwsn/07-App/udpstorm/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/07-App/udpstorm/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBSUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBSUBMOD)
-+ 
-+ $(BINDIR)$(SUBSUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/07-App/udpstorm/udpstorm.c ../../../sys/net/openwsn/07-App/udpstorm/udpstorm.c
-*** openwsn/07-App/udpstorm/udpstorm.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udpstorm/udpstorm.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,152 ****
-! #include "openwsn.h"
-! #include "udpstorm.h"
-! #include "opencoap.h"
-! #include "opentimers.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "scheduler.h"
-! //#include "ADC_Channel.h"
-! #include "IEEE802154E.h"
-! 
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in ms)
-! #define UDPSTORMPERIOD            1000
-! #define NUMPACKETS                 300
-! 
-! const uint8_t udpstorm_path0[] =  "strm";
-! 
-! PRAGMA(pack(1));
-! typedef struct {
-!    uint16_t             seqNum;
-! } udpstorm_payload_t;
-! PRAGMA(pack());
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-!    opentimer_id_t       timerId;
-!    uint16_t             seqNum;
-! } udpstorm_vars_t;
-! 
-! udpstorm_vars_t udpstorm_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t udpstorm_receive(OpenQueueEntry_t* msg,
-!                          coap_header_iht*  coap_header,
-!                          coap_option_iht*  coap_options);
-! void    udpstorm_timer_cb();
-! void    udpstorm_task_cb();
-! void    udpstorm_sendDone(OpenQueueEntry_t* msg,
-!                           error_t           error);
-! 
-! //=========================== public ==========================================
-! 
-! void udpstorm_init() {
-!    // prepare the resource descriptor for the path
-!    udpstorm_vars.desc.path0len             = sizeof(udpstorm_path0)-1;
-!    udpstorm_vars.desc.path0val             = (uint8_t*)(&udpstorm_path0);
-!    udpstorm_vars.desc.path1len             = 0;
-!    udpstorm_vars.desc.path1val             = NULL;
-!    udpstorm_vars.desc.componentID          = COMPONENT_UDPSTORM;
-!    udpstorm_vars.desc.callbackRx           = &udpstorm_receive;
-!    udpstorm_vars.desc.callbackSendDone     = &udpstorm_sendDone;
-!    
-!    opencoap_register(&udpstorm_vars.desc);
-!    udpstorm_vars.timerId     = opentimers_start(UDPSTORMPERIOD,
-!                                                 TIMER_PERIODIC,TIME_MS,
-!                                                 udpstorm_timer_cb);
-!    udpstorm_vars.seqNum      = 0;
-! }
-! 
-! //=========================== private =========================================
-! 
-! error_t udpstorm_receive(OpenQueueEntry_t* msg,
-!                          coap_header_iht* coap_header,
-!                          coap_option_iht* coap_options) {
-!    return E_FAIL;
-! }
-! 
-! //timer fired, but we don't want to execute task in ISR mode
-! //instead, push task to scheduler with CoAP priority, and let scheduler take care of it
-! void udpstorm_timer_cb(){
-!    scheduler_push_task(udpstorm_task_cb,TASKPRIO_COAP);
-! }
-! 
-! void udpstorm_task_cb() {
-!    OpenQueueEntry_t* pkt;
-!    error_t           outcome;
-!    uint8_t           numOptions;
-!    
-!    if(udpstorm_vars.seqNum>=NUMPACKETS) {
-!       // we've sent enough packets
-!       
-!       // stop the periodic timer
-!       opentimers_stop(udpstorm_vars.timerId);
-!       
-!       // reset the sequence number
-!       udpstorm_vars.seqNum = 0;
-!    }
-!    
-!    // if you get here, send a packet
-!    
-!    // get a packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_UDPSTORM);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_UDPSTORM,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_UDPSTORM;
-!    pkt->owner      = COMPONENT_UDPSTORM;
-!    
-!    // add payload
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(udpstorm_payload_t));
-!    ((udpstorm_payload_t*)(pkt->payload))->seqNum = udpstorm_vars.seqNum;
-!    
-!    numOptions = 0;
-!    // location-path option
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(udpstorm_path0)-1);
-!    memcpy(&pkt->payload[0],&udpstorm_path0,sizeof(udpstorm_path0)-1);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0]                = (COAP_OPTION_LOCATIONPATH-COAP_OPTION_CONTENTTYPE) << 4 |
-!                                      sizeof(udpstorm_path0)-1;
-!    numOptions++;
-!    // content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                = COAP_OPTION_CONTENTTYPE << 4 |
-!       1;
-!    pkt->payload[1]                = COAP_MEDTYPE_APPOCTETSTREAM;
-!    numOptions++;
-!    
-!    // metadata
-!    pkt->l4_destination_port       = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_local,16);
-!    
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_NON,
-!                            COAP_CODE_REQ_PUT,
-!                            numOptions,
-!                            &udpstorm_vars.desc);
-!    
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    // increment counter
-!    udpstorm_vars.seqNum++;
-! }
-! 
-! void udpstorm_sendDone(OpenQueueEntry_t* msg, error_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
---- 1,168 ----
-! #include "openwsn.h"
-! #include "udpstorm.h"
-! #include "opencoap.h"
-! #include "opentimers.h"
-! #include "openqueue.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "openrandom.h"
-! #include "scheduler.h"
-! //#include "ADC_Channel.h"
-! #include "IEEE802154E.h"
-! #include "idmanager.h"
-! 
-! #include "thread.h"
-! 
-! //=========================== defines =========================================
-! 
-! /// inter-packet period (in ms)
-! #define UDPSTORMPERIOD            1000
-! #define NUMPACKETS                 300
-! 
-! const uint8_t udpstorm_path0[] =  "strm";
-! 
-! //PRAGMA(pack(1));
-! typedef struct {
-!    uint16_t             seqNum;
-! } udpstorm_payload_t;
-! //PRAGMA(pack());
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    coap_resource_desc_t desc;
-!    opentimer_id_t       timerId;
-!    uint16_t             seqNum;
-! } udpstorm_vars_t;
-! 
-! udpstorm_vars_t udpstorm_vars;
-! //static char openwsn_udpstorm_stack[KERNEL_CONF_STACKSIZE_MAIN];
-! //=========================== prototypes ======================================
-! 
-! owerror_t udpstorm_receive(OpenQueueEntry_t* msg,
-!                          coap_header_iht*  coap_header,
-!                          coap_option_iht*  coap_options);
-! void    udpstorm_timer_cb(void);
-! void    udpstorm_task_cb(void);
-! void    udpstorm_sendDone(OpenQueueEntry_t* msg,
-!                           owerror_t           error);
-! 
-! //=========================== public ==========================================
-! 
-! void udpstorm_init(void) {
-!    // prepare the resource descriptor for the path
-!    udpstorm_vars.desc.path0len             = sizeof(udpstorm_path0)-1;
-!    udpstorm_vars.desc.path0val             = (uint8_t*)(&udpstorm_path0);
-!    udpstorm_vars.desc.path1len             = 0;
-!    udpstorm_vars.desc.path1val             = NULL;
-!    udpstorm_vars.desc.componentID          = COMPONENT_UDPSTORM;
-!    udpstorm_vars.desc.callbackRx           = &udpstorm_receive;
-!    udpstorm_vars.desc.callbackSendDone     = &udpstorm_sendDone;
-!    
-!    opencoap_register(&udpstorm_vars.desc);
-!    udpstorm_vars.timerId     = opentimers_start(UDPSTORMPERIOD,
-!                                                 TIMER_PERIODIC,TIME_MS,
-!                                                 udpstorm_timer_cb);
-!    udpstorm_vars.seqNum      = 0;
-! }
-! 
-! //=========================== private =========================================
-! 
-! owerror_t udpstorm_receive(OpenQueueEntry_t* msg,
-!                          coap_header_iht* coap_header,
-!                          coap_option_iht* coap_options) {
-!    return E_FAIL;
-! }
-! 
-! //timer fired, but we don't want to execute task in ISR mode
-! //instead, push task to scheduler with CoAP priority, and let scheduler take care of it
-! void udpstorm_timer_cb(void){
-!     scheduler_push_task(udpstorm_task_cb,TASKPRIO_COAP);
-!    /*thread_create(openwsn_udpstorm_stack, KERNEL_CONF_STACKSIZE_MAIN, 
-!                   PRIORITY_OPENWSN_UDPSTORM, CREATE_STACKTEST, 
-!                   udpstorm_task_cb, "udpstorm task cb");*/
-! }
-! 
-! void udpstorm_task_cb(void) {
-!    OpenQueueEntry_t* pkt;
-!    owerror_t           outcome;
-!    uint8_t           numOptions;
-!    
-!    // don't run if not synch
-!    if (ieee154e_isSynch() == FALSE) return;
-!    
-!    // don't run on dagroot
-!    if (idmanager_getIsDAGroot()) {
-!        opentimers_stop(udpstorm_vars.timerId);
-!        return;
-!    }
-!    
-!    
-!    if(udpstorm_vars.seqNum>=NUMPACKETS) {
-!       // we've sent enough packets
-!       
-!       // stop the periodic timer
-!       opentimers_stop(udpstorm_vars.timerId);
-!       
-!       // reset the sequence number
-!       udpstorm_vars.seqNum = 0;
-!    }
-!    
-!    // if you get here, send a packet
-!    
-!    // get a packet
-!    pkt = openqueue_getFreePacketBuffer(COMPONENT_UDPSTORM);
-!    if (pkt==NULL) {
-!       openserial_printError(COMPONENT_UDPSTORM,ERR_NO_FREE_PACKET_BUFFER,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-!       openqueue_freePacketBuffer(pkt);
-!       return;
-!    }
-!    // take ownership over that packet
-!    pkt->creator    = COMPONENT_UDPSTORM;
-!    pkt->owner      = COMPONENT_UDPSTORM;
-!    
-!    // add payload
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(udpstorm_payload_t));
-!    ((udpstorm_payload_t*)(pkt->payload))->seqNum = udpstorm_vars.seqNum;
-!    
-!    numOptions = 0;
-!    // location-path option
-!    packetfunctions_reserveHeaderSize(pkt,sizeof(udpstorm_path0)-1);
-!    memcpy(&pkt->payload[0],&udpstorm_path0,sizeof(udpstorm_path0)-1);
-!    packetfunctions_reserveHeaderSize(pkt,1);
-!    pkt->payload[0]                = ((COAP_OPTION_NUM_URIPATH) << 4) |
-!                                      (sizeof(udpstorm_path0)-1);
-!    numOptions++;
-!    // content-type option
-!    packetfunctions_reserveHeaderSize(pkt,2);
-!    pkt->payload[0]                = COAP_OPTION_NUM_CONTENTFORMAT << 4 |
-!       1;
-!    pkt->payload[1]                = COAP_MEDTYPE_APPOCTETSTREAM;
-!    numOptions++;
-!    
-!    // metadata
-!    pkt->l4_destination_port       = WKP_UDP_COAP;
-!    pkt->l3_destinationAdd.type = ADDR_128B;
-!    memcpy(&pkt->l3_destinationAdd.addr_128b[0],&ipAddr_local,16);
-!    
-!    // send
-!    outcome = opencoap_send(pkt,
-!                            COAP_TYPE_NON,
-!                            COAP_CODE_REQ_PUT,
-!                            numOptions,
-!                            &udpstorm_vars.desc);
-!    
-!    // avoid overflowing the queue if fails
-!    if (outcome==E_FAIL) {
-!       openqueue_freePacketBuffer(pkt);
-!    }
-!    
-!    // increment counter
-!    udpstorm_vars.seqNum++;
-! }
-! 
-! void udpstorm_sendDone(OpenQueueEntry_t* msg, owerror_t error) {
-!    openqueue_freePacketBuffer(msg);
-  }
-\ No newline at end of file
-diff -crB openwsn/07-App/udpstorm/udpstorm.h ../../../sys/net/openwsn/07-App/udpstorm/udpstorm.h
-*** openwsn/07-App/udpstorm/udpstorm.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/07-App/udpstorm/udpstorm.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,26 ****
-! #ifndef __UDPSTORM_H
-! #define __UDPSTORM_H
-! 
-! /**
-! \addtogroup App
-! \{
-! \addtogroup udpStorm
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void udpstorm_init();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,26 ----
-! #ifndef __UDPSTORM_H
-! #define __UDPSTORM_H
-! 
-! /**
-! \addtogroup AppUdp
-! \{
-! \addtogroup udpStorm
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void udpstorm_init(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/Makefile ../../../sys/net/openwsn/Makefile
-*** openwsn/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,57 ----
-+ export MODULE:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/cpu/msp430-common/include -I$(RIOTBASE)/sys/net/include/
-+ 
-+ INCLUDES += -I$(CURDIR)
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ INCLUDES += -I$(CURDIR)/07-App/rinfo
-+ INCLUDES += -I$(CURDIR)/07-App/rwellknown
-+ INCLUDES += -I$(CURDIR)/07-App/ohlone
-+ INCLUDES += -I$(CURDIR)/07-App/tcpecho
-+ INCLUDES += -I$(CURDIR)/07-App/tcpinject
-+ INCLUDES += -I$(CURDIR)/07-App/tcpprint
-+ INCLUDES += -I$(CURDIR)/07-App/udpecho
-+ INCLUDES += -I$(CURDIR)/07-App/udpinject
-+ INCLUDES += -I$(CURDIR)/07-App/udplatency
-+ INCLUDES += -I$(CURDIR)/07-App/udpprint
-+ INCLUDES += -I$(CURDIR)/07-App/udprand
-+ INCLUDES += -I$(CURDIR)/07-App/udpstorm
-+ 
-+ 
-+ DIRS =
-+ DIRS += cross-layers
-+ DIRS += 02a-MAClow
-+ DIRS += 02b-MAChigh
-+ DIRS += 03a-IPHC
-+ DIRS += 03b-IPv6
-+ DIRS += 04-TRAN
-+ DIRS += 07-App
-+ 
-+ all: $(BINDIR)$(MODULE)
-+ 	@for i in $(DIRS) ; do "$(MAKE)" -C $$i || exit 1; done ;
-+ 
-+ $(BINDIR)$(MODULE): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	mkdir -p $(BINDIR)
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)"|cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ 
-+ # remove compilation products
-+ clean::
-+ 	@for i in $(DIRS) ; do "$(MAKE)" -C $$i clean || exit 1; done ;
-diff -crB openwsn/board_info.h ../../../sys/net/openwsn/board_info.h
-*** openwsn/board_info.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/board_info.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,80 ****
-! /**
-! \brief TelosB-specific board information bsp module.
-! 
-! This module file defines board-related element, but which are applicable only
-! to this board.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #ifndef __BOARD_INFO_H
-! #define __BOARD_INFO_H
-! 
-! #include "stdint.h"
-! #include "msp430f1611.h"
-! #include "string.h"
-! 
-! //=========================== define ==========================================
-! 
-! // (pre-)processor scpecific commands
-! 
-! #define port_INLINE                         inline
-! 
-! #define PRAGMA(x)  _Pragma(#x)
-! #define PACK(x)     pack(x)
-! 
-! #define INTERRUPT_DECLARATION()   __istate_t s;
-! #define DISABLE_INTERRUPTS()      s = __get_interrupt_state(); \
-!                                   __disable_interrupt();
-! #define ENABLE_INTERRUPTS()       __set_interrupt_state(s);
-! 
-! //===== timer
-! 
-! #define PORT_TIMER_WIDTH                    uint16_t
-! #define PORT_SIGNED_INT_WIDTH               int16_t
-! #define PORT_TICS_PER_MS                    33
-! 
-! // on TelosB, we use the comparatorA interrupt for the OS
-! #define SCHEDULER_WAKEUP()                  CACTL1 |= CAIFG
-! #define SCHEDULER_ENABLE_INTERRUPT()        CACTL1  = CAIE
-! 
-! //===== pins
-! 
-! // [P4.5] radio VREG
-! #define PORT_PIN_RADIO_VREG_HIGH()          P4OUT |=  0x20;
-! #define PORT_PIN_RADIO_VREG_LOW()           P4OUT &= ~0x20;
-! // [P4.6] radio RESET
-! #define PORT_PIN_RADIO_RESET_HIGH()         P4OUT |=  0x40;
-! #define PORT_PIN_RADIO_RESET_LOW()          P4OUT &= ~0x40;  
-! 
-! //===== IEEE802154E timing
-! 
-! // time-slot related
-! #define PORT_TsSlotDuration                 491   // counter counts one extra count, see datasheet
-! 
-! // execution speed related
-! #define PORT_maxTxDataPrepare               100    //  2899us (measured 2420us)
-! #define PORT_maxRxAckPrepare                20    //   610us (measured  474us)
-! #define PORT_maxRxDataPrepare               33    //  1000us (measured  477us)
-! #define PORT_maxTxAckPrepare                40    //   792us (measured  746us)- cannot be bigger than 28.. is the limit for telosb as actvitiy_rt5 is executed almost there.
-! 
-! // radio speed related
-! #define PORT_delayTx                        12    //   366us (measured  352us)
-! #define PORT_delayRx                        0     //     0us (can not measure)
-! 
-! //=========================== variables =======================================
-! 
-! // The variables below are used by CoAP's registration engine.
-! 
-! static const uint8_t rreg_uriquery[]        = "h=ucb";
-! static const uint8_t infoBoardname[]        = "TelosB";
-! static const uint8_t infouCName[]           = "MSP430f1611";
-! static const uint8_t infoRadioName[]        = "CC2420";
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! //=========================== private =========================================
-! 
-! #endif
---- 1,93 ----
-! /**
-! \brief TelosB-specific board information bsp module.
-! 
-! This module file defines board-related element, but which are applicable only
-! to this board.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #ifndef __BOARD_INFO_H
-! #define __BOARD_INFO_H
-! 
-! #include "stdint.h"
-! #include "msp430f1611.h"
-! #include "string.h"
-! 
-! //=========================== define ==========================================
-! 
-! // (pre-)processor scpecific commands
-! 
-! #define port_INLINE                         inline
-! 
-! #define PRAGMA(x)  _Pragma(#x)
-! #define PACK(x)     pack(x)
-! 
-! //===== interrupt state
-! 
-! #if defined(__GNUC__) && (__GNUC__==4)  && (__GNUC_MINOR__<=5) && defined(__MSP430__)
-!    // mspgcc <4.5.x
-! #define INTERRUPT_DECLARATION()   unsigned short s;
-! #define DISABLE_INTERRUPTS()      s = READ_SR&0x0008; \
-!                                   __disable_interrupt();
-! #define ENABLE_INTERRUPTS()       __asm__("bis %0,r2" : : "ir" ((uint16_t) s));
-! #else
-!    // other
-! #define INTERRUPT_DECLARATION()   __istate_t s;
-! #define DISABLE_INTERRUPTS()      s = __get_interrupt_state(); \
-!                                    __disable_interrupt();
-! #define ENABLE_INTERRUPTS()       __set_interrupt_state(s);
-! #endif
-! 
-! //===== timer
-! 
-! #define PORT_TIMER_WIDTH                    uint16_t
-! #define PORT_RADIOTIMER_WIDTH               uint16_t
-! 
-! #define PORT_SIGNED_INT_WIDTH               int16_t
-! #define PORT_TICS_PER_MS                    33
-! 
-! // on TelosB, we use the comparatorA interrupt for the OS
-! #define SCHEDULER_WAKEUP()                  CACTL1 |= CAIFG
-! #define SCHEDULER_ENABLE_INTERRUPT()        CACTL1  = CAIE
-! 
-! //===== pins
-! 
-! // [P4.5] radio VREG
-! #define PORT_PIN_RADIO_VREG_HIGH()          P4OUT |=  0x20;
-! #define PORT_PIN_RADIO_VREG_LOW()           P4OUT &= ~0x20;
-! // [P4.6] radio RESET
-! #define PORT_PIN_RADIO_RESET_HIGH()         P4OUT |=  0x40;
-! #define PORT_PIN_RADIO_RESET_LOW()          P4OUT &= ~0x40;  
-! 
-! //===== IEEE802154E timing
-! 
-! // time-slot related
-! #define PORT_TsSlotDuration                 491   // counter counts one extra count, see datasheet
-! 
-! // execution speed related
-! #define PORT_maxTxDataPrepare               100    //  2899us (measured 2420us)
-! #define PORT_maxRxAckPrepare                20    //   610us (measured  474us)
-! #define PORT_maxRxDataPrepare               33    //  1000us (measured  477us)
-! #define PORT_maxTxAckPrepare                40    //   792us (measured  746us)- cannot be bigger than 28.. is the limit for telosb as actvitiy_rt5 is executed almost there.
-! 
-! // radio speed related
-! #define PORT_delayTx                        12    //   366us (measured  352us)
-! #define PORT_delayRx                        0     //     0us (can not measure)
-! 
-! //=========================== variables =======================================
-! 
-! // The variables below are used by CoAP's registration engine.
-! 
-! static const uint8_t rreg_uriquery[]        = "h=ucb";
-! static const uint8_t infoBoardname[]        = "TelosB";
-! static const uint8_t infouCName[]           = "MSP430f1611";
-! static const uint8_t infoRadioName[]        = "CC2420";
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! //=========================== private =========================================
-! 
-! #endif
-diff -crB openwsn/board_ow.c ../../../sys/net/openwsn/board_ow.c
-*** openwsn/board_ow.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/board_ow.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,138 ****
-! /**
-! \brief TelosB-specific definition of the "board" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "msp430f1611.h"
-! #include "board.h"
-! // bsp modules
-! #include "debugpins.h"
-! #include "leds.h"
-! #include "uart.h"
-! #include "spi.h"
-! #include "bsp_timer.h"
-! #include "radio.h"
-! #include "radiotimer.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== main ============================================
-! 
-! extern int mote_main(void);
-! int main(void) {
-!    return mote_main();
-! }
-! 
-! //=========================== public ==========================================
-! 
-! void board_init() {
-!    // disable watchdog timer
-!    WDTCTL     =  WDTPW + WDTHOLD;
-!    
-!    // setup clock speed
-!    DCOCTL    |=  DCO0 | DCO1 | DCO2;             // MCLK at ~8MHz
-!    BCSCTL1   |=  RSEL0 | RSEL1 | RSEL2;          // MCLK at ~8MHz
-!                                                  // by default, ACLK from 32kHz XTAL which is running
-!    
-!    // initialize pins
-!    P4DIR     |=  0x20;                           // [P4.5] radio VREG:  output
-!    P4DIR     |=  0x40;                           // [P4.6] radio reset: output
-!    
-!    // initialize bsp modules
-!    debugpins_init();
-!    leds_init();
-!    uart_init();
-!    spi_init();
-!    bsp_timer_init();
-!    radio_init();
-!    radiotimer_init();
-!    
-!    // enable interrupts
-!    __bis_SR_register(GIE);
-! }
-! 
-! void board_sleep() {
-!    __bis_SR_register(GIE+LPM0_bits);             // sleep, but leave ACLK on
-! }
-! 
-! void board_reset() {
-!    WDTCTL = (WDTPW+0x1200) + WDTHOLD; // writing a wrong watchdog password to causes handler to reset
-! }
-! 
-! //=========================== private =========================================
-! 
-! //=========================== interrupt handlers ==============================
-! 
-! // DACDMA_VECTOR
-! 
-! // PORT2_VECTOR
-! 
-! #pragma vector = USART1TX_VECTOR
-! __interrupt void USART1TX_ISR (void) {
-!    debugpins_isr_set();
-!    if (uart_tx_isr()==KICK_SCHEDULER) {          // UART; TX
-!       __bic_SR_register_on_exit(CPUOFF);
-!    }
-!    debugpins_isr_clr();
-! }
-! 
-! #pragma vector = USART1RX_VECTOR
-! __interrupt void USART1RX_ISR (void) {
-!    debugpins_isr_set();
-!    if (uart_rx_isr()==KICK_SCHEDULER) {          // UART: RX
-!       __bic_SR_register_on_exit(CPUOFF);
-!    }
-!    debugpins_isr_clr();
-! }
-! 
-! // PORT1_VECTOR
-! 
-! // TIMERA1_VECTOR
-! 
-! #pragma vector = TIMERA0_VECTOR
-! __interrupt void TIMERA0_ISR (void) {
-!    debugpins_isr_set();
-!    if (bsp_timer_isr()==KICK_SCHEDULER) {        // timer: 0
-!       __bic_SR_register_on_exit(CPUOFF);
-!    }
-!    debugpins_isr_clr();
-! }
-! 
-! // ADC12_VECTOR
-! 
-! // USART0TX_VECTOR
-! 
-! #pragma vector = USART0RX_VECTOR
-! __interrupt void USART0RX_ISR (void) {
-!    debugpins_isr_set();
-!    if (spi_isr()==KICK_SCHEDULER) {              // SPI
-!       __bic_SR_register_on_exit(CPUOFF);
-!    }
-!    debugpins_isr_clr();
-! }
-! 
-! // WDT_VECTOR
-! 
-! #pragma vector = COMPARATORA_VECTOR
-! __interrupt void COMPARATORA_ISR (void) {
-!    debugpins_isr_set();
-!    __bic_SR_register_on_exit(CPUOFF);            // restart CPU
-!    debugpins_isr_clr();
-! }
-! 
-! #pragma vector = TIMERB1_VECTOR
-! __interrupt void TIMERB1_ISR (void) {
-!    debugpins_isr_set();
-!    if (radiotimer_isr()==KICK_SCHEDULER) {       // radiotimer
-!       __bic_SR_register_on_exit(CPUOFF);
-!    }
-!    debugpins_isr_clr();
-! }
-! 
-! // TIMERB0_VECTOR
-! 
-! // NMI_VECTOR
-! 
---- 1,65 ----
-! #include "msp430f1611.h"
-! #include "board_ow.h"
-! 
-! #include "leds.h"
-! #include "uart_ow.h"
-! #include "spi.h"
-! //#include "bsp_timer.h"
-! #include "radio.h"
-! #include "radiotimer.h"
-! 
-! void board_init_ow() {
-!    puts(__PRETTY_FUNCTION__);
-!    //disable watchdog timer
-!    WDTCTL     =  WDTPW + WDTHOLD;
-!    
-!    //setup clock speed
-!    DCOCTL    |=  DCO0 | DCO1 | DCO2;             // MCLK at ~8MHz
-!    BCSCTL1   |=  RSEL0 | RSEL1 | RSEL2;          // MCLK at ~8MHz
-!                                                  // by default, ACLK from 32kHz XTAL which is running
-!    
-!    // initialize pins
-!    P4DIR     |=  0x20;                           // [P4.5] radio VREG:  output
-!      P4DIR     |=  0x40;                           // [P4.6] radio reset: output
-!    
-!    // initialize bsp modules
-!    // debugpins_init();
-!     // leds_init();
-!    // uart_init_ow();
-!    // spi_init();
-! //    bsp_timer_init();
-! //    radio_init();
-! //    radiotimer_init();
-!    
-!    // enable interrupts
-!     // __bis_SR_register(GIE);
-! }
-! 
-! void board_reset() {
-!    WDTCTL = (WDTPW+0x1200) + WDTHOLD; // writing a wrong watchdog password to causes handler to reset
-! }
-! 
-! void board_sleep() {
-!    __bis_SR_register(GIE+LPM0_bits);             // sleep, but leave ACLK on
-! }
-! // ISR(COMPARATORA) {
-! //    //debugpins_isr_set();
-! //    __bic_SR_register_on_exit(CPUOFF);            // restart CPU
-! //    //debugpins_isr_clr();
-! // }
-! 
-! ISR(TIMERB1) {
-!    //debugpins_isr_set();
-!    if (radiotimer_isr()==KICK_SCHEDULER) {       // radiotimer
-!       __bic_SR_register_on_exit(CPUOFF);
-!    }
-!    //debugpins_isr_clr();
-! }
-! 
-! // ISR(TIMERA0) {
-! //    //debugpins_isr_set();
-! //    if (bsp_timer_isr()==KICK_SCHEDULER) {        // timer: 0
-! //       __bic_SR_register_on_exit(CPUOFF);
-! //    }
-! //    //debugpins_isr_clr();
-! // }
-diff -crB openwsn/board_ow.h ../../../sys/net/openwsn/board_ow.h
-*** openwsn/board_ow.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/board_ow.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,29 ****
-! /**
-! \brief Cross-platform declaration "board" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #ifndef __BOARD_H
-! #define __BOARD_H
-! 
-! #include "board_info.h"
-! 
-! //=========================== define ==========================================
-! 
-! typedef enum {
-!    DO_NOT_KICK_SCHEDULER,
-!    KICK_SCHEDULER,
-! } kick_scheduler_t;
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void board_init();
-! void board_sleep();
-! void board_reset();
-! 
-! #endif
---- 1,49 ----
-! #ifndef __BOARD_H
-! #define __BOARD_H
-! 
-! /**
-! \addtogroup BSP
-! \{
-! \addtogroup board
-! \{
-! 
-! \brief Cross-platform declaration "board" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "board_info.h"
-! 
-! //=========================== define ==========================================
-! 
-! typedef enum {
-!    DO_NOT_KICK_SCHEDULER,
-!    KICK_SCHEDULER,
-! } kick_scheduler_t;
-! 
-! #if defined(__GNUC__) && (__GNUC__==4)  && (__GNUC_MINOR__<=5) && defined(__MSP430__)
-!    // mspgcc <4.5.x
-! #include <signal.h>
-! #define ISR(v) interrupt (v ## _VECTOR) v ## _ISR(void)
-! #else
-!    // other
-! #define __PRAGMA__(x) _Pragma(#x)
-! #define ISR(v) __PRAGMA__(vector=v ##_VECTOR) __interrupt void v ##_ISR(void)
-! #endif
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void board_init_ow(void);
-! void board_sleep(void);
-! void board_reset(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/cc2420.h ../../../sys/net/openwsn/cc2420.h
-*** openwsn/cc2420.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/cc2420.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,407 ****
-! /**
-! \brief Register definitions for the Texas Instruments CC2420 radio chip.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #ifndef __CC2420_H
-! #define __CC2420_H
-! 
-! //=========================== spi flags =======================================
-! 
-! #define CC2420_FLAG_READ          0x40
-! #define CC2420_FLAG_WRITE         0x00
-! 
-! #define CC2420_FLAG_RAM           0x80
-! #define CC2420_FLAG_REG           0x00
-! 
-! //=========================== status byte =====================================
-! 
-! typedef struct {
-!    uint8_t reserved_1:1;
-!    uint8_t rssi_valid:1;
-!    uint8_t lock:1;
-!    uint8_t tx_active:1;
-!    uint8_t enc_busy:1;
-!    uint8_t tx_underflow:1;
-!    uint8_t xosc16m_stable:1;
-!    uint8_t reserved_2:1;
-! } cc2420_status_t;
-! 
-! //=========================== strobes =========================================
-! 
-! #define CC2420_SNOP               0x00 // [S  ] No Operation
-! #define CC2420_SXOSCON            0x01 // [S  ] Turn on the crystal oscillator
-! #define CC2420_STXCAL             0x02 // [S  ] Enable and calibrate frequency synthesizer for TX
-! #define CC2420_SRXON              0x03 // [S  ] Enable RX
-! #define CC2420_STXON              0x04 // [S  ] Enable TX after calibration (if not already performed)
-! #define CC2420_STXONCCA           0x05 // [S  ] If CCA indicates a clear channel, Enable calibration, then TX
-! #define CC2420_SRFOFF             0x06 // [S  ] Disable RX/TX and frequency synthesizer
-! #define CC2420_SXOSCOFF           0x07 // [S  ] Turn off the crystal oscillator and RF
-! #define CC2420_SFLUSHRX           0x08 // [S  ] Flush the RX FIFO buffer and reset the demodulator
-! #define CC2420_SFLUSHTX           0x09 // [S  ] Flush the TX FIFO buffer
-! #define CC2420_SACK               0x0a // [S  ] Send acknowledge frame, with pending field cleared
-! #define CC2420_SACKPEND           0x0b // [S  ] Send acknowledge frame, with pending field set
-! #define CC2420_SRXDEC             0x0c // [S  ] Start RXFIFO in-line decryption / authentication
-! #define CC2420_STXENC             0x0d // [S  ] Start TXFIFO in-line encryption / authentication
-! #define CC2420_SAES               0x0e // [S  ] AES Stand alone encryption strobe
-! 
-! //=========================== registers =======================================
-! 
-! /// [R/W] Main Control Register
-! #define CC2420_MAIN_ADDR          0x10
-! typedef struct {
-!    uint16_t XOSC16M_BYPASS:1;
-!    uint16_t reserved_w0:10;
-!    uint16_t FS_RESETn:1;
-!    uint16_t MOD_RESETn:1;
-!    uint16_t DEMOD_RESETn:1;
-!    uint16_t ENC_RESETn:1;
-!    uint16_t RESETn:1;
-! } cc2420_MAIN_reg_t;
-! 
-! /// [R/W] Modem Control Register 0
-! #define CC2420_MDMCTRL0_ADDR      0x11
-! typedef struct {
-!    uint16_t PREAMBLE_LENGTH:4;
-!    uint16_t AUTOACK:1;
-!    uint16_t AUTOCRC:1;
-!    uint16_t CCA_MODE:2;
-!    uint16_t CCA_HYST:3;
-!    uint16_t ADR_DECODE:1;
-!    uint16_t PAN_COORDINATOR:1;
-!    uint16_t RESERVED_FRAME_MODE:1;
-!    uint16_t reserved_w0:2;
-! } cc2420_MDMCTRL0_reg_t;
-! 
-! /// [R/W] Modem Control Register 1
-! #define CC2420_MDMCTRL1_ADDR      0x12
-! typedef struct {
-!    uint16_t RX_MODE:2;
-!    uint16_t TX_MODE:2;
-!    uint16_t MODULATION_MODE:1;
-!    uint16_t DEMOD_AVG_MODE:1;
-!    uint16_t CORR_THR:5;
-!    uint16_t reserved_w0:5;
-! } cc2420_MDMCTRL1_reg_t;
-! 
-! // [R/W] RSSI and CCA Status and Control register
-! #define CC2420_RSSI_ADDR          0x13
-! typedef struct {
-!    uint16_t RSSI_VAL:8;
-!    uint16_t CCR_THR:8;
-! } cc2420_RSSI_reg_t;
-! 
-! /// [R/W] Synchronisation word control register
-! #define CC2420_SYNCWORD_ADDR      0x14
-! typedef struct {
-!    uint16_t SYNCWORD:16;
-! } cc2420_SYNCWORD_reg_t;
-! 
-! /// [R/W] Transmit Control Register
-! #define CC2420_TXCTRL_ADDR        0x15
-! typedef struct {
-!    uint16_t PA_LEVEL:5;
-!    uint16_t reserved_w1:1;
-!    uint16_t PA_CURRENT:3;
-!    uint16_t TXMIX_CURRENT:2;
-!    uint16_t TXMIX_CAP_ARRAY:2;
-!    uint16_t TX_TURNAROUND:1;
-!    uint16_t TXMIXBUF_CUR:2;
-! } cc2420_TXCTRL_reg_t;
-! 
-! /// [R/W] Receive Control Register 0
-! #define CC2420_RXCTRL0_ADDR       0x16
-! typedef struct {
-!    uint16_t LOW_LNA_CURRENT:2;
-!    uint16_t MED_LNA_CURRENT:2;
-!    uint16_t HIGH_LNA_CURRENT:2;
-!    uint16_t LOW_LNA_GAIN:2;
-!    uint16_t MED_LNA_GAIN:2;
-!    uint16_t HIGH_LNA_GAIN:2;
-!    uint16_t RXMIXBUF_CUR:2;
-!    uint16_t reserved_w0:2;
-! } cc2420_RXCTRL0_reg_t;
-! 
-! /// [R/W] Receive Control Register 1
-! #define CC2420_RXCTRL1_ADDR       0x17
-! typedef struct {
-!    uint16_t RXMIX_CURRENT:2;
-!    uint16_t RXMIX_VCM:2;
-!    uint16_t RXMIX_TAIL:2;
-!    uint16_t LNA_CAP_ARRAY:2;
-!    uint16_t MED_HGM:1;
-!    uint16_t HIGH_HGM:1;
-!    uint16_t MED_LOWGAIN:1;
-!    uint16_t LOW_LOWGAIN:1;
-!    uint16_t RXBPF_MIDCUR:1;
-!    uint16_t RXBPF_LOCUR:1;
-!    uint16_t reserved_w0:2;
-! } cc2420_RXCTRL1_reg_t;
-! 
-! /// [R/W] Frequency Synthesizer Control and Status Register
-! #define CC2420_FSCTRL_ADDR        0x18
-! typedef struct {
-!    uint16_t FREQ:10;
-!    uint16_t LOCK_STATUS:1;
-!    uint16_t LOCK_LENGTH:1;
-!    uint16_t CAL_RUNNING:1;
-!    uint16_t CAL_DONE:1;
-!    uint16_t LOCK_THR:2;
-! } cc2420_FSCTRL_reg_t;
-! 
-! /// [R/W] Security Control Register 0
-! #define CC2420_SECCTRL0_ADDR      0x19
-! typedef struct {
-!    uint16_t SEC_MODE:2;
-!    uint16_t SEC_M:3;
-!    uint16_t SEC_RXKEYSEL:1;
-!    uint16_t SEC_TXKEYSEL:1;
-!    uint16_t SEC_SAKEYSEL:1;
-!    uint16_t SEC_CBC_HEAD:1;
-!    uint16_t RXFIFO_PROTECTION:1;
-!    uint16_t reserved_w0:6;
-! } cc2420_SECCTRL0_reg_t;
-! 
-! /// [R/W] Security Control Register 1
-! #define CC2420_SECCTRL1_ADDR      0x1a
-! typedef struct {
-!    uint16_t SEC_RXL:7;
-!    uint16_t reserved_1_w0:1;
-!    uint16_t SEC_TXL:7;
-!    uint16_t reserved_2_w0:1;
-! } cc2420_SECCTRL1_reg_t;
-! 
-! /// [R/W] Battery Monitor Control and Status Register
-! #define CC2420_BATTMON_ADDR       0x1b
-! typedef struct {
-!    uint16_t BATTMON_VOLTAGE:5;
-!    uint16_t BATTMON_EN:1;
-!    uint16_t BATTMON_OK:1;
-!    uint16_t reserved_w0:9;
-! } cc2420_BATTMON_reg_t;
-! 
-! /// [R/W] Input / Output Control Register 0
-! #define CC2420_IOCFG0_ADDR        0x1c
-! typedef struct {
-!    uint16_t FIFOP_THR:7;
-!    uint16_t CCA_POLARITY:1;
-!    uint16_t SFD_POLARITY:1;
-!    uint16_t FIFOP_POLARITY:1;
-!    uint16_t FIFO_POLARITY:1;
-!    uint16_t BCN_ACCEPT:1;
-!    uint16_t reserved_w0:4;
-! } cc2420_IOCFG0_reg_t;
-! 
-! /// [R/W] Input / Output Control Register 1
-! #define CC2420_IOCFG1_ADDR        0x1d
-! typedef struct {
-!    uint16_t CCAMUX:5;
-!    uint16_t SFDMUX:5;
-!    uint16_t HSSD_SRC:3;
-!    uint16_t reserved_w0:3;
-! } cc2420_IOCFG1_reg_t;
-! 
-! /// [R/W] Manufacturer ID, Low 16 bits
-! #define CC2420_MANFIDL_ADDR       0x1e
-! typedef struct {
-!    uint16_t MANFID:12;
-!    uint16_t PARTNUM:4;
-! } cc2420_MANFIDL_reg_t;
-! 
-! /// [R/W] Manufacturer ID, High 16 bits
-! #define CC2420_MANFIDH_ADDR       0x1f
-! typedef struct {
-!    uint16_t PARTNUM:12;
-!    uint16_t VERSION:4;
-! } cc2420_MANFIDH_reg_t;
-! 
-! /// [R/W] Finite State Machine Time Constants
-! #define CC2420_FSMTC_ADDR         0x20
-! typedef struct {
-!    uint16_t TC_TXEND2PAOFF:3;
-!    uint16_t TC_TXEND2SWITCH:3;
-!    uint16_t TC_PAON2TX:4;
-!    uint16_t TC_SWITCH2TX:3;
-!    uint16_t TC_RXCHAIN2RX:3;
-! } cc2420_FSMTC_reg_t;
-! 
-! /// [R/W] Manual signal AND override register
-! #define CC2420_MANAND_ADDR        0x21
-! typedef struct {
-!    uint16_t LNAMIX_PD:1;
-!    uint16_t RXBPF_PD:1;
-!    uint16_t VGA_PD:1;
-!    uint16_t ADC_PD:1;
-!    uint16_t FS_PD:1;
-!    uint16_t CHP_PD:1;
-!    uint16_t RXBPF_CAL_PD:1;
-!    uint16_t XOSC16M_PD:1;
-!    uint16_t DAC_LPF_PD:1;
-!    uint16_t PA_P_PD:1;
-!    uint16_t PA_N_PD:1;
-!    uint16_t PRE_PD:1;
-!    uint16_t RXTX:1;
-!    uint16_t BALUN_CTRL:1;
-!    uint16_t BIAS_PD:1;
-!    uint16_t VGA_RESET_N:1;
-! } cc2420_MANAND_reg_t;
-! 
-! /// [R/W] Manual signal OR override register
-! #define CC2420_MANOR_ADDR         0x22
-! typedef struct {
-!    uint16_t LNAMIX_PD:1;
-!    uint16_t RXBPF_PD:1;
-!    uint16_t VGA_PD:1;
-!    uint16_t ADC_PD:1;
-!    uint16_t FS_PD:1;
-!    uint16_t CHP_PD:1;
-!    uint16_t RXBPF_CAL_PD:1;
-!    uint16_t XOSC16M_PD:1;
-!    uint16_t DAC_LPF_PD:1;
-!    uint16_t PA_P_PD:1;
-!    uint16_t PA_N_PD:1;
-!    uint16_t PRE_PD:1;
-!    uint16_t RXTX:1;
-!    uint16_t BALUN_CTRL:1;
-!    uint16_t BIAS_PD:1;
-!    uint16_t VGA_RESET_N:1;
-! } cc2420_MANOR_reg_t;
-! 
-! /// [R/W] AGC Control Register
-! #define CC2420_AGCCTRL_ADDR       0x23
-! typedef struct {
-!    uint16_t LNAMIX_GAINMODE:2;
-!    uint16_t LNAMIX_GAINMODE_O:2;
-!    uint16_t VGA_GAIN:7;
-!    uint16_t VGA_GAIN_OE:1;
-!    uint16_t reserved_w0:4;
-! } cc2420_AGCCTRL_reg_t;
-! 
-! /// [R/W] AGC Test Register 0
-! #define CC2420_AGCTST0_ADDR       0x24
-! typedef struct {
-!    uint16_t LNAMIX_THR_L:6;
-!    uint16_t LNAMIX_THR_H:6;
-!    uint16_t LNAMIX_HYST:4;
-! } cc2420_AGCTST0_reg_t;
-! 
-! /// [R/W] AGC Test Register 1
-! #define CC2420_AGCTST1_ADDR       0x25
-! typedef struct {
-!    uint16_t AGC_REF:6;
-!    uint16_t AGC_WIN_SIZE:2;
-!    uint16_t AGC_PEAK_DET_MODE:3;
-!    uint16_t AGC_SETTLE_WAIT:2;
-!    uint16_t PEAKDET_CUR_BOOST:1;
-!    uint16_t AGC_BLANK_MODE:1;
-!    uint16_t reserved_w0:1;
-! } cc2420_AGCTST1_reg_t;
-! 
-! /// [R/W] AGC Test Register 2
-! #define CC2420_AGCTST2_ADDR       0x26
-! typedef struct {
-!    uint16_t LOW2MEDGAIN:5;
-!    uint16_t MED2HIGHGAIN:5;
-!    uint16_t reserved_w0:6;
-! } cc2420_AGCTST2_reg_t;
-! 
-! /// [R/W] Frequency Synthesizer Test Register 0
-! #define CC2420_FSTST0_ADDR        0x27
-! typedef struct {
-!    uint16_t VCO_ARRAY_RES:5;
-!    uint16_t VCO_ARRAY_O:5;
-!    uint16_t VCO_ARRAY_OE:1;
-!    uint16_t VCO_ARRAY_SETTLE_LONG:1;
-!    uint16_t reserved_w0:4;
-! } cc2420_FSTST0_reg_t;
-! 
-! /// [R/W] Frequency Synthesizer Test Register 1
-! #define CC2420_FSTST1_ADDR        0x28
-! typedef struct {
-!    uint16_t VC_DAC_VAL:3;
-!    uint16_t VC_DAC_EN:1;
-!    uint16_t VCO_CURRENT_K:6;
-!    uint16_t VCO_CURRENT_REF:4;
-!    uint16_t VCO_ARRAY_CAL_LONG:1;
-!    uint16_t VCO_TX_NOCAL:1;
-! } cc2420_FSTST1_reg_t;
-! 
-! /// [R/W] Frequency Synthesizer Test Register 2
-! #define CC2420_FSTST2_ADDR        0x29
-! typedef struct {
-!    uint16_t VCO_CURRENT_RES:6;
-!    uint16_t VCO_CURRENT_O:6;
-!    uint16_t VCO_CURRENT_OE:1;
-!    uint16_t VCO_CURCAL_SPEED:2;
-!    uint16_t reserved_w0:1;
-! } cc2420_FSTST2_reg_t;
-! 
-! /// [R/W] Frequency Synthesizer Test Register 3
-! #define CC2420_FSTST3_ADDR        0x2a
-! typedef struct {
-!    uint16_t START_CHP_CURRENT:4;
-!    uint16_t STOP_CHP_CURRENT:4;
-!    uint16_t CHP_STEP_PERIOD:2;
-!    uint16_t PD_DELAY:1;
-!    uint16_t CHP_DISABLE:1;
-!    uint16_t CHP_TEST_DN:1;
-!    uint16_t CHP_TEST_UP:1;
-!    uint16_t CHP_CURRENT_OE:1;
-!    uint16_t CHP_CAL_DISABLE:1;
-! } cc2420_FSTST3_reg_t;
-! 
-! /// [R/W] Receiver Bandpass Filter Test Register
-! #define CC2420_RXBPFTST_ADDR      0x2b
-! typedef struct {
-!    uint16_t RXBPF_CAP_RES:7;
-!    uint16_t RXBPF_CAP_O:7;
-!    uint16_t RXBPF_CAP_OE:1;
-!    uint16_t reserved_w0:1;
-! } cc2420_RXBPFTST_reg_t;
-! 
-! /// [R  ] Finite State Machine State Status Register
-! #define CC2420_FSMSTATE_ADDR      0x2c
-! typedef struct {
-!    uint16_t FSM_CUR_STATE:6;
-!    uint16_t reserved_w0:10;
-! } cc2420_FSMSTATE_reg_t;
-! 
-! /// [R/W] ADC Test Register
-! #define CC2420_ADCTST_ADDR        0x2d
-! typedef struct {
-!    uint16_t ADC_Q:7;
-!    uint16_t reserved_w0:1;
-!    uint16_t ADC_I:7;
-!    uint16_t ADC_CLOCK_DISABLE:1;
-! } cc2420_ADCTST_reg_t;
-! 
-! /// [R/W] DAC Test Register
-! #define CC2420_DACTST_ADDR        0x2e
-! typedef struct {
-!    uint16_t DAC_Q_O:6;
-!    uint16_t DAC_I_O:6;
-!    uint16_t DAC_SRC:3;
-!    uint16_t reserved_w0:1;
-! } cc2420_DACTST_reg_t;
-! 
-! /// [R/W] Top Level Test Register
-! #define CC2420_TOPTST_ADDR        0x2f
-! typedef struct {
-!    uint16_t ATESTMOD_MODE:4;
-!    uint16_t ATESTMOD_PD:1;
-!    uint16_t VC_IN_TEST_EN:1;
-!    uint16_t TEST_BATTMON_EN:1;
-!    uint16_t RAM_BIST_RUN:1;
-!    uint16_t reserved_w0:8;
-! } cc2420_TOPTST_reg_t;
-! 
-! //=========================== buffer ==========================================
-! 
-! /// [  W] Transmit FIFO Byte Register
-! #define CC2420_TXFIFO_ADDR        0x3e
-! 
-! /// [R/W] Receiver FIFO Byte Register
-! #define CC2420_RXFIFO_ADDR        0x3f
-! 
-  #endif
-\ No newline at end of file
---- 1,407 ----
-! /**
-! \brief Register definitions for the Texas Instruments CC2420 radio chip.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #ifndef __CC2420_H
-! #define __CC2420_H
-! 
-! //=========================== spi flags =======================================
-! 
-! #define CC2420_FLAG_READ          0x40
-! #define CC2420_FLAG_WRITE         0x00
-! 
-! #define CC2420_FLAG_RAM           0x80
-! #define CC2420_FLAG_REG           0x00
-! 
-! //=========================== status byte =====================================
-! 
-! typedef struct {
-!    uint8_t reserved_1:1;
-!    uint8_t rssi_valid:1;
-!    uint8_t lock:1;
-!    uint8_t tx_active:1;
-!    uint8_t enc_busy:1;
-!    uint8_t tx_underflow:1;
-!    uint8_t xosc16m_stable:1;
-!    uint8_t reserved_2:1;
-! } cc2420_status_t;
-! 
-! //=========================== strobes =========================================
-! 
-! #define CC2420_SNOP               0x00 // [S  ] No Operation
-! #define CC2420_SXOSCON            0x01 // [S  ] Turn on the crystal oscillator
-! #define CC2420_STXCAL             0x02 // [S  ] Enable and calibrate frequency synthesizer for TX
-! #define CC2420_SRXON              0x03 // [S  ] Enable RX
-! #define CC2420_STXON              0x04 // [S  ] Enable TX after calibration (if not already performed)
-! #define CC2420_STXONCCA           0x05 // [S  ] If CCA indicates a clear channel, Enable calibration, then TX
-! #define CC2420_SRFOFF             0x06 // [S  ] Disable RX/TX and frequency synthesizer
-! #define CC2420_SXOSCOFF           0x07 // [S  ] Turn off the crystal oscillator and RF
-! #define CC2420_SFLUSHRX           0x08 // [S  ] Flush the RX FIFO buffer and reset the demodulator
-! #define CC2420_SFLUSHTX           0x09 // [S  ] Flush the TX FIFO buffer
-! #define CC2420_SACK               0x0a // [S  ] Send acknowledge frame, with pending field cleared
-! #define CC2420_SACKPEND           0x0b // [S  ] Send acknowledge frame, with pending field set
-! #define CC2420_SRXDEC             0x0c // [S  ] Start RXFIFO in-line decryption / authentication
-! #define CC2420_STXENC             0x0d // [S  ] Start TXFIFO in-line encryption / authentication
-! #define CC2420_SAES               0x0e // [S  ] AES Stand alone encryption strobe
-! 
-! //=========================== registers =======================================
-! 
-! /// [R/W] Main Control Register
-! #define CC2420_MAIN_ADDR          0x10
-! typedef struct {
-!    uint16_t XOSC16M_BYPASS:1;
-!    uint16_t reserved_w0:10;
-!    uint16_t FS_RESETn:1;
-!    uint16_t MOD_RESETn:1;
-!    uint16_t DEMOD_RESETn:1;
-!    uint16_t ENC_RESETn:1;
-!    uint16_t RESETn:1;
-! } cc2420_MAIN_reg_t;
-! 
-! /// [R/W] Modem Control Register 0
-! #define CC2420_MDMCTRL0_ADDR      0x11
-! typedef struct {
-!    uint16_t PREAMBLE_LENGTH:4;
-!    uint16_t AUTOACK:1;
-!    uint16_t AUTOCRC:1;
-!    uint16_t CCA_MODE:2;
-!    uint16_t CCA_HYST:3;
-!    uint16_t ADR_DECODE:1;
-!    uint16_t PAN_COORDINATOR:1;
-!    uint16_t RESERVED_FRAME_MODE:1;
-!    uint16_t reserved_w0:2;
-! } cc2420_MDMCTRL0_reg_t;
-! 
-! /// [R/W] Modem Control Register 1
-! #define CC2420_MDMCTRL1_ADDR      0x12
-! typedef struct {
-!    uint16_t RX_MODE:2;
-!    uint16_t TX_MODE:2;
-!    uint16_t MODULATION_MODE:1;
-!    uint16_t DEMOD_AVG_MODE:1;
-!    uint16_t CORR_THR:5;
-!    uint16_t reserved_w0:5;
-! } cc2420_MDMCTRL1_reg_t;
-! 
-! // [R/W] RSSI and CCA Status and Control register
-! #define CC2420_RSSI_ADDR          0x13
-! typedef struct {
-!    uint16_t RSSI_VAL:8;
-!    uint16_t CCR_THR:8;
-! } cc2420_RSSI_reg_t;
-! 
-! /// [R/W] Synchronisation word control register
-! #define CC2420_SYNCWORD_ADDR      0x14
-! typedef struct {
-!    uint16_t SYNCWORD:16;
-! } cc2420_SYNCWORD_reg_t;
-! 
-! /// [R/W] Transmit Control Register
-! #define CC2420_TXCTRL_ADDR        0x15
-! typedef struct {
-!    uint16_t PA_LEVEL:5;
-!    uint16_t reserved_w1:1;
-!    uint16_t PA_CURRENT:3;
-!    uint16_t TXMIX_CURRENT:2;
-!    uint16_t TXMIX_CAP_ARRAY:2;
-!    uint16_t TX_TURNAROUND:1;
-!    uint16_t TXMIXBUF_CUR:2;
-! } cc2420_TXCTRL_reg_t;
-! 
-! /// [R/W] Receive Control Register 0
-! #define CC2420_RXCTRL0_ADDR       0x16
-! typedef struct {
-!    uint16_t LOW_LNA_CURRENT:2;
-!    uint16_t MED_LNA_CURRENT:2;
-!    uint16_t HIGH_LNA_CURRENT:2;
-!    uint16_t LOW_LNA_GAIN:2;
-!    uint16_t MED_LNA_GAIN:2;
-!    uint16_t HIGH_LNA_GAIN:2;
-!    uint16_t RXMIXBUF_CUR:2;
-!    uint16_t reserved_w0:2;
-! } cc2420_RXCTRL0_reg_t;
-! 
-! /// [R/W] Receive Control Register 1
-! #define CC2420_RXCTRL1_ADDR       0x17
-! typedef struct {
-!    uint16_t RXMIX_CURRENT:2;
-!    uint16_t RXMIX_VCM:2;
-!    uint16_t RXMIX_TAIL:2;
-!    uint16_t LNA_CAP_ARRAY:2;
-!    uint16_t MED_HGM:1;
-!    uint16_t HIGH_HGM:1;
-!    uint16_t MED_LOWGAIN:1;
-!    uint16_t LOW_LOWGAIN:1;
-!    uint16_t RXBPF_MIDCUR:1;
-!    uint16_t RXBPF_LOCUR:1;
-!    uint16_t reserved_w0:2;
-! } cc2420_RXCTRL1_reg_t;
-! 
-! /// [R/W] Frequency Synthesizer Control and Status Register
-! #define CC2420_FSCTRL_ADDR        0x18
-! typedef struct {
-!    uint16_t FREQ:10;
-!    uint16_t LOCK_STATUS:1;
-!    uint16_t LOCK_LENGTH:1;
-!    uint16_t CAL_RUNNING:1;
-!    uint16_t CAL_DONE:1;
-!    uint16_t LOCK_THR:2;
-! } cc2420_FSCTRL_reg_t;
-! 
-! /// [R/W] Security Control Register 0
-! #define CC2420_SECCTRL0_ADDR      0x19
-! typedef struct {
-!    uint16_t SEC_MODE:2;
-!    uint16_t SEC_M:3;
-!    uint16_t SEC_RXKEYSEL:1;
-!    uint16_t SEC_TXKEYSEL:1;
-!    uint16_t SEC_SAKEYSEL:1;
-!    uint16_t SEC_CBC_HEAD:1;
-!    uint16_t RXFIFO_PROTECTION:1;
-!    uint16_t reserved_w0:6;
-! } cc2420_SECCTRL0_reg_t;
-! 
-! /// [R/W] Security Control Register 1
-! #define CC2420_SECCTRL1_ADDR      0x1a
-! typedef struct {
-!    uint16_t SEC_RXL:7;
-!    uint16_t reserved_1_w0:1;
-!    uint16_t SEC_TXL:7;
-!    uint16_t reserved_2_w0:1;
-! } cc2420_SECCTRL1_reg_t;
-! 
-! /// [R/W] Battery Monitor Control and Status Register
-! #define CC2420_BATTMON_ADDR       0x1b
-! typedef struct {
-!    uint16_t BATTMON_VOLTAGE:5;
-!    uint16_t BATTMON_EN:1;
-!    uint16_t BATTMON_OK:1;
-!    uint16_t reserved_w0:9;
-! } cc2420_BATTMON_reg_t;
-! 
-! /// [R/W] Input / Output Control Register 0
-! #define CC2420_IOCFG0_ADDR        0x1c
-! typedef struct {
-!    uint16_t FIFOP_THR:7;
-!    uint16_t CCA_POLARITY:1;
-!    uint16_t SFD_POLARITY:1;
-!    uint16_t FIFOP_POLARITY:1;
-!    uint16_t FIFO_POLARITY:1;
-!    uint16_t BCN_ACCEPT:1;
-!    uint16_t reserved_w0:4;
-! } cc2420_IOCFG0_reg_t;
-! 
-! /// [R/W] Input / Output Control Register 1
-! #define CC2420_IOCFG1_ADDR        0x1d
-! typedef struct {
-!    uint16_t CCAMUX:5;
-!    uint16_t SFDMUX:5;
-!    uint16_t HSSD_SRC:3;
-!    uint16_t reserved_w0:3;
-! } cc2420_IOCFG1_reg_t;
-! 
-! /// [R/W] Manufacturer ID, Low 16 bits
-! #define CC2420_MANFIDL_ADDR       0x1e
-! typedef struct {
-!    uint16_t MANFID:12;
-!    uint16_t PARTNUM:4;
-! } cc2420_MANFIDL_reg_t;
-! 
-! /// [R/W] Manufacturer ID, High 16 bits
-! #define CC2420_MANFIDH_ADDR       0x1f
-! typedef struct {
-!    uint16_t PARTNUM:12;
-!    uint16_t AVERSION:4; // collision with -DVERSION=$(GIT_VERSION)
-! } cc2420_MANFIDH_reg_t;
-! 
-! /// [R/W] Finite State Machine Time Constants
-! #define CC2420_FSMTC_ADDR         0x20
-! typedef struct {
-!    uint16_t TC_TXEND2PAOFF:3;
-!    uint16_t TC_TXEND2SWITCH:3;
-!    uint16_t TC_PAON2TX:4;
-!    uint16_t TC_SWITCH2TX:3;
-!    uint16_t TC_RXCHAIN2RX:3;
-! } cc2420_FSMTC_reg_t;
-! 
-! /// [R/W] Manual signal AND override register
-! #define CC2420_MANAND_ADDR        0x21
-! typedef struct {
-!    uint16_t LNAMIX_PD:1;
-!    uint16_t RXBPF_PD:1;
-!    uint16_t VGA_PD:1;
-!    uint16_t ADC_PD:1;
-!    uint16_t FS_PD:1;
-!    uint16_t CHP_PD:1;
-!    uint16_t RXBPF_CAL_PD:1;
-!    uint16_t XOSC16M_PD:1;
-!    uint16_t DAC_LPF_PD:1;
-!    uint16_t PA_P_PD:1;
-!    uint16_t PA_N_PD:1;
-!    uint16_t PRE_PD:1;
-!    uint16_t RXTX:1;
-!    uint16_t BALUN_CTRL:1;
-!    uint16_t BIAS_PD:1;
-!    uint16_t VGA_RESET_N:1;
-! } cc2420_MANAND_reg_t;
-! 
-! /// [R/W] Manual signal OR override register
-! #define CC2420_MANOR_ADDR         0x22
-! typedef struct {
-!    uint16_t LNAMIX_PD:1;
-!    uint16_t RXBPF_PD:1;
-!    uint16_t VGA_PD:1;
-!    uint16_t ADC_PD:1;
-!    uint16_t FS_PD:1;
-!    uint16_t CHP_PD:1;
-!    uint16_t RXBPF_CAL_PD:1;
-!    uint16_t XOSC16M_PD:1;
-!    uint16_t DAC_LPF_PD:1;
-!    uint16_t PA_P_PD:1;
-!    uint16_t PA_N_PD:1;
-!    uint16_t PRE_PD:1;
-!    uint16_t RXTX:1;
-!    uint16_t BALUN_CTRL:1;
-!    uint16_t BIAS_PD:1;
-!    uint16_t VGA_RESET_N:1;
-! } cc2420_MANOR_reg_t;
-! 
-! /// [R/W] AGC Control Register
-! #define CC2420_AGCCTRL_ADDR       0x23
-! typedef struct {
-!    uint16_t LNAMIX_GAINMODE:2;
-!    uint16_t LNAMIX_GAINMODE_O:2;
-!    uint16_t VGA_GAIN:7;
-!    uint16_t VGA_GAIN_OE:1;
-!    uint16_t reserved_w0:4;
-! } cc2420_AGCCTRL_reg_t;
-! 
-! /// [R/W] AGC Test Register 0
-! #define CC2420_AGCTST0_ADDR       0x24
-! typedef struct {
-!    uint16_t LNAMIX_THR_L:6;
-!    uint16_t LNAMIX_THR_H:6;
-!    uint16_t LNAMIX_HYST:4;
-! } cc2420_AGCTST0_reg_t;
-! 
-! /// [R/W] AGC Test Register 1
-! #define CC2420_AGCTST1_ADDR       0x25
-! typedef struct {
-!    uint16_t AGC_REF:6;
-!    uint16_t AGC_WIN_SIZE:2;
-!    uint16_t AGC_PEAK_DET_MODE:3;
-!    uint16_t AGC_SETTLE_WAIT:2;
-!    uint16_t PEAKDET_CUR_BOOST:1;
-!    uint16_t AGC_BLANK_MODE:1;
-!    uint16_t reserved_w0:1;
-! } cc2420_AGCTST1_reg_t;
-! 
-! /// [R/W] AGC Test Register 2
-! #define CC2420_AGCTST2_ADDR       0x26
-! typedef struct {
-!    uint16_t LOW2MEDGAIN:5;
-!    uint16_t MED2HIGHGAIN:5;
-!    uint16_t reserved_w0:6;
-! } cc2420_AGCTST2_reg_t;
-! 
-! /// [R/W] Frequency Synthesizer Test Register 0
-! #define CC2420_FSTST0_ADDR        0x27
-! typedef struct {
-!    uint16_t VCO_ARRAY_RES:5;
-!    uint16_t VCO_ARRAY_O:5;
-!    uint16_t VCO_ARRAY_OE:1;
-!    uint16_t VCO_ARRAY_SETTLE_LONG:1;
-!    uint16_t reserved_w0:4;
-! } cc2420_FSTST0_reg_t;
-! 
-! /// [R/W] Frequency Synthesizer Test Register 1
-! #define CC2420_FSTST1_ADDR        0x28
-! typedef struct {
-!    uint16_t VC_DAC_VAL:3;
-!    uint16_t VC_DAC_EN:1;
-!    uint16_t VCO_CURRENT_K:6;
-!    uint16_t VCO_CURRENT_REF:4;
-!    uint16_t VCO_ARRAY_CAL_LONG:1;
-!    uint16_t VCO_TX_NOCAL:1;
-! } cc2420_FSTST1_reg_t;
-! 
-! /// [R/W] Frequency Synthesizer Test Register 2
-! #define CC2420_FSTST2_ADDR        0x29
-! typedef struct {
-!    uint16_t VCO_CURRENT_RES:6;
-!    uint16_t VCO_CURRENT_O:6;
-!    uint16_t VCO_CURRENT_OE:1;
-!    uint16_t VCO_CURCAL_SPEED:2;
-!    uint16_t reserved_w0:1;
-! } cc2420_FSTST2_reg_t;
-! 
-! /// [R/W] Frequency Synthesizer Test Register 3
-! #define CC2420_FSTST3_ADDR        0x2a
-! typedef struct {
-!    uint16_t START_CHP_CURRENT:4;
-!    uint16_t STOP_CHP_CURRENT:4;
-!    uint16_t CHP_STEP_PERIOD:2;
-!    uint16_t PD_DELAY:1;
-!    uint16_t CHP_DISABLE:1;
-!    uint16_t CHP_TEST_DN:1;
-!    uint16_t CHP_TEST_UP:1;
-!    uint16_t CHP_CURRENT_OE:1;
-!    uint16_t CHP_CAL_DISABLE:1;
-! } cc2420_FSTST3_reg_t;
-! 
-! /// [R/W] Receiver Bandpass Filter Test Register
-! #define CC2420_RXBPFTST_ADDR      0x2b
-! typedef struct {
-!    uint16_t RXBPF_CAP_RES:7;
-!    uint16_t RXBPF_CAP_O:7;
-!    uint16_t RXBPF_CAP_OE:1;
-!    uint16_t reserved_w0:1;
-! } cc2420_RXBPFTST_reg_t;
-! 
-! /// [R  ] Finite State Machine State Status Register
-! #define CC2420_FSMSTATE_ADDR      0x2c
-! typedef struct {
-!    uint16_t FSM_CUR_STATE:6;
-!    uint16_t reserved_w0:10;
-! } cc2420_FSMSTATE_reg_t;
-! 
-! /// [R/W] ADC Test Register
-! #define CC2420_ADCTST_ADDR        0x2d
-! typedef struct {
-!    uint16_t ADC_Q:7;
-!    uint16_t reserved_w0:1;
-!    uint16_t ADC_I:7;
-!    uint16_t ADC_CLOCK_DISABLE:1;
-! } cc2420_ADCTST_reg_t;
-! 
-! /// [R/W] DAC Test Register
-! #define CC2420_DACTST_ADDR        0x2e
-! typedef struct {
-!    uint16_t DAC_Q_O:6;
-!    uint16_t DAC_I_O:6;
-!    uint16_t DAC_SRC:3;
-!    uint16_t reserved_w0:1;
-! } cc2420_DACTST_reg_t;
-! 
-! /// [R/W] Top Level Test Register
-! #define CC2420_TOPTST_ADDR        0x2f
-! typedef struct {
-!    uint16_t ATESTMOD_MODE:4;
-!    uint16_t ATESTMOD_PD:1;
-!    uint16_t VC_IN_TEST_EN:1;
-!    uint16_t TEST_BATTMON_EN:1;
-!    uint16_t RAM_BIST_RUN:1;
-!    uint16_t reserved_w0:8;
-! } cc2420_TOPTST_reg_t;
-! 
-! //=========================== buffer ==========================================
-! 
-! /// [  W] Transmit FIFO Byte Register
-! #define CC2420_TXFIFO_ADDR        0x3e
-! 
-! /// [R/W] Receiver FIFO Byte Register
-! #define CC2420_RXFIFO_ADDR        0x3f
-! 
-  #endif
-\ No newline at end of file
-diff -crB openwsn/cross-layers/Makefile ../../../sys/net/openwsn/cross-layers/Makefile
-*** openwsn/cross-layers/Makefile	Wed Jan 15 13:55:34 2014
---- ../../../sys/net/openwsn/cross-layers/Makefile	Wed Jan 15 13:48:27 2014
-***************
-*** 0 ****
---- 1,32 ----
-+ SUBMOD:=$(shell basename $(CURDIR)).a
-+ #BINDIR = $(RIOTBASE)/bin/
-+ SRC = $(wildcard *.c)
-+ OBJ = $(SRC:%.c=$(BINDIR)%.o)
-+ DEP = $(SRC:%.c=$(BINDIR)%.d)
-+ 
-+ INCLUDES += -I$(RIOTBASE) -I$(RIOTBASE)/sys/include -I$(RIOTBASE)/core/include -I$(RIOTBASE)/drivers/include -I$(RIOTBASE)/drivers/cc110x_ng/include -I$(RIOTBASE)/cpu/arm_common/include -I$(RIOTBASE)/sys/net/include/
-+ INCLUDES += -I$(CURDIR)/02a-MAClow
-+ INCLUDES += -I$(CURDIR)/02b-MAChigh
-+ INCLUDES += -I$(CURDIR)/03a-IPHC
-+ INCLUDES += -I$(CURDIR)/03b-IPv6
-+ INCLUDES += -I$(CURDIR)/04-TRAN
-+ INCLUDES += -I$(CURDIR)/cross-layers
-+ 
-+ .PHONY: $(BINDIR)$(SUBMOD)
-+ 
-+ $(BINDIR)$(SUBMOD): $(OBJ)
-+ 	$(AD)$(AR) rcs $(BINDIR)$(MODULE) $(OBJ)
-+ 
-+ # pull in dependency info for *existing* .o files
-+ -include $(OBJ:.o=.d)
-+ 
-+ # compile and generate dependency info
-+ $(BINDIR)%.o: %.c
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -c $*.c -o $(BINDIR)$*.o
-+ 	$(AD)$(CC) $(CFLAGS) $(INCLUDES) $(BOARDINCLUDE) $(PROJECTINCLUDE) $(CPUINCLUDE) -MM $*.c > $(BINDIR)$*.d
-+ 	@printf "$(BINDIR)" | cat - $(BINDIR)$*.d > /tmp/riot_out && mv /tmp/riot_out $(BINDIR)$*.d
-+ 
-+ # remove compilation products
-+ 
-+ clean:
-+ 	rm -f $(OBJ) $(DEP)
-diff -crB openwsn/cross-layers/idmanager.c ../../../sys/net/openwsn/cross-layers/idmanager.c
-*** openwsn/cross-layers/idmanager.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/cross-layers/idmanager.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,269 ****
-! #include "openwsn.h"
-! #include "idmanager.h"
-! #include "eui64.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "neighbors.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    bool          isDAGroot;
-!    bool          isBridge;
-!    open_addr_t   my16bID;
-!    open_addr_t   my64bID;
-!    open_addr_t   myPANID;
-!    open_addr_t   myPrefix;
-! } idmanager_vars_t;
-! 
-! idmanager_vars_t idmanager_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void idmanager_init() {
-!    idmanager_vars.isDAGroot            = FALSE;
-!    idmanager_vars.isBridge             = FALSE;
-!    idmanager_vars.myPANID.type         = ADDR_PANID;
-!    idmanager_vars.myPANID.panid[0]     = 0xca;
-!    idmanager_vars.myPANID.panid[1]     = 0xfe;
-!    idmanager_vars.myPrefix.type        = ADDR_PREFIX;
-!    idmanager_vars.myPrefix.prefix[0]   = 0x00;
-!    idmanager_vars.myPrefix.prefix[1]   = 0x00;
-!    idmanager_vars.myPrefix.prefix[2]   = 0x00;
-!    idmanager_vars.myPrefix.prefix[3]   = 0x00;
-!    idmanager_vars.myPrefix.prefix[4]   = 0x00;
-!    idmanager_vars.myPrefix.prefix[5]   = 0x00;
-!    idmanager_vars.myPrefix.prefix[6]   = 0x00;
-!    idmanager_vars.myPrefix.prefix[7]   = 0x00;
-!    idmanager_vars.my64bID.type         = ADDR_64B;
-!    eui64_get(idmanager_vars.my64bID.addr_64b);
-!    packetfunctions_mac64bToMac16b(&idmanager_vars.my64bID,&idmanager_vars.my16bID);
-! 
-!    // DEBUG_MOTEID_MASTER is DAGroot and bridge
-!    if (idmanager_vars.my16bID.addr_16b[1]==DEBUG_MOTEID_MASTER) {
-!       idmanager_vars.isDAGroot         = TRUE;
-!       idmanager_vars.isBridge          = TRUE;
-!    }
-! }
-! 
-! bool idmanager_getIsDAGroot() {
-!    bool res;
-!    INTERRUPT_DECLARATION();
-!    
-!    DISABLE_INTERRUPTS();
-!    res=idmanager_vars.isDAGroot;
-!    ENABLE_INTERRUPTS();
-!    return res;
-! }
-! 
-! void idmanager_setIsDAGroot(bool newRole) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    idmanager_vars.isDAGroot = newRole;
-!    neighbors_updateMyDAGrankAndNeighborPreference();
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! bool idmanager_getIsBridge() {
-!    bool res;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    res=idmanager_vars.isBridge;
-!    ENABLE_INTERRUPTS();
-!    return res;
-! }
-! 
-! void idmanager_setIsBridge(bool newRole) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    idmanager_vars.isBridge = newRole;
-!    ENABLE_INTERRUPTS();
-! 
-! }
-! 
-! open_addr_t* idmanager_getMyID(uint8_t type) {
-!    open_addr_t* res;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    switch (type) {
-!    case ADDR_16B:
-!       res= &idmanager_vars.my16bID;
-!       break;
-!    case ADDR_64B:
-!       res= &idmanager_vars.my64bID;
-!       break;
-!    case ADDR_PANID:
-!       res= &idmanager_vars.myPANID;
-!       break;
-!    case ADDR_PREFIX:
-!       res= &idmanager_vars.myPrefix;
-!       break;
-!    case ADDR_128B:
-!       // you don't ask for my full address, rather for prefix, then 64b
-!    default:
-!       openserial_printCritical(COMPONENT_IDMANAGER,ERR_WRONG_ADDR_TYPE,
-!             (errorparameter_t)type,
-!             (errorparameter_t)0);
-!       res= NULL;
-!       break;
-!    }
-!    ENABLE_INTERRUPTS();
-!    return res;
-! }
-! 
-! error_t idmanager_setMyID(open_addr_t* newID) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    switch (newID->type) {
-!    case ADDR_16B:
-!       memcpy(&idmanager_vars.my16bID,newID,sizeof(open_addr_t));
-!       break;
-!    case ADDR_64B:
-!       memcpy(&idmanager_vars.my64bID,newID,sizeof(open_addr_t));
-!       break;
-!    case ADDR_PANID:
-!       memcpy(&idmanager_vars.myPANID,newID,sizeof(open_addr_t));
-!       break;
-!    case ADDR_PREFIX:
-!       memcpy(&idmanager_vars.myPrefix,newID,sizeof(open_addr_t));
-!       break;
-!    case ADDR_128B:
-!       //don't set 128b, but rather prefix and 64b
-!    default:
-!       openserial_printCritical(COMPONENT_IDMANAGER,ERR_WRONG_ADDR_TYPE,
-!             (errorparameter_t)newID->type,
-!             (errorparameter_t)1);
-!       ENABLE_INTERRUPTS();
-!       return E_FAIL;
-!    }
-!    ENABLE_INTERRUPTS();
-!    return E_SUCCESS;
-! }
-! 
-! bool idmanager_isMyAddress(open_addr_t* addr) {
-!    open_addr_t temp_my128bID;
-!    bool res;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-! 
-!    switch (addr->type) {
-!    case ADDR_16B:
-!       res= packetfunctions_sameAddress(addr,&idmanager_vars.my16bID);
-!       ENABLE_INTERRUPTS();
-!       return res;
-!    case ADDR_64B:
-!       res= packetfunctions_sameAddress(addr,&idmanager_vars.my64bID);
-!       ENABLE_INTERRUPTS();
-!       return res;
-!    case ADDR_128B:
-!       //build temporary my128bID
-!       temp_my128bID.type = ADDR_128B;
-!       memcpy(&temp_my128bID.addr_128b[0],&idmanager_vars.myPrefix.prefix,8);
-!       memcpy(&temp_my128bID.addr_128b[8],&idmanager_vars.my64bID.addr_64b,8);
-! 
-!       res= packetfunctions_sameAddress(addr,&temp_my128bID);
-!       ENABLE_INTERRUPTS();
-!       return res;
-!    case ADDR_PANID:
-!       res= packetfunctions_sameAddress(addr,&idmanager_vars.myPANID);
-!       ENABLE_INTERRUPTS();
-!       return res;
-!    case ADDR_PREFIX:
-!       res= packetfunctions_sameAddress(addr,&idmanager_vars.myPrefix);
-!       ENABLE_INTERRUPTS();
-!       return res;
-!    default:
-!       openserial_printCritical(COMPONENT_IDMANAGER,ERR_WRONG_ADDR_TYPE,
-!             (errorparameter_t)addr->type,
-!             (errorparameter_t)2);
-!       ENABLE_INTERRUPTS();
-!       return FALSE;
-!    }
-! }
-! 
-! void idmanager_triggerAboutRoot() {
-!    uint8_t number_bytes_from_input_buffer;
-!    uint8_t input_buffer;
-!    //get command from OpenSerial
-!    number_bytes_from_input_buffer = openserial_getInputBuffer(&input_buffer,sizeof(input_buffer));
-!    if (number_bytes_from_input_buffer!=sizeof(input_buffer)) {
-!       openserial_printError(COMPONENT_IDMANAGER,ERR_INPUTBUFFER_LENGTH,
-!             (errorparameter_t)number_bytes_from_input_buffer,
-!             (errorparameter_t)0);
-!       return;
-!    };
-!    //handle command
-!    switch (input_buffer) {
-!    case 'Y':
-!       idmanager_setIsDAGroot(TRUE);
-!       break;
-!    case 'N':
-!       idmanager_setIsDAGroot(FALSE);
-!       break;
-!    case 'T':
-!       if (idmanager_getIsDAGroot()) {
-!          idmanager_setIsDAGroot(FALSE);
-!       } else {
-!          idmanager_setIsDAGroot(TRUE);
-!       }
-!       break;
-!    }
-!    return;
-! }
-! 
-! void idmanager_triggerAboutBridge() {
-!    uint8_t number_bytes_from_input_buffer;
-!    uint8_t input_buffer[9];
-!    //get command from OpenSerial (1B command, 8B prefix)
-!    number_bytes_from_input_buffer = openserial_getInputBuffer(&input_buffer[0],sizeof(input_buffer));
-!    if (number_bytes_from_input_buffer!=sizeof(input_buffer)) {
-!       openserial_printError(COMPONENT_IDMANAGER,ERR_INPUTBUFFER_LENGTH,
-!             (errorparameter_t)number_bytes_from_input_buffer,
-!             (errorparameter_t)0);
-!       return;
-!    };
-!    //handle command
-!    switch (input_buffer[0]) {
-!    case 'Y':
-!       idmanager_setIsBridge(TRUE);
-!       memcpy(&(idmanager_vars.myPrefix.prefix),&(input_buffer[1]),8);
-!       break;
-!    case 'N':
-!       idmanager_setIsBridge(FALSE);
-!       break;
-!    case 'T':
-!       if (idmanager_getIsBridge()) {
-!          idmanager_setIsBridge(FALSE);
-!       } else {
-!          idmanager_setIsBridge(TRUE);
-!          memcpy(&(idmanager_vars.myPrefix.prefix),&(input_buffer[1]),8);
-!       }
-!       break;
-!    }
-!    return;
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_id() {
-!    debugIDManagerEntry_t output;
-!    output.isDAGroot = idmanager_vars.isDAGroot;
-!    output.isBridge  = idmanager_vars.isBridge;
-!    output.my16bID   = idmanager_vars.my16bID;
-!    output.my64bID   = idmanager_vars.my64bID;
-!    output.myPANID   = idmanager_vars.myPANID;
-!    output.myPrefix  = idmanager_vars.myPrefix;
-!    openserial_printStatus(STATUS_ID,(uint8_t*)&output,sizeof(debugIDManagerEntry_t));
-!    return TRUE;
-! }
-! 
-! 
-! //=========================== private =========================================
---- 1,250 ----
-! #include "openwsn.h"
-! #include "idmanager.h"
-! #include "eui64.h"
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "neighbors.h"
-! 
-! //=========================== variables =======================================
-! 
-! idmanager_vars_t idmanager_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void idmanager_init(void) {
-!    idmanager_vars.isDAGroot            = FALSE;
-!    idmanager_vars.isBridge             = FALSE;
-!    idmanager_vars.myPANID.type         = ADDR_PANID;
-!    idmanager_vars.myPANID.panid[0]     = 0xca;
-!    idmanager_vars.myPANID.panid[1]     = 0xfe;
-! 
-!    idmanager_vars.myPrefix.type        = ADDR_PREFIX;
-!    memset(&idmanager_vars.myPrefix.prefix[0], 0x00, sizeof(idmanager_vars.myPrefix.prefix));
-!    idmanager_vars.my64bID.type         = ADDR_64B;
-! 
-!    eui64_get(idmanager_vars.my64bID.addr_64b);
-!    packetfunctions_mac64bToMac16b(&idmanager_vars.my64bID,&idmanager_vars.my16bID);
-!    
-! //   if(idmanager_vars.my16bID.addr_16b[1] == 0x0B)
-! //     idmanager_setIsDAGroot(TRUE);
-! }
-! 
-! bool idmanager_getIsDAGroot(void) {
-!    bool res;
-!    INTERRUPT_DECLARATION();
-!    
-!    DISABLE_INTERRUPTS();
-!    res=idmanager_vars.isDAGroot;
-!    ENABLE_INTERRUPTS();
-!    return res;
-! }
-! 
-! void idmanager_setIsDAGroot(bool newRole) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    idmanager_vars.isDAGroot = newRole;
-!    neighbors_updateMyDAGrankAndNeighborPreference();
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! bool idmanager_getIsBridge(void) {
-!    bool res;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    res=idmanager_vars.isBridge;
-!    ENABLE_INTERRUPTS();
-!    return res;
-! }
-! 
-! void idmanager_setIsBridge(bool newRole) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    idmanager_vars.isBridge = newRole;
-!    ENABLE_INTERRUPTS();
-! 
-! }
-! 
-! open_addr_t* idmanager_getMyID(uint8_t type) {
-!    open_addr_t* res;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    switch (type) {
-!      case ADDR_16B:
-!         res= &idmanager_vars.my16bID;
-!         break;
-!      case ADDR_64B:
-!         res= &idmanager_vars.my64bID;
-!         break;
-!      case ADDR_PANID:
-!         res= &idmanager_vars.myPANID;
-!         break;
-!      case ADDR_PREFIX:
-!         res= &idmanager_vars.myPrefix;
-!         break;
-!      case ADDR_128B:
-!         // you don't ask for my full address, rather for prefix, then 64b
-!      default:
-!         openserial_printCritical(COMPONENT_IDMANAGER,ERR_WRONG_ADDR_TYPE,
-!               (errorparameter_t)type,
-!               (errorparameter_t)0);
-!         res= NULL;
-!         break;
-!    }
-!    ENABLE_INTERRUPTS();
-!    return res;
-! }
-! 
-! owerror_t idmanager_setMyID(open_addr_t* newID) {
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    switch (newID->type) {
-!      case ADDR_16B:
-!         memcpy(&idmanager_vars.my16bID,newID,sizeof(open_addr_t));
-!         break;
-!      case ADDR_64B:
-!         memcpy(&idmanager_vars.my64bID,newID,sizeof(open_addr_t));
-!         break;
-!      case ADDR_PANID:
-!         memcpy(&idmanager_vars.myPANID,newID,sizeof(open_addr_t));
-!         break;
-!      case ADDR_PREFIX:
-!         memcpy(&idmanager_vars.myPrefix,newID,sizeof(open_addr_t));
-!         break;
-!      case ADDR_128B:
-!         //don't set 128b, but rather prefix and 64b
-!      default:
-!         openserial_printCritical(COMPONENT_IDMANAGER,ERR_WRONG_ADDR_TYPE,
-!               (errorparameter_t)newID->type,
-!               (errorparameter_t)1);
-!         ENABLE_INTERRUPTS();
-!         return E_FAIL;
-!    }
-!    ENABLE_INTERRUPTS();
-!    return E_SUCCESS;
-! }
-! 
-! bool idmanager_isMyAddress(open_addr_t* addr) {
-!    open_addr_t temp_my128bID;
-!    bool res;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-! 
-!    switch (addr->type) {
-!      case ADDR_16B:
-!         res= packetfunctions_sameAddress(addr,&idmanager_vars.my16bID);
-!         ENABLE_INTERRUPTS();
-!         return res;
-!      case ADDR_64B:
-!         res= packetfunctions_sameAddress(addr,&idmanager_vars.my64bID);
-!         ENABLE_INTERRUPTS();
-!         return res;
-!      case ADDR_128B:
-!         //build temporary my128bID
-!         temp_my128bID.type = ADDR_128B;
-!         memcpy(&temp_my128bID.addr_128b[0],&idmanager_vars.myPrefix.prefix,8);
-!         memcpy(&temp_my128bID.addr_128b[8],&idmanager_vars.my64bID.addr_64b,8);
-! 
-!         res= packetfunctions_sameAddress(addr,&temp_my128bID);
-!         ENABLE_INTERRUPTS();
-!         return res;
-!      case ADDR_PANID:
-!         res= packetfunctions_sameAddress(addr,&idmanager_vars.myPANID);
-!         ENABLE_INTERRUPTS();
-!         return res;
-!      case ADDR_PREFIX:
-!         res= packetfunctions_sameAddress(addr,&idmanager_vars.myPrefix);
-!         ENABLE_INTERRUPTS();
-!         return res;
-!      default:
-!         openserial_printCritical(COMPONENT_IDMANAGER,ERR_WRONG_ADDR_TYPE,
-!               (errorparameter_t)addr->type,
-!               (errorparameter_t)2);
-!         ENABLE_INTERRUPTS();
-!         return FALSE;
-!    }
-! }
-! 
-! void idmanager_triggerAboutRoot(void) {
-!    uint8_t number_bytes_from_input_buffer;
-!    uint8_t input_buffer;
-!    // get command from OpenSerial
-!    number_bytes_from_input_buffer = openserial_getInputBuffer(&input_buffer,sizeof(input_buffer));
-!    if (number_bytes_from_input_buffer!=sizeof(input_buffer)) {
-!       openserial_printError(COMPONENT_IDMANAGER,ERR_INPUTBUFFER_LENGTH,
-!             (errorparameter_t)number_bytes_from_input_buffer,
-!             (errorparameter_t)0);
-!       return;
-!    };
-!    // handle command
-!    switch (input_buffer) {
-!      case ACTION_YES:
-!         idmanager_setIsDAGroot(TRUE);
-!         break;
-!      case ACTION_NO:
-!         idmanager_setIsDAGroot(FALSE);
-!         break;
-!      case ACTION_TOGGLE:
-!         if (idmanager_getIsDAGroot()) {
-!            idmanager_setIsDAGroot(FALSE);
-!         } else {
-!            idmanager_setIsDAGroot(TRUE);
-!         }
-!         break;
-!    }
-!    return;
-! }
-! 
-! void idmanager_triggerAboutBridge(void) {
-!    uint8_t number_bytes_from_input_buffer;
-!    uint8_t input_buffer;
-!    //get command from OpenSerial
-!    number_bytes_from_input_buffer = openserial_getInputBuffer(&input_buffer,sizeof(input_buffer));
-!    if (number_bytes_from_input_buffer!=sizeof(input_buffer)) {
-!       openserial_printError(COMPONENT_IDMANAGER,ERR_INPUTBUFFER_LENGTH,
-!             (errorparameter_t)number_bytes_from_input_buffer,
-!             (errorparameter_t)1);
-!       return;
-!    };
-!    //handle command
-!    switch (input_buffer) {
-!      case ACTION_YES:
-!         idmanager_setIsBridge(TRUE);
-!         break;
-!      case ACTION_NO:
-!         idmanager_setIsBridge(FALSE);
-!         break;
-!      case ACTION_TOGGLE:
-!         if (idmanager_getIsBridge()) {
-!            idmanager_setIsBridge(FALSE);
-!         } else {
-!            idmanager_setIsBridge(TRUE);
-!         }
-!         break;
-!    }
-!    return;
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_id(void) {
-!    debugIDManagerEntry_t output;
-!    output.isDAGroot = idmanager_vars.isDAGroot;
-!    output.isBridge  = idmanager_vars.isBridge;
-!    output.my16bID   = idmanager_vars.my16bID;
-!    output.my64bID   = idmanager_vars.my64bID;
-!    output.myPANID   = idmanager_vars.myPANID;
-!    output.myPrefix  = idmanager_vars.myPrefix;
-!    openserial_printStatus(STATUS_ID,(uint8_t*)&output,sizeof(debugIDManagerEntry_t));
-!    return TRUE;
-! }
-! 
-! 
-! //=========================== private =========================================
-diff -crB openwsn/cross-layers/idmanager.h ../../../sys/net/openwsn/cross-layers/idmanager.h
-*** openwsn/cross-layers/idmanager.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/cross-layers/idmanager.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,49 ****
-! #ifndef __IDMANAGER_H
-! #define __IDMANAGER_H
-! 
-! /**
-! \addtogroup cross-layers
-! \{
-! \addtogroup IDManager
-! \{
-! */
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    bool          isDAGroot;
-!    bool          isBridge;
-!    open_addr_t   my16bID;
-!    open_addr_t   my64bID;
-!    open_addr_t   myPANID;
-!    open_addr_t   myPrefix;
-! } debugIDManagerEntry_t;
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void         idmanager_init();
-! bool         idmanager_getIsDAGroot();
-! void         idmanager_setIsDAGroot(bool newRole);
-! bool         idmanager_getIsBridge();
-! void         idmanager_setIsBridge(bool newRole);
-! open_addr_t* idmanager_getMyID(uint8_t type);
-! error_t      idmanager_setMyID(open_addr_t* newID);
-! bool         idmanager_isMyAddress(open_addr_t* addr);
-! void         idmanager_triggerAboutRoot();
-! void         idmanager_triggerAboutBridge();
-! 
-! bool         debugPrint_id();
-! 
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,62 ----
-! #ifndef __IDMANAGER_H
-! #define __IDMANAGER_H
-! 
-! /**
-! \addtogroup cross-layers
-! \{
-! \addtogroup IDManager
-! \{
-! */
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! #define ACTION_YES      'Y'
-! #define ACTION_NO       'N'
-! #define ACTION_TOGGLE   'T'
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    bool          isDAGroot;
-!    bool          isBridge;
-!    open_addr_t   my16bID;
-!    open_addr_t   my64bID;
-!    open_addr_t   myPANID;
-!    open_addr_t   myPrefix;
-! } debugIDManagerEntry_t;
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    bool          isDAGroot;
-!    bool          isBridge;
-!    open_addr_t   my16bID;
-!    open_addr_t   my64bID;
-!    open_addr_t   myPANID;
-!    open_addr_t   myPrefix;
-! } idmanager_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! void         idmanager_init(void);
-! bool         idmanager_getIsDAGroot(void);
-! void         idmanager_setIsDAGroot(bool newRole);
-! bool         idmanager_getIsBridge(void);
-! void         idmanager_setIsBridge(bool newRole);
-! open_addr_t* idmanager_getMyID(uint8_t type);
-! owerror_t      idmanager_setMyID(open_addr_t* newID);
-! bool         idmanager_isMyAddress(open_addr_t* addr);
-! void         idmanager_triggerAboutRoot(void);
-! void         idmanager_triggerAboutBridge(void);
-! 
-! bool         debugPrint_id(void);
-! 
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/cross-layers/openqueue.c ../../../sys/net/openwsn/cross-layers/openqueue.c
-*** openwsn/cross-layers/openqueue.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/cross-layers/openqueue.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,261 ****
-! #include "openwsn.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! #include "IEEE802154E.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    OpenQueueEntry_t queue[QUEUELENGTH];
-! } openqueue_vars_t;
-! 
-! openqueue_vars_t openqueue_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void openqueue_reset_entry(OpenQueueEntry_t* entry);
-! 
-! //=========================== public ==========================================
-! 
-! //======= admin
-! 
-! /**
-! \brief Initialize this module.
-! */
-! void openqueue_init() {
-!    uint8_t i;
-!    for (i=0;i<QUEUELENGTH;i++){
-!       openqueue_reset_entry(&(openqueue_vars.queue[i]));
-!    }
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_queue() {
-!    debugOpenQueueEntry_t output[QUEUELENGTH];
-!    uint8_t i;
-!    for (i=0;i<QUEUELENGTH;i++) {
-!       output[i].creator = openqueue_vars.queue[i].creator;
-!       output[i].owner   = openqueue_vars.queue[i].owner;
-!    }
-!    openserial_printStatus(STATUS_QUEUE,(uint8_t*)&output,QUEUELENGTH*sizeof(debugOpenQueueEntry_t));
-!    return TRUE;
-! }
-! 
-! //======= called by any component
-! 
-! /**
-! \brief Request a new (free) packet buffer.
-! 
-! Component throughout the protocol stack can call this function is they want to
-! get a new packet buffer to start creating a new packet.
-! 
-! \note Once a packet has been allocated, it is up to the creator of the packet
-!       to free it using the openqueue_freePacketBuffer() function.
-! 
-! \returns A pointer to the queue entry when it could be allocated, or NULL when
-!          it could not be allocated (buffer full or not synchronized).
-! */
-! OpenQueueEntry_t* openqueue_getFreePacketBuffer(uint8_t creator) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    
-!    // refuse to allocate if we're not in sync
-!    if (ieee154e_isSynch()==FALSE && creator > COMPONENT_IEEE802154E){
-!      ENABLE_INTERRUPTS();
-!      return NULL;
-!    }
-!    
-!    // if you get here, I will try to allocate a buffer for you
-!    
-!    // walk through queue and find free entry
-!    for (i=0;i<QUEUELENGTH;i++) {
-!       if (openqueue_vars.queue[i].owner==COMPONENT_NULL) {
-!          openqueue_vars.queue[i].creator=creator;
-!          openqueue_vars.queue[i].owner=COMPONENT_OPENQUEUE;
-!          ENABLE_INTERRUPTS(); 
-!          return &openqueue_vars.queue[i];
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-!    return NULL;
-! }
-! 
-! 
-! /**
-! \brief Free a previously-allocated packet buffer.
-! 
-! \param pkt A pointer to the previsouly-allocated packet buffer.
-! 
-! \returns E_SUCCESS when the freeing was succeful.
-! \returns E_FAIL when the module could not find the specified packet buffer.
-! */
-! error_t openqueue_freePacketBuffer(OpenQueueEntry_t* pkt) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    for (i=0;i<QUEUELENGTH;i++) {
-!       if (&openqueue_vars.queue[i]==pkt) {
-!          if (openqueue_vars.queue[i].owner==COMPONENT_NULL) {
-!             // log the error
-!             openserial_printCritical(COMPONENT_OPENQUEUE,ERR_FREEING_UNUSED,
-!                                   (errorparameter_t)0,
-!                                   (errorparameter_t)0);
-!          }
-!          openqueue_reset_entry(&(openqueue_vars.queue[i]));
-!          ENABLE_INTERRUPTS();
-!          return E_SUCCESS;
-!       }
-!    }
-!    // log the error
-!    openserial_printCritical(COMPONENT_OPENQUEUE,ERR_FREEING_ERROR,
-!                          (errorparameter_t)0,
-!                          (errorparameter_t)0);
-!    ENABLE_INTERRUPTS();
-!    return E_FAIL;
-! }
-! 
-! /**
-! \brief Free all the packet buffers created by a specific module.
-! 
-! \param owner The identifier of the component, taken in COMPONENT_*.
-! */
-! void openqueue_removeAllCreatedBy(uint8_t creator) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    for (i=0;i<QUEUELENGTH;i++){
-!       if (openqueue_vars.queue[i].creator==creator) {
-!          openqueue_reset_entry(&(openqueue_vars.queue[i]));
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! /**
-! \brief Free all the packet buffers owned by a specific module.
-! 
-! \param owner The identifier of the component, taken in COMPONENT_*.
-! */
-! void openqueue_removeAllOwnedBy(uint8_t owner) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    for (i=0;i<QUEUELENGTH;i++){
-!       if (openqueue_vars.queue[i].owner==owner) {
-!          openqueue_reset_entry(&(openqueue_vars.queue[i]));
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! //======= called by RES
-! 
-! OpenQueueEntry_t* openqueue_resGetSentPacket() {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    for (i=0;i<QUEUELENGTH;i++) {
-!       if (openqueue_vars.queue[i].owner==COMPONENT_IEEE802154E_TO_RES &&
-!           openqueue_vars.queue[i].creator!=COMPONENT_IEEE802154E) {
-!          ENABLE_INTERRUPTS();
-!          return &openqueue_vars.queue[i];
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-!    return NULL;
-! }
-! 
-! OpenQueueEntry_t* openqueue_resGetReceivedPacket() {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    for (i=0;i<QUEUELENGTH;i++) {
-!       if (openqueue_vars.queue[i].owner==COMPONENT_IEEE802154E_TO_RES &&
-!           openqueue_vars.queue[i].creator==COMPONENT_IEEE802154E) {
-!          ENABLE_INTERRUPTS();
-!          return &openqueue_vars.queue[i];
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-!    return NULL;
-! }
-! 
-! //======= called by IEEE80215E
-! 
-! OpenQueueEntry_t* openqueue_macGetDataPacket(open_addr_t* toNeighbor) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    if (toNeighbor->type==ADDR_64B) {
-!       // a neighbor is specified, look for a packet unicast to that neigbhbor
-!       for (i=0;i<QUEUELENGTH;i++) {
-!          if (openqueue_vars.queue[i].owner==COMPONENT_RES_TO_IEEE802154E &&
-!             packetfunctions_sameAddress(toNeighbor,&openqueue_vars.queue[i].l2_nextORpreviousHop)) {
-!             ENABLE_INTERRUPTS();
-!             return &openqueue_vars.queue[i];
-!          }
-!       }
-!    } else if (toNeighbor->type==ADDR_ANYCAST) {
-!       // anycast case: look for a packet which is either not created by RES
-!       // or an KA (created by RES, but not broadcast)
-!       for (i=0;i<QUEUELENGTH;i++) {
-!          if (openqueue_vars.queue[i].owner==COMPONENT_RES_TO_IEEE802154E &&
-!              ( openqueue_vars.queue[i].creator!=COMPONENT_RES ||
-!                 (
-!                    openqueue_vars.queue[i].creator==COMPONENT_RES &&
-!                    packetfunctions_isBroadcastMulticast(&(openqueue_vars.queue[i].l2_nextORpreviousHop))==FALSE
-!                 )
-!              )
-!             ) {
-!             ENABLE_INTERRUPTS();
-!             return &openqueue_vars.queue[i];
-!          }
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-!    return NULL;
-! }
-! 
-! OpenQueueEntry_t* openqueue_macGetAdvPacket() {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    for (i=0;i<QUEUELENGTH;i++) {
-!       if (openqueue_vars.queue[i].owner==COMPONENT_RES_TO_IEEE802154E &&
-!           openqueue_vars.queue[i].creator==COMPONENT_RES              &&
-!           packetfunctions_isBroadcastMulticast(&(openqueue_vars.queue[i].l2_nextORpreviousHop))) {
-!          ENABLE_INTERRUPTS();
-!          return &openqueue_vars.queue[i];
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-!    return NULL;
-! }
-! 
-! //=========================== private =========================================
-! 
-! void openqueue_reset_entry(OpenQueueEntry_t* entry) {
-!    //admin
-!    entry->creator                      = COMPONENT_NULL;
-!    entry->owner                        = COMPONENT_NULL;
-!    entry->payload                      = &(entry->packet[127]);
-!    entry->length                       = 0;
-!    //l4
-!    entry->l4_protocol                  = IANA_UNDEFINED;
-!    //l3
-!    entry->l3_destinationAdd.type       = ADDR_NONE;
-!    entry->l3_sourceAdd.type            = ADDR_NONE;
-!    //l2
-!    entry->l2_nextORpreviousHop.type    = ADDR_NONE;
-!    entry->l2_frameType                 = IEEE154_TYPE_UNDEFINED;
-!    entry->l2_retriesLeft               = 0;
-! }
---- 1,257 ----
-! #include "openwsn.h"
-! #include "openqueue.h"
-! #include "openserial.h"
-! #include "packetfunctions.h"
-! #include "IEEE802154E.h"
-! 
-! //=========================== variables =======================================
-! 
-! openqueue_vars_t openqueue_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void openqueue_reset_entry(OpenQueueEntry_t* entry);
-! 
-! //=========================== public ==========================================
-! 
-! //======= admin
-! 
-! /**
-! \brief Initialize this module.
-! */
-! void openqueue_init(void) {
-!    uint8_t i;
-!    for (i=0;i<QUEUELENGTH;i++){
-!       openqueue_reset_entry(&(openqueue_vars.queue[i]));
-!    }
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_queue(void) {
-!    debugOpenQueueEntry_t output[QUEUELENGTH];
-!    uint8_t i;
-!    for (i=0;i<QUEUELENGTH;i++) {
-!       output[i].creator = openqueue_vars.queue[i].creator;
-!       output[i].owner   = openqueue_vars.queue[i].owner;
-!    }
-!    openserial_printStatus(STATUS_QUEUE,(uint8_t*)&output,QUEUELENGTH*sizeof(debugOpenQueueEntry_t));
-!    return TRUE;
-! }
-! 
-! //======= called by any component
-! 
-! /**
-! \brief Request a new (free) packet buffer.
-! 
-! Component throughout the protocol stack can call this function is they want to
-! get a new packet buffer to start creating a new packet.
-! 
-! \note Once a packet has been allocated, it is up to the creator of the packet
-!       to free it using the openqueue_freePacketBuffer() function.
-! 
-! \returns A pointer to the queue entry when it could be allocated, or NULL when
-!          it could not be allocated (buffer full or not synchronized).
-! */
-! OpenQueueEntry_t* openqueue_getFreePacketBuffer(uint8_t creator) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    
-!    // refuse to allocate if we're not in sync
-!    if (ieee154e_isSynch()==FALSE && creator > COMPONENT_IEEE802154E){
-!      ENABLE_INTERRUPTS();
-!      return NULL;
-!    }
-!    
-!    // if you get here, I will try to allocate a buffer for you
-!    
-!    // walk through queue and find free entry
-!    for (i=0;i<QUEUELENGTH;i++) {
-!       if (openqueue_vars.queue[i].owner==COMPONENT_NULL) {
-!          openqueue_vars.queue[i].creator=creator;
-!          openqueue_vars.queue[i].owner=COMPONENT_OPENQUEUE;
-!          ENABLE_INTERRUPTS(); 
-!          return &openqueue_vars.queue[i];
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-!    return NULL;
-! }
-! 
-! 
-! /**
-! \brief Free a previously-allocated packet buffer.
-! 
-! \param pkt A pointer to the previsouly-allocated packet buffer.
-! 
-! \returns E_SUCCESS when the freeing was succeful.
-! \returns E_FAIL when the module could not find the specified packet buffer.
-! */
-! owerror_t openqueue_freePacketBuffer(OpenQueueEntry_t* pkt) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    for (i=0;i<QUEUELENGTH;i++) {
-!       if (&openqueue_vars.queue[i]==pkt) {
-!          if (openqueue_vars.queue[i].owner==COMPONENT_NULL) {
-!             // log the error
-!             openserial_printCritical(COMPONENT_OPENQUEUE,ERR_FREEING_UNUSED,
-!                                   (errorparameter_t)0,
-!                                   (errorparameter_t)0);
-!          }
-!          openqueue_reset_entry(&(openqueue_vars.queue[i]));
-!          ENABLE_INTERRUPTS();
-!          return E_SUCCESS;
-!       }
-!    }
-!    // log the error
-!    openserial_printCritical(COMPONENT_OPENQUEUE,ERR_FREEING_ERROR,
-!                          (errorparameter_t)0,
-!                          (errorparameter_t)0);
-!    ENABLE_INTERRUPTS();
-!    return E_FAIL;
-! }
-! 
-! /**
-! \brief Free all the packet buffers created by a specific module.
-! 
-! \param creator The identifier of the component, taken in COMPONENT_*.
-! */
-! void openqueue_removeAllCreatedBy(uint8_t creator) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    for (i=0;i<QUEUELENGTH;i++){
-!       if (openqueue_vars.queue[i].creator==creator) {
-!          openqueue_reset_entry(&(openqueue_vars.queue[i]));
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! /**
-! \brief Free all the packet buffers owned by a specific module.
-! 
-! \param owner The identifier of the component, taken in COMPONENT_*.
-! */
-! void openqueue_removeAllOwnedBy(uint8_t owner) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    for (i=0;i<QUEUELENGTH;i++){
-!       if (openqueue_vars.queue[i].owner==owner) {
-!          openqueue_reset_entry(&(openqueue_vars.queue[i]));
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! //======= called by RES
-! 
-! OpenQueueEntry_t* openqueue_resGetSentPacket(void) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    for (i=0;i<QUEUELENGTH;i++) {
-!       if (openqueue_vars.queue[i].owner==COMPONENT_IEEE802154E_TO_RES &&
-!           openqueue_vars.queue[i].creator!=COMPONENT_IEEE802154E) {
-!          ENABLE_INTERRUPTS();
-!          return &openqueue_vars.queue[i];
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-!    return NULL;
-! }
-! 
-! OpenQueueEntry_t* openqueue_resGetReceivedPacket(void) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    for (i=0;i<QUEUELENGTH;i++) {
-!       if (openqueue_vars.queue[i].owner==COMPONENT_IEEE802154E_TO_RES &&
-!           openqueue_vars.queue[i].creator==COMPONENT_IEEE802154E) {
-!          ENABLE_INTERRUPTS();
-!          return &openqueue_vars.queue[i];
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-!    return NULL;
-! }
-! 
-! //======= called by IEEE80215E
-! 
-! OpenQueueEntry_t* openqueue_macGetDataPacket(open_addr_t* toNeighbor) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    if (toNeighbor->type==ADDR_64B) {
-!       // a neighbor is specified, look for a packet unicast to that neigbhbor
-!       for (i=0;i<QUEUELENGTH;i++) {
-!          if (openqueue_vars.queue[i].owner==COMPONENT_RES_TO_IEEE802154E &&
-!             packetfunctions_sameAddress(toNeighbor,&openqueue_vars.queue[i].l2_nextORpreviousHop)) {
-!             ENABLE_INTERRUPTS();
-!             return &openqueue_vars.queue[i];
-!          }
-!       }
-!    } else if (toNeighbor->type==ADDR_ANYCAST) {
-!       // anycast case: look for a packet which is either not created by RES
-!       // or an KA (created by RES, but not broadcast)
-!       for (i=0;i<QUEUELENGTH;i++) {
-!          if (openqueue_vars.queue[i].owner==COMPONENT_RES_TO_IEEE802154E &&
-!              ( openqueue_vars.queue[i].creator!=COMPONENT_RES ||
-!                 (
-!                    openqueue_vars.queue[i].creator==COMPONENT_RES &&
-!                    packetfunctions_isBroadcastMulticast(&(openqueue_vars.queue[i].l2_nextORpreviousHop))==FALSE
-!                 )
-!              )
-!             ) {
-!             ENABLE_INTERRUPTS();
-!             return &openqueue_vars.queue[i];
-!          }
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-!    return NULL;
-! }
-! 
-! OpenQueueEntry_t* openqueue_macGetAdvPacket(void) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    for (i=0;i<QUEUELENGTH;i++) {
-!       if (openqueue_vars.queue[i].owner==COMPONENT_RES_TO_IEEE802154E &&
-!           openqueue_vars.queue[i].creator==COMPONENT_RES              &&
-!           packetfunctions_isBroadcastMulticast(&(openqueue_vars.queue[i].l2_nextORpreviousHop))) {
-!          ENABLE_INTERRUPTS();
-!          return &openqueue_vars.queue[i];
-!       }
-!    }
-!    ENABLE_INTERRUPTS();
-!    return NULL;
-! }
-! 
-! //=========================== private =========================================
-! 
-! void openqueue_reset_entry(OpenQueueEntry_t* entry) {
-!    //admin
-!    entry->creator                      = COMPONENT_NULL;
-!    entry->owner                        = COMPONENT_NULL;
-!    entry->payload                      = &(entry->packet[127]);
-!    entry->length                       = 0;
-!    //l4
-!    entry->l4_protocol                  = IANA_UNDEFINED;
-!    //l3
-!    entry->l3_destinationAdd.type       = ADDR_NONE;
-!    entry->l3_sourceAdd.type            = ADDR_NONE;
-!    //l2
-!    entry->l2_nextORpreviousHop.type    = ADDR_NONE;
-!    entry->l2_frameType                 = IEEE154_TYPE_UNDEFINED;
-!    entry->l2_retriesLeft               = 0;
-! }
-diff -crB openwsn/cross-layers/openqueue.h ../../../sys/net/openwsn/cross-layers/openqueue.h
-*** openwsn/cross-layers/openqueue.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/cross-layers/openqueue.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,49 ****
-! #ifndef __OPENQUEUE_H
-! #define __OPENQUEUE_H
-! 
-! /**
-! \addtogroup cross-layers
-! \{
-! \addtogroup OpenQueue
-! \{
-! */
-! 
-! #include "openwsn.h"
-! #include "IEEE802154.h"
-! 
-! //=========================== define ==========================================
-! 
-! #define QUEUELENGTH  10
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    uint8_t  creator;
-!    uint8_t  owner;
-! } debugOpenQueueEntry_t;
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // admin
-! void               openqueue_init();
-! bool               debugPrint_queue();
-! // called by any component
-! OpenQueueEntry_t*  openqueue_getFreePacketBuffer(uint8_t creator);
-! error_t            openqueue_freePacketBuffer(OpenQueueEntry_t* pkt);
-! void               openqueue_removeAllCreatedBy(uint8_t creator);
-! void               openqueue_removeAllOwnedBy(uint8_t owner);
-! // called by res
-! OpenQueueEntry_t*  openqueue_resGetSentPacket();
-! OpenQueueEntry_t*  openqueue_resGetReceivedPacket();
-! // called by IEEE80215E
-! OpenQueueEntry_t*  openqueue_macGetDataPacket(open_addr_t* toNeighbor);
-! OpenQueueEntry_t*  openqueue_macGetAdvPacket();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,53 ----
-! #ifndef __OPENQUEUE_H
-! #define __OPENQUEUE_H
-! 
-! /**
-! \addtogroup cross-layers
-! \{
-! \addtogroup OpenQueue
-! \{
-! */
-! 
-! #include "openwsn.h"
-! #include "IEEE802154.h"
-! 
-! //=========================== define ==========================================
-! 
-! #define QUEUELENGTH  10
-! 
-! //=========================== typedef =========================================
-! 
-! typedef struct {
-!    uint8_t  creator;
-!    uint8_t  owner;
-! } debugOpenQueueEntry_t;
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    OpenQueueEntry_t queue[QUEUELENGTH];
-! } openqueue_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! // admin
-! void               openqueue_init(void);
-! bool               debugPrint_queue(void);
-! // called by any component
-! OpenQueueEntry_t*  openqueue_getFreePacketBuffer(uint8_t creator);
-! owerror_t         openqueue_freePacketBuffer(OpenQueueEntry_t* pkt);
-! void               openqueue_removeAllCreatedBy(uint8_t creator);
-! void               openqueue_removeAllOwnedBy(uint8_t owner);
-! // called by res
-! OpenQueueEntry_t*  openqueue_resGetSentPacket(void);
-! OpenQueueEntry_t*  openqueue_resGetReceivedPacket(void);
-! // called by IEEE80215E
-! OpenQueueEntry_t*  openqueue_macGetDataPacket(open_addr_t* toNeighbor);
-! OpenQueueEntry_t*  openqueue_macGetAdvPacket(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/cross-layers/openrandom.c ../../../sys/net/openwsn/cross-layers/openrandom.c
-*** openwsn/cross-layers/openrandom.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/cross-layers/openrandom.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,38 ****
-! #include "openwsn.h"
-! #include "openrandom.h"
-! #include "idmanager.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    uint16_t shift_reg;  // Galois shift register used to obtain a pseudo-random number
-! } random_vars_t;
-! 
-! random_vars_t random_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void openrandom_init() {
-!    // seed the random number generator with the last 2 bytes of the MAC address
-!    random_vars.shift_reg  = 0;
-!    random_vars.shift_reg += idmanager_getMyID(ADDR_16B)->addr_16b[0]*256;
-!    random_vars.shift_reg += idmanager_getMyID(ADDR_16B)->addr_16b[1];
-! }
-! 
-! uint16_t openrandom_get16b() {
-!    uint8_t  i;
-!    uint16_t random_value;
-!    random_value = 0;
-!    for(i=0;i<16;i++) {
-!       // Galois shift register
-!       // taps: 16 14 13 11
-!       // characteristic polynomial: x^16 + x^14 + x^13 + x^11 + 1
-!       random_value          |= (random_vars.shift_reg & 0x01)<<i;
-!       random_vars.shift_reg  = (random_vars.shift_reg>>1)^(-(int16_t)(random_vars.shift_reg & 1)&0xb400);
-!    }
-!    return random_value;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,34 ----
-! #include "openwsn.h"
-! #include "openrandom.h"
-! #include "idmanager.h"
-! 
-! //=========================== variables =======================================
-! 
-! random_vars_t random_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void openrandom_init(void) {
-!    // seed the random number generator with the last 2 bytes of the MAC address
-!    random_vars.shift_reg  = 0;
-!    random_vars.shift_reg += idmanager_getMyID(ADDR_16B)->addr_16b[0]*256;
-!    random_vars.shift_reg += idmanager_getMyID(ADDR_16B)->addr_16b[1];
-! }
-! 
-! uint16_t openrandom_get16b(void) {
-!    uint8_t  i;
-!    uint16_t random_value;
-!    random_value = 0;
-!    for(i=0;i<16;i++) {
-!       // Galois shift register
-!       // taps: 16 14 13 11
-!       // characteristic polynomial: x^16 + x^14 + x^13 + x^11 + 1
-!       random_value          |= (random_vars.shift_reg & 0x01)<<i;
-!       random_vars.shift_reg  = (random_vars.shift_reg>>1)^(-(int16_t)(random_vars.shift_reg & 1)&0xb400);
-!    }
-!    return random_value;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/cross-layers/openrandom.h ../../../sys/net/openwsn/cross-layers/openrandom.h
-*** openwsn/cross-layers/openrandom.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/cross-layers/openrandom.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,29 ****
-! #ifndef __OPENRANDOM_H
-! #define __OPENRANDOM_H
-! 
-! /**
-! \addtogroup helpers
-! \{
-! \addtogroup Random
-! \{
-! */
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void     openrandom_init();
-! uint16_t openrandom_get16b();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
---- 1,33 ----
-! #ifndef __OPENRANDOM_H
-! #define __OPENRANDOM_H
-! 
-! /**
-! \addtogroup cross-layers
-! \{
-! \addtogroup OpenRandom
-! \{
-! */
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    uint16_t shift_reg;  // Galois shift register used to obtain a pseudo-random number
-! } random_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! void     openrandom_init(void);
-! uint16_t openrandom_get16b(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
-diff -crB openwsn/cross-layers/packetfunctions.c ../../../sys/net/openwsn/cross-layers/packetfunctions.c
-*** openwsn/cross-layers/packetfunctions.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/cross-layers/packetfunctions.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,447 ****
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "idmanager.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void onesComplementSum(uint8_t* global_sum, uint8_t* ptr, int length);
-! 
-! //=========================== public ==========================================
-! 
-! //======= address translation
-! 
-! //assuming an ip128b is a concatenation of prefix64b followed by a mac64b
-! void packetfunctions_ip128bToMac64b(
-!       open_addr_t* ip128b,
-!       open_addr_t* prefix64btoWrite,
-!       open_addr_t* mac64btoWrite) {
-!    if (ip128b->type!=ADDR_128B) {
-!       openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                             (errorparameter_t)ip128b->type,
-!                             (errorparameter_t)0);
-!       mac64btoWrite->type=ADDR_NONE;
-!       return;
-!    }
-!    prefix64btoWrite->type=ADDR_PREFIX;
-!    memcpy(prefix64btoWrite->prefix, &(ip128b->addr_128b[0]), 8);
-!    mac64btoWrite->type=ADDR_64B;
-!    memcpy(mac64btoWrite->addr_64b , &(ip128b->addr_128b[8]), 8);
-! }
-! void packetfunctions_mac64bToIp128b(
-!       open_addr_t* prefix64b,
-!       open_addr_t* mac64b,
-!       open_addr_t* ip128bToWrite) {
-!    if (prefix64b->type!=ADDR_PREFIX || mac64b->type!=ADDR_64B) {
-!       openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                             (errorparameter_t)prefix64b->type,
-!                             (errorparameter_t)1);
-!       ip128bToWrite->type=ADDR_NONE;
-!       return;
-!    }
-!    ip128bToWrite->type=ADDR_128B;
-!    memcpy(&(ip128bToWrite->addr_128b[0]), &(prefix64b->prefix[0]), 8);
-!    memcpy(&(ip128bToWrite->addr_128b[8]), &(mac64b->addr_64b[0]),  8);
-! }
-! 
-! //assuming an mac16b is lower 2B of mac64b
-! void packetfunctions_mac64bToMac16b(open_addr_t* mac64b, open_addr_t* mac16btoWrite) {
-!    if (mac64b->type!=ADDR_64B) {
-!       openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                             (errorparameter_t)mac64b->type,
-!                             (errorparameter_t)2);
-!       mac16btoWrite->type=ADDR_NONE;
-!       return;
-!    }
-!    mac16btoWrite->type = ADDR_16B;
-!    mac16btoWrite->addr_16b[0] = mac64b->addr_64b[6];
-!    mac16btoWrite->addr_16b[1] = mac64b->addr_64b[7];
-! }
-! void packetfunctions_mac16bToMac64b(open_addr_t* mac16b, open_addr_t* mac64btoWrite) {
-!    if (mac16b->type!=ADDR_16B) {
-!       openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                             (errorparameter_t)mac16b->type,
-!                             (errorparameter_t)3);
-!       mac64btoWrite->type=ADDR_NONE;
-!       return;
-!    }
-!    mac64btoWrite->type = ADDR_64B;
-!    mac64btoWrite->addr_64b[0] = 0;
-!    mac64btoWrite->addr_64b[1] = 0;
-!    mac64btoWrite->addr_64b[2] = 0;
-!    mac64btoWrite->addr_64b[3] = 0;
-!    mac64btoWrite->addr_64b[4] = 0;
-!    mac64btoWrite->addr_64b[5] = 0;
-!    mac64btoWrite->addr_64b[6] = mac16b->addr_16b[0];
-!    mac64btoWrite->addr_64b[7] = mac16b->addr_16b[1];
-! }
-! 
-! //======= address recognition
-! 
-! bool packetfunctions_isBroadcastMulticast(open_addr_t* address) {
-!    uint8_t i;
-!    uint8_t address_length;
-!    //IPv6 multicast
-!    if (address->type==ADDR_128B) {
-!       if (address->addr_128b[0]==0xff) {
-!          return TRUE;
-!       } else {
-!          return FALSE;
-!       }
-!    }
-!    //15.4 broadcast
-!    switch (address->type) {
-!       case ADDR_16B:
-!          address_length = 2;
-!          break;
-!       case ADDR_64B:
-!          address_length = 8;
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)address->type,
-!                                (errorparameter_t)4);
-!          return FALSE;
-!    }
-!    for (i=0;i<address_length;i++) {
-!       if (address->addr_128b[i]!=0xFF) {
-!          return FALSE;
-!       }
-!    }
-!    return TRUE;
-! }
-! 
-! bool packetfunctions_isAllRoutersMulticast(open_addr_t* address) {
-!    if (
-!       address->type          == ADDR_128B &&
-!       address->addr_128b[0]  == 0xff &&
-!       address->addr_128b[1]  == 0x02 &&
-!       address->addr_128b[2]  == 0x00 &&
-!       address->addr_128b[3]  == 0x00 &&
-!       address->addr_128b[4]  == 0x00 &&
-!       address->addr_128b[5]  == 0x00 &&
-!       address->addr_128b[6]  == 0x00 &&
-!       address->addr_128b[7]  == 0x00 &&
-!       address->addr_128b[8]  == 0x00 &&
-!       address->addr_128b[9]  == 0x00 &&
-!       address->addr_128b[10] == 0x00 &&
-!       address->addr_128b[11] == 0x00 &&
-!       address->addr_128b[12] == 0x00 &&
-!       address->addr_128b[13] == 0x00 &&
-!       address->addr_128b[14] == 0x00 &&
-!       address->addr_128b[15] == 0x02
-!    ) {
-!       return TRUE;
-!    }
-!    return FALSE;
-! }
-! 
-! bool packetfunctions_isAllHostsMulticast(open_addr_t* address) {
-!    if (
-!       address->type          == ADDR_128B &&
-!       address->addr_128b[0]  == 0xff &&
-!       address->addr_128b[1]  == 0x02 &&
-!       address->addr_128b[2]  == 0x00 &&
-!       address->addr_128b[3]  == 0x00 &&
-!       address->addr_128b[4]  == 0x00 &&
-!       address->addr_128b[5]  == 0x00 &&
-!       address->addr_128b[6]  == 0x00 &&
-!       address->addr_128b[7]  == 0x00 &&
-!       address->addr_128b[8]  == 0x00 &&
-!       address->addr_128b[9]  == 0x00 &&
-!       address->addr_128b[10] == 0x00 &&
-!       address->addr_128b[11] == 0x00 &&
-!       address->addr_128b[12] == 0x00 &&
-!       address->addr_128b[13] == 0x00 &&
-!       address->addr_128b[14] == 0x00 &&
-!       address->addr_128b[15] == 0x01
-!    ) {
-!       return TRUE;
-!    }
-!    return FALSE;
-! }
-! 
-! bool packetfunctions_sameAddress(open_addr_t* address_1, open_addr_t* address_2) {
-!    uint8_t address_length;
-!    
-!    if (address_1->type!=address_2->type) {
-!       return FALSE;
-!    }
-!    switch (address_1->type) {
-!       case ADDR_16B:
-!       case ADDR_PANID:
-!          address_length = 2;
-!          break;
-!       case ADDR_64B:
-!       case ADDR_PREFIX:
-!          address_length = 8;
-!          break;
-!       case ADDR_128B:
-!          address_length = 16;
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)address_1->type,
-!                                (errorparameter_t)5);
-!          return FALSE;
-!    }
-!    if (memcmp((void*)address_1->addr_128b,(void*)address_2->addr_128b,address_length)==0) {
-!       return TRUE;
-!    }
-!    return FALSE;
-! }
-! 
-! //======= address read/write
-! 
-! void packetfunctions_readAddress(uint8_t* payload, uint8_t type, open_addr_t* writeToAddress, bool littleEndian) {
-!    uint8_t i;
-!    uint8_t address_length;
-!    
-!    writeToAddress->type = type;
-!    switch (type) {
-!       case ADDR_16B:
-!       case ADDR_PANID:
-!          address_length = 2;
-!          break;
-!       case ADDR_64B:
-!       case ADDR_PREFIX:
-!          address_length = 8;
-!          break;
-!       case ADDR_128B:
-!          address_length = 16;
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)type,
-!                                (errorparameter_t)6);
-!          return;
-!    }
-!    
-!    for (i=0;i<address_length;i++) {
-!       if (littleEndian) {
-!          writeToAddress->addr_128b[address_length-1-i] = *(payload+i);
-!       } else {
-!          writeToAddress->addr_128b[i]   = *(payload+i);
-!       }
-!    }
-! }
-! 
-! void packetfunctions_writeAddress(OpenQueueEntry_t* msg, open_addr_t* address, bool littleEndian) {
-!    uint8_t i;
-!    uint8_t address_length;
-!    
-!    switch (address->type) {
-!       case ADDR_16B:
-!       case ADDR_PANID:
-!          address_length = 2;
-!          break;
-!       case ADDR_64B:
-!       case ADDR_PREFIX:
-!          address_length = 8;
-!          break;
-!       case ADDR_128B:
-!          address_length = 16;
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)address->type,
-!                                (errorparameter_t)7);
-!          return;
-!    }
-!    
-!    for (i=0;i<address_length;i++) {
-!       msg->payload      -= sizeof(uint8_t);
-!       msg->length       += sizeof(uint8_t);
-!       if (littleEndian) {
-!          *((uint8_t*)(msg->payload)) = address->addr_128b[i];
-!       } else {
-!          *((uint8_t*)(msg->payload)) = address->addr_128b[address_length-1-i];
-!       }
-!    }
-! }
-! 
-! //======= reserving/tossing headers
-! 
-! void packetfunctions_reserveHeaderSize(OpenQueueEntry_t* pkt, uint8_t header_length) {
-!    pkt->payload -= header_length;
-!    pkt->length  += header_length;
-!    if ( (uint8_t*)(pkt->payload) < (uint8_t*)(pkt->packet) ) {
-!       openserial_printError(COMPONENT_PACKETFUNCTIONS,ERR_HEADER_TOO_LONG,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)pkt->length);
-!    }
-! }
-! 
-! void packetfunctions_tossHeader(OpenQueueEntry_t* pkt, uint8_t header_length) {
-!    pkt->payload += header_length;
-!    pkt->length  -= header_length;
-!    if ( (uint8_t*)(pkt->payload) > (uint8_t*)(pkt->packet+126) ) {
-!       openserial_printError(COMPONENT_PACKETFUNCTIONS,ERR_HEADER_TOO_LONG,
-!                             (errorparameter_t)1,
-!                             (errorparameter_t)pkt->length);
-!    }
-! }
-! 
-! void packetfunctions_reserveFooterSize(OpenQueueEntry_t* pkt, uint8_t header_length) {
-!    pkt->length  += header_length;
-!    if (pkt->length>127) {
-!       openserial_printError(COMPONENT_PACKETFUNCTIONS,ERR_HEADER_TOO_LONG,
-!                             (errorparameter_t)2,
-!                             (errorparameter_t)pkt->length);
-!    }
-! }
-! 
-! void packetfunctions_tossFooter(OpenQueueEntry_t* pkt, uint8_t header_length) {
-!    pkt->length  -= header_length;
-!    if (pkt->length>128) {//wraps around, so a negative value will be >128
-!       openserial_printError(COMPONENT_PACKETFUNCTIONS,ERR_HEADER_TOO_LONG,
-!                             (errorparameter_t)3,
-!                             (errorparameter_t)pkt->length);
-!    }
-! }
-! 
-! //======= CRC calculation
-! 
-! void packetfunctions_calculateCRC(OpenQueueEntry_t* msg) {
-!    uint16_t crc;
-!    uint8_t  i;
-!    uint8_t  count;
-!    crc = 0;
-!    for (count=1;count<msg->length-2;count++) {
-!       crc = crc ^ (uint8_t)*(msg->payload+count);
-!       //crc = crc ^ (uint16_t)*ptr++ << 8;
-!       for (i=0;i<8;i++) {
-!          if (crc & 0x1) {
-!             crc = crc >> 1 ^ 0x8408;
-!          } else {
-!             crc = crc >> 1;
-!          }
-!       }
-!    }
-!    *(msg->payload+(msg->length-2)) = crc%256;
-!    *(msg->payload+(msg->length-1)) = crc/256;
-! }
-! 
-! bool packetfunctions_checkCRC(OpenQueueEntry_t* msg) {
-!    uint16_t crc;
-!    uint8_t  i;
-!    uint8_t  count;
-!    crc = 0;
-!    for (count=0;count<msg->length-2;count++) {
-!       crc = crc ^ (uint8_t)*(msg->payload+count);
-!       //crc = crc ^ (uint16_t)*ptr++ << 8;
-!       for (i=0;i<8;i++) {
-!          if (crc & 0x1) {
-!             crc = crc >> 1 ^ 0x8408;
-!          } else {
-!             crc = crc >> 1;
-!          }
-!       }
-!    }
-!    if (*(msg->payload+(msg->length-2))==crc%256 &&
-!        *(msg->payload+(msg->length-1))==crc/256) {
-!           return TRUE;
-!        } else {
-!           return FALSE;
-!        }
-! }
-! 
-! //======= checksum calculation
-! 
-! //see http://www-net.cs.umass.edu/kurose/transport/UDP.html, or http://tools.ietf.org/html/rfc1071
-! //see http://en.wikipedia.org/wiki/User_Datagram_Protocol#IPv6_PSEUDO-HEADER
-! void packetfunctions_calculateChecksum(OpenQueueEntry_t* msg, uint8_t* checksum_ptr) {
-!    open_addr_t  temp_dest_prefix;
-!    open_addr_t  temp_dest_mac64b;
-!    uint8_t temp_checksum[2];
-!    uint8_t little_helper[2];
-!    //initialization
-!    temp_checksum[0]  = 0;
-!    temp_checksum[1]  = 0;
-!    *checksum_ptr     = 0;
-!    *(checksum_ptr+1) = 0;
-!    //source/destination address
-!    packetfunctions_ip128bToMac64b(&(msg->l3_destinationAdd),&temp_dest_prefix,&temp_dest_mac64b);
-!    if (packetfunctions_sameAddress(&temp_dest_prefix,idmanager_getMyID(ADDR_PREFIX))) {
-!       little_helper[0] = 0xfe;
-!       little_helper[1] = 0x80;
-!       //source address prefix
-!       onesComplementSum(temp_checksum,little_helper,2);
-!       //source address EUI
-!       onesComplementSum(temp_checksum,(idmanager_getMyID(ADDR_64B))->addr_64b,8);
-!       //destination address prefix (fe:80)
-!       onesComplementSum(temp_checksum,little_helper,2);
-!       //destination address EUI
-!       onesComplementSum(temp_checksum,temp_dest_mac64b.addr_64b,8);
-!    } else {
-!       //source address prefix
-!       onesComplementSum(temp_checksum,(idmanager_getMyID(ADDR_PREFIX))->prefix,8);
-!       //source address EUI
-!       onesComplementSum(temp_checksum,(idmanager_getMyID(ADDR_64B))->addr_64b,8);
-!       //destination address
-!       onesComplementSum(temp_checksum,msg->l3_destinationAdd.addr_128b,16);
-!    }
-!    //length
-!    little_helper[0] = 0;
-!    little_helper[1] = msg->length;
-!    onesComplementSum(temp_checksum,little_helper,2);
-!    //next header
-!    little_helper[0] = 0;
-!    little_helper[1] = msg->l4_protocol;
-!    onesComplementSum(temp_checksum,little_helper,2);
-!    //ICMPv6 packet
-!    onesComplementSum(temp_checksum,msg->payload,msg->length);
-!    temp_checksum[0] ^= 0xFF;
-!    temp_checksum[1] ^= 0xFF;
-!    //write in packet
-!    *checksum_ptr     = temp_checksum[0];
-!    *(checksum_ptr+1) = temp_checksum[1];
-! }
-! 
-! void onesComplementSum(uint8_t* global_sum, uint8_t* ptr, int length) {
-!    uint32_t sum = 0xFFFF & (global_sum[0]<<8 | global_sum[1]);
-!    while (length>1) {
-!       sum     += 0xFFFF & (*ptr<<8 | *(ptr+1));
-!       ptr     += 2;
-!       length  -= 2;
-!    }
-!    if (length) {
-!       sum     += (0xFF & *ptr)<<8;
-!    }
-!    while (sum>>16) {
-!       sum      = (sum & 0xFFFF)+(sum >> 16);
-!    }
-!    global_sum[0] = (sum>>8) & 0xFF;
-!    global_sum[1] = sum & 0xFF;
-! }
-! 
-! //======= endianness
-! 
-! void packetfunctions_htons( uint16_t val, uint8_t* dest ) {
-!    dest[0] = (val & 0xff00) >> 8;
-!    dest[1] = (val & 0x00ff);
-! }
-! 
-! uint16_t packetfunctions_ntohs( uint8_t* src ) {
-!    return (((uint16_t) src[0]) << 8) |
-!       (((uint16_t) src[1])
-!       );
-! }
-! 
-! void packetfunctions_htonl( uint32_t val, uint8_t* dest ) {
-!    dest[0] = (val & 0xff000000) >> 24;
-!    dest[1] = (val & 0x00ff0000) >> 16;
-!    dest[2] = (val & 0x0000ff00) >> 8;
-!    dest[3] = (val & 0x000000ff);
-! }
-! 
-! uint32_t packetfunctions_ntohl( uint8_t* src ) {
-!    return (((uint32_t) src[0]) << 24) |
-!       (((uint32_t) src[1]) << 16)     |
-!       (((uint32_t) src[2]) << 8)      |
-!       (((uint32_t) src[3])
-!       );
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,444 ----
-! #include "packetfunctions.h"
-! #include "openserial.h"
-! #include "idmanager.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void onesComplementSum(uint8_t* global_sum, uint8_t* ptr, int length);
-! 
-! //=========================== public ==========================================
-! 
-! //======= address translation
-! 
-! //assuming an ip128b is a concatenation of prefix64b followed by a mac64b
-! void packetfunctions_ip128bToMac64b(
-!       open_addr_t* ip128b,
-!       open_addr_t* prefix64btoWrite,
-!       open_addr_t* mac64btoWrite) {
-!    if (ip128b->type!=ADDR_128B) {
-!       openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                             (errorparameter_t)ip128b->type,
-!                             (errorparameter_t)0);
-!       mac64btoWrite->type=ADDR_NONE;
-!       return;
-!    }
-!    prefix64btoWrite->type=ADDR_PREFIX;
-!    memcpy(prefix64btoWrite->prefix, &(ip128b->addr_128b[0]), 8);
-!    mac64btoWrite->type=ADDR_64B;
-!    memcpy(mac64btoWrite->addr_64b , &(ip128b->addr_128b[8]), 8);
-! }
-! void packetfunctions_mac64bToIp128b(
-!       open_addr_t* prefix64b,
-!       open_addr_t* mac64b,
-!       open_addr_t* ip128bToWrite) {
-!    if (prefix64b->type!=ADDR_PREFIX || mac64b->type!=ADDR_64B) {
-!       openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                             (errorparameter_t)prefix64b->type,
-!                             (errorparameter_t)1);
-!       ip128bToWrite->type=ADDR_NONE;
-!       return;
-!    }
-!    ip128bToWrite->type=ADDR_128B;
-!    memcpy(&(ip128bToWrite->addr_128b[0]), &(prefix64b->prefix[0]), 8);
-!    memcpy(&(ip128bToWrite->addr_128b[8]), &(mac64b->addr_64b[0]),  8);
-! }
-! 
-! //assuming an mac16b is lower 2B of mac64b
-! void packetfunctions_mac64bToMac16b(open_addr_t* mac64b, open_addr_t* mac16btoWrite) {
-!    if (mac64b->type!=ADDR_64B) {
-!       openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                             (errorparameter_t)mac64b->type,
-!                             (errorparameter_t)2);
-!       mac16btoWrite->type=ADDR_NONE;
-!       return;
-!    }
-!    mac16btoWrite->type = ADDR_16B;
-!    mac16btoWrite->addr_16b[0] = mac64b->addr_64b[6];
-!    mac16btoWrite->addr_16b[1] = mac64b->addr_64b[7];
-! }
-! void packetfunctions_mac16bToMac64b(open_addr_t* mac16b, open_addr_t* mac64btoWrite) {
-!    if (mac16b->type!=ADDR_16B) {
-!       openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                             (errorparameter_t)mac16b->type,
-!                             (errorparameter_t)3);
-!       mac64btoWrite->type=ADDR_NONE;
-!       return;
-!    }
-!    mac64btoWrite->type = ADDR_64B;
-!    mac64btoWrite->addr_64b[0] = 0;
-!    mac64btoWrite->addr_64b[1] = 0;
-!    mac64btoWrite->addr_64b[2] = 0;
-!    mac64btoWrite->addr_64b[3] = 0;
-!    mac64btoWrite->addr_64b[4] = 0;
-!    mac64btoWrite->addr_64b[5] = 0;
-!    mac64btoWrite->addr_64b[6] = mac16b->addr_16b[0];
-!    mac64btoWrite->addr_64b[7] = mac16b->addr_16b[1];
-! }
-! 
-! //======= address recognition
-! 
-! bool packetfunctions_isBroadcastMulticast(open_addr_t* address) {
-!    uint8_t i;
-!    uint8_t address_length;
-!    //IPv6 multicast
-!    if (address->type==ADDR_128B) {
-!       if (address->addr_128b[0]==0xff) {
-!          return TRUE;
-!       } else {
-!          return FALSE;
-!       }
-!    }
-!    //15.4 broadcast
-!    switch (address->type) {
-!       case ADDR_16B:
-!          address_length = 2;
-!          break;
-!       case ADDR_64B:
-!          address_length = 8;
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)address->type,
-!                                (errorparameter_t)4);
-!          return FALSE;
-!    }
-!    for (i=0;i<address_length;i++) {
-!       if (address->addr_128b[i]!=0xFF) {
-!          return FALSE;
-!       }
-!    }
-!    return TRUE;
-! }
-! 
-! bool packetfunctions_isAllRoutersMulticast(open_addr_t* address) {
-!    if (
-!       address->type          == ADDR_128B &&
-!       address->addr_128b[0]  == 0xff &&
-!       address->addr_128b[1]  == 0x02 &&
-!       address->addr_128b[2]  == 0x00 &&
-!       address->addr_128b[3]  == 0x00 &&
-!       address->addr_128b[4]  == 0x00 &&
-!       address->addr_128b[5]  == 0x00 &&
-!       address->addr_128b[6]  == 0x00 &&
-!       address->addr_128b[7]  == 0x00 &&
-!       address->addr_128b[8]  == 0x00 &&
-!       address->addr_128b[9]  == 0x00 &&
-!       address->addr_128b[10] == 0x00 &&
-!       address->addr_128b[11] == 0x00 &&
-!       address->addr_128b[12] == 0x00 &&
-!       address->addr_128b[13] == 0x00 &&
-!       address->addr_128b[14] == 0x00 &&
-!       address->addr_128b[15] == 0x02
-!    ) {
-!       return TRUE;
-!    }
-!    return FALSE;
-! }
-! 
-! bool packetfunctions_isAllHostsMulticast(open_addr_t* address) {
-!    if (
-!       address->type          == ADDR_128B &&
-!       address->addr_128b[0]  == 0xff &&
-!       address->addr_128b[1]  == 0x02 &&
-!       address->addr_128b[2]  == 0x00 &&
-!       address->addr_128b[3]  == 0x00 &&
-!       address->addr_128b[4]  == 0x00 &&
-!       address->addr_128b[5]  == 0x00 &&
-!       address->addr_128b[6]  == 0x00 &&
-!       address->addr_128b[7]  == 0x00 &&
-!       address->addr_128b[8]  == 0x00 &&
-!       address->addr_128b[9]  == 0x00 &&
-!       address->addr_128b[10] == 0x00 &&
-!       address->addr_128b[11] == 0x00 &&
-!       address->addr_128b[12] == 0x00 &&
-!       address->addr_128b[13] == 0x00 &&
-!       address->addr_128b[14] == 0x00 &&
-!       address->addr_128b[15] == 0x01
-!    ) {
-!       return TRUE;
-!    }
-!    return FALSE;
-! }
-! 
-! bool packetfunctions_sameAddress(open_addr_t* address_1, open_addr_t* address_2) {
-!    uint8_t address_length;
-!    
-!    if (address_1->type!=address_2->type) {
-!       return FALSE;
-!    }
-!    switch (address_1->type) {
-!       case ADDR_16B:
-!       case ADDR_PANID:
-!          address_length = 2;
-!          break;
-!       case ADDR_64B:
-!       case ADDR_PREFIX:
-!          address_length = 8;
-!          break;
-!       case ADDR_128B:
-!       case ADDR_ANYCAST:
-!          address_length = 16;
-!          break;
-!     
-!       default:
-!          openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)address_1->type,
-!                                (errorparameter_t)5);
-!          return FALSE;
-!    }
-!    if (memcmp((void*)address_1->addr_128b,(void*)address_2->addr_128b,address_length)==0) {
-!       return TRUE;
-!    }
-!    return FALSE;
-! }
-! 
-! //======= address read/write
-! 
-! void packetfunctions_readAddress(uint8_t* payload, uint8_t type, open_addr_t* writeToAddress, bool littleEndian) {
-!    uint8_t i;
-!    uint8_t address_length;
-!    
-!    writeToAddress->type = type;
-!    switch (type) {
-!       case ADDR_16B:
-!       case ADDR_PANID:
-!          address_length = 2;
-!          break;
-!       case ADDR_64B:
-!       case ADDR_PREFIX:
-!          address_length = 8;
-!          break;
-!       case ADDR_128B:
-!          address_length = 16;
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)type,
-!                                (errorparameter_t)6);
-!          return;
-!    }
-!    
-!    for (i=0;i<address_length;i++) {
-!       if (littleEndian) {
-!          writeToAddress->addr_128b[address_length-1-i] = *(payload+i);
-!       } else {
-!          writeToAddress->addr_128b[i]   = *(payload+i);
-!       }
-!    }
-! }
-! 
-! void packetfunctions_writeAddress(OpenQueueEntry_t* msg, open_addr_t* address, bool littleEndian) {
-!    uint8_t i;
-!    uint8_t address_length;
-!    
-!    switch (address->type) {
-!       case ADDR_16B:
-!       case ADDR_PANID:
-!          address_length = 2;
-!          break;
-!       case ADDR_64B:
-!       case ADDR_PREFIX:
-!          address_length = 8;
-!          break;
-!       case ADDR_128B:
-!          address_length = 16;
-!          break;
-!       default:
-!          openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_WRONG_ADDR_TYPE,
-!                                (errorparameter_t)address->type,
-!                                (errorparameter_t)7);
-!          return;
-!    }
-!    
-!    for (i=0;i<address_length;i++) {
-!       msg->payload      -= sizeof(uint8_t);
-!       msg->length       += sizeof(uint8_t);
-!       if (littleEndian) {
-!          *((uint8_t*)(msg->payload)) = address->addr_128b[i];
-!       } else {
-!          *((uint8_t*)(msg->payload)) = address->addr_128b[address_length-1-i];
-!       }
-!    }
-! }
-! 
-! //======= reserving/tossing headers
-! 
-! void packetfunctions_reserveHeaderSize(OpenQueueEntry_t* pkt, uint8_t header_length) {
-!    pkt->payload -= header_length;
-!    pkt->length  += header_length;
-!    if ( (uint8_t*)(pkt->payload) < (uint8_t*)(pkt->packet) ) {
-!       openserial_printCritical(COMPONENT_PACKETFUNCTIONS,ERR_HEADER_TOO_LONG,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)pkt->length);
-!    }
-! }
-! 
-! void packetfunctions_tossHeader(OpenQueueEntry_t* pkt, uint8_t header_length) {
-!    pkt->payload += header_length;
-!    pkt->length  -= header_length;
-!    if ( (uint8_t*)(pkt->payload) > (uint8_t*)(pkt->packet+126) ) {
-!       openserial_printError(COMPONENT_PACKETFUNCTIONS,ERR_HEADER_TOO_LONG,
-!                             (errorparameter_t)1,
-!                             (errorparameter_t)pkt->length);
-!    }
-! }
-! 
-! void packetfunctions_reserveFooterSize(OpenQueueEntry_t* pkt, uint8_t header_length) {
-!    pkt->length  += header_length;
-!    if (pkt->length>127) {
-!       openserial_printError(COMPONENT_PACKETFUNCTIONS,ERR_HEADER_TOO_LONG,
-!                             (errorparameter_t)2,
-!                             (errorparameter_t)pkt->length);
-!    }
-! }
-! 
-! void packetfunctions_tossFooter(OpenQueueEntry_t* pkt, uint8_t header_length) {
-!    pkt->length  -= header_length;
-!    if (pkt->length>128) {//wraps around, so a negative value will be >128
-!       openserial_printError(COMPONENT_PACKETFUNCTIONS,ERR_HEADER_TOO_LONG,
-!                             (errorparameter_t)3,
-!                             (errorparameter_t)pkt->length);
-!    }
-! }
-! 
-! //======= CRC calculation
-! 
-! void packetfunctions_calculateCRC(OpenQueueEntry_t* msg) {
-!    uint16_t crc;
-!    uint8_t  i;
-!    uint8_t  count;
-!    crc = 0;
-!    for (count=1;count<msg->length-2;count++) {
-!       crc = crc ^ (uint8_t)*(msg->payload+count);
-!       //crc = crc ^ (uint16_t)*ptr++ << 8;
-!       for (i=0;i<8;i++) {
-!          if (crc & 0x1) {
-!             crc = crc >> 1 ^ 0x8408;
-!          } else {
-!             crc = crc >> 1;
-!          }
-!       }
-!    }
-!    *(msg->payload+(msg->length-2)) = crc%256;
-!    *(msg->payload+(msg->length-1)) = crc/256;
-! }
-! 
-! bool packetfunctions_checkCRC(OpenQueueEntry_t* msg) {
-!    uint16_t crc;
-!    uint8_t  i;
-!    uint8_t  count;
-!    crc = 0;
-!    for (count=0;count<msg->length-2;count++) {
-!       crc = crc ^ (uint8_t)*(msg->payload+count);
-!       //crc = crc ^ (uint16_t)*ptr++ << 8;
-!       for (i=0;i<8;i++) {
-!          if (crc & 0x1) {
-!             crc = crc >> 1 ^ 0x8408;
-!          } else {
-!             crc = crc >> 1;
-!          }
-!       }
-!    }
-!    if (*(msg->payload+(msg->length-2))==crc%256 &&
-!        *(msg->payload+(msg->length-1))==crc/256) {
-!           return TRUE;
-!        } else {
-!           return FALSE;
-!        }
-! }
-! 
-! //======= checksum calculation
-! 
-! //see http://www-net.cs.umass.edu/kurose/transport/UDP.html, or http://tools.ietf.org/html/rfc1071
-! //see http://en.wikipedia.org/wiki/User_Datagram_Protocol#IPv6_PSEUDO-HEADER
-! void packetfunctions_calculateChecksum(OpenQueueEntry_t* msg, uint8_t* checksum_ptr) {
-!    uint8_t temp_checksum[2];
-!    uint8_t little_helper[2];
-!    
-!    // initialize running checksum
-!    temp_checksum[0]  = 0;
-!    temp_checksum[1]  = 0;
-!    
-!    //===== IPv6 pseudo header
-!    
-!    // source address (prefix and EUI64)
-!    onesComplementSum(temp_checksum,(idmanager_getMyID(ADDR_PREFIX))->prefix,8);
-!    onesComplementSum(temp_checksum,(idmanager_getMyID(ADDR_64B))->addr_64b,8);
-!    
-!    // destination address
-!    onesComplementSum(temp_checksum,msg->l3_destinationAdd.addr_128b,16);
-!    
-!    // length
-!    little_helper[0] = 0;
-!    little_helper[1] = msg->length;
-!    onesComplementSum(temp_checksum,little_helper,2);
-!    
-!    // next header
-!    little_helper[0] = 0;
-!    little_helper[1] = msg->l4_protocol;
-!    onesComplementSum(temp_checksum,little_helper,2);
-!    
-!    //===== payload
-!    
-!    // reset the checksum currently in the payload
-!    *checksum_ptr     = 0;
-!    *(checksum_ptr+1) = 0;
-!    
-!    onesComplementSum(temp_checksum,msg->payload,msg->length);
-!    temp_checksum[0] ^= 0xFF;
-!    temp_checksum[1] ^= 0xFF;
-!    
-!    //write in packet
-!    *checksum_ptr     = temp_checksum[0];
-!    *(checksum_ptr+1) = temp_checksum[1];
-! }
-! 
-! 
-! void onesComplementSum(uint8_t* global_sum, uint8_t* ptr, int length) {
-!    uint32_t sum = 0xFFFF & (global_sum[0]<<8 | global_sum[1]);
-!    while (length>1) {
-!       sum     += 0xFFFF & (*ptr<<8 | *(ptr+1));
-!       ptr     += 2;
-!       length  -= 2;
-!    }
-!    if (length) {
-!       sum     += (0xFF & *ptr)<<8;
-!    }
-!    while (sum>>16) {
-!       sum      = (sum & 0xFFFF)+(sum >> 16);
-!    }
-!    global_sum[0] = (sum>>8) & 0xFF;
-!    global_sum[1] = sum & 0xFF;
-! }
-! 
-! //======= endianness
-! 
-! void packetfunctions_htons( uint16_t val, uint8_t* dest ) {
-!    dest[0] = (val & 0xff00) >> 8;
-!    dest[1] = (val & 0x00ff);
-! }
-! 
-! uint16_t packetfunctions_ntohs( uint8_t* src ) {
-!    return (((uint16_t) src[0]) << 8) |
-!       (((uint16_t) src[1])
-!       );
-! }
-! 
-! void packetfunctions_htonl( uint32_t val, uint8_t* dest ) {
-!    dest[0] = (val & 0xff000000) >> 24;
-!    dest[1] = (val & 0x00ff0000) >> 16;
-!    dest[2] = (val & 0x0000ff00) >> 8;
-!    dest[3] = (val & 0x000000ff);
-! }
-! 
-! uint32_t packetfunctions_ntohl( uint8_t* src ) {
-!    return (((uint32_t) src[0]) << 24) |
-!       (((uint32_t) src[1]) << 16)     |
-!       (((uint32_t) src[2]) << 8)      |
-!       (((uint32_t) src[3])
-!       );
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/cross-layers/packetfunctions.h ../../../sys/net/openwsn/cross-layers/packetfunctions.h
-*** openwsn/cross-layers/packetfunctions.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/cross-layers/packetfunctions.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,61 ****
-! #ifndef __PACKETFUNCTIONS_H
-! #define __PACKETFUNCTIONS_H
-! 
-! /**
-! \addtogroup helpers
-! \{
-! \addtogroup PacketFunctions
-! \{
-! */
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // address translation
-! void     packetfunctions_ip128bToMac64b(open_addr_t* ip128b,open_addr_t* prefix64btoWrite,open_addr_t* mac64btoWrite);
-! void     packetfunctions_mac64bToIp128b(open_addr_t* prefix64b,open_addr_t* mac64b,open_addr_t* ip128bToWrite);
-! void     packetfunctions_mac64bToMac16b(open_addr_t* mac64b, open_addr_t* mac16btoWrite);
-! void     packetfunctions_mac16bToMac64b(open_addr_t* mac16b, open_addr_t* mac64btoWrite);
-! 
-! // address recognition
-! bool     packetfunctions_isBroadcastMulticast(open_addr_t* address);
-! bool     packetfunctions_isAllRoutersMulticast(open_addr_t* address);
-! bool     packetfunctions_isAllHostsMulticast(open_addr_t* address);
-! bool     packetfunctions_sameAddress(open_addr_t* address_1, open_addr_t* address_2);
-! 
-! // read/write addresses to/from packets
-! void     packetfunctions_readAddress(uint8_t* payload, uint8_t type, open_addr_t* writeToAddress, bool littleEndian);
-! void     packetfunctions_writeAddress(OpenQueueEntry_t* msg, open_addr_t* address, bool littleEndian);
-! 
-! // reserving/tossing headers and footers
-! void     packetfunctions_reserveHeaderSize(OpenQueueEntry_t* pkt, uint8_t header_length);
-! void     packetfunctions_tossHeader(OpenQueueEntry_t* pkt, uint8_t header_length);
-! void     packetfunctions_reserveFooterSize(OpenQueueEntry_t* pkt, uint8_t header_length);
-! void     packetfunctions_tossFooter(OpenQueueEntry_t* pkt, uint8_t header_length);
-! 
-! // calculate CRC
-! void     packetfunctions_calculateCRC(OpenQueueEntry_t* msg);
-! bool     packetfunctions_checkCRC(OpenQueueEntry_t* msg);
-! 
-! // calculate checksum
-! void     packetfunctions_calculateChecksum(OpenQueueEntry_t* msg, uint8_t* checksum_ptr);
-! 
-! // endianness
-! void     packetfunctions_htons( uint16_t val, uint8_t* dest );
-! uint16_t packetfunctions_ntohs( uint8_t* src );
-! void     packetfunctions_htonl( uint32_t val, uint8_t* dest );
-! uint32_t packetfunctions_ntohl( uint8_t* src );
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
---- 1,61 ----
-! #ifndef __PACKETFUNCTIONS_H
-! #define __PACKETFUNCTIONS_H
-! 
-! /**
-! \addtogroup cross-layers
-! \{
-! \addtogroup PacketFunctions
-! \{
-! */
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // address translation
-! void     packetfunctions_ip128bToMac64b(open_addr_t* ip128b,open_addr_t* prefix64btoWrite,open_addr_t* mac64btoWrite);
-! void     packetfunctions_mac64bToIp128b(open_addr_t* prefix64b,open_addr_t* mac64b,open_addr_t* ip128bToWrite);
-! void     packetfunctions_mac64bToMac16b(open_addr_t* mac64b, open_addr_t* mac16btoWrite);
-! void     packetfunctions_mac16bToMac64b(open_addr_t* mac16b, open_addr_t* mac64btoWrite);
-! 
-! // address recognition
-! bool     packetfunctions_isBroadcastMulticast(open_addr_t* address);
-! bool     packetfunctions_isAllRoutersMulticast(open_addr_t* address);
-! bool     packetfunctions_isAllHostsMulticast(open_addr_t* address);
-! bool     packetfunctions_sameAddress(open_addr_t* address_1, open_addr_t* address_2);
-! 
-! // read/write addresses to/from packets
-! void     packetfunctions_readAddress(uint8_t* payload, uint8_t type, open_addr_t* writeToAddress, bool littleEndian);
-! void     packetfunctions_writeAddress(OpenQueueEntry_t* msg, open_addr_t* address, bool littleEndian);
-! 
-! // reserving/tossing headers and footers
-! void     packetfunctions_reserveHeaderSize(OpenQueueEntry_t* pkt, uint8_t header_length);
-! void     packetfunctions_tossHeader(OpenQueueEntry_t* pkt, uint8_t header_length);
-! void     packetfunctions_reserveFooterSize(OpenQueueEntry_t* pkt, uint8_t header_length);
-! void     packetfunctions_tossFooter(OpenQueueEntry_t* pkt, uint8_t header_length);
-! 
-! // calculate CRC
-! void     packetfunctions_calculateCRC(OpenQueueEntry_t* msg);
-! bool     packetfunctions_checkCRC(OpenQueueEntry_t* msg);
-! 
-! // calculate checksum
-! void     packetfunctions_calculateChecksum(OpenQueueEntry_t* msg, uint8_t* checksum_ptr);
-! 
-! // endianness
-! void     packetfunctions_htons( uint16_t val, uint8_t* dest );
-! uint16_t packetfunctions_ntohs( uint8_t* src );
-! void     packetfunctions_htonl( uint32_t val, uint8_t* dest );
-! uint32_t packetfunctions_ntohl( uint8_t* src );
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
-diff -crB openwsn/debugpins.c ../../../sys/net/openwsn/debugpins.c
-*** openwsn/debugpins.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/debugpins.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,93 ****
-! /**
-! \brief TelosB-specific definition of the "debugpins" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "msp430f1611.h"
-! #include "debugpins.h"
-! 
-! //=========================== defines =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void debugpins_init() {
-!    P6DIR |=  0x40;      // frame [P6.6]
-!    P6DIR |=  0x80;      // slot  [P6.7]
-!    P2DIR |=  0x08;      // fsm   [P2.3]
-!    P2DIR |=  0x40;      // task  [P2.6]
-!    P6DIR |=  0x01;      // isr   [P6.0]
-!    P6DIR |=  0x02;      // radio [P6.1] 
-! }
-! 
-! // P6.6
-! void debugpins_frame_toggle() {
-!    P6OUT ^=  0x40;
-! }
-! void debugpins_frame_clr() {
-!    P6OUT &= ~0x40;
-! }
-! void debugpins_frame_set() {
-!    P6OUT |=  0x40;
-! }
-! 
-! // P6.7
-! void debugpins_slot_toggle() {
-!    P6OUT ^=  0x80;
-! }
-! void debugpins_slot_clr() {
-!    P6OUT &= ~0x80;
-! }
-! void debugpins_slot_set() {
-!    P6OUT |=  0x80;
-! }
-! 
-! // P2.3
-! void debugpins_fsm_toggle() {
-!    P2OUT ^=  0x08;
-! }
-! void debugpins_fsm_clr() {
-!    P2OUT &= ~0x08;
-! }
-! void debugpins_fsm_set() {
-!    P2OUT |=  0x08;
-! }
-! 
-! // P2.6
-! void debugpins_task_toggle() {
-!    P2OUT ^=  0x40;
-! }
-! void debugpins_task_clr() {
-!    P2OUT &= ~0x40;
-! }
-! void debugpins_task_set() {
-!    P2OUT |=  0x40;
-! }
-! 
-! // P6.0
-! void debugpins_isr_toggle() {
-!    P6OUT ^=  0x01;
-! }
-! void debugpins_isr_clr() {
-!    P6OUT &= ~0x01;
-! }
-! void debugpins_isr_set() {
-!    P6OUT |=  0x01;
-! }
-! 
-! // P6.1
-! void debugpins_radio_toggle() {
-!    P6OUT ^=  0x02;
-! }
-! void debugpins_radio_clr() {
-!    P6OUT &= ~0x02;
-! }
-! void debugpins_radio_set() {
-!    P6OUT |=  0x02;
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,110 ----
-! /**
-! \brief TelosB-specific definition of the "debugpins" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! #include <stdint.h>               // needed for uin8_t, uint16_t
-! #include "msp430f1611.h"
-! #include "debugpins.h"
-! 
-! //=========================== defines =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void debugpins_init(void) {
-!    P6DIR |=  0x40;      // frame [P6.6]
-!    P6DIR |=  0x80;      // slot  [P6.7]
-!    P2DIR |=  0x08;      // fsm   [P2.3]
-!    P2DIR |=  0x40;      // task  [P2.6]
-!    P6DIR |=  0x01;      // isr   [P6.0]
-!    P6DIR |=  0x02;      // radio [P6.1] 
-! }
-! 
-! // P6.6
-! void debugpins_frame_toggle(void) {
-!    P6OUT ^=  0x40;
-! }
-! void debugpins_frame_clr(void) {
-!    P6OUT &= ~0x40;
-! }
-! void debugpins_frame_set(void) {
-!    P6OUT |=  0x40;
-! }
-! 
-! // P6.7
-! void debugpins_slot_toggle(void) {
-!    P6OUT ^=  0x80;
-! }
-! void debugpins_slot_clr(void) {
-!    P6OUT &= ~0x80;
-! }
-! void debugpins_slot_set(void) {
-!    P6OUT |=  0x80;
-! }
-! 
-! // P2.3
-! void debugpins_fsm_toggle(void) {
-!    P2OUT ^=  0x08;
-! }
-! void debugpins_fsm_clr(void) {
-!    P2OUT &= ~0x08;
-! }
-! void debugpins_fsm_set(void) {
-!    P2OUT |=  0x08;
-! }
-! 
-! // P2.6
-! void debugpins_task_toggle(void) {
-!    P2OUT ^=  0x40;
-! }
-! void debugpins_task_clr(void) {
-!    P2OUT &= ~0x40;
-! }
-! void debugpins_task_set(void) {
-!    P2OUT |=  0x40;
-! }
-! 
-! // P6.0
-! void debugpins_isr_toggle(void) {
-!    P6OUT ^=  0x01;
-! }
-! void debugpins_isr_clr(void) {
-!    P6OUT &= ~0x01;
-! }
-! void debugpins_isr_set(void) {
-!    P6OUT |=  0x01;
-! }
-! 
-! // P6.1
-! void debugpins_radio_toggle(void) {
-!    P6OUT ^=  0x02;
-! }
-! void debugpins_radio_clr(void) {
-!    P6OUT &= ~0x02;
-! }
-! void debugpins_radio_set(void) {
-!    P6OUT |=  0x02;
-! }
-! 
-! 
-! void    leds_toggle_2x(void){
-! 
-!   uint16_t i;
-!   debugpins_task_toggle();
-!   for (i=0;i<0xFFFF;i++);
-!   for (i=0;i<0xFFFF;i++);
-!   debugpins_task_toggle();
-! }  
-! void    leds_toggle_4x(void){
-!   uint16_t i;
-!   leds_toggle_2x();
-!   for (i=0;i<0xFFFF;i++);
-!   for (i=0;i<0xFFFF;i++);
-!   leds_toggle_2x();
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/debugpins.h ../../../sys/net/openwsn/debugpins.h
-*** openwsn/debugpins.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/debugpins.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,44 ****
-! /**
-! \brief Cross-platform declaration "leds" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #ifndef __DEBUGPINS_H
-! #define __DEBUGPINS_H
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void debugpins_init();
-! 
-! void debugpins_frame_toggle();
-! void debugpins_frame_clr();
-! void debugpins_frame_set();
-! 
-! void debugpins_slot_toggle();
-! void debugpins_slot_clr();
-! void debugpins_slot_set();
-! 
-! void debugpins_fsm_toggle();
-! void debugpins_fsm_clr();
-! void debugpins_fsm_set();
-! 
-! void debugpins_task_toggle();
-! void debugpins_task_clr();
-! void debugpins_task_set();
-! 
-! void debugpins_isr_toggle();
-! void debugpins_isr_clr();
-! void debugpins_isr_set();
-! 
-! void debugpins_radio_toggle();
-! void debugpins_radio_clr();
-! void debugpins_radio_set();
-! 
-! #endif
---- 1,54 ----
-! #ifndef __DEBUGPINS_H
-! #define __DEBUGPINS_H
-! 
-! /**
-! \addtogroup BSP
-! \{
-! \addtogroup debugpins
-! \{
-! 
-! \brief Cross-platform declaration "leds" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void debugpins_init(void);
-! 
-! void debugpins_frame_toggle(void);
-! void debugpins_frame_clr(void);
-! void debugpins_frame_set(void);
-! 
-! void debugpins_slot_toggle(void);
-! void debugpins_slot_clr(void);
-! void debugpins_slot_set(void);
-! 
-! void debugpins_fsm_toggle(void);
-! void debugpins_fsm_clr(void);
-! void debugpins_fsm_set(void);
-! 
-! void debugpins_task_toggle(void);
-! void debugpins_task_clr(void);
-! void debugpins_task_set(void);
-! 
-! void debugpins_isr_toggle(void);
-! void debugpins_isr_clr(void);
-! void debugpins_isr_set(void);
-! 
-! void debugpins_radio_toggle(void);
-! void debugpins_radio_clr(void);
-! void debugpins_radio_set(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/eui64.c ../../../sys/net/openwsn/eui64.c
-*** openwsn/eui64.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/eui64.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,218 ****
-! /**
-! \brief TelosB-specific definition of the "eui64" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, March 2012.
-! */
-! 
-! #include "msp430f1611.h"
-! #include "string.h"
-! #include "eui64.h"
-! 
-! //=========================== defines =========================================
-! 
-! #define PIN_1WIRE 0x10
-! 
-! //=========================== enums ===========================================
-! 
-! enum  {
-!    OW_DLY_A = 6,
-!    OW_DLY_B = 64,
-!    OW_DLY_C = 60,
-!    OW_DLY_D = 10,
-!    OW_DLY_E = 9,
-!    OW_DLY_F = 55,
-!    OW_DLY_G = 0,
-!    OW_DLY_H = 480,
-!    OW_DLY_I = 90,
-!    OW_DLY_J = 220,
-! };
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // 1Wire
-! uint8_t ow_reset();
-! void    ow_write_byte(uint8_t byte);
-! uint8_t ow_read_byte();
-! void    ow_write_bit(int is_one);
-! uint8_t ow_read_bit();
-! void    ow_write_bit_one();
-! void    ow_write_bit_zero();
-! // CRC
-! uint8_t crc8_byte(uint8_t crc, uint8_t byte);
-! uint8_t crc8_bytes(uint8_t crc, uint8_t* bytes, uint8_t len);
-! // timer
-! void    delay_us(uint16_t delay);
-! // pin
-! void    owpin_init();
-! void    owpin_output_low();
-! void    owpin_output_high();
-! void    owpin_prepare_read();
-! uint8_t owpin_read();
-! 
-! //=========================== public ==========================================
-! 
-! void eui64_get(uint8_t* addressToWrite) {    // >= 6000us
-!    uint8_t  id[8];
-!    int      retry;
-!    int      crc;
-!    uint8_t* byte;
-!    uint16_t oldTactl;
-!    
-!    retry = 5;
-!    memset(addressToWrite,0,8);
-!    
-!    // store current value of TACTL
-!    oldTactl   = TACTL;
-!    
-!    // start timer in continuous mode at 1MHz
-!    TACTL      = TASSEL_2 | ID_2 | MC_2;
-!    
-!    owpin_init();
-!    while (retry-- > 0) {
-!       crc = 0;
-!       
-!       if(ow_reset()) {
-!          ow_write_byte(0x33); //read rom
-!          for(byte=id+7; byte>=id; byte--) {
-!             crc = crc8_byte( crc, *byte=ow_read_byte() );
-!          }
-!          if(crc==0) {
-!             // CRC valid
-!             *(addressToWrite+0) = 0x14;
-!             *(addressToWrite+1) = 0x15;
-!             *(addressToWrite+2) = 0x92;
-!             memcpy(addressToWrite+3,id+1,5);
-!          }
-!       }
-!    }
-!    
-!    // restore value of TACTL
-!    TACTL = oldTactl;
-! }
-! 
-! //=========================== private =========================================
-! 
-! //===== 1Wire
-! 
-! // admin
-! 
-! uint8_t ow_reset() {              // >= 960us 
-!    int present;
-!    owpin_output_low();
-!    delay_us(OW_DLY_H);            // t_RSTL
-!    owpin_prepare_read();
-!    delay_us(OW_DLY_I);            // t_MSP
-!    present = owpin_read();
-!    delay_us(OW_DLY_J);            // t_REC
-!    return (present==0);
-! }
-! 
-! // byte-level access
-! 
-! void ow_write_byte(uint8_t byte) {// >= 560us
-!    uint8_t bit;
-!    for(bit=0x01;bit!=0;bit<<=1) {
-!       ow_write_bit(byte & bit);
-!    }
-! }
-! 
-! uint8_t ow_read_byte() {          // >= 560us
-!    uint8_t byte = 0;
-!    uint8_t bit;
-!    for( bit=0x01; bit!=0; bit<<=1 ) {
-!       if(ow_read_bit()) {
-!          byte |= bit;
-!       }
-!    }
-!    return byte;
-! }
-! 
-! // bit-level access
-! 
-! void ow_write_bit(int is_one) {   // >= 70us
-!    if(is_one) {
-!       ow_write_bit_one();
-!    } else {
-!       ow_write_bit_zero();
-!    }
-! }
-! 
-! uint8_t ow_read_bit() {           // >= 70us
-!    int bit;
-!    owpin_output_low();
-!    delay_us(OW_DLY_A);            // t_RL
-!    owpin_prepare_read();
-!    delay_us(OW_DLY_E);            // near-max t_MSR
-!    bit = owpin_read();
-!    delay_us(OW_DLY_F);            // t_REC
-!    return bit;
-! }
-! 
-! void ow_write_bit_one() {         // >= 70us
-!    owpin_output_low();
-!    delay_us(OW_DLY_A);            // t_W1L
-!    owpin_output_high();
-!    delay_us(OW_DLY_B);            // t_SLOT - t_W1L
-! }
-! 
-! void ow_write_bit_zero() {        // >= 70us
-!    owpin_output_low();
-!    delay_us(OW_DLY_C);            // t_W0L
-!    owpin_output_high();
-!    delay_us(OW_DLY_D);            // t_SLOT - t_W0L
-! }
-! 
-! //===== CRC
-! 
-! uint8_t crc8_byte(uint8_t crc, uint8_t byte) {
-!    int i;
-!    crc ^= byte;
-!    for( i=0; i<8; i++ )
-!    {
-!       if( crc & 1 )
-!          crc = (crc >> 1) ^ 0x8c;
-!       else
-!          crc >>= 1;
-!    }
-!    return crc;
-! }
-! 
-! uint8_t crc8_bytes(uint8_t crc, uint8_t* bytes, uint8_t len) {
-!    uint8_t* end = bytes+len;
-!    while( bytes != end )
-!       crc = crc8_byte( crc, *bytes++ );
-!    return crc;
-! }
-! 
-! //===== timer
-! 
-! void delay_us(uint16_t delay) {
-!    uint16_t startTime;
-!    startTime = TAR;
-!    while (TAR<startTime+delay);
-! }
-! 
-! //===== pin
-! 
-! void    owpin_init() {
-!    P2DIR &= ~PIN_1WIRE;           // set as input
-!    P2OUT &= ~PIN_1WIRE;           // pull low
-! }
-! 
-! void    owpin_output_low() {
-!    P2DIR |=  PIN_1WIRE;           // set as output
-! }
-! 
-! void    owpin_output_high() {
-!    P2DIR &= ~PIN_1WIRE;           // set as input
-! }
-! 
-! void    owpin_prepare_read() {
-!    P2DIR &= ~PIN_1WIRE;           // set as input
-! }
-! 
-! uint8_t owpin_read() {
-!    return (P2IN & PIN_1WIRE);
-  }
-\ No newline at end of file
---- 1,218 ----
-! /**
-! \brief TelosB-specific definition of the "eui64" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, March 2012.
-! */
-! 
-! #include "msp430f1611.h"
-! #include "string.h"
-! #include "eui64.h"
-! 
-! //=========================== defines =========================================
-! 
-! #define PIN_1WIRE 0x10
-! 
-! //=========================== enums ===========================================
-! 
-! enum  {
-!    OW_DLY_A = 6,
-!    OW_DLY_B = 64,
-!    OW_DLY_C = 60,
-!    OW_DLY_D = 10,
-!    OW_DLY_E = 9,
-!    OW_DLY_F = 55,
-!    OW_DLY_G = 0,
-!    OW_DLY_H = 480,
-!    OW_DLY_I = 90,
-!    OW_DLY_J = 220,
-! };
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // 1Wire
-! uint8_t ow_reset(void);
-! void    ow_write_byte(uint8_t byte);
-! uint8_t ow_read_byte(void);
-! void    ow_write_bit(int is_one);
-! uint8_t ow_read_bit(void);
-! void    ow_write_bit_one(void);
-! void    ow_write_bit_zero(void);
-! // CRC
-! uint8_t crc8_byte(uint8_t crc, uint8_t byte);
-! uint8_t crc8_bytes(uint8_t crc, uint8_t* bytes, uint8_t len);
-! // timer
-! void    delay_us(uint16_t delay);
-! // pin
-! void    owpin_init(void);
-! void    owpin_output_low(void);
-! void    owpin_output_high(void);
-! void    owpin_prepare_read(void);
-! uint8_t owpin_read(void);
-! 
-! //=========================== public ==========================================
-! 
-! void eui64_get(uint8_t* addressToWrite) {    // >= 6000us
-!    uint8_t  id[8];
-!    int      retry;
-!    int      crc;
-!    uint8_t* byte;
-!    uint16_t oldTactl;
-!    
-!    retry = 5;
-!    memset(addressToWrite,0,8);
-!    
-!    // store current value of TACTL
-!    oldTactl   = TACTL;
-!    
-!    // start timer in continuous mode at 1MHz
-!    TACTL      = TASSEL_2 | ID_2 | MC_2;
-!    
-!    owpin_init();
-!    while (retry-- > 0) {
-!       crc = 0;
-!       
-!       if(ow_reset()) {
-!          ow_write_byte(0x33); //read rom
-!          for(byte=id+7; byte>=id; byte--) {
-!             crc = crc8_byte( crc, *byte=ow_read_byte() );
-!          }
-!          if(crc==0) {
-!             // CRC valid
-!             *(addressToWrite+0) = 0x14;
-!             *(addressToWrite+1) = 0x15;
-!             *(addressToWrite+2) = 0x92;
-!             memcpy(addressToWrite+3,id+1,5);
-!          }
-!       }
-!    }
-!    
-!    // restore value of TACTL
-!    TACTL = oldTactl;
-! }
-! 
-! //=========================== private =========================================
-! 
-! //===== 1Wire
-! 
-! // admin
-! 
-! uint8_t ow_reset(void) {              // >= 960us 
-!    int present;
-!    owpin_output_low();
-!    delay_us(OW_DLY_H);            // t_RSTL
-!    owpin_prepare_read();
-!    delay_us(OW_DLY_I);            // t_MSP
-!    present = owpin_read();
-!    delay_us(OW_DLY_J);            // t_REC
-!    return (present==0);
-! }
-! 
-! // byte-level access
-! 
-! void ow_write_byte(uint8_t byte) {// >= 560us
-!    uint8_t bit;
-!    for(bit=0x01;bit!=0;bit<<=1) {
-!       ow_write_bit(byte & bit);
-!    }
-! }
-! 
-! uint8_t ow_read_byte(void) {          // >= 560us
-!    uint8_t byte = 0;
-!    uint8_t bit;
-!    for( bit=0x01; bit!=0; bit<<=1 ) {
-!       if(ow_read_bit()) {
-!          byte |= bit;
-!       }
-!    }
-!    return byte;
-! }
-! 
-! // bit-level access
-! 
-! void ow_write_bit(int is_one) {   // >= 70us
-!    if(is_one) {
-!       ow_write_bit_one();
-!    } else {
-!       ow_write_bit_zero();
-!    }
-! }
-! 
-! uint8_t ow_read_bit(void) {           // >= 70us
-!    int bit;
-!    owpin_output_low();
-!    delay_us(OW_DLY_A);            // t_RL
-!    owpin_prepare_read();
-!    delay_us(OW_DLY_E);            // near-max t_MSR
-!    bit = owpin_read();
-!    delay_us(OW_DLY_F);            // t_REC
-!    return bit;
-! }
-! 
-! void ow_write_bit_one(void) {         // >= 70us
-!    owpin_output_low();
-!    delay_us(OW_DLY_A);            // t_W1L
-!    owpin_output_high();
-!    delay_us(OW_DLY_B);            // t_SLOT - t_W1L
-! }
-! 
-! void ow_write_bit_zero(void) {        // >= 70us
-!    owpin_output_low();
-!    delay_us(OW_DLY_C);            // t_W0L
-!    owpin_output_high();
-!    delay_us(OW_DLY_D);            // t_SLOT - t_W0L
-! }
-! 
-! //===== CRC
-! 
-! uint8_t crc8_byte(uint8_t crc, uint8_t byte) {
-!    int i;
-!    crc ^= byte;
-!    for( i=0; i<8; i++ )
-!    {
-!       if( crc & 1 )
-!          crc = (crc >> 1) ^ 0x8c;
-!       else
-!          crc >>= 1;
-!    }
-!    return crc;
-! }
-! 
-! uint8_t crc8_bytes(uint8_t crc, uint8_t* bytes, uint8_t len) {
-!    uint8_t* end = bytes+len;
-!    while( bytes != end )
-!       crc = crc8_byte( crc, *bytes++ );
-!    return crc;
-! }
-! 
-! //===== timer
-! 
-! void delay_us(uint16_t delay) {
-!    uint16_t startTime;
-!    startTime = TAR;
-!    while (TAR<startTime+delay);
-! }
-! 
-! //===== pin
-! 
-! void    owpin_init(void) {
-!    P2DIR &= ~PIN_1WIRE;           // set as input
-!    P2OUT &= ~PIN_1WIRE;           // pull low
-! }
-! 
-! void    owpin_output_low(void) {
-!    P2DIR |=  PIN_1WIRE;           // set as output
-! }
-! 
-! void    owpin_output_high(void) {
-!    P2DIR &= ~PIN_1WIRE;           // set as input
-! }
-! 
-! void    owpin_prepare_read(void) {
-!    P2DIR &= ~PIN_1WIRE;           // set as input
-! }
-! 
-! uint8_t owpin_read(void) {
-!    return (P2IN & PIN_1WIRE);
-  }
-\ No newline at end of file
-diff -crB openwsn/eui64.h ../../../sys/net/openwsn/eui64.h
-*** openwsn/eui64.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/eui64.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,22 ****
-! /**
-! \brief Cross-platform declaration "eui64" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, March 2012.
-! */
-! 
-! #ifndef __EUI64_H
-! #define __EUI64_H
-! 
-! #include <stdint.h>
-!  
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void eui64_get(uint8_t* addressToWrite);
-! 
-  #endif
-\ No newline at end of file
---- 1,32 ----
-! #ifndef __EUI64_H
-! #define __EUI64_H
-! 
-! /**
-! \addtogroup BSP
-! \{
-! \addtogroup eui64
-! \{
-! 
-! \brief Cross-platform declaration "eui64" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, March 2012.
-! */
-! 
-! #include <stdint.h>
-!  
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void eui64_get(uint8_t* addressToWrite);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
-diff -crB openwsn/leds.c ../../../sys/net/openwsn/leds.c
-*** openwsn/leds.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/leds.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,137 ****
-! /**
-! \brief TelosB-specific definition of the "leds" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "msp430f1611.h"
-! #include "leds.h"
-! 
-! //=========================== defines =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void    leds_init() {
-!    P5DIR     |=  0x70;                           // P5DIR = 0bx111xxxx for LEDs
-!    P5OUT     |=  0x70;                           // P2OUT = 0bx111xxxx, all LEDs off
-! }
-! 
-! // red = LED1 = P5.4
-! void    leds_error_on() {
-!    P5OUT     &= ~0x10;
-! }
-! void    leds_error_off() {
-!    P5OUT     |=  0x10;
-! }
-! void    leds_error_toggle() {
-!    P5OUT     ^=  0x10;
-! }
-! uint8_t leds_error_isOn() {
-!    return (uint8_t)(P5OUT & 0x10)>>4;
-! }
-! void leds_error_blink() {
-!    uint8_t i;
-!    volatile uint16_t delay;
-!    // turn all LEDs off
-!    P5OUT     |=  0x70;
-!    
-!    // blink error LED for ~10s
-!    for (i=0;i<80;i++) {
-!       P5OUT     ^=  0x10;
-!       for (delay=0xffff;delay>0;delay--);
-!    }
-! }
-! 
-! // green = LED2 = P5.5
-! void    leds_radio_on() {
-!    P5OUT     &= ~0x20;
-! }
-! void    leds_radio_off() {
-!    P5OUT     |=  0x20;
-! }
-! void    leds_radio_toggle() {
-!    P5OUT     ^=  0x20;
-! }
-! uint8_t leds_radio_isOn() {
-!    return (uint8_t)(P5OUT & 0x20)>>5;
-! }
-! 
-! // blue = LED3 = P5.6
-! void    leds_sync_on() {
-!    P5OUT     &= ~0x40;
-! }
-! void    leds_sync_off() {
-!    P5OUT     |=  0x40;
-! }
-! void    leds_sync_toggle() {
-!    P5OUT     ^=  0x40;
-! }
-! uint8_t leds_sync_isOn() {
-!    return (uint8_t)(P5OUT & 0x40)>>6;
-! }
-! 
-! void    leds_debug_on() {
-!    // TelosB doesn't have a debug LED :(
-! }
-! void    leds_debug_off() {
-!    // TelosB doesn't have a debug LED :(
-! }
-! void    leds_debug_toggle() {
-!    // TelosB doesn't have a debug LED :(
-! }
-! uint8_t leds_debug_isOn() {
-!    // TelosB doesn't have a debug LED :(
-!    return 0;
-! }
-! 
-! void    leds_all_on() {
-!    P5OUT     &= ~0x70;
-! }
-! void    leds_all_off() {
-!    P5OUT     |=  0x70;
-! }
-! void    leds_all_toggle() {
-!    P5OUT     ^=  0x70;
-! }
-! 
-! void    leds_circular_shift() {
-!    uint8_t leds_on;
-!    // get LED state
-!    leds_on  = (~P5OUT & 0x70) >> 4;
-!    // modify LED state
-!    if (leds_on==0) {                             // if no LEDs on, switch on one
-!       leds_on = 0x01;
-!    } else {
-!       leds_on <<= 1;                             // shift by one position
-!       if ((leds_on & 0x08)!=0) {
-!          leds_on &= ~0x08;
-!          leds_on |=  0x01;                       // handle overflow
-!       }
-!    }
-!    // apply updated LED state
-!    leds_on <<= 4;                                // send back to position 4
-!    P5OUT |=  (~leds_on & 0x70);                  // switch on the leds marked '1' in leds_on
-!    P5OUT &= ~( leds_on & 0x70);                  // switch off the leds marked '0' in leds_on
-! }
-! 
-! void    leds_increment() {
-!    uint8_t leds_on;
-!    // get LED state
-!    leds_on  = (~P5OUT & 0x70) >> 4;
-!    // modify LED state
-!    if (leds_on==0) {                             // if no LEDs on, switch on one
-!       leds_on = 0x01;
-!    } else {
-!       leds_on += 1;
-!    }
-!    // apply updated LED state
-!    leds_on <<= 4;                                // send back to position 4
-!    P5OUT |=  (~leds_on & 0x70);                  // switch on the leds marked '1' in leds_on
-!    P5OUT &= ~( leds_on & 0x70);                  // switch off the leds marked '0' in leds_on
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
---- 1,137 ----
-! /**
-! \brief TelosB-specific definition of the "leds" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "msp430f1611.h"
-! #include "leds.h"
-! 
-! //=========================== defines =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void    leds_init(void) {
-!    P5DIR     |=  0x70;                           // P5DIR = 0bx111xxxx for LEDs
-!    P5OUT     |=  0x70;                           // P2OUT = 0bx111xxxx, all LEDs off
-! }
-! 
-! // red = LED1 = P5.4
-! void    leds_error_on(void) {
-!    P5OUT     &= ~0x10;
-! }
-! void    leds_error_off(void) {
-!    P5OUT     |=  0x10;
-! }
-! void    leds_error_toggle(void) {
-!    P5OUT     ^=  0x10;
-! }
-! uint8_t leds_error_isOn(void) {
-!    return (uint8_t)(P5OUT & 0x10)>>4;
-! }
-! void leds_error_blink(void) {
-!    uint8_t i;
-!    volatile uint16_t delay;
-!    // turn all LEDs off
-!    P5OUT     |=  0x70;
-!    
-!    // blink error LED for ~10s
-!    for (i=0;i<80;i++) {
-!       P5OUT     ^=  0x10;
-!       for (delay=0xffff;delay>0;delay--);
-!    }
-! }
-! 
-! // green = LED2 = P5.5
-! void    leds_radio_on(void) {
-!    P5OUT     &= ~0x20;
-! }
-! void    leds_radio_off(void) {
-!    P5OUT     |=  0x20;
-! }
-! void    leds_radio_toggle(void) {
-!    P5OUT     ^=  0x20;
-! }
-! uint8_t leds_radio_isOn(void) {
-!    return (uint8_t)(P5OUT & 0x20)>>5;
-! }
-! 
-! // blue = LED3 = P5.6
-! void    leds_sync_on(void) {
-!    P5OUT     &= ~0x40;
-! }
-! void    leds_sync_off(void) {
-!    P5OUT     |=  0x40;
-! }
-! void    leds_sync_toggle(void) {
-!    P5OUT     ^=  0x40;
-! }
-! uint8_t leds_sync_isOn(void) {
-!    return (uint8_t)(P5OUT & 0x40)>>6;
-! }
-! 
-! void    leds_debug_on(void) {
-!    // TelosB doesn't have a debug LED :(
-! }
-! void    leds_debug_off(void) {
-!    // TelosB doesn't have a debug LED :(
-! }
-! void    leds_debug_toggle(void) {
-!    // TelosB doesn't have a debug LED :(
-! }
-! uint8_t leds_debug_isOn(void) {
-!    // TelosB doesn't have a debug LED :(
-!    return 0;
-! }
-! 
-! void    leds_all_on(void) {
-!    P5OUT     &= ~0x70;
-! }
-! void    leds_all_off(void) {
-!    P5OUT     |=  0x70;
-! }
-! void    leds_all_toggle(void) {
-!    P5OUT     ^=  0x70;
-! }
-! 
-! void    leds_circular_shift(void) {
-!    uint8_t leds_on;
-!    // get LED state
-!    leds_on  = (~P5OUT & 0x70) >> 4;
-!    // modify LED state
-!    if (leds_on==0) {                             // if no LEDs on, switch on one
-!       leds_on = 0x01;
-!    } else {
-!       leds_on <<= 1;                             // shift by one position
-!       if ((leds_on & 0x08)!=0) {
-!          leds_on &= ~0x08;
-!          leds_on |=  0x01;                       // handle overflow
-!       }
-!    }
-!    // apply updated LED state
-!    leds_on <<= 4;                                // send back to position 4
-!    P5OUT |=  (~leds_on & 0x70);                  // switch on the leds marked '1' in leds_on
-!    P5OUT &= ~( leds_on & 0x70);                  // switch off the leds marked '0' in leds_on
-! }
-! 
-! void    leds_increment(void) {
-!    uint8_t leds_on;
-!    // get LED state
-!    leds_on  = (~P5OUT & 0x70) >> 4;
-!    // modify LED state
-!    if (leds_on==0) {                             // if no LEDs on, switch on one
-!       leds_on = 0x01;
-!    } else {
-!       leds_on += 1;
-!    }
-!    // apply updated LED state
-!    leds_on <<= 4;                                // send back to position 4
-!    P5OUT |=  (~leds_on & 0x70);                  // switch on the leds marked '1' in leds_on
-!    P5OUT &= ~( leds_on & 0x70);                  // switch off the leds marked '0' in leds_on
-! }
-! 
-  //=========================== private =========================================
-\ No newline at end of file
-diff -crB openwsn/leds.h ../../../sys/net/openwsn/leds.h
-*** openwsn/leds.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/leds.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,50 ****
-! /**
-! \brief Cross-platform declaration "leds" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #ifndef __LEDS_H
-! #define __LEDS_H
-! 
-! #include "stdint.h"
-!  
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    leds_init();
-! 
-! void    leds_error_on();
-! void    leds_error_off();
-! void    leds_error_toggle();
-! uint8_t leds_error_isOn();
-! void    leds_error_blink();
-! 
-! void    leds_radio_on();
-! void    leds_radio_off();
-! void    leds_radio_toggle();
-! uint8_t leds_radio_isOn();
-! 
-! void    leds_sync_on();
-! void    leds_sync_off();
-! void    leds_sync_toggle();
-! uint8_t leds_sync_isOn();
-! 
-! void    leds_debug_on();
-! void    leds_debug_off();
-! void    leds_debug_toggle();
-! uint8_t leds_debug_isOn();
-! 
-! void    leds_all_on();
-! void    leds_all_off();
-! void    leds_all_toggle();
-! 
-! void    leds_circular_shift();
-! void    leds_increment();
-! 
-! #endif
---- 1,60 ----
-! #ifndef __LEDS_H
-! #define __LEDS_H
-! 
-! /**
-! \addtogroup BSP
-! \{
-! \addtogroup leds
-! \{
-! 
-! \brief Cross-platform declaration "leds" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "stdint.h"
-!  
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    leds_init(void);
-! 
-! void    leds_error_on(void);
-! void    leds_error_off(void);
-! void    leds_error_toggle(void);
-! uint8_t leds_error_isOn(void);
-! void    leds_error_blink(void);
-! 
-! void    leds_radio_on(void);
-! void    leds_radio_off(void);
-! void    leds_radio_toggle(void);
-! uint8_t leds_radio_isOn(void);
-! 
-! void    leds_sync_on(void);
-! void    leds_sync_off(void);
-! void    leds_sync_toggle(void);
-! uint8_t leds_sync_isOn(void);
-! 
-! void    leds_debug_on(void);
-! void    leds_debug_off(void);
-! void    leds_debug_toggle(void);
-! uint8_t leds_debug_isOn(void);
-! 
-! void    leds_all_on(void);
-! void    leds_all_off(void);
-! void    leds_all_toggle(void);
-! 
-! void    leds_circular_shift(void);
-! void    leds_increment(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/openhdlc.c ../../../sys/net/openwsn/openhdlc.c
-*** openwsn/openhdlc.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/openhdlc.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,20 ****
-! /**
-! \brief Definition of the "openserial" driver.
-! 
-! \author Min Ting <tingm417@gmail.com>, October 2012.
-! \author Fabien Chraim <chraim@eecs.berkeley.edu>, October 2012.
-! */
-! 
-! #include "openhdlc.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! uint16_t crcIteration(uint16_t crc, uint8_t byte) {
-!    return (crc >> 8) ^ fcstab[(crc ^ byte) & 0xff];
-! }
-! 
-! //=========================== private =========================================
---- 1,20 ----
-! /**
-! \brief Definition of the "openserial" driver.
-! 
-! \author Min Ting <tingm417@gmail.com>, October 2012.
-! \author Fabien Chraim <chraim@eecs.berkeley.edu>, October 2012.
-! */
-! 
-! #include "openhdlc.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! uint16_t crcIteration(uint16_t crc, uint8_t byte) {
-!    return (crc >> 8) ^ fcstab[(crc ^ byte) & 0xff];
-! }
-! 
-! //=========================== private =========================================
-diff -crB openwsn/openhdlc.h ../../../sys/net/openwsn/openhdlc.h
-*** openwsn/openhdlc.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/openhdlc.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,75 ****
-! /**
-! \brief Declaraion of the "openserial" driver.
-! 
-! \author Min Ting <tingm417@gmail.com>, October 2012.
-! \author Fabien Chraim <chraim@eecs.berkeley.edu>, October 2012.
-! */
-! 
-! #ifndef __OPENHDLC_H
-! #define __OPENHDLC_H
-! 
-! #include "openwsn.h"
-! 
-! /**
-! \addtogroup cross-layers
-! \{
-! \addtogroup HDLC
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! #define HDLC_FLAG            0x7e
-! #define HDLC_ESCAPE          0x7d
-! #define HDLC_ESCAPE_MASK     0x20
-! #define HDLC_CRCINIT         0xffff
-! #define HDLC_CRCGOOD         0xf0b8
-! 
-! //this table is used to expedite execution (at the expense of memory usage)
-! static const uint16_t fcstab[256] = {
-!    0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
-!    0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
-!    0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
-!    0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
-!    0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
-!    0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
-!    0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
-!    0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
-!    0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
-!    0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
-!    0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
-!    0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
-!    0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
-!    0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
-!    0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
-!    0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
-!    0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
-!    0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
-!    0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
-!    0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
-!    0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
-!    0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
-!    0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
-!    0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
-!    0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
-!    0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
-!    0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
-!    0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
-!    0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
-!    0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
-!    0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
-!    0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== prototypes ======================================
-! 
-! uint16_t crcIteration(uint16_t crc, uint8_t byte);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
---- 1,75 ----
-! /**
-! \brief Declaraion of the "openserial" driver.
-! 
-! \author Min Ting <tingm417@gmail.com>, October 2012.
-! \author Fabien Chraim <chraim@eecs.berkeley.edu>, October 2012.
-! */
-! 
-! #ifndef __OPENHDLC_H
-! #define __OPENHDLC_H
-! 
-! #include "openwsn.h"
-! 
-! /**
-! \addtogroup drivers
-! \{
-! \addtogroup HDLC
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! #define HDLC_FLAG            0x7e
-! #define HDLC_ESCAPE          0x7d
-! #define HDLC_ESCAPE_MASK     0x20
-! #define HDLC_CRCINIT         0xffff
-! #define HDLC_CRCGOOD         0xf0b8
-! 
-! //this table is used to expedite execution (at the expense of memory usage)
-! static const uint16_t fcstab[256] = {
-!    0x0000, 0x1189, 0x2312, 0x329b, 0x4624, 0x57ad, 0x6536, 0x74bf,
-!    0x8c48, 0x9dc1, 0xaf5a, 0xbed3, 0xca6c, 0xdbe5, 0xe97e, 0xf8f7,
-!    0x1081, 0x0108, 0x3393, 0x221a, 0x56a5, 0x472c, 0x75b7, 0x643e,
-!    0x9cc9, 0x8d40, 0xbfdb, 0xae52, 0xdaed, 0xcb64, 0xf9ff, 0xe876,
-!    0x2102, 0x308b, 0x0210, 0x1399, 0x6726, 0x76af, 0x4434, 0x55bd,
-!    0xad4a, 0xbcc3, 0x8e58, 0x9fd1, 0xeb6e, 0xfae7, 0xc87c, 0xd9f5,
-!    0x3183, 0x200a, 0x1291, 0x0318, 0x77a7, 0x662e, 0x54b5, 0x453c,
-!    0xbdcb, 0xac42, 0x9ed9, 0x8f50, 0xfbef, 0xea66, 0xd8fd, 0xc974,
-!    0x4204, 0x538d, 0x6116, 0x709f, 0x0420, 0x15a9, 0x2732, 0x36bb,
-!    0xce4c, 0xdfc5, 0xed5e, 0xfcd7, 0x8868, 0x99e1, 0xab7a, 0xbaf3,
-!    0x5285, 0x430c, 0x7197, 0x601e, 0x14a1, 0x0528, 0x37b3, 0x263a,
-!    0xdecd, 0xcf44, 0xfddf, 0xec56, 0x98e9, 0x8960, 0xbbfb, 0xaa72,
-!    0x6306, 0x728f, 0x4014, 0x519d, 0x2522, 0x34ab, 0x0630, 0x17b9,
-!    0xef4e, 0xfec7, 0xcc5c, 0xddd5, 0xa96a, 0xb8e3, 0x8a78, 0x9bf1,
-!    0x7387, 0x620e, 0x5095, 0x411c, 0x35a3, 0x242a, 0x16b1, 0x0738,
-!    0xffcf, 0xee46, 0xdcdd, 0xcd54, 0xb9eb, 0xa862, 0x9af9, 0x8b70,
-!    0x8408, 0x9581, 0xa71a, 0xb693, 0xc22c, 0xd3a5, 0xe13e, 0xf0b7,
-!    0x0840, 0x19c9, 0x2b52, 0x3adb, 0x4e64, 0x5fed, 0x6d76, 0x7cff,
-!    0x9489, 0x8500, 0xb79b, 0xa612, 0xd2ad, 0xc324, 0xf1bf, 0xe036,
-!    0x18c1, 0x0948, 0x3bd3, 0x2a5a, 0x5ee5, 0x4f6c, 0x7df7, 0x6c7e,
-!    0xa50a, 0xb483, 0x8618, 0x9791, 0xe32e, 0xf2a7, 0xc03c, 0xd1b5,
-!    0x2942, 0x38cb, 0x0a50, 0x1bd9, 0x6f66, 0x7eef, 0x4c74, 0x5dfd,
-!    0xb58b, 0xa402, 0x9699, 0x8710, 0xf3af, 0xe226, 0xd0bd, 0xc134,
-!    0x39c3, 0x284a, 0x1ad1, 0x0b58, 0x7fe7, 0x6e6e, 0x5cf5, 0x4d7c,
-!    0xc60c, 0xd785, 0xe51e, 0xf497, 0x8028, 0x91a1, 0xa33a, 0xb2b3,
-!    0x4a44, 0x5bcd, 0x6956, 0x78df, 0x0c60, 0x1de9, 0x2f72, 0x3efb,
-!    0xd68d, 0xc704, 0xf59f, 0xe416, 0x90a9, 0x8120, 0xb3bb, 0xa232,
-!    0x5ac5, 0x4b4c, 0x79d7, 0x685e, 0x1ce1, 0x0d68, 0x3ff3, 0x2e7a,
-!    0xe70e, 0xf687, 0xc41c, 0xd595, 0xa12a, 0xb0a3, 0x8238, 0x93b1,
-!    0x6b46, 0x7acf, 0x4854, 0x59dd, 0x2d62, 0x3ceb, 0x0e70, 0x1ff9,
-!    0xf78f, 0xe606, 0xd49d, 0xc514, 0xb1ab, 0xa022, 0x92b9, 0x8330,
-!    0x7bc7, 0x6a4e, 0x58d5, 0x495c, 0x3de3, 0x2c6a, 0x1ef1, 0x0f78
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== prototypes ======================================
-! 
-! uint16_t crcIteration(uint16_t crc, uint8_t byte);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
-diff -crB openwsn/openserial.c ../../../sys/net/openwsn/openserial.c
-*** openwsn/openserial.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/openserial.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,633 ****
-! /**
-! \brief Definition of the "openserial" driver.
-! 
-! \author Fabien Chraim <chraim@eecs.berkeley.edu>, March 2012.
-! */
-! 
-! #include "openwsn.h"
-! #include "openserial.h"
-! #include "IEEE802154E.h"
-! #include "neighbors.h"
-! #include "res.h"
-! #include "icmpv6echo.h"
-! #include "idmanager.h"
-! #include "openqueue.h"
-! #include "tcpinject.h"
-! #include "udpinject.h"
-! #include "openbridge.h"
-! #include "leds.h"
-! #include "schedule.h"
-! #include "uart.h"
-! #include "opentimers.h"
-! #include "openhdlc.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    // admin
-!    uint8_t    mode;
-!    uint8_t    debugPrintCounter;
-!    // input
-!    uint8_t    reqFrame[1+1+2+1]; // flag (1B), command (2B), CRC (2B), flag (1B)
-!    uint8_t    reqFrameIdx;
-!    uint8_t    lastRxByte;
-!    bool       busyReceiving;
-!    bool       inputEscaping;
-!    uint16_t   inputCrc;
-!    uint8_t    inputBufFill;
-!    uint8_t    inputBuf[SERIAL_INPUT_BUFFER_SIZE];
-!    // output
-!    bool       outputBufFilled;
-!    uint16_t   outputCrc;
-!    uint8_t    outputBufIdxW;
-!    uint8_t    outputBufIdxR;
-!    uint8_t    outputBuf[SERIAL_OUTPUT_BUFFER_SIZE];
-! } openserial_vars_t;
-! 
-! openserial_vars_t openserial_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! error_t openserial_printInfoErrorCritical(
-!    char             severity,
-!    uint8_t          calling_component,
-!    uint8_t          error_code,
-!    errorparameter_t arg1,
-!    errorparameter_t arg2
-! );
-! // HDLC output
-! void outputHdlcOpen();
-! void outputHdlcWrite(uint8_t b);
-! void outputHdlcClose();
-! // HDLC input
-! void inputHdlcOpen();
-! void inputHdlcWrite(uint8_t b);
-! void inputHdlcClose();
-! 
-! //=========================== public ==========================================
-! 
-! void openserial_init() {
-!    uint16_t crc;
-!    
-!    // reset variable
-!    memset(&openserial_vars,0,sizeof(openserial_vars_t));
-!    
-!    // admin
-!    openserial_vars.mode                = MODE_OFF;
-!    openserial_vars.debugPrintCounter   = 0;
-!    
-!    // input
-!    openserial_vars.reqFrame[0]         = HDLC_FLAG;
-!    openserial_vars.reqFrame[1]         = SERFRAME_MOTE2PC_REQUEST;
-!    crc = HDLC_CRCINIT;
-!    crc = crcIteration(crc,openserial_vars.reqFrame[1]);
-!    crc = ~crc;
-!    openserial_vars.reqFrame[2]         = (crc>>0)&0xff;
-!    openserial_vars.reqFrame[3]         = (crc>>8)&0xff;
-!    openserial_vars.reqFrame[4]         = HDLC_FLAG;
-!    openserial_vars.reqFrameIdx         = 0;
-!    openserial_vars.lastRxByte          = HDLC_FLAG;
-!    openserial_vars.busyReceiving       = FALSE;
-!    openserial_vars.inputEscaping       = FALSE;
-!    openserial_vars.inputBufFill        = 0;
-!    
-!    // ouput
-!    openserial_vars.outputBufFilled     = FALSE;
-!    openserial_vars.outputBufIdxR       = 0;
-!    openserial_vars.outputBufIdxW       = 0;
-!    
-!    // set callbacks
-!    uart_setCallbacks(isr_openserial_tx,
-!                      isr_openserial_rx);
-! }
-! 
-! error_t openserial_printStatus(uint8_t statusElement,uint8_t* buffer, uint16_t length) {
-!    uint8_t i;
-!    INTERRUPT_DECLARATION();
-!    
-!    DISABLE_INTERRUPTS();
-!    openserial_vars.outputBufFilled  = TRUE;
-!    outputHdlcOpen();
-!    outputHdlcWrite(SERFRAME_MOTE2PC_STATUS);
-!    outputHdlcWrite(idmanager_getMyID(ADDR_16B)->addr_16b[0]);
-!    outputHdlcWrite(idmanager_getMyID(ADDR_16B)->addr_16b[1]);
-!    outputHdlcWrite(statusElement);
-!    for (i=0;i<length;i++){
-!       outputHdlcWrite(buffer[i]);
-!    }
-!    outputHdlcClose();
-!    ENABLE_INTERRUPTS();
-!    
-!    return E_SUCCESS;
-! }
-! 
-! error_t openserial_printInfoErrorCritical(
-!       char             severity,
-!       uint8_t          calling_component,
-!       uint8_t          error_code,
-!       errorparameter_t arg1,
-!       errorparameter_t arg2
-!    ) {
-!    INTERRUPT_DECLARATION();
-!    
-!    DISABLE_INTERRUPTS();
-!    openserial_vars.outputBufFilled  = TRUE;
-!    outputHdlcOpen();
-!    outputHdlcWrite(severity);
-!    outputHdlcWrite(idmanager_getMyID(ADDR_16B)->addr_16b[0]);
-!    outputHdlcWrite(idmanager_getMyID(ADDR_16B)->addr_16b[1]);
-!    outputHdlcWrite(calling_component);
-!    outputHdlcWrite(error_code);
-!    outputHdlcWrite((uint8_t)((arg1 & 0xff00)>>8));
-!    outputHdlcWrite((uint8_t) (arg1 & 0x00ff));
-!    outputHdlcWrite((uint8_t)((arg2 & 0xff00)>>8));
-!    outputHdlcWrite((uint8_t) (arg2 & 0x00ff));
-!    outputHdlcClose();
-!    ENABLE_INTERRUPTS();
-!    
-!    return E_SUCCESS;
-! }
-! 
-! error_t openserial_printData(uint8_t* buffer, uint8_t length) {
-!    uint8_t  i;
-!    uint8_t  asn[5];
-!    INTERRUPT_DECLARATION();
-!    
-!    // retrieve ASN
-!    asnWriteToSerial(asn);// byte01,byte23,byte4
-!    
-!    DISABLE_INTERRUPTS();
-!    openserial_vars.outputBufFilled  = TRUE;
-!    outputHdlcOpen();
-!    outputHdlcWrite(SERFRAME_MOTE2PC_DATA);
-!    outputHdlcWrite(idmanager_getMyID(ADDR_16B)->addr_16b[1]);
-!    outputHdlcWrite(idmanager_getMyID(ADDR_16B)->addr_16b[0]);
-!    outputHdlcWrite(asn[0]);
-!    outputHdlcWrite(asn[1]);
-!    outputHdlcWrite(asn[2]);
-!    outputHdlcWrite(asn[3]);
-!    outputHdlcWrite(asn[4]);
-!    for (i=0;i<length;i++){
-!       outputHdlcWrite(buffer[i]);
-!    }
-!    outputHdlcClose();
-!    ENABLE_INTERRUPTS();
-!    
-!    return E_SUCCESS;
-! }
-! 
-! error_t openserial_printInfo(uint8_t calling_component, uint8_t error_code,
-!                               errorparameter_t arg1,
-!                               errorparameter_t arg2) {
-!    return openserial_printInfoErrorCritical(
-!       SERFRAME_MOTE2PC_INFO,
-!       calling_component,
-!       error_code,
-!       arg1,
-!       arg2
-!    );
-! }
-! 
-! error_t openserial_printError(uint8_t calling_component, uint8_t error_code,
-!                               errorparameter_t arg1,
-!                               errorparameter_t arg2) {
-!    // blink error LED, this is serious
-!    leds_error_toggle();
-!    
-!    return openserial_printInfoErrorCritical(
-!       SERFRAME_MOTE2PC_ERROR,
-!       calling_component,
-!       error_code,
-!       arg1,
-!       arg2
-!    );
-! }
-! 
-! error_t openserial_printCritical(uint8_t calling_component, uint8_t error_code,
-!                               errorparameter_t arg1,
-!                               errorparameter_t arg2) {
-!    // blink error LED, this is serious
-!    leds_error_blink();
-!    
-!    // schedule for the mote to reboot in 10s
-!    opentimers_start(10000,
-!                     TIMER_ONESHOT,TIME_MS,
-!                     board_reset);
-!    
-!    return openserial_printInfoErrorCritical(
-!       SERFRAME_MOTE2PC_CRITICAL,
-!       calling_component,
-!       error_code,
-!       arg1,
-!       arg2
-!    );
-! }
-! 
-! uint8_t openserial_getNumDataBytes() {
-!    uint8_t inputBufFill;
-!    INTERRUPT_DECLARATION();
-!    
-!    DISABLE_INTERRUPTS();
-!    inputBufFill = openserial_vars.inputBufFill;
-!    ENABLE_INTERRUPTS();
-! 
-!    return inputBufFill-1; // removing the command byte
-! }
-! 
-! uint8_t openserial_getInputBuffer(uint8_t* bufferToWrite, uint8_t maxNumBytes) {
-!    uint8_t numBytesWritten;
-!    uint8_t inputBufFill;
-!    INTERRUPT_DECLARATION();
-!    
-!    DISABLE_INTERRUPTS();
-!    inputBufFill = openserial_vars.inputBufFill;
-!    ENABLE_INTERRUPTS();
-!    
-!    if (maxNumBytes<inputBufFill-1) {
-!       openserial_printError(COMPONENT_OPENSERIAL,ERR_GETDATA_ASKS_TOO_FEW_BYTES,
-!                             (errorparameter_t)maxNumBytes,
-!                             (errorparameter_t)inputBufFill-1);
-!       numBytesWritten = 0;
-!    } else {
-!       numBytesWritten = inputBufFill-1;
-!       memcpy(bufferToWrite,&(openserial_vars.inputBuf[1]),numBytesWritten);
-!    }
-!    DISABLE_INTERRUPTS();
-!    openserial_vars.inputBufFill=0;
-!    ENABLE_INTERRUPTS();
-!    
-!    return numBytesWritten;
-! }
-! 
-! void openserial_startInput() {
-!    INTERRUPT_DECLARATION();
-!    
-!    if (openserial_vars.inputBufFill>0) {
-!       openserial_printError(COMPONENT_OPENSERIAL,ERR_INPUTBUFFER_LENGTH,
-!                             (errorparameter_t)openserial_vars.inputBufFill,
-!                             (errorparameter_t)0);
-!       openserial_vars.inputBufFill = 0;
-!    }
-!    
-!    uart_clearTxInterrupts();
-!    uart_clearRxInterrupts();      // clear possible pending interrupts
-!    uart_enableInterrupts();       // Enable USCI_A1 TX & RX interrupt
-!    
-!    DISABLE_INTERRUPTS();
-!    openserial_vars.mode           = MODE_INPUT;
-!    openserial_vars.reqFrameIdx    = 0;
-!    uart_writeByte(openserial_vars.reqFrame[openserial_vars.reqFrameIdx]);
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! void openserial_startOutput() {
-!    //schedule a task to get new status in the output buffer
-!    uint8_t debugPrintCounter;
-!    
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    openserial_vars.debugPrintCounter = (openserial_vars.debugPrintCounter+1)%STATUS_MAX;
-!    debugPrintCounter = openserial_vars.debugPrintCounter;
-!    ENABLE_INTERRUPTS();
-!    
-!    // print debug information
-!    switch (debugPrintCounter) {
-!       case STATUS_ISSYNC:
-!          if (debugPrint_isSync()==TRUE) {
-!             break;
-!          }
-!       case STATUS_ID:
-!          if (debugPrint_id()==TRUE) {
-!             break;
-!          }
-!       case STATUS_DAGRANK:
-!          if (debugPrint_myDAGrank()==TRUE) {
-!             break;
-!          }
-!       case STATUS_OUTBUFFERINDEXES:
-!          if (debugPrint_outBufferIndexes()==TRUE) {
-!             break;
-!          }
-!       case STATUS_ASN:
-!          if (debugPrint_asn()==TRUE) {
-!             break;
-!          }
-!       case STATUS_MACSTATS:
-!          if (debugPrint_macStats()==TRUE) {
-!             break;
-!          }
-!       case STATUS_SCHEDULE:
-!          if(debugPrint_schedule()==TRUE) {
-!             break;
-!          }
-!       case STATUS_BACKOFF:
-!          if(debugPrint_backoff()==TRUE) {
-!             break;
-!          }
-!       case STATUS_QUEUE:
-!          if(debugPrint_queue()==TRUE) {
-!             break;
-!          }
-!       case STATUS_NEIGHBORS:
-!          if (debugPrint_neighbors()==TRUE) {
-!             break;
-!          }
-!       default:
-!          DISABLE_INTERRUPTS();
-!          openserial_vars.debugPrintCounter=0;
-!          ENABLE_INTERRUPTS();
-!    }
-!    
-!    // flush buffer
-!    uart_clearTxInterrupts();
-!    uart_clearRxInterrupts();          // clear possible pending interrupts
-!    uart_enableInterrupts();           // Enable USCI_A1 TX & RX interrupt
-!    DISABLE_INTERRUPTS();
-!    openserial_vars.mode=MODE_OUTPUT;
-!    if (openserial_vars.outputBufFilled) {
-!       uart_writeByte(openserial_vars.outputBuf[openserial_vars.outputBufIdxR++]);
-!    } else {
-!       openserial_stop();
-!    }
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! void openserial_stop() {
-!    uint8_t inputBufFill;
-!    uint8_t cmdByte;
-!    INTERRUPT_DECLARATION();
-!    
-!    DISABLE_INTERRUPTS();
-!    inputBufFill = openserial_vars.inputBufFill;
-!    ENABLE_INTERRUPTS();
-!    
-!    // disable USCI_A1 TX & RX interrupt
-!    uart_disableInterrupts();
-!    
-!    DISABLE_INTERRUPTS();
-!    openserial_vars.mode=MODE_OFF;
-!    ENABLE_INTERRUPTS();
-!    
-!    if (inputBufFill>0) {
-!       DISABLE_INTERRUPTS();
-!       cmdByte = openserial_vars.inputBuf[0];
-!       ENABLE_INTERRUPTS();
-!       switch (cmdByte) {
-!          case SERFRAME_PC2MOTE_SETROOT:
-!             idmanager_triggerAboutRoot();
-!             break;
-!          case SERFRAME_PC2MOTE_SETBRIDGE:
-!             idmanager_triggerAboutBridge();
-!             break;
-!          case SERFRAME_PC2MOTE_DATA:
-!             openbridge_triggerData();
-!             break;
-!          case SERFRAME_PC2MOTE_TRIGGERTCPINJECT:
-!             tcpinject_trigger();
-!             break;
-!          case SERFRAME_PC2MOTE_TRIGGERUDPINJECT:
-!             udpinject_trigger();
-!             break;
-!          case SERFRAME_PC2MOTE_TRIGGERICMPv6ECHO:
-!             icmpv6echo_trigger();
-!             break;
-!          case SERFRAME_PC2MOTE_TRIGGERSERIALECHO:
-!             openserial_echo(&openserial_vars.inputBuf[1],inputBufFill-1);
-!             break;   
-!          default:
-!             openserial_printError(COMPONENT_OPENSERIAL,ERR_UNSUPPORTED_COMMAND,
-!                                   (errorparameter_t)cmdByte,
-!                                   (errorparameter_t)0);
-!             DISABLE_INTERRUPTS();
-!             openserial_vars.inputBufFill = 0;
-!             ENABLE_INTERRUPTS();
-!             break;
-!       }
-!       DISABLE_INTERRUPTS();
-!       openserial_vars.inputBufFill = 0;
-!       ENABLE_INTERRUPTS();
-!    }
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_outBufferIndexes() {
-!    uint16_t temp_buffer[2];
-!    INTERRUPT_DECLARATION();
-!    DISABLE_INTERRUPTS();
-!    temp_buffer[0] = openserial_vars.outputBufIdxW;
-!    temp_buffer[1] = openserial_vars.outputBufIdxR;
-!    ENABLE_INTERRUPTS();
-!    openserial_printStatus(STATUS_OUTBUFFERINDEXES,(uint8_t*)temp_buffer,sizeof(temp_buffer));
-!    return TRUE;
-! }
-! 
-! //=========================== private =========================================
-! 
-! //===== hdlc (output)
-! 
-! /**
-! \brief Start an HDLC frame in the output buffer.
-! */
-! inline void outputHdlcOpen() {
-!    // initialize the value of the CRC
-!    openserial_vars.outputCrc                          = HDLC_CRCINIT;
-!    
-!    // write the opening HDLC flag
-!    openserial_vars.outputBuf[openserial_vars.outputBufIdxW++]     = HDLC_FLAG;
-! }
-! /**
-! \brief Add a byte to the outgoing HDLC frame being built.
-! 
-! \todo escape 0x7e and 0x7d.
-! */
-! inline void outputHdlcWrite(uint8_t b) {
-!    
-!    // iterate through CRC calculator
-!    openserial_vars.outputCrc = crcIteration(openserial_vars.outputCrc,b);
-!    
-!    // add byte to buffer
-!    if (b==HDLC_FLAG || b==HDLC_ESCAPE) {
-!       openserial_vars.outputBuf[openserial_vars.outputBufIdxW++]  = HDLC_ESCAPE;
-!       b                                               = b^HDLC_ESCAPE_MASK;
-!    }
-!    openserial_vars.outputBuf[openserial_vars.outputBufIdxW++]     = b;
-!    
-! }
-! /**
-! \brief Finalize the outgoing HDLC frame.
-! */
-! inline void outputHdlcClose() {
-!    // finalize the calculation of the CRC
-!    openserial_vars.outputCrc                          = ~openserial_vars.outputCrc;
-!    
-!    // write the CRC value
-!    openserial_vars.outputBuf[openserial_vars.outputBufIdxW++]     = (openserial_vars.outputCrc>>0)&0xff;
-!    openserial_vars.outputBuf[openserial_vars.outputBufIdxW++]     = (openserial_vars.outputCrc>>8)&0xff;
-!    
-!    // write the closing HDLC flag
-!    openserial_vars.outputBuf[openserial_vars.outputBufIdxW++]     = HDLC_FLAG;
-! }
-! 
-! //===== hdlc (input)
-! 
-! /**
-! \brief Start an HDLC frame in the input buffer.
-! */
-! inline void inputHdlcOpen() {
-!    // reset the input buffer index
-!    openserial_vars.inputBufFill                       = 0;
-!    
-!    // initialize the value of the CRC
-!    openserial_vars.inputCrc                           = HDLC_CRCINIT;
-! }
-! /**
-! \brief Add a byte to the incoming HDLC frame.
-! 
-! \todo escape 0x7e and 0x7d.
-! */
-! inline void inputHdlcWrite(uint8_t b) {
-!    if (b==HDLC_ESCAPE) {
-!       openserial_vars.inputEscaping = TRUE;
-!    } else {
-!       if (openserial_vars.inputEscaping==TRUE) {
-!          b                             = b^HDLC_ESCAPE_MASK;
-!          openserial_vars.inputEscaping = FALSE;
-!       }
-!       
-!       // add byte to input buffer
-!       openserial_vars.inputBuf[openserial_vars.inputBufFill] = b;
-!       openserial_vars.inputBufFill++;
-!       
-!       // iterate through CRC calculator
-!       openserial_vars.inputCrc = crcIteration(openserial_vars.inputCrc,b);
-!    }
-! }
-! /**
-! \brief Finalize the incoming HDLC frame.
-! */
-! inline void inputHdlcClose() {
-!    
-!    // verify the validity of the frame
-!    if (openserial_vars.inputCrc==HDLC_CRCGOOD) {
-!       // the CRC is correct
-!       
-!       // remove the CRC from the input buffer
-!       openserial_vars.inputBufFill    -= 2;
-!    } else {
-!       // the CRC is incorrect
-!       
-!       // drop the incoming fram
-!       openserial_vars.inputBufFill     = 0;
-!    }
-! }
-! 
-! //=========================== interrupt handlers ==============================
-! 
-! //executed in ISR, called from scheduler.c
-! void isr_openserial_tx() {
-!    switch (openserial_vars.mode) {
-!       case MODE_INPUT:
-!          openserial_vars.reqFrameIdx++;
-!          if (openserial_vars.reqFrameIdx<sizeof(openserial_vars.reqFrame)) {
-!             uart_writeByte(openserial_vars.reqFrame[openserial_vars.reqFrameIdx]);
-!          }
-!          break;
-!       case MODE_OUTPUT:
-!          if (openserial_vars.outputBufIdxW==openserial_vars.outputBufIdxR) {
-!             openserial_vars.outputBufFilled = FALSE;
-!          }
-!          if (openserial_vars.outputBufFilled) {
-!             uart_writeByte(openserial_vars.outputBuf[openserial_vars.outputBufIdxR++]);
-!          }
-!          break;
-!       case MODE_OFF:
-!       default:
-!          break;
-!    }
-! }
-! 
-! // executed in ISR, called from scheduler.c
-! void isr_openserial_rx() {
-!    uint8_t rxbyte;
-!    
-!    // stop if I'm not in input mode
-!    if (openserial_vars.mode!=MODE_INPUT) {
-!       return;
-!    }
-!    
-!    // read byte just received
-!    rxbyte = uart_readByte();
-!    
-!    if        (
-!                 openserial_vars.busyReceiving==FALSE  &&
-!                 openserial_vars.lastRxByte==HDLC_FLAG &&
-!                 rxbyte!=HDLC_FLAG
-!               ) {
-!       // start of frame
-!       
-!       // I'm now receiving
-!       openserial_vars.busyReceiving         = TRUE;
-!       
-!       // create the HDLC frame
-!       inputHdlcOpen();
-!       
-!       // add the byte just received
-!       inputHdlcWrite(rxbyte);
-!    } else if (
-!                 openserial_vars.busyReceiving==TRUE   &&
-!                 rxbyte!=HDLC_FLAG
-!              ) {
-!       // middle of frame
-!       
-!       // add the byte just received
-!       inputHdlcWrite(rxbyte);
-!       if (openserial_vars.inputBufFill+1>SERIAL_INPUT_BUFFER_SIZE){
-!          // input buffer overflow
-!          openserial_printError(COMPONENT_OPENSERIAL,ERR_INPUT_BUFFER_OVERFLOW,
-!                                (errorparameter_t)0,
-!                                (errorparameter_t)0);
-!          openserial_vars.inputBufFill       = 0;
-!          openserial_vars.busyReceiving      = FALSE;
-!          openserial_stop();
-!       }
-!    } else if (
-!                 openserial_vars.busyReceiving==TRUE   &&
-!                 rxbyte==HDLC_FLAG
-!               ) {
-!          // end of frame
-!          
-!          // finalize the HDLC frame
-!          inputHdlcClose();
-!          
-!          if (openserial_vars.inputBufFill==0){
-!             // invalid HDLC frame
-!             openserial_printError(COMPONENT_OPENSERIAL,ERR_INVALIDSERIALFRAME,
-!                                   (errorparameter_t)0,
-!                                   (errorparameter_t)0);
-!          
-!          }
-!          
-!          openserial_vars.busyReceiving      = FALSE;
-!          openserial_stop();
-!    }
-!    
-!    openserial_vars.lastRxByte = rxbyte;
-! }
-! 
-! 
-! //======== SERIAL ECHO =============
-! 
-! void openserial_echo(uint8_t* buf, uint8_t bufLen){
-!    // echo back what you received
-!    openserial_printData(
-!       buf,
-!       bufLen
-!    );
-! }
---- 1,648 ----
-! /**
-! \brief Definition of the "openserial" driver.
-! 
-! \author Fabien Chraim <chraim@eecs.berkeley.edu>, March 2012.
-! */
-! 
-! #include "openwsn.h"
-! #include "openserial.h"
-! #include "IEEE802154E.h"
-! #include "neighbors.h"
-! #include "res.h"
-! #include "icmpv6echo.h"
-! #include "idmanager.h"
-! #include "openqueue.h"
-! #include "tcpinject.h"
-! #include "udpinject.h"
-! #include "openbridge.h"
-! #include "leds.h"
-! #include "schedule.h"
-! #include "uart_ow.h"
-! #include "opentimers.h"
-! #include "openhdlc.h"
-! 
-! //=========================== variables =======================================
-! 
-! openserial_vars_t openserial_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! owerror_t openserial_printInfoErrorCritical(
-!    char             severity,
-!    uint8_t          calling_component,
-!    uint8_t          error_code,
-!    errorparameter_t arg1,
-!    errorparameter_t arg2
-! );
-! // HDLC output
-! void outputHdlcOpen(void);
-! void outputHdlcWrite(uint8_t b);
-! void outputHdlcClose(void);
-! // HDLC input
-! void inputHdlcOpen(void);
-! void inputHdlcWrite(uint8_t b);
-! void inputHdlcClose(void);
-! 
-! //=========================== public ==========================================
-! 
-! void openserial_init(void) {
-!    // uint16_t crc;
-! //    
-! //    // reset variable
-! //    memset(&openserial_vars,0,sizeof(openserial_vars_t));
-! //    
-! //    // admin
-! //    openserial_vars.mode                = MODE_OFF;
-! //    openserial_vars.debugPrintCounter   = 0;
-! //    
-! //    // input
-! //    openserial_vars.reqFrame[0]         = HDLC_FLAG;
-! //    openserial_vars.reqFrame[1]         = SERFRAME_MOTE2PC_REQUEST;
-! //    crc = HDLC_CRCINIT;
-! //    crc = crcIteration(crc,openserial_vars.reqFrame[1]);
-! //    crc = ~crc;
-! //    openserial_vars.reqFrame[2]         = (crc>>0)&0xff;
-! //    openserial_vars.reqFrame[3]         = (crc>>8)&0xff;
-! //    openserial_vars.reqFrame[4]         = HDLC_FLAG;
-! //    openserial_vars.reqFrameIdx         = 0;
-! //    openserial_vars.lastRxByte          = HDLC_FLAG;
-! //    openserial_vars.busyReceiving       = FALSE;
-! //    openserial_vars.inputEscaping       = FALSE;
-! //    openserial_vars.inputBufFill        = 0;
-! //    
-! //    // ouput
-! //    openserial_vars.outputBufFilled     = FALSE;
-! //    openserial_vars.outputBufIdxR       = 0;
-! //    openserial_vars.outputBufIdxW       = 0;
-! //    
-! //    // set callbacks
-! //    uart_setCallbacks(isr_openserial_tx,
-! //                      isr_openserial_rx);
-! }
-! 
-! owerror_t openserial_printStatus(uint8_t statusElement,uint8_t* buffer, uint8_t length) {
-!    // uint8_t i;
-! //    INTERRUPT_DECLARATION();
-! //    
-! //    DISABLE_INTERRUPTS();
-! //    openserial_vars.outputBufFilled  = TRUE;
-! //    outputHdlcOpen();
-! //    outputHdlcWrite(SERFRAME_MOTE2PC_STATUS);
-! //    outputHdlcWrite(idmanager_getMyID(ADDR_16B)->addr_16b[0]);
-! //    outputHdlcWrite(idmanager_getMyID(ADDR_16B)->addr_16b[1]);
-! //    outputHdlcWrite(statusElement);
-! //    for (i=0;i<length;i++){
-! //       outputHdlcWrite(buffer[i]);
-! //    }
-! //    outputHdlcClose();
-! //    ENABLE_INTERRUPTS();
-!    
-!    return E_SUCCESS;
-! }
-! 
-! owerror_t openserial_printInfoErrorCritical(
-!       char             severity,
-!       uint8_t          calling_component,
-!       uint8_t          error_code,
-!       errorparameter_t arg1,
-!       errorparameter_t arg2
-!    ) {
-!    // INTERRUPT_DECLARATION();
-! //    
-! //    DISABLE_INTERRUPTS();
-! //    openserial_vars.outputBufFilled  = TRUE;
-! //    outputHdlcOpen();
-! //    outputHdlcWrite(severity);
-! //    outputHdlcWrite(idmanager_getMyID(ADDR_16B)->addr_16b[0]);
-! //    outputHdlcWrite(idmanager_getMyID(ADDR_16B)->addr_16b[1]);
-! //    outputHdlcWrite(calling_component);
-! //    outputHdlcWrite(error_code);
-! //    outputHdlcWrite((uint8_t)((arg1 & 0xff00)>>8));
-! //    outputHdlcWrite((uint8_t) (arg1 & 0x00ff));
-! //    outputHdlcWrite((uint8_t)((arg2 & 0xff00)>>8));
-! //    outputHdlcWrite((uint8_t) (arg2 & 0x00ff));
-! //    outputHdlcClose();
-! //    ENABLE_INTERRUPTS();
-!    
-!    return E_SUCCESS;
-! }
-! 
-! owerror_t openserial_printData(uint8_t* buffer, uint8_t length) {
-!     (void)length;
-!     puts(buffer);
-!    // uint8_t  i;
-! //    uint8_t  asn[5];
-! //    INTERRUPT_DECLARATION();
-! //    
-! //    // retrieve ASN
-! //    ieee154e_getAsn(asn);// byte01,byte23,byte4
-! //    
-! //    DISABLE_INTERRUPTS();
-! //    openserial_vars.outputBufFilled  = TRUE;
-! //    outputHdlcOpen();
-! //    outputHdlcWrite(SERFRAME_MOTE2PC_DATA);
-! //    outputHdlcWrite(idmanager_getMyID(ADDR_16B)->addr_16b[1]);
-! //    outputHdlcWrite(idmanager_getMyID(ADDR_16B)->addr_16b[0]);
-! //    outputHdlcWrite(asn[0]);
-! //    outputHdlcWrite(asn[1]);
-! //    outputHdlcWrite(asn[2]);
-! //    outputHdlcWrite(asn[3]);
-! //    outputHdlcWrite(asn[4]);
-! //    for (i=0;i<length;i++){
-! //       outputHdlcWrite(buffer[i]);
-! //    }
-! //    outputHdlcClose();
-! //    ENABLE_INTERRUPTS();
-!    
-!    return E_SUCCESS;
-! }
-! 
-! owerror_t openserial_printInfo(uint8_t calling_component, uint8_t error_code,
-!                               errorparameter_t arg1,
-!                               errorparameter_t arg2) {
-!    return openserial_printInfoErrorCritical(
-!       SERFRAME_MOTE2PC_INFO,
-!       calling_component,
-!       error_code,
-!       arg1,
-!       arg2
-!    );
-! }
-! 
-! owerror_t openserial_printError(uint8_t calling_component, uint8_t error_code,
-!                               errorparameter_t arg1,
-!                               errorparameter_t arg2) {
-!    // blink error LED, this is serious
-!    leds_error_toggle();
-!    
-!    return openserial_printInfoErrorCritical(
-!       SERFRAME_MOTE2PC_ERROR,
-!       calling_component,
-!       error_code,
-!       arg1,
-!       arg2
-!    );
-! }
-! 
-! owerror_t openserial_printCritical(uint8_t calling_component, uint8_t error_code,
-!                               errorparameter_t arg1,
-!                               errorparameter_t arg2) {
-!    // blink error LED, this is serious
-!     leds_error_blink();
-! //    
-! //    // schedule for the mote to reboot in 10s
-! //    opentimers_start(10000,
-! //                     TIMER_ONESHOT,TIME_MS,
-! //                     board_reset);
-!    
-!    return openserial_printInfoErrorCritical(
-!       SERFRAME_MOTE2PC_CRITICAL,
-!       calling_component,
-!       error_code,
-!       arg1,
-!       arg2
-!    );
-! }
-! 
-! uint8_t openserial_getNumDataBytes(void) {
-!     uint8_t inputBufFill;
-!  //   INTERRUPT_DECLARATION();
-!  //   
-!  //   DISABLE_INTERRUPTS();
-!  //   inputBufFill = openserial_vars.inputBufFill;
-!  //   ENABLE_INTERRUPTS();
-! 
-!    return inputBufFill-1; // removing the command byte
-! }
-! 
-! uint8_t openserial_getInputBuffer(uint8_t* bufferToWrite, uint8_t maxNumBytes) {
-!    uint8_t numBytesWritten;
-!    // uint8_t inputBufFill;
-! //    INTERRUPT_DECLARATION();
-! //    
-! //    DISABLE_INTERRUPTS();
-! //    inputBufFill = openserial_vars.inputBufFill;
-! //    ENABLE_INTERRUPTS();
-! //    
-! //    if (maxNumBytes<inputBufFill-1) {
-! //       openserial_printError(COMPONENT_OPENSERIAL,ERR_GETDATA_ASKS_TOO_FEW_BYTES,
-! //                             (errorparameter_t)maxNumBytes,
-! //                             (errorparameter_t)inputBufFill-1);
-! //       numBytesWritten = 0;
-! //    } else {
-! //       numBytesWritten = inputBufFill-1;
-! //       memcpy(bufferToWrite,&(openserial_vars.inputBuf[1]),numBytesWritten);
-! //    }
-!     
-!    return numBytesWritten;
-! }
-! 
-! void openserial_startInput() {
-!    // INTERRUPT_DECLARATION();
-! //    
-! //    if (openserial_vars.inputBufFill>0) {
-! //       openserial_printError(COMPONENT_OPENSERIAL,ERR_INPUTBUFFER_LENGTH,
-! //                             (errorparameter_t)openserial_vars.inputBufFill,
-! //                             (errorparameter_t)0);
-! //       DISABLE_INTERRUPTS();
-! //       openserial_vars.inputBufFill=0;
-! //       ENABLE_INTERRUPTS();
-! //    }
-! //    
-! //    uart_clearTxInterrupts();
-! //    uart_clearRxInterrupts();      // clear possible pending interrupts
-! //    uart_enableInterrupts();       // Enable USCI_A1 TX & RX interrupt
-! //    
-! //    DISABLE_INTERRUPTS();
-! //    openserial_vars.busyReceiving  = FALSE;
-! //    openserial_vars.mode           = MODE_INPUT;
-! //    openserial_vars.reqFrameIdx    = 0;
-! // #ifdef FASTSIM
-! //    uart_writeBufferByLen_FASTSIM(
-! //       openserial_vars.reqFrame,
-! //       sizeof(openserial_vars.reqFrame)
-! //    );
-! //    openserial_vars.reqFrameIdx = sizeof(openserial_vars.reqFrame);
-! // #else
-! //    uart_writeByte(openserial_vars.reqFrame[openserial_vars.reqFrameIdx]);
-! // #endif
-! //    ENABLE_INTERRUPTS();
-!  }
-!  
-! void openserial_startOutput(void) {
-! //    //schedule a task to get new status in the output buffer
-! //    uint8_t debugPrintCounter;
-! //    
-! //    INTERRUPT_DECLARATION();
-! //    DISABLE_INTERRUPTS();
-! //    openserial_vars.debugPrintCounter = (openserial_vars.debugPrintCounter+1)%STATUS_MAX;
-! //    debugPrintCounter = openserial_vars.debugPrintCounter;
-! //    ENABLE_INTERRUPTS();
-! //    
-! //    // print debug information
-! //    switch (debugPrintCounter) {
-! //       case STATUS_ISSYNC:
-! //          if (debugPrint_isSync()==TRUE) {
-! //             break;
-! //          }
-! //       case STATUS_ID:
-! //          if (debugPrint_id()==TRUE) {
-! //             break;
-! //          }
-! //       case STATUS_DAGRANK:
-! //          if (debugPrint_myDAGrank()==TRUE) {
-! //             break;
-! //          }
-! //       case STATUS_OUTBUFFERINDEXES:
-! //          if (debugPrint_outBufferIndexes()==TRUE) {
-! //             break;
-! //          }
-! //       case STATUS_ASN:
-! //          if (debugPrint_asn()==TRUE) {
-! //             break;
-! //          }
-! //       case STATUS_MACSTATS:
-! //          if (debugPrint_macStats()==TRUE) {
-! //             break;
-! //          }
-! //       case STATUS_SCHEDULE:
-! //          if(debugPrint_schedule()==TRUE) {
-! //             break;
-! //          }
-! //       case STATUS_BACKOFF:
-! //          if(debugPrint_backoff()==TRUE) {
-! //             break;
-! //          }
-! //       case STATUS_QUEUE:
-! //          if(debugPrint_queue()==TRUE) {
-! //             break;
-! //          }
-! //       case STATUS_NEIGHBORS:
-! //          if (debugPrint_neighbors()==TRUE) {
-! //             break;
-! //          }
-! //       default:
-! //          DISABLE_INTERRUPTS();
-! //          openserial_vars.debugPrintCounter=0;
-! //          ENABLE_INTERRUPTS();
-! //    }
-! //    
-! //    // flush buffer
-! //    uart_clearTxInterrupts();
-! //    uart_clearRxInterrupts();          // clear possible pending interrupts
-! //    uart_enableInterrupts();           // Enable USCI_A1 TX & RX interrupt
-! //    DISABLE_INTERRUPTS();
-! //    openserial_vars.mode=MODE_OUTPUT;
-! //    if (openserial_vars.outputBufFilled) {
-! // #ifdef FASTSIM
-! //       uart_writeCircularBuffer_FASTSIM(
-! //          openserial_vars.outputBuf,
-! //          &openserial_vars.outputBufIdxR,
-! //          &openserial_vars.outputBufIdxW
-! //       );
-! // #else
-! //       uart_writeByte(openserial_vars.outputBuf[openserial_vars.outputBufIdxR++]);
-! // #endif
-! //    } else {
-! //       openserial_stop();
-! //    }
-! //    ENABLE_INTERRUPTS();
-! }
-! 
-! void openserial_stop(void) {
-!    // uint8_t inputBufFill;
-!    // uint8_t cmdByte;
-! //    bool busyReceiving;
-! //    INTERRUPT_DECLARATION();
-! //    
-! //    DISABLE_INTERRUPTS();
-! //    busyReceiving = openserial_vars.busyReceiving;
-! //    inputBufFill = openserial_vars.inputBufFill;
-! //    ENABLE_INTERRUPTS();
-! //    
-! //    // disable USCI_A1 TX & RX interrupt
-! //    uart_disableInterrupts();
-! //    
-! //    DISABLE_INTERRUPTS();
-! //    openserial_vars.mode=MODE_OFF;
-! //    ENABLE_INTERRUPTS();
-! //    //the inputBuffer has to be reset if it is not reset where the data is read.
-! //    //or the function openserial_getInputBuffer is called (which resets the buffer)
-! //    if (busyReceiving==TRUE){
-! //       openserial_printError(COMPONENT_OPENSERIAL,ERR_BUSY_RECEIVING,
-! //                                   (errorparameter_t)0,
-! //                                   (errorparameter_t)inputBufFill);
-! //    }
-! //    
-! //    if (busyReceiving == FALSE && inputBufFill>0) {
-! //       DISABLE_INTERRUPTS();
-! //       cmdByte = openserial_vars.inputBuf[0];
-! //       ENABLE_INTERRUPTS();
-! //       switch (cmdByte) {
-! //          case SERFRAME_PC2MOTE_SETROOT:
-! //             idmanager_triggerAboutRoot();
-! //             break;
-! //          case SERFRAME_PC2MOTE_SETBRIDGE:
-! //             idmanager_triggerAboutBridge();
-! //             break;
-! //          case SERFRAME_PC2MOTE_DATA:
-! //             openbridge_triggerData();
-! //             break;
-! //          case SERFRAME_PC2MOTE_TRIGGERTCPINJECT:
-! //             tcpinject_trigger();
-! //             break;
-! //          case SERFRAME_PC2MOTE_TRIGGERUDPINJECT:
-! //             udpinject_trigger();
-! //             break;
-! //          case SERFRAME_PC2MOTE_TRIGGERICMPv6ECHO:
-! //             icmpv6echo_trigger();
-! //             break;
-! //          case SERFRAME_PC2MOTE_TRIGGERSERIALECHO:
-! //             //echo function must reset input buffer after reading the data.
-! //             openserial_echo(&openserial_vars.inputBuf[1],inputBufFill-1);
-! //             break;   
-! //          default:
-! //             openserial_printError(COMPONENT_OPENSERIAL,ERR_UNSUPPORTED_COMMAND,
-! //                                   (errorparameter_t)cmdByte,
-! //                                   (errorparameter_t)0);
-! //             //reset here as it is not being reset in any other callback
-! //             DISABLE_INTERRUPTS();
-! //             openserial_vars.inputBufFill = 0;
-! //             ENABLE_INTERRUPTS();
-! //             break;
-! //       }
-! //    }
-! //    
-! //    DISABLE_INTERRUPTS();
-! //    openserial_vars.inputBufFill  = 0;
-! //    openserial_vars.busyReceiving = FALSE;
-! //    ENABLE_INTERRUPTS();
-! }
-! 
-! /**
-! \brief Trigger this module to print status information, over serial.
-! 
-! debugPrint_* functions are used by the openserial module to continuously print
-! status information about several modules in the OpenWSN stack.
-! 
-! \returns TRUE if this function printed something, FALSE otherwise.
-! */
-! bool debugPrint_outBufferIndexes(void) {
-!    // uint16_t temp_buffer[2];
-! //    INTERRUPT_DECLARATION();
-! //    DISABLE_INTERRUPTS();
-! //    temp_buffer[0] = openserial_vars.outputBufIdxW;
-! //    temp_buffer[1] = openserial_vars.outputBufIdxR;
-! //    ENABLE_INTERRUPTS();
-! //    openserial_printStatus(STATUS_OUTBUFFERINDEXES,(uint8_t*)temp_buffer,sizeof(temp_buffer));
-!    return TRUE;
-! }
-! 
-! //=========================== private =========================================
-! 
-! //===== hdlc (output)
-! 
-! /**
-! \brief Start an HDLC frame in the output buffer.
-! */
-! // inline void outputHdlcOpen(void) {
-! //    // initialize the value of the CRC
-! //    openserial_vars.outputCrc                          = HDLC_CRCINIT;
-! //    
-! //    // write the opening HDLC flag
-! //    openserial_vars.outputBuf[openserial_vars.outputBufIdxW++]     = HDLC_FLAG;
-! // }
-! /**
-! \brief Add a byte to the outgoing HDLC frame being built.
-! */
-! // inline void outputHdlcWrite(uint8_t b) {
-! //    
-! //    // iterate through CRC calculator
-! //    openserial_vars.outputCrc = crcIteration(openserial_vars.outputCrc,b);
-! //    
-! //    // add byte to buffer
-! //    if (b==HDLC_FLAG || b==HDLC_ESCAPE) {
-! //       openserial_vars.outputBuf[openserial_vars.outputBufIdxW++]  = HDLC_ESCAPE;
-! //       b                                               = b^HDLC_ESCAPE_MASK;
-! //    }
-! //    openserial_vars.outputBuf[openserial_vars.outputBufIdxW++]     = b;
-! //    
-! // }
-! /**
-! \brief Finalize the outgoing HDLC frame.
-! */
-! // inline void outputHdlcClose(void) {
-! //    uint16_t   finalCrc;
-! //     
-! //    // finalize the calculation of the CRC
-! //    finalCrc   = ~openserial_vars.outputCrc;
-! //    
-! //    // write the CRC value
-! //    outputHdlcWrite((finalCrc>>0)&0xff);
-! //    outputHdlcWrite((finalCrc>>8)&0xff);
-! //    
-! //    // write the closing HDLC flag
-! //    openserial_vars.outputBuf[openserial_vars.outputBufIdxW++]   = HDLC_FLAG;
-! // }
-! 
-! //===== hdlc (input)
-! 
-! /**
-! \brief Start an HDLC frame in the input buffer.
-! */
-! // inline void inputHdlcOpen(void) {
-! //    // reset the input buffer index
-! //    openserial_vars.inputBufFill                       = 0;
-! //    
-! //    // initialize the value of the CRC
-! //    openserial_vars.inputCrc                           = HDLC_CRCINIT;
-! // }
-! /**
-! \brief Add a byte to the incoming HDLC frame.
-! */
-! // inline void inputHdlcWrite(uint8_t b) {
-! //    if (b==HDLC_ESCAPE) {
-! //       openserial_vars.inputEscaping = TRUE;
-! //    } else {
-! //       if (openserial_vars.inputEscaping==TRUE) {
-! //          b                             = b^HDLC_ESCAPE_MASK;
-! //          openserial_vars.inputEscaping = FALSE;
-! //       }
-! //       
-! //       // add byte to input buffer
-! //       openserial_vars.inputBuf[openserial_vars.inputBufFill] = b;
-! //       openserial_vars.inputBufFill++;
-! //       
-! //       // iterate through CRC calculator
-! //       openserial_vars.inputCrc = crcIteration(openserial_vars.inputCrc,b);
-! //    }
-! // }
-! /**
-! \brief Finalize the incoming HDLC frame.
-! */
-! // inline void inputHdlcClose(void) {
-! //       
-! //    // verify the validity of the frame
-! //    if (openserial_vars.inputCrc==HDLC_CRCGOOD) {
-! //       // the CRC is correct
-! //       
-! //       // remove the CRC from the input buffer
-! //       openserial_vars.inputBufFill    -= 2;
-! //    } else {
-! //       // the CRC is incorrect
-! //       
-! //       // drop the incoming fram
-! //       openserial_vars.inputBufFill     = 0;
-! //     }
-! // }
-! 
-! //=========================== interrupt handlers ==============================
-! 
-! // executed in ISR, called from scheduler.c
-! // void isr_openserial_tx(void) {
-! //    switch (openserial_vars.mode) {
-! //       case MODE_INPUT:
-! //          openserial_vars.reqFrameIdx++;
-! //          if (openserial_vars.reqFrameIdx<sizeof(openserial_vars.reqFrame)) {
-! //             uart_writeByte(openserial_vars.reqFrame[openserial_vars.reqFrameIdx]);
-! //          }
-! //          break;
-! //       case MODE_OUTPUT:
-! //          if (openserial_vars.outputBufIdxW==openserial_vars.outputBufIdxR) {
-! //             openserial_vars.outputBufFilled = FALSE;
-! //          }
-! //          if (openserial_vars.outputBufFilled) {
-! //             uart_writeByte(openserial_vars.outputBuf[openserial_vars.outputBufIdxR++]);
-! //          }
-! //          break;
-! //       case MODE_OFF:
-! //       default:
-! //          break;
-! //    }
-! // }
-! 
-! // executed in ISR, called from scheduler.c
-! // void isr_openserial_rx(void) {
-! //    uint8_t rxbyte;
-! //    uint8_t inputBufFill;
-! //    
-! //    // stop if I'm not in input mode
-! //    if (openserial_vars.mode!=MODE_INPUT) {
-! //       return;
-! //    }
-! //    
-! //    // read byte just received
-! //    rxbyte = uart_readByte();
-! //    //keep lenght
-! //    inputBufFill=openserial_vars.inputBufFill;
-! //    
-! //    if        (
-! //                 openserial_vars.busyReceiving==FALSE  &&
-! //                 openserial_vars.lastRxByte==HDLC_FLAG &&
-! //                 rxbyte!=HDLC_FLAG
-! //               ) {
-! //       // start of frame
-! //       
-! //       // I'm now receiving
-! //       openserial_vars.busyReceiving         = TRUE;
-! //       
-! //       // create the HDLC frame
-! //       inputHdlcOpen();
-! //       
-! //       // add the byte just received
-! //       inputHdlcWrite(rxbyte);
-! //    } else if (
-! //                 openserial_vars.busyReceiving==TRUE   &&
-! //                 rxbyte!=HDLC_FLAG
-! //              ) {
-! //       // middle of frame
-! //       
-! //       // add the byte just received
-! //       inputHdlcWrite(rxbyte);
-! //       if (openserial_vars.inputBufFill+1>SERIAL_INPUT_BUFFER_SIZE){
-! //          // input buffer overflow
-! //          openserial_printError(COMPONENT_OPENSERIAL,ERR_INPUT_BUFFER_OVERFLOW,
-! //                                (errorparameter_t)0,
-! //                                (errorparameter_t)0);
-! //          openserial_vars.inputBufFill       = 0;
-! //          openserial_vars.busyReceiving      = FALSE;
-! //          openserial_stop();
-! //       }
-! //    } else if (
-! //                 openserial_vars.busyReceiving==TRUE   &&
-! //                 rxbyte==HDLC_FLAG
-! //               ) {
-! //          // end of frame
-! //          
-! //          // finalize the HDLC frame
-! //          inputHdlcClose();
-! //          
-! //          if (openserial_vars.inputBufFill==0){
-! //             // invalid HDLC frame
-! //             openserial_printError(COMPONENT_OPENSERIAL,ERR_WRONG_CRC_INPUT,
-! //                                   (errorparameter_t)inputBufFill,
-! //                                   (errorparameter_t)0);
-! //          
-! //          }
-! //          
-! //          openserial_vars.busyReceiving      = FALSE;
-! //          openserial_stop();
-! //    }
-! //    
-! //    openserial_vars.lastRxByte = rxbyte;
-! //  }
-! 
-! //======== SERIAL ECHO =============
-! 
-! void openserial_echo(uint8_t* buf, uint8_t bufLen){
-!    INTERRUPT_DECLARATION();
-!    // echo back what you received
-!    openserial_printData(
-!       buf,
-!       bufLen
-!    );
-!    
-!     DISABLE_INTERRUPTS();
-!     openserial_vars.inputBufFill = 0;
-!     ENABLE_INTERRUPTS();
-! }
-diff -crB openwsn/openserial.h ../../../sys/net/openwsn/openserial.h
-*** openwsn/openserial.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/openserial.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,94 ****
-! /**
-! \brief Declaration of the "openserial" driver.
-! 
-! \author Fabien Chraim <chraim@eecs.berkeley.edu>, March 2012.
-! */
-! 
-! #ifndef __OPENSERIAL_H
-! #define __OPENSERIAL_H
-! 
-! #include "openwsn.h"
-! 
-! /**
-! \addtogroup cross-layers
-! \{
-! \addtogroup OpenSerial
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! /**
-! \brief Number of bytes of the serial output buffer, in bytes.
-! 
-! \warning should be exactly 256 so wrap-around on the index does not require
-!          the use of a slow modulo operator.
-! */
-! #define SERIAL_OUTPUT_BUFFER_SIZE 256 // leave at 256!
-! 
-! /**
-! \brief Number of bytes of the serial input buffer, in bytes.
-! 
-! \warning Do not pick a number greater than 255, since its filling level is
-!          encoded by a single byte in the code.
-! */
-! #define SERIAL_INPUT_BUFFER_SIZE  200
-! 
-! /// Modes of the openserial module.
-! enum {
-!    MODE_OFF    = 0, ///< The module is off, no serial activity.
-!    MODE_INPUT  = 1, ///< The serial is listening or receiving bytes.
-!    MODE_OUTPUT = 2  ///< The serial is transmitting bytes.
-! };
-! 
-! // frames sent mote->PC
-! #define SERFRAME_MOTE2PC_DATA               ((uint8_t)'D')
-! #define SERFRAME_MOTE2PC_STATUS             ((uint8_t)'S')
-! #define SERFRAME_MOTE2PC_INFO               ((uint8_t)'I')
-! #define SERFRAME_MOTE2PC_ERROR              ((uint8_t)'E')
-! #define SERFRAME_MOTE2PC_CRITICAL           ((uint8_t)'C')
-! #define SERFRAME_MOTE2PC_REQUEST            ((uint8_t)'R')
-! 
-! // frames sent PC->mote
-! #define SERFRAME_PC2MOTE_SETROOT            ((uint8_t)'R')
-! #define SERFRAME_PC2MOTE_SETBRIDGE          ((uint8_t)'B')
-! #define SERFRAME_PC2MOTE_DATA               ((uint8_t)'D')
-! #define SERFRAME_PC2MOTE_TRIGGERTCPINJECT   ((uint8_t)'T')
-! #define SERFRAME_PC2MOTE_TRIGGERUDPINJECT   ((uint8_t)'U')
-! #define SERFRAME_PC2MOTE_TRIGGERICMPv6ECHO  ((uint8_t)'E')
-! #define SERFRAME_PC2MOTE_TRIGGERSERIALECHO  ((uint8_t)'S')
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    openserial_init();
-! error_t openserial_printStatus(uint8_t statusElement, uint8_t* buffer, uint16_t length);
-! error_t openserial_printInfo(uint8_t calling_component, uint8_t error_code,
-!                               errorparameter_t arg1,
-!                               errorparameter_t arg2);
-! error_t openserial_printError(uint8_t calling_component, uint8_t error_code,
-!                               errorparameter_t arg1,
-!                               errorparameter_t arg2);
-! error_t openserial_printCritical(uint8_t calling_component, uint8_t error_code,
-!                               errorparameter_t arg1,
-!                               errorparameter_t arg2);
-! error_t openserial_printData(uint8_t* buffer, uint8_t length);
-! uint8_t openserial_getNumDataBytes();
-! uint8_t openserial_getInputBuffer(uint8_t* bufferToWrite, uint8_t maxNumBytes);
-! void    openserial_startInput();
-! void    openserial_startOutput();
-! void    openserial_stop();
-! bool    debugPrint_outBufferIndexes();
-! void    openserial_echo(uint8_t* but, uint8_t bufLen);
-! 
-! // interrupt handlers
-! void    isr_openserial_rx();
-! void    isr_openserial_tx();
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
---- 1,117 ----
-! /**
-! \brief Declaration of the "openserial" driver.
-! 
-! \author Fabien Chraim <chraim@eecs.berkeley.edu>, March 2012.
-! */
-! 
-! #ifndef __OPENSERIAL_H
-! #define __OPENSERIAL_H
-! 
-! #include "openwsn.h"
-! 
-! /**
-! \addtogroup drivers
-! \{
-! \addtogroup OpenSerial
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! /**
-! \brief Number of bytes of the serial output buffer, in bytes.
-! 
-! \warning should be exactly 256 so wrap-around on the index does not require
-!          the use of a slow modulo operator.
-! */
-! #define SERIAL_OUTPUT_BUFFER_SIZE 256 // leave at 256!
-! 
-! /**
-! \brief Number of bytes of the serial input buffer, in bytes.
-! 
-! \warning Do not pick a number greater than 255, since its filling level is
-!          encoded by a single byte in the code.
-! */
-! #define SERIAL_INPUT_BUFFER_SIZE  200
-! 
-! /// Modes of the openserial module.
-! enum {
-!    MODE_OFF    = 0, ///< The module is off, no serial activity.
-!    MODE_INPUT  = 1, ///< The serial is listening or receiving bytes.
-!    MODE_OUTPUT = 2  ///< The serial is transmitting bytes.
-! };
-! 
-! // frames sent mote->PC
-! #define SERFRAME_MOTE2PC_DATA               ((uint8_t)'D')
-! #define SERFRAME_MOTE2PC_STATUS             ((uint8_t)'S')
-! #define SERFRAME_MOTE2PC_INFO               ((uint8_t)'I')
-! #define SERFRAME_MOTE2PC_ERROR              ((uint8_t)'E')
-! #define SERFRAME_MOTE2PC_CRITICAL           ((uint8_t)'C')
-! #define SERFRAME_MOTE2PC_REQUEST            ((uint8_t)'R')
-! 
-! // frames sent PC->mote
-! #define SERFRAME_PC2MOTE_SETROOT            ((uint8_t)'R')
-! #define SERFRAME_PC2MOTE_SETBRIDGE          ((uint8_t)'B')
-! #define SERFRAME_PC2MOTE_DATA               ((uint8_t)'D')
-! #define SERFRAME_PC2MOTE_TRIGGERTCPINJECT   ((uint8_t)'T')
-! #define SERFRAME_PC2MOTE_TRIGGERUDPINJECT   ((uint8_t)'U')
-! #define SERFRAME_PC2MOTE_TRIGGERICMPv6ECHO  ((uint8_t)'E')
-! #define SERFRAME_PC2MOTE_TRIGGERSERIALECHO  ((uint8_t)'S')
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    // admin
-!    uint8_t    mode;
-!    uint8_t    debugPrintCounter;
-!    // input
-!    uint8_t    reqFrame[1+1+2+1]; // flag (1B), command (2B), CRC (2B), flag (1B)
-!    uint8_t    reqFrameIdx;
-!    uint8_t    lastRxByte;
-!    bool       busyReceiving;
-!    bool       inputEscaping;
-!    uint16_t   inputCrc;
-!    uint8_t    inputBufFill;
-!    uint8_t    inputBuf[SERIAL_INPUT_BUFFER_SIZE];
-!    // output
-!    bool       outputBufFilled;
-!    uint16_t   outputCrc;
-!    uint8_t    outputBufIdxW;
-!    uint8_t    outputBufIdxR;
-!    uint8_t    outputBuf[SERIAL_OUTPUT_BUFFER_SIZE];
-! } openserial_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! void    openserial_init(void);
-! owerror_t openserial_printStatus(uint8_t statusElement, uint8_t* buffer, uint8_t length);
-! owerror_t openserial_printInfo(uint8_t calling_component, uint8_t error_code,
-!                               errorparameter_t arg1,
-!                               errorparameter_t arg2);
-! owerror_t openserial_printError(uint8_t calling_component, uint8_t error_code,
-!                               errorparameter_t arg1,
-!                               errorparameter_t arg2);
-! owerror_t openserial_printCritical(uint8_t calling_component, uint8_t error_code,
-!                               errorparameter_t arg1,
-!                               errorparameter_t arg2);
-! owerror_t openserial_printData(uint8_t* buffer, uint8_t length);
-! uint8_t openserial_getNumDataBytes(void);
-! uint8_t openserial_getInputBuffer(uint8_t* bufferToWrite, uint8_t maxNumBytes);
-! void    openserial_startInput(void);
-! void    openserial_startOutput(void);
-! void    openserial_stop(void);
-! bool    debugPrint_outBufferIndexes(void);
-! void    openserial_echo(uint8_t* but, uint8_t bufLen);
-! 
-! // interrupt handlers
-! void    isr_openserial_rx(void);
-! void    isr_openserial_tx(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-  #endif
-\ No newline at end of file
-diff -crB openwsn/opentimers.c ../../../sys/net/openwsn/opentimers.c
-*** openwsn/opentimers.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/opentimers.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,284 ****
-! /**
-! \brief Definition of the "opentimers" driver.
-! 
-! This driver uses a single hardware timer, which it virtualizes to support
-! at most MAX_NUM_TIMERS timers.
-! 
-! \author Xavi Vilajosana <xvilajosana@eecs.berkeley.edu>, March 2012.
-!  */
-! 
-! #include "openwsn.h"
-! #include "opentimers.h"
-! #include "bsp_timer.h"
-! #include "leds.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    opentimers_t         timersBuf[MAX_NUM_TIMERS];
-!    bool                 running;
-!    PORT_TIMER_WIDTH     currentTimeout; // current timeout, in ticks
-! } opentimers_vars_t;
-! 
-! opentimers_vars_t opentimers_vars;
-! //uint32_t counter; //counts the elapsed time.
-! 
-! //=========================== prototypes ======================================
-! 
-! void opentimers_timer_callback();
-! 
-! //=========================== public ==========================================
-! 
-! /**
-! \brief Initialize this module.
-! 
-! Initializes data structures and hardware timer.
-!  */
-! void opentimers_init(){
-!    uint8_t i;
-! 
-!    // initialize local variables
-!    opentimers_vars.running=FALSE;
-!    for (i=0;i<MAX_NUM_TIMERS;i++) {
-!       opentimers_vars.timersBuf[i].period_ticks       = 0;
-!       opentimers_vars.timersBuf[i].ticks_remaining    = 0;
-!       opentimers_vars.timersBuf[i].type               = TIMER_ONESHOT;
-!       opentimers_vars.timersBuf[i].isrunning          = FALSE;
-!       opentimers_vars.timersBuf[i].callback           = NULL;
-!       opentimers_vars.timersBuf[i].hasExpired         = FALSE;
-!    }
-! 
-!    // set callback for bsp_timers module
-!    bsp_timer_set_callback(opentimers_timer_callback);
-! }
-! 
-! /**
-! \brief Start a timer.
-! 
-! The timer works as follows:
-! - currentTimeout is the number of ticks before the next timer expires.
-! - if a new timer is inserted, we check that it is not earlier than the soonest
-! - if it is earliest, replace it
-! - if not, insert it in the list
-! 
-! \param duration Number milli-seconds after which the timer will fire.
-! \param type     The type of timer, indicating whether it's a one-shot or a period timer.
-! \param callback The function to call when the timer fires.
-! 
-! \returns The id of the timer (which serves as a handler to stop it) if the
-!          timer could be started.
-! \returns TOO_MANY_TIMERS_ERROR if the timer could NOT be started.
-!  */
-! opentimer_id_t opentimers_start(uint32_t duration, timer_type_t type, time_type_t timetype, opentimers_cbt callback) {
-! 
-!    uint8_t  id;
-! 
-!    // find an unused timer
-!    for (id=0; id<MAX_NUM_TIMERS && opentimers_vars.timersBuf[id].isrunning==TRUE; id++);
-! 
-!    if (id<MAX_NUM_TIMERS) {
-!       // we found an unused timer
-! 
-!       // register the timer
-!       if (timetype==TIME_MS) {
-!          opentimers_vars.timersBuf[id].period_ticks      = duration*PORT_TICS_PER_MS;
-!          opentimers_vars.timersBuf[id].wraps_remaining   = (duration*PORT_TICS_PER_MS/MAX_TICKS_IN_SINGLE_CLOCK);//65535=maxValue of uint16_t
-!       } else if (timetype==TIME_TICS) {
-!          opentimers_vars.timersBuf[id].period_ticks      = duration;
-!          opentimers_vars.timersBuf[id].wraps_remaining   = (duration/MAX_TICKS_IN_SINGLE_CLOCK);//65535=maxValue of uint16_t  
-!       } else {
-!          while (1); //error
-!       }
-!       //if the number of ticks falls below a 16bit value, use it, otherwise set to max 16bit value
-!       if(opentimers_vars.timersBuf[id].wraps_remaining==0){
-!          if (timetype==TIME_MS){ 
-!             opentimers_vars.timersBuf[id].ticks_remaining   = duration*PORT_TICS_PER_MS;
-!          } else if (timetype==TIME_TICS) {
-!             opentimers_vars.timersBuf[id].ticks_remaining   = duration;
-!          } else {
-!             // this should never happpen!
-!    
-!             // we can not print from within the drivers. Instead:
-!             // blink the error LED
-!             leds_error_blink();
-!             // reset the board
-!             board_reset();
-!          }
-!       }else{
-!          opentimers_vars.timersBuf[id].ticks_remaining = MAX_TICKS_IN_SINGLE_CLOCK;
-!       }                                                   
-!       opentimers_vars.timersBuf[id].type              = type;
-!       opentimers_vars.timersBuf[id].isrunning         = TRUE;
-!       opentimers_vars.timersBuf[id].callback          = callback;
-!       opentimers_vars.timersBuf[id].hasExpired        = FALSE;
-! 
-!       // re-schedule the running timer, if needed
-!       if (
-!             (opentimers_vars.running==FALSE)
-!             ||
-!             (opentimers_vars.timersBuf[id].ticks_remaining < opentimers_vars.currentTimeout)
-!       ) {  
-!          opentimers_vars.currentTimeout            = opentimers_vars.timersBuf[id].ticks_remaining;
-!          if (opentimers_vars.running==FALSE) {
-!             bsp_timer_reset();
-!          }
-!          bsp_timer_scheduleIn(opentimers_vars.timersBuf[id].ticks_remaining);
-!       }
-! 
-!       opentimers_vars.running                         = TRUE;
-! 
-!    } else {
-!       return TOO_MANY_TIMERS_ERROR;
-!    }
-! 
-!    return id;
-! }
-! 
-! /**
-! \brief Replace the period of a running timer.
-!  */
-! void  opentimers_setPeriod(opentimer_id_t id,time_type_t timetype,uint32_t newDuration) {
-!    if        (timetype==TIME_MS) {
-!       opentimers_vars.timersBuf[id].period_ticks      = newDuration*PORT_TICS_PER_MS;
-!       opentimers_vars.timersBuf[id].wraps_remaining   = (newDuration*PORT_TICS_PER_MS/MAX_TICKS_IN_SINGLE_CLOCK);//65535=maxValue of uint16_t
-!    } else if (timetype==TIME_TICS) {
-!       opentimers_vars.timersBuf[id].period_ticks      = newDuration;
-!       opentimers_vars.timersBuf[id].wraps_remaining   = (newDuration/MAX_TICKS_IN_SINGLE_CLOCK);//65535=maxValue of uint16_t
-!    } else {
-!       // this should never happpen!
-!       
-!       // we can not print from within the drivers. Instead:
-!       // blink the error LED
-!       leds_error_blink();
-!       // reset the board
-!       board_reset();
-!    }
-!    if(opentimers_vars.timersBuf[id].wraps_remaining==0) {
-!       if        (timetype==TIME_MS){
-!          opentimers_vars.timersBuf[id].ticks_remaining   = newDuration*PORT_TICS_PER_MS;
-!       } else if (timetype==TIME_TICS){
-!          opentimers_vars.timersBuf[id].ticks_remaining   = newDuration;
-!       }
-!    } else {
-!       opentimers_vars.timersBuf[id].ticks_remaining = MAX_TICKS_IN_SINGLE_CLOCK;
-!    }
-! }
-! 
-! /**
-! \brief Stop a running timer.
-! 
-! Sets the timer to "not running". the system recovers even if this was the next
-! timer to expire.
-!  */
-! void opentimers_stop(opentimer_id_t id) {
-!    opentimers_vars.timersBuf[id].isrunning=FALSE;
-! }
-! 
-! /**
-! \brief Restart a stop timer.
-! 
-! Sets the timer to " running".
-!  */
-! void opentimers_restart(opentimer_id_t id) {
-!    opentimers_vars.timersBuf[id].isrunning=TRUE;
-! }
-! 
-! 
-! //=========================== private =========================================
-! 
-! /**
-! \brief Function called when the hardware timer expires.
-! 
-! Executed in interrupt mode.
-! 
-! This function maps the expiration event to possibly multiple timers, calls the
-! corresponding callback(s), and restarts the hardware timer with the next timer
-! to expire.
-!  */
-! void opentimers_timer_callback() {
-!    
-!    opentimer_id_t   id;
-!    PORT_TIMER_WIDTH min_timeout;
-!    bool             found;
-!     
-!    // step 1. Identify expired timers
-!    for(id=0; id<MAX_NUM_TIMERS; id++) {
-!       if (opentimers_vars.timersBuf[id].isrunning==TRUE) {
-! 
-!          if(opentimers_vars.currentTimeout >= opentimers_vars.timersBuf[id].ticks_remaining) {
-!             // this timer has expired
-!             //check to see if we have completed the whole timer, or we're just wrapping around the max 16bit value
-!             if(opentimers_vars.timersBuf[id].wraps_remaining == 0){
-!                // declare as so
-!                opentimers_vars.timersBuf[id].hasExpired  = TRUE;
-!             }else{
-!                opentimers_vars.timersBuf[id].wraps_remaining--;
-!                if(opentimers_vars.timersBuf[id].wraps_remaining == 0){
-!                   //if we have fully wrapped around, then set the remainring ticks to the modulus of the total ticks and the max clock value
-!                   opentimers_vars.timersBuf[id].ticks_remaining = (opentimers_vars.timersBuf[id].period_ticks) % MAX_TICKS_IN_SINGLE_CLOCK;
-!                }else{
-!                   opentimers_vars.timersBuf[id].ticks_remaining = MAX_TICKS_IN_SINGLE_CLOCK;
-!                }
-!             }
-!          } else {
-!             // this timer is not expired
-! 
-!             // update its counter
-!             opentimers_vars.timersBuf[id].ticks_remaining -= opentimers_vars.currentTimeout;
-!          }   
-!       }
-!    }
-! 
-!    // step 2. call callbacks of expired timers
-!    for(id=0; id<MAX_NUM_TIMERS; id++) {
-!       if (opentimers_vars.timersBuf[id].hasExpired==TRUE){
-! 
-!          // call the callback
-!          opentimers_vars.timersBuf[id].callback();
-!          opentimers_vars.timersBuf[id].hasExpired     = FALSE;
-! 
-!          // reload the timer, if applicable
-!          if (opentimers_vars.timersBuf[id].type==TIMER_PERIODIC) {
-!             opentimers_vars.timersBuf[id].wraps_remaining   = (opentimers_vars.timersBuf[id].period_ticks/MAX_TICKS_IN_SINGLE_CLOCK);//65535=maxValue of uint16_t
-!             //if the number of ticks falls below a 16bit value, use it, otherwise set to max 16bit value
-!             if(opentimers_vars.timersBuf[id].wraps_remaining==0)                                                
-!                opentimers_vars.timersBuf[id].ticks_remaining   = opentimers_vars.timersBuf[id].period_ticks;
-!             else
-!                opentimers_vars.timersBuf[id].ticks_remaining = MAX_TICKS_IN_SINGLE_CLOCK;
-! 
-!          } else {
-!             opentimers_vars.timersBuf[id].isrunning   = FALSE;
-!          }
-!       }
-! 
-!    }
-! 
-!    // step 3. find the minimum remaining timeout among running timers
-!    found = FALSE;
-!    for(id=0;id<MAX_NUM_TIMERS;id++) {
-!       if (
-!             opentimers_vars.timersBuf[id].isrunning==TRUE &&
-!             (
-!                   found==FALSE
-!                   ||
-!                   opentimers_vars.timersBuf[id].ticks_remaining < min_timeout
-!             )
-!       ) {
-!          min_timeout    = opentimers_vars.timersBuf[id].ticks_remaining;
-!          found          = TRUE;
-!       }
-!    }
-! 
-!    // step 4. schedule next timeout
-!    if (found==TRUE) {
-!       // at least one timer pending
-!       opentimers_vars.currentTimeout = min_timeout;
-!       bsp_timer_scheduleIn(opentimers_vars.currentTimeout);
-!    } else {
-!       // no more timers pending
-!       opentimers_vars.running = FALSE;
-!    }
-! }
-! 
---- 1,382 ----
-! /**
-! \brief Definition of the "opentimers" driver.
-! 
-! This driver uses a single hardware timer, which it virtualizes to support
-! at most MAX_NUM_TIMERS timers.
-! 
-! \author Xavi Vilajosana <xvilajosana@eecs.berkeley.edu>, March 2012.
-!  */
-! 
-! #include "openwsn.h"
-! #include "opentimers.h"
-! //#include "bsp_timer.h"
-! #include "leds.h"
-! 
-! #include "hwtimer_arch.h"
-! #include "hwtimer_cpu.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== variables =======================================
-! 
-! opentimers_vars_t opentimers_vars;
-! //uint32_t counter; //counts the elapsed time.
-! 
-! //=========================== prototypes ======================================
-! 
-! void opentimers_int_handler(int);
-! void opentimers_timer_callback(void);
-! 
-! //=========================== public ==========================================
-! 
-! /**
-! \brief Initialize this module.
-! 
-! Initializes data structures and hardware timer.
-!  */
-! void opentimers_init(void){
-!    uint8_t i;
-! 
-!    // initialize local variables
-!    opentimers_vars.running=FALSE;
-!    for (i=0;i<MAX_NUM_TIMERS;i++) {
-!       opentimers_vars.timersBuf[i].period_ticks       = 0;
-!       opentimers_vars.timersBuf[i].ticks_remaining    = 0;
-!       opentimers_vars.timersBuf[i].type               = TIMER_ONESHOT;
-!       opentimers_vars.timersBuf[i].isrunning          = FALSE;
-!       opentimers_vars.timersBuf[i].callback           = NULL;
-!       opentimers_vars.timersBuf[i].hasExpired         = FALSE;
-!    }
-! 
-!    // set callback for bsp_timers module
-!    // bsp_timer_set_callback(opentimers_timer_callback);
-!    hwtimer_arch_init(opentimers_int_handler, F_CPU); 
-! }
-! 
-! /** 
-! \brief opentimers interrupt handler
-! 
-! This is a wrapper to fit the hwtimer_arch API
-!  */
-! void opentimers_int_handler(int t) {
-!     (void)t; 
-!     opentimers_timer_callback();
-! }
-! 
-! /**
-! \brief Start a timer.
-! 
-! The timer works as follows:
-! - currentTimeout is the number of ticks before the next timer expires.
-! - if a new timer is inserted, we check that it is not earlier than the soonest
-! - if it is earliest, replace it
-! - if not, insert it in the list
-! 
-! \param duration Number milli-seconds after which the timer will fire.
-! \param type     Type of timer:
-!    - #TIMER_PERIODIC for a periodic timer.
-!    - #TIMER_ONESHOT for a on-shot timer.
-! \param timetype Units of the <tt>duration</tt>:
-!    - #TIME_MS when <tt>duration</tt> is in ms.
-!    - #TIME_TICS when <tt>duration</tt> is in clock ticks.
-! \param callback The function to call when the timer fires.
-! 
-! \returns The id of the timer (which serves as a handler to stop it) if the
-!          timer could be started.
-! \returns TOO_MANY_TIMERS_ERROR if the timer could NOT be started.
-!  */
-! opentimer_id_t opentimers_start(uint32_t duration, timer_type_t type, time_type_t timetype, opentimers_cbt callback) {
-! 
-!    uint8_t  id;
-! 
-!    // find an unused timer
-!    for (id=0; id<MAX_NUM_TIMERS && opentimers_vars.timersBuf[id].isrunning==TRUE; id++);
-! 
-!    if (id<MAX_NUM_TIMERS) {
-!       // we found an unused timer
-! 
-!       // register the timer
-!       if (timetype==TIME_MS) {
-!          opentimers_vars.timersBuf[id].period_ticks      = duration*PORT_TICS_PER_MS;
-!          opentimers_vars.timersBuf[id].wraps_remaining   = (duration*PORT_TICS_PER_MS/MAX_TICKS_IN_SINGLE_CLOCK);//65535=maxValue of uint16_t
-!       } else if (timetype==TIME_TICS) {
-!          opentimers_vars.timersBuf[id].period_ticks      = duration;
-!          opentimers_vars.timersBuf[id].wraps_remaining   = (duration/MAX_TICKS_IN_SINGLE_CLOCK);//65535=maxValue of uint16_t  
-!       } else {
-!          while (1); //error
-!       }
-!       //if the number of ticks falls below a 16bit value, use it, otherwise set to max 16bit value
-!       if(opentimers_vars.timersBuf[id].wraps_remaining==0){
-!          if (timetype==TIME_MS){ 
-!             opentimers_vars.timersBuf[id].ticks_remaining   = duration*PORT_TICS_PER_MS;
-!          } else if (timetype==TIME_TICS) {
-!             opentimers_vars.timersBuf[id].ticks_remaining   = duration;
-!          } else {
-!             // this should never happpen!
-!    
-!             // we can not print from within the drivers. Instead:
-!             // blink the error LED
-!             leds_error_blink();
-!             // reset the board
-!             board_reset();
-!          }
-!       }else{
-!          opentimers_vars.timersBuf[id].ticks_remaining = MAX_TICKS_IN_SINGLE_CLOCK;
-!       }                                                   
-!       opentimers_vars.timersBuf[id].type              = type;
-!       opentimers_vars.timersBuf[id].isrunning         = TRUE;
-!       opentimers_vars.timersBuf[id].callback          = callback;
-!       opentimers_vars.timersBuf[id].hasExpired        = FALSE;
-! 
-!       // re-schedule the running timer, if needed
-!       if (
-!             (opentimers_vars.running==FALSE)
-!             ||
-!             (opentimers_vars.timersBuf[id].ticks_remaining < opentimers_vars.currentTimeout)
-!       ) {  
-!          opentimers_vars.currentTimeout            = opentimers_vars.timersBuf[id].ticks_remaining;
-!          if (opentimers_vars.running==FALSE) {
-!             //bsp_timer_reset();
-!             hwtimer_arch_unset(OPENTIMERS_HWTIMER_ID); 
-!          }
-!          // bsp_timer_scheduleIn(opentimers_vars.timersBuf[id].ticks_remaining);
-!          hwtimer_arch_set(opentimers_vars.timersBuf[id].ticks_remaining, OPENTIMERS_HWTIMER_ID);
-!       }
-! 
-!       opentimers_vars.running                         = TRUE;
-! 
-!    } else {
-!       return TOO_MANY_TIMERS_ERROR;
-!    }
-! 
-!    return id;
-! }
-! 
-! /**
-! \brief Replace the period of a running timer.
-!  */
-! void  opentimers_setPeriod(opentimer_id_t id,time_type_t timetype,uint32_t newDuration) {
-!    if        (timetype==TIME_MS) {
-!       opentimers_vars.timersBuf[id].period_ticks      = newDuration*PORT_TICS_PER_MS;
-!       opentimers_vars.timersBuf[id].wraps_remaining   = (newDuration*PORT_TICS_PER_MS/MAX_TICKS_IN_SINGLE_CLOCK);//65535=maxValue of uint16_t
-!    } else if (timetype==TIME_TICS) {
-!       opentimers_vars.timersBuf[id].period_ticks      = newDuration;
-!       opentimers_vars.timersBuf[id].wraps_remaining   = (newDuration/MAX_TICKS_IN_SINGLE_CLOCK);//65535=maxValue of uint16_t
-!    } else {
-!       // this should never happpen!
-!       
-!       // we can not print from within the drivers. Instead:
-!       // blink the error LED
-!       leds_error_blink();
-!       // reset the board
-!       board_reset();
-!    }
-!    if(opentimers_vars.timersBuf[id].wraps_remaining==0) {
-!       if        (timetype==TIME_MS){
-!          opentimers_vars.timersBuf[id].ticks_remaining   = newDuration*PORT_TICS_PER_MS;
-!       } else if (timetype==TIME_TICS){
-!          opentimers_vars.timersBuf[id].ticks_remaining   = newDuration;
-!       }
-!    } else {
-!       opentimers_vars.timersBuf[id].ticks_remaining = MAX_TICKS_IN_SINGLE_CLOCK;
-!    }
-! }
-! 
-! /**
-! \brief Stop a running timer.
-! 
-! Sets the timer to "not running". the system recovers even if this was the next
-! timer to expire.
-!  */
-! void opentimers_stop(opentimer_id_t id) {
-!    opentimers_vars.timersBuf[id].isrunning=FALSE;
-! }
-! 
-! /**
-! \brief Restart a stop timer.
-! 
-! Sets the timer to " running".
-!  */
-! void opentimers_restart(opentimer_id_t id) {
-!    opentimers_vars.timersBuf[id].isrunning=TRUE;
-! }
-! 
-! 
-! //=========================== private =========================================
-! 
-! /**
-! \brief Function called when the hardware timer expires.
-! 
-! Executed in interrupt mode.
-! 
-! This function maps the expiration event to possibly multiple timers, calls the
-! corresponding callback(s), and restarts the hardware timer with the next timer
-! to expire.
-!  */
-! void opentimers_timer_callback(void) {
-!    
-!    opentimer_id_t   id;
-!    PORT_TIMER_WIDTH min_timeout;
-!    bool             found;
-!     
-!    // step 1. Identify expired timers
-!    for(id=0; id<MAX_NUM_TIMERS; id++) {
-!       if (opentimers_vars.timersBuf[id].isrunning==TRUE) {
-! 
-!          if(opentimers_vars.currentTimeout >= opentimers_vars.timersBuf[id].ticks_remaining) {
-!             // this timer has expired
-!             //check to see if we have completed the whole timer, or we're just wrapping around the max 16bit value
-!             if(opentimers_vars.timersBuf[id].wraps_remaining == 0){
-!                // declare as so
-!                opentimers_vars.timersBuf[id].hasExpired  = TRUE;
-!             }else{
-!                opentimers_vars.timersBuf[id].wraps_remaining--;
-!                if(opentimers_vars.timersBuf[id].wraps_remaining == 0){
-!                   //if we have fully wrapped around, then set the remainring ticks to the modulus of the total ticks and the max clock value
-!                   opentimers_vars.timersBuf[id].ticks_remaining = (opentimers_vars.timersBuf[id].period_ticks) % MAX_TICKS_IN_SINGLE_CLOCK;
-!                }else{
-!                   opentimers_vars.timersBuf[id].ticks_remaining = MAX_TICKS_IN_SINGLE_CLOCK;
-!                }
-!             }
-!          } else {
-!             // this timer is not expired
-! 
-!             // update its counter
-!             opentimers_vars.timersBuf[id].ticks_remaining -= opentimers_vars.currentTimeout;
-!          }   
-!       }
-!    }
-! 
-!    // step 2. call callbacks of expired timers
-!    for(id=0; id<MAX_NUM_TIMERS; id++) {
-!       if (opentimers_vars.timersBuf[id].hasExpired==TRUE){
-! 
-!          // call the callback
-!          opentimers_vars.timersBuf[id].callback();
-!          opentimers_vars.timersBuf[id].hasExpired     = FALSE;
-! 
-!          // reload the timer, if applicable
-!          if (opentimers_vars.timersBuf[id].type==TIMER_PERIODIC) {
-!             opentimers_vars.timersBuf[id].wraps_remaining   = (opentimers_vars.timersBuf[id].period_ticks/MAX_TICKS_IN_SINGLE_CLOCK);//65535=maxValue of uint16_t
-!             //if the number of ticks falls below a 16bit value, use it, otherwise set to max 16bit value
-!             if(opentimers_vars.timersBuf[id].wraps_remaining==0)                                                
-!                opentimers_vars.timersBuf[id].ticks_remaining   = opentimers_vars.timersBuf[id].period_ticks;
-!             else
-!                opentimers_vars.timersBuf[id].ticks_remaining = MAX_TICKS_IN_SINGLE_CLOCK;
-! 
-!          } else {
-!             opentimers_vars.timersBuf[id].isrunning   = FALSE;
-!          }
-!       }
-! 
-!    }
-! 
-!    // step 3. find the minimum remaining timeout among running timers
-!    found = FALSE;
-!    for(id=0;id<MAX_NUM_TIMERS;id++) {
-!       if (
-!             opentimers_vars.timersBuf[id].isrunning==TRUE &&
-!             (
-!                   found==FALSE
-!                   ||
-!                   opentimers_vars.timersBuf[id].ticks_remaining < min_timeout
-!             )
-!       ) {
-!          min_timeout    = opentimers_vars.timersBuf[id].ticks_remaining;
-!          found          = TRUE;
-!       }
-!    }
-! 
-!    // step 4. schedule next timeout
-!    if (found==TRUE) {
-!       // at least one timer pending
-!       opentimers_vars.currentTimeout = min_timeout;
-!       // bsp_timer_scheduleIn(opentimers_vars.currentTimeout);
-!       hwtimer_arch_set(opentimers_vars.currentTimeout, OPENTIMERS_HWTIMER_ID);
-!    } else {
-!       // no more timers pending
-!       opentimers_vars.running = FALSE;
-!    }
-! }
-! 
-! void opentimers_sleepTimeCompesation(uint16_t sleepTime)
-! {
-!    opentimer_id_t   id;
-!    PORT_TIMER_WIDTH min_timeout;
-!    bool             found;
-!    
-!    //step 1. reCount the ticks_remain after waking up from sleep
-!    for(id=0; id<MAX_NUM_TIMERS; id++)
-!    {
-!      if (opentimers_vars.timersBuf[id].isrunning==TRUE) 
-!      {
-!        if(opentimers_vars.timersBuf[id].ticks_remaining > sleepTime)
-!        {
-!          opentimers_vars.timersBuf[id].ticks_remaining -= sleepTime;
-!        }
-!        else
-!        {
-!          if(opentimers_vars.timersBuf[id].wraps_remaining > 0)
-!          {
-!            opentimers_vars.timersBuf[id].wraps_remaining--;
-!            opentimers_vars.timersBuf[id].ticks_remaining += (MAX_TICKS_IN_SINGLE_CLOCK - sleepTime);
-!          }
-!          else
-!          {
-!            opentimers_vars.timersBuf[id].hasExpired  = TRUE;
-!          }
-!        }
-!      }
-!    }
-!    
-!    // step 2. call callbacks of expired timers
-!    for(id=0; id<MAX_NUM_TIMERS; id++) {
-!       if (opentimers_vars.timersBuf[id].hasExpired==TRUE){
-! 
-!          // call the callback
-!          opentimers_vars.timersBuf[id].callback();
-!          opentimers_vars.timersBuf[id].hasExpired     = FALSE;
-! 
-!          // reload the timer, if applicable
-!          if (opentimers_vars.timersBuf[id].type==TIMER_PERIODIC) {
-!             opentimers_vars.timersBuf[id].wraps_remaining   = (opentimers_vars.timersBuf[id].period_ticks/MAX_TICKS_IN_SINGLE_CLOCK);//65535=maxValue of uint16_t
-!             //if the number of ticks falls below a 16bit value, use it, otherwise set to max 16bit value
-!             if(opentimers_vars.timersBuf[id].wraps_remaining==0)                                                
-!                opentimers_vars.timersBuf[id].ticks_remaining   = opentimers_vars.timersBuf[id].period_ticks;
-!             else
-!                opentimers_vars.timersBuf[id].ticks_remaining = MAX_TICKS_IN_SINGLE_CLOCK;
-! 
-!          } else {
-!             opentimers_vars.timersBuf[id].isrunning   = FALSE;
-!          }
-!       }
-! 
-!    }
-!    
-!    // step 3. find the minimum remaining timeout among running timers
-!    found = FALSE;
-!    for(id=0;id<MAX_NUM_TIMERS;id++) {
-!       if (
-!             opentimers_vars.timersBuf[id].isrunning==TRUE &&
-!             (
-!                   found==FALSE
-!                   ||
-!                   opentimers_vars.timersBuf[id].ticks_remaining < min_timeout
-!             )
-!       ) {
-!          min_timeout    = opentimers_vars.timersBuf[id].ticks_remaining;
-!          found          = TRUE;
-!       }
-!    }
-! 
-!    // step 4. schedule next timeout
-!    if (found==TRUE) {
-!       // at least one timer pending
-!       opentimers_vars.currentTimeout = min_timeout;
-!       // bsp_timer_scheduleIn(opentimers_vars.currentTimeout);
-!       hwtimer_arch_set(opentimers_vars.currentTimeout, OPENTIMERS_HWTIMER_ID);
-!    } else {
-!       // no more timers pending
-!       opentimers_vars.running = FALSE;
-!    }
-! }
-diff -crB openwsn/opentimers.h ../../../sys/net/openwsn/opentimers.h
-*** openwsn/opentimers.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/opentimers.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,60 ****
-! /**
-! \brief Declaration of the "opentimers" driver.
-! 
-! \author Xavi Vilajosana <xvilajosana@eecs.berkeley.edu>, March 2012.
-! */
-! 
-! #ifndef __OPENTIMERS_H
-! #define __OPENTIMERS_H
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! /// Maximum number of timers that can run concurrently
-! #define MAX_NUM_TIMERS            10
-! 
-! #define MAX_TICKS_IN_SINGLE_CLOCK ((PORT_TIMER_WIDTH)0xFFFFFFFF)
-! 
-! #define TOO_MANY_TIMERS_ERROR     255
-! 
-! #define opentimer_id_t uint8_t
-! 
-! typedef void (*opentimers_cbt)(void);
-! 
-! //=========================== typedef =========================================
-! 
-! typedef enum {
-!    TIMER_PERIODIC,
-!    TIMER_ONESHOT,
-! } timer_type_t;
-! 
-! /*the time can be in tics or in ms*/
-! typedef enum {
-!    TIME_MS,
-!    TIME_TICS,
-! } time_type_t;
-! 
-! typedef struct {
-!    uint32_t             period_ticks;       // total number of clock ticks
-!    PORT_TIMER_WIDTH     ticks_remaining;    // ticks remaining before elapses
-!    uint16_t             wraps_remaining;    // the clock register is 16 bit, and can't count beyond 32k...
-!                                             // so period_ticks = wraps_remaining*(32k or uint16_t)
-!    timer_type_t         type;               // periodic or one-shot
-!    bool                 isrunning;          // is running?
-!    opentimers_cbt       callback;           // function to call when elapses
-!    bool                 hasExpired;         // whether the callback has to be called
-! } opentimers_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! void           opentimers_init();
-! opentimer_id_t opentimers_start(uint32_t       duration,
-!                                 timer_type_t   type,
-!                                 time_type_t timetype,
-!                                 opentimers_cbt callback);
-! void           opentimers_setPeriod(opentimer_id_t id,time_type_t timetype, uint32_t       newPeriod);
-! void           opentimers_stop(opentimer_id_t id);
-! void           opentimers_restart(opentimer_id_t id);
-! 
-! #endif
---- 1,86 ----
-! /**
-! \brief Declaration of the "opentimers" driver.
-! 
-! \author Xavi Vilajosana <xvilajosana@eecs.berkeley.edu>, March 2012.
-! */
-! 
-! #ifndef __OPENTIMERS_H
-! #define __OPENTIMERS_H
-! 
-! #include "openwsn.h"
-! 
-! #include "hwtimer_cpu.h"
-! 
-! /**
-! \addtogroup drivers
-! \{
-! \addtogroup OpenTimers
-! \{
-! */
-! 
-! //=========================== define ==========================================
-! 
-! /// Maximum number of timers that can run concurrently
-! #define MAX_NUM_TIMERS            10
-! 
-! #define MAX_TICKS_IN_SINGLE_CLOCK ((PORT_TIMER_WIDTH)0xFFFFFFFF)
-! 
-! #define TOO_MANY_TIMERS_ERROR     255
-! 
-! #define opentimer_id_t uint8_t
-! 
-! typedef void (*opentimers_cbt)(void);
-! 
-! #define OPENTIMERS_HWTIMER_ID (HWTIMER_MAXTIMERS - 1)
-! 
-! //=========================== typedef =========================================
-! 
-! typedef enum {
-!    TIMER_PERIODIC,
-!    TIMER_ONESHOT,
-! } timer_type_t;
-! 
-! /*the time can be in tics or in ms*/
-! typedef enum {
-!    TIME_MS,
-!    TIME_TICS,
-! } time_type_t;
-! 
-! typedef struct {
-!    uint32_t             period_ticks;       // total number of clock ticks
-!    PORT_TIMER_WIDTH     ticks_remaining;    // ticks remaining before elapses
-!    uint16_t             wraps_remaining;    // the clock register is 16 bit, and can't count beyond 32k...
-!                                             // so period_ticks = wraps_remaining*(32k or uint16_t)
-!    timer_type_t         type;               // periodic or one-shot
-!    bool                 isrunning;          // is running?
-!    opentimers_cbt       callback;           // function to call when elapses
-!    bool                 hasExpired;         // whether the callback has to be called
-! } opentimers_t;
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    opentimers_t         timersBuf[MAX_NUM_TIMERS];
-!    bool                 running;
-!    PORT_TIMER_WIDTH     currentTimeout; // current timeout, in ticks
-! } opentimers_vars_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! void           opentimers_init(void);
-! opentimer_id_t opentimers_start(uint32_t       duration,
-!                                 timer_type_t   type,
-!                                 time_type_t timetype,
-!                                 opentimers_cbt callback);
-! void           opentimers_setPeriod(opentimer_id_t id,time_type_t timetype, uint32_t       newPeriod);
-! void           opentimers_stop(opentimer_id_t id);
-! void           opentimers_restart(opentimer_id_t id);
-! 
-! void           opentimers_sleepTimeCompesation(uint16_t sleepTime);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/openwsn.c ../../../sys/net/openwsn/openwsn.c
-*** openwsn/openwsn.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/openwsn.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,134 ****
-! /**
-! \brief General OpenWSN definitions
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, September 2012
-! */
-! 
-! #include "openwsn.h"
-! //===== drivers
-! #include "openserial.h"
-! //===== stack
-! //-- cross-layer
-! #include "idmanager.h"
-! #include "openqueue.h"
-! #include "openrandom.h"
-! #include "opentimers.h"
-! //-- 02a-TSCH
-! #include "IEEE802154E.h"
-! //-- 02b-RES
-! #include "schedule.h"
-! #include "res.h"
-! #include "neighbors.h"
-! //-- 03a-IPHC
-! #include "openbridge.h"
-! #include "iphc.h"
-! //-- 03b-IPv6
-! #include "forwarding.h"
-! #include "icmpv6.h"
-! #include "icmpv6echo.h"
-! #include "icmpv6rpl.h"
-! //-- 04-TRAN
-! #include "opentcp.h"
-! #include "openudp.h"
-! #include "opencoap.h"
-! //-- app (common)
-! //#include "rreg.h"
-! //#include "rwellknown.h"
-! //#include "rinfo.h"
-! //===== applications
-! //-- TCP
-! #include "tcpecho.h"
-! #include "tcpinject.h"
-! #include "tcpprint.h"
-! #include "ohlone.h"
-! //-- UDP
-! #include "udpecho.h"
-! #include "udpinject.h"
-! #include "udpprint.h"
-! //#include "udprand.h"
-! //#include "udplatency.h"
-! //#include "udpstorm.h"
-! //-- CoAP
-! //#include "rleds.h"
-! //#include "rt.h"
-! //#include "rex.h"
-! //#include "rheli.h"
-! //#include "rrube.h"
-! //#include "rxl1.h"
-! //#include "layerdebug.h"
-! //-- misc
-! //#include "heli.h"
-! //#include "imu.h"
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void openwsn_init();
-! 
-! //=========================== public ==========================================
-! 
-! //=========================== private =========================================
-! 
-! void openwsn_init() {
-!    //===== drivers
-!    openserial_init();
-!    
-!    //===== stack
-!    //-- cross-layer
-!    idmanager_init();    // call first since initializes EUI64 and isDAGroot
-!    openqueue_init();
-!    openrandom_init();
-!    opentimers_init();
-!    //-- 02a-TSCH
-!    ieee154e_init();
-!    //-- 02b-RES
-!    schedule_init();
-!    res_init();
-!    neighbors_init();
-!    //-- 03a-IPHC
-!    openbridge_init();
-!    iphc_init();
-!    //-- 03b-IPv6
-!    forwarding_init();
-!    icmpv6_init();
-!    icmpv6echo_init();
-!    icmpv6rpl_init();
-!    //-- 04-TRAN
-!    opentcp_init();
-!    openudp_init();
-!    opencoap_init();    // initialize before any of the CoAP applications
-!    //-- app (common)
-!    //rreg_init();
-!    //rwellknown_init();
-!    //rinfo_init();
-!    
-!    //===== applications
-!    //-- TCP
-!    tcpecho_init();
-!    tcpinject_init();
-!    tcpprint_init();
-!    ohlone_init();
-!    //-- UDP
-!    udpecho_init();
-!    udpinject_init();
-!    udpprint_init();
-!    //udprand_init();
-!    //udplatency_init();
-!    //udpstorm_init();
-!    //-- CoAP
-!    //rleds_init();
-!    //rt_init();
-!    //rex_init();
-!    //rheli_init();
-!    //rrube_init();
-!    //rxl1_init();
-!    //layerdebug_init();
-!    //-- misc
-!    //heli_init();
-!    //imu_init();
-!    
-!    openserial_printInfo(COMPONENT_OPENWSN,ERR_BOOTED,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-  }
-\ No newline at end of file
---- 1,158 ----
-! /**
-! \brief General OpenWSN definitions
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, September 2012
-! */
-! 
-! #include "openwsn.h"
-! #include "scheduler.h"
-! #include "thread.h"
-! #include "board_ow.h"
-! //===== drivers
-! #include "openserial.h"
-! //===== stack
-! //-- cross-layer
-! #include "idmanager.h"
-! #include "openqueue.h"
-! #include "openrandom.h"
-! #include "opentimers.h"
-! //-- 02a-TSCH
-! #include "IEEE802154E.h"
-! //-- 02b-RES
-! #include "schedule.h"
-! #include "res.h"
-! #include "neighbors.h"
-! //-- 03a-IPHC
-! #include "openbridge.h"
-! #include "iphc.h"
-! //-- 03b-IPv6
-! #include "forwarding.h"
-! #include "icmpv6.h"
-! #include "icmpv6echo.h"
-! #include "icmpv6rpl.h"
-! //-- 04-TRAN
-! #include "opentcp.h"
-! #include "openudp.h"
-! #include "opencoap.h"
-! //-- app (common)
-! //#include "rreg.h"
-! #include "rwellknown.h"
-! #include "rinfo.h"
-! //===== applications
-! //-- TCP
-! //#include "tcpecho.h"
-! //#include "tcpinject.h"
-! //#include "tcpprint.h"
-! #include "ohlone.h"
-! //-- UDP
-! #include "udpecho.h"
-! #include "udpinject.h"
-! #include "udpprint.h"
-! //#include "udprand.h"
-! //#include "udplatency.h"
-! //#include "udpstorm.h"
-! //-- CoAP
-! //#include "rleds.h"
-! //#include "rt.h"
-! //#include "rex.h"
-! //#include "rheli.h"
-! //#include "rrube.h"
-! //#include "rxl1.h"
-! //#include "layerdebug.h"
-! //#include "r6tus.h"
-! //-- misc
-! //#include "heli.h"
-! //#include "imu.h"
-! 
-! //=========================== variables =======================================
-! 
-! static char openwsn_stack[KERNEL_CONF_STACKSIZE_MAIN];
-! 
-! //=========================== prototypes ======================================
-! 
-! void openwsn_init(void);
-! void openwsn_start(void);
-! 
-! //=========================== public ==========================================
-! 
-! void openwsn_start_thread(void) {
-!     puts(__PRETTY_FUNCTION__);
-!     thread_create(openwsn_stack, KERNEL_CONF_STACKSIZE_MAIN, 
-!                    PRIORITY_OPENWSN, CREATE_STACKTEST, 
-!                    openwsn_start, "openwsn thread");
-! }
-! 
-! void openwsn_start(void) {
-!     puts(__PRETTY_FUNCTION__);
-!     //board_init_ow();
-!     scheduler_init();
-!     openwsn_init();
-!     scheduler_start();
-! }
-! 
-! //=========================== private =========================================
-! 
-! void openwsn_init(void) {
-!     puts(__PRETTY_FUNCTION__);
-!    //===== drivers
-!    openserial_init();
-!    
-!    //===== stack
-!    //-- cross-layer
-!    idmanager_init();    // call first since initializes EUI64 and isDAGroot
-!    openqueue_init();
-!    openrandom_init();
-!    opentimers_init();
-!    //-- 02a-TSCH
-!    ieee154e_init();
-!    //-- 02b-RES
-!    schedule_init();
-!    res_init();
-!    neighbors_init();
-!    //-- 03a-IPHC
-!    openbridge_init();
-!    iphc_init();
-!    //-- 03b-IPv6
-!    forwarding_init();
-!    icmpv6_init();
-!    icmpv6echo_init();
-!    icmpv6rpl_init();
-!    //-- 04-TRAN
-!    opentcp_init();
-!    openudp_init();
-!    opencoap_init();    // initialize before any of the CoAP applications
-!    //-- app (common)
-!    //rreg_init();
-!    rwellknown_init();
-!    rinfo_init();
-!    
-!    //===== applications
-!    //-- TCP
-!    //tcpecho_init();
-!    //tcpinject_init();
-!    //tcpprint_init();
-!    //ohlone_init();
-!    //-- UDP
-!    udpecho_init();
-!    udpinject_init();
-!    udpprint_init();
-!    //udprand_init();
-!    //udplatency_init();
-!    //udpstorm_init();
-!    //-- CoAP
-!    //rleds_init();
-!    //rt_init();
-!    //rex_init();
-!    //rheli_init();
-!    //rrube_init();
-!    //rxl1_init();
-!    //layerdebug_init();
-!    //r6tus_init();
-!    //-- misc
-!    //heli_init();
-!    //imu_init();
-!    
-!    openserial_printInfo(COMPONENT_OPENWSN,ERR_BOOTED,
-!                             (errorparameter_t)0,
-!                             (errorparameter_t)0);
-  }
-\ No newline at end of file
-diff -crB openwsn/openwsn.h ../../../sys/net/openwsn/openwsn.h
-*** openwsn/openwsn.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/openwsn.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,314 ****
-! /**
-! \brief General OpenWSN definitions
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, August 2010
-! \author Ankur Mehta <mehtank@eecs.berkeley.edu>, September 2010
-! */
-! 
-! #ifndef __OPENWSN_H
-! #define __OPENWSN_H
-! 
-! //general
-! #include <stdint.h>               // needed for uin8_t, uint16_t
-! #include "board_info.h"
-! 
-! //=========================== define ==========================================
-! 
-! static const uint8_t infoStackName[] = "OpenWSN ";
-! #define OPENWSN_VERSION_MAJOR     1
-! #define OPENWSN_VERSION_MINOR     2
-! #define OPENWSN_VERSION_PATCH     1
-! 
-! // enter the last byte of your mote's address if you want it to be an LBR
-! #define DEBUG_MOTEID_MASTER       0xe8
-! 
-! #ifndef TRUE
-! #define TRUE 1
-! #endif
-! 
-! #ifndef FALSE
-! #define FALSE 0
-! #endif
-! 
-! #define LENGTH_ADDR16b 2
-! #define LENGTH_ADDR64b 8
-! #define LENGTH_ADDR128b 16
-! 
-! enum {
-!    E_SUCCESS                           = 0,          
-!    E_FAIL                              = 1,
-! };
-! 
-! // types of addresses
-! enum {
-!    ADDR_NONE                           = 0,
-!    ADDR_16B                            = 1,
-!    ADDR_64B                            = 2,
-!    ADDR_128B                           = 3,
-!    ADDR_PANID                          = 4,
-!    ADDR_PREFIX                         = 5,
-!    ADDR_ANYCAST                        = 6,
-! };
-! 
-! enum {
-!    LITTLE_ENDIAN                       = TRUE,
-!    BIG_ENDIAN                          = FALSE,
-! };
-! 
-! // protocol numbers, as defined by the IANA
-! enum {
-!    IANA_UNDEFINED                      = 0x00,
-!    IANA_TCP                            = 0x06,
-!    IANA_UDP                            = 0x11,
-!    IANA_IPv6ROUTE                      =   43,
-!    IANA_ICMPv6                         = 0x3a,
-!    IANA_ICMPv6_ECHO_REQUEST            =  128,
-!    IANA_ICMPv6_ECHO_REPLY              =  129,
-!    IANA_ICMPv6_RS                      =  133,
-!    IANA_ICMPv6_RA                      =  134,
-!    IANA_ICMPv6_RA_PREFIX_INFORMATION   =    3,
-!    IANA_ICMPv6_RPL                     =  155,
-!    IANA_ICMPv6_RPL_DIO                 = 0x01,
-!    IANA_ICMPv6_RPL_DAO                 = 0x04,
-!    IANA_RSVP                           =   46,
-! };
-! 
-! // well known ports (which we define)
-! enum {
-!    //TCP
-!    WKP_TCP_HTTP                        =    80,
-!    WKP_TCP_ECHO                        =     7,
-!    WKP_TCP_INJECT                      =  2188,
-!    WKP_TCP_DISCARD                     =     9,
-!    //UDP
-!    WKP_UDP_COAP                        =  5683,
-!    WKP_UDP_HELI                        =  2192,
-!    WKP_UDP_IMU                         =  2190,
-!    WKP_UDP_ECHO                        =     7,
-!    WKP_UDP_INJECT                      =  2188,
-!    WKP_UDP_DISCARD                     =     9,
-!    WKP_UDP_RAND                        = 61000,
-!    WKP_UDP_LATENCY                     = 61001,
-! };
-! 
-! //status elements
-! enum {
-!    STATUS_ISSYNC                       =  0,
-!    STATUS_ID                           =  1,
-!    STATUS_DAGRANK                      =  2,
-!    STATUS_OUTBUFFERINDEXES             =  3,
-!    STATUS_ASN                          =  4,
-!    STATUS_MACSTATS                     =  5,
-!    STATUS_SCHEDULE                     =  6,
-!    STATUS_BACKOFF                      =  7,
-!    STATUS_QUEUE                        =  8,
-!    STATUS_NEIGHBORS                    =  9,
-!    STATUS_MAX                          = 10,
-! };
-! 
-! //component identifiers
-! //the order is important because
-! enum {
-!    COMPONENT_NULL                      = 0x00,
-!    COMPONENT_OPENWSN                   = 0x01,
-!    //cross-layers
-!    COMPONENT_IDMANAGER                 = 0x02,
-!    COMPONENT_OPENQUEUE                 = 0x03,
-!    COMPONENT_OPENSERIAL                = 0x04,
-!    COMPONENT_PACKETFUNCTIONS           = 0x05,
-!    COMPONENT_RANDOM                    = 0x06,
-!    //PHY
-!    COMPONENT_RADIO                     = 0x07,
-!    //MAClow
-!    COMPONENT_IEEE802154                = 0x08,
-!    COMPONENT_IEEE802154E               = 0x09,
-!    
-!    //All components with higher component id than COMPONENT_IEEE802154E
-!    //won't be able to get free packets from the queue 
-!    //when the mote is not synch
-!    
-!    //MAClow<->MAChigh ("virtual components")
-!    COMPONENT_RES_TO_IEEE802154E        = 0x0a,
-!    COMPONENT_IEEE802154E_TO_RES        = 0x0b,
-!    //MAChigh
-!    COMPONENT_RES                       = 0x0c,
-!    COMPONENT_NEIGHBORS                 = 0x0d,
-!    COMPONENT_SCHEDULE                  = 0x0e,
-!    //IPHC
-!    COMPONENT_OPENBRIDGE                = 0x0f,
-!    COMPONENT_IPHC                      = 0x10,
-!    //IPv6
-!    COMPONENT_FORWARDING                = 0x11,
-!    COMPONENT_ICMPv6                    = 0x12,
-!    COMPONENT_ICMPv6ECHO                = 0x13,
-!    COMPONENT_ICMPv6ROUTER              = 0x14,
-!    COMPONENT_ICMPv6RPL                 = 0x15,
-!    //TRAN
-!    COMPONENT_OPENTCP                   = 0x16,             
-!    COMPONENT_OPENUDP                   = 0x17,
-!    COMPONENT_OPENCOAP                  = 0x18,
-!    //App test
-!    COMPONENT_TCPECHO                   = 0x19,
-!    COMPONENT_TCPINJECT                 = 0x1a,
-!    COMPONENT_TCPPRINT                  = 0x1b,
-!    COMPONENT_UDPECHO                   = 0x1c,
-!    COMPONENT_UDPINJECT                 = 0x1d,
-!    COMPONENT_UDPPRINT                  = 0x1e,
-!    COMPONENT_RSVP                      = 0x1f,
-!    //App
-!    COMPONENT_OHLONE                    = 0x20,
-!    COMPONENT_HELI                      = 0x21,
-!    COMPONENT_IMU                       = 0x22,
-!    COMPONENT_RLEDS                     = 0x23,
-!    COMPONENT_RREG                      = 0x24,
-!    COMPONENT_RWELLKNOWN                = 0x25,
-!    COMPONENT_RT                        = 0x26,
-!    COMPONENT_REX                       = 0x27,
-!    COMPONENT_RXL1                      = 0x28,
-!    COMPONENT_RINFO                     = 0x29,
-!    COMPONENT_RHELI                     = 0x2a,
-!    COMPONENT_RRUBE                     = 0x2b,
-!    COMPONENT_LAYERDEBUG                = 0x2c,
-!    COMPONENT_UDPRAND                   = 0x2d,
-!    COMPONENT_UDPSTORM                  = 0x2e,
-!    COMPONENT_UDPLATENCY                = 0x2f,
-!    COMPONENT_TEST                      = 0x30,
-! };
-! 
-! /**
-! \brief error codes used throughout the OpenWSN stack
-! 
-! \note The comments are used in the Python parsing tool:
-!    - {0} refers to the value of the first argument,
-!    - {1} refers to the value of the second argument,
-! */
-! enum {
-!    // l7
-!    ERR_RCVD_ECHO_REQUEST               = 0x01, // received an echo request
-!    ERR_RCVD_ECHO_REPLY                 = 0x02, // received an echo reply
-!    ERR_GETDATA_ASKS_TOO_FEW_BYTES      = 0x03, // getData asks for too few bytes, maxNumBytes={0}, fill level={1}
-!    ERR_INPUT_BUFFER_OVERFLOW           = 0x04, // the input buffer has overflown
-!    // l4
-!    ERR_WRONG_TRAN_PROTOCOL             = 0x05, // unknown transport protocol {0} (code location {1})
-!    ERR_WRONG_TCP_STATE                 = 0x06, // wrong TCP state {0} (code location {1})
-!    ERR_TCP_RESET                       = 0x07, // TCP reset while in state {0} (code location {1})
-!    ERR_UNSUPPORTED_PORT_NUMBER         = 0x08, // unsupported port number {0} (code location {1})
-!    // l3
-!    ERR_UNEXPECTED_DAO                  = 0x09, // unexpected DAO (code location {0})
-!    ERR_UNSUPPORTED_ICMPV6_TYPE         = 0x0a, // unsupported ICMPv6 type {0} (code location {1})
-!    ERR_6LOWPAN_UNSUPPORTED             = 0x0b, // unsupported 6LoWPAN parameter {1} at location {0}
-!    ERR_NO_NEXTHOP                      = 0x0c, // no next hop
-!    ERR_INVALID_PARAM                   = 0x0d, // invalid parameter
-!    ERR_INVALID_FWDMODE                 = 0x0e, // invalid forward mode
-!    ERR_LARGE_DAGRANK                   = 0x0f, // large DAGrank {0}, set to {1}
-!    ERR_HOP_LIMIT_REACHED               = 0x10, // packet discarded hop limit reached
-!    // l2b
-!    ERR_NEIGHBORS_FULL                  = 0x11, // neighbors table is full (max number of neighbor is {0})
-!    ERR_NO_SENT_PACKET                  = 0x12, // there is no sent packet in queue
-!    ERR_NO_RECEIVED_PACKET              = 0x13, // there is no received packet in queue
-!    ERR_SCHEDULE_OVERFLOWN              = 0x14, // schedule overflown
-!    // l2a
-!    ERR_WRONG_CELLTYPE                  = 0x15, // wrong celltype {0} at slotOffset {1}
-!    ERR_IEEE154_UNSUPPORTED             = 0x16, // unsupported IEEE802.15.4 parameter {1} at location {0}
-!    ERR_DESYNCHRONIZED                  = 0x17, // got desynchronized at slotOffset {0}
-!    ERR_SYNCHRONIZED                    = 0x18, // synchronized at slotOffset {0}
-!    ERR_LARGE_TIMECORRECTION            = 0x19, // large timeCorr.: {0} ticks (code loc. {1})
-!    ERR_WRONG_STATE_IN_ENDFRAME_SYNC    = 0x1a, // wrong state {0} in end of frame+sync
-!    ERR_WRONG_STATE_IN_STARTSLOT        = 0x1b, // wrong state {0} in startSlot, at slotOffset {1}
-!    ERR_WRONG_STATE_IN_TIMERFIRES       = 0x1c, // wrong state {0} in timer fires, at slotOffset {1}
-!    ERR_WRONG_STATE_IN_NEWSLOT          = 0x1d, // wrong state {0} in start of frame, at slotOffset {1}
-!    ERR_WRONG_STATE_IN_ENDOFFRAME       = 0x1e, // wrong state {0} in end of frame, at slotOffset {1}
-!    ERR_MAXTXDATAPREPARE_OVERFLOW       = 0x1f, // maxTxDataPrepare overflows while at state {0} in slotOffset {1}
-!    ERR_MAXRXACKPREPARE_OVERFLOWS       = 0x20, // maxRxAckPrepapare overflows while at state {0} in slotOffset {1}
-!    ERR_MAXRXDATAPREPARE_OVERFLOWS      = 0x21, // maxRxDataPrepapre overflows while at state {0} in slotOffset {1}
-!    ERR_MAXTXACKPREPARE_OVERFLOWS       = 0x22, // maxTxAckPrepapre overflows while at state {0} in slotOffset {1}
-!    ERR_WDDATADURATION_OVERFLOWS        = 0x23, // wdDataDuration overflows while at state {0} in slotOffset {1}
-!    ERR_WDRADIO_OVERFLOWS               = 0x24, // wdRadio overflows while at state {0} in slotOffset {1}
-!    ERR_WDRADIOTX_OVERFLOWS             = 0x25, // wdRadioTx overflows while at state {0} in slotOffset {1}
-!    ERR_WDACKDURATION_OVERFLOWS         = 0x26, // wdAckDuration overflows while at state {0} in slotOffset {1}
-!    // general
-!    ERR_BUSY_SENDING                    = 0x27, // busy sending
-!    ERR_UNEXPECTED_SENDDONE             = 0x28, // sendDone for packet I didn't send
-!    ERR_NO_FREE_PACKET_BUFFER           = 0x29, // no free packet buffer (code location {0})
-!    ERR_FREEING_UNUSED                  = 0x2a, // freeing unused memory
-!    ERR_FREEING_ERROR                   = 0x2b, // freeing memory unsupported memory
-!    ERR_UNSUPPORTED_COMMAND             = 0x2c, // unsupported command {0}
-!    ERR_MSG_UNKNOWN_TYPE                = 0x2d, // unknown message type {0}
-!    ERR_WRONG_ADDR_TYPE                 = 0x2e, // wrong address type {0} (code location {1})
-!    ERR_BRIDGE_MISMATCH                 = 0x2f, // isBridge mismatch (code location {0})
-!    ERR_HEADER_TOO_LONG                 = 0x30, // header too long, length {1} (code location {0})
-!    ERR_INPUTBUFFER_LENGTH              = 0x31, // input length problem, length={0}
-!    ERR_BOOTED                          = 0x32, // booted
-!    ERR_INVALIDSERIALFRAME              = 0x33, // invalid serial frame
-!    ERR_INVALIDPACKETFROMRADIO          = 0x34, // invalid packet from radio, length {1} (code location {0})
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! typedef uint16_t  errorparameter_t;
-! typedef uint16_t  dagrank_t;
-! typedef uint8_t   error_t;
-! #define bool uint8_t
-! 
-! PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t  byte4;
-!    uint16_t bytes2and3;
-!    uint16_t bytes0and1;
-! } asn_t;
-! PRAGMA(pack());
-! 
-! PRAGMA(pack(1));
-! typedef struct {                                 // always written big endian, i.e. MSB in addr[0]
-!    uint8_t type;
-!    union {
-!       uint8_t addr_16b[2];
-!       uint8_t addr_64b[8];
-!       uint8_t addr_128b[16];
-!       uint8_t panid[2];
-!       uint8_t prefix[8];
-!    };
-! } open_addr_t;
-! PRAGMA(pack());
-! 
-! typedef struct {
-!    //admin
-!    uint8_t       creator;                        // the component which called getFreePacketBuffer()
-!    uint8_t       owner;                          // the component which currently owns the entry
-!    uint8_t*      payload;                        // pointer to the start of the payload within 'packet'
-!    uint8_t       length;                         // length in bytes of the payload
-!    //l4
-!    uint8_t       l4_protocol;                    // l4 protocol to be used
-!    bool          l4_protocol_compressed;         // is the l4 protocol header compressed?
-!    uint16_t      l4_sourcePortORicmpv6Type;      // l4 source port
-!    uint16_t      l4_destination_port;            // l4 destination port
-!    uint8_t*      l4_payload;                     // pointer to the start of the payload of l4 (used for retransmits)
-!    uint8_t       l4_length;                      // length of the payload of l4 (used for retransmits)
-!    //l3
-!    open_addr_t   l3_destinationAdd;              // 128b IPv6 destination (down stack) 
-!    open_addr_t   l3_sourceAdd;                   // 128b IPv6 source address 
-!    //l2
-!    error_t       l2_sendDoneError;               // outcome of trying to send this packet
-!    open_addr_t   l2_nextORpreviousHop;           // 64b IEEE802.15.4 next (down stack) or previous (up) hop address
-!    uint8_t       l2_frameType;                   // beacon, data, ack, cmd
-!    uint8_t       l2_dsn;                         // sequence number of the received frame
-!    uint8_t       l2_retriesLeft;                 // number Tx retries left before packet dropped (dropped when hits 0)
-!    uint8_t       l2_numTxAttempts;               // number Tx attempts
-!    asn_t         l2_asn;                         // at what ASN the packet was Tx'ed or Rx'ed
-!    uint8_t*      l2_payload;                     // pointer to the start of the payload of l2 (used for MAC to fill in ASN in ADV)
-!    //l1 (drivers)
-!    uint8_t       l1_txPower;                     // power for packet to Tx at
-!    int8_t        l1_rssi;                        // RSSI of received packet
-!    uint8_t       l1_lqi;                         // LQI of received packet
-!    bool          l1_crc;                         // did received packet pass CRC check?
-!    //the packet
-!    uint8_t       packet[1+1+125+2+1];            // 1B spi address, 1B length, 125B data, 2B CRC, 1B LQI
-! } OpenQueueEntry_t;
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void openwsn_init();
-! 
-! #endif
---- 1,330 ----
-! /**
-! \brief General OpenWSN definitions
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, August 2010
-! \author Ankur Mehta <mehtank@eecs.berkeley.edu>, September 2010
-! */
-! 
-! #ifndef __OPENWSN_H
-! #define __OPENWSN_H
-! 
-! //general
-! #include <stdint.h>               // needed for uin8_t, uint16_t
-! #include "board_info.h"
-! 
-! #include <stdbool.h>
-! #include "kernel.h"
-! //========================= prototypes ========================================
-! void openwsn_start_thread(void);
-! 
-! //=========================== define ==========================================
-! 
-! #define PRIORITY_OPENWSN            PRIORITY_MAIN-1
-! 
-! static const uint8_t infoStackName[] = "OpenWSN ";
-! #define OPENWSN_VERSION_MAJOR     1
-! #define OPENWSN_VERSION_MINOR     4
-! #define OPENWSN_VERSION_PATCH     1
-! 
-! #ifndef TRUE
-! #define TRUE 1
-! #endif
-! 
-! #ifndef FALSE
-! #define FALSE 0
-! #endif
-! 
-! #define LENGTH_ADDR16b 2
-! #define LENGTH_ADDR64b 8
-! #define LENGTH_ADDR128b 16
-! 
-! enum {
-!    E_SUCCESS                           = 0,          
-!    E_FAIL                              = 1,
-! };
-! 
-! // types of addresses
-! enum {
-!    ADDR_NONE                           = 0,
-!    ADDR_16B                            = 1,
-!    ADDR_64B                            = 2,
-!    ADDR_128B                           = 3,
-!    ADDR_PANID                          = 4,
-!    ADDR_PREFIX                         = 5,
-!    ADDR_ANYCAST                        = 6,
-! };
-! 
-! enum {
-!    OW_LITTLE_ENDIAN                       = TRUE,
-!    OW_BIG_ENDIAN                          = FALSE,
-! };
-! 
-! // protocol numbers, as defined by the IANA
-! enum {
-!    IANA_IPv6HOPOPT                     = 0x00,
-!    IANA_TCP                            = 0x06,
-!    IANA_UDP                            = 0x11,
-!    IANA_IPv6ROUTE                      = 0x2b,
-!    IANA_ICMPv6                         = 0x3a,
-!    IANA_ICMPv6_ECHO_REQUEST            =  128,
-!    IANA_ICMPv6_ECHO_REPLY              =  129,
-!    IANA_ICMPv6_RS                      =  133,
-!    IANA_ICMPv6_RA                      =  134,
-!    IANA_ICMPv6_RA_PREFIX_INFORMATION   =    3,
-!    IANA_ICMPv6_RPL                     =  155,
-!    IANA_ICMPv6_RPL_DIO                 = 0x01,
-!    IANA_ICMPv6_RPL_DAO                 = 0x02,
-!    IANA_RSVP                           =   46,
-!    IANA_UNDEFINED                      =  250, //use an unassigned
-! };
-! 
-! // well known ports (which we define)
-! // warning: first 4 MSB of 2° octect may coincide with previous protocol number
-! enum {
-!    //TCP
-!    WKP_TCP_HTTP                        =    80,
-!    WKP_TCP_ECHO                        =     7,
-!    WKP_TCP_INJECT                      =  2188,
-!    WKP_TCP_DISCARD                     =     9,
-!    //UDP
-!    WKP_UDP_COAP                        =  5683,
-!    WKP_UDP_HELI                        =  2192,
-!    WKP_UDP_IMU                         =  2190,
-!    WKP_UDP_ECHO                        =     7,
-!    WKP_UDP_INJECT                      =  2188,
-!    WKP_UDP_DISCARD                     =     9,
-!    WKP_UDP_RAND                        = 61000,
-!    WKP_UDP_LATENCY                     = 61001,
-! };
-! 
-! //status elements
-! enum {
-!    STATUS_ISSYNC                       =  0,
-!    STATUS_ID                           =  1,
-!    STATUS_DAGRANK                      =  2,
-!    STATUS_OUTBUFFERINDEXES             =  3,
-!    STATUS_ASN                          =  4,
-!    STATUS_MACSTATS                     =  5,
-!    STATUS_SCHEDULE                     =  6,
-!    STATUS_BACKOFF                      =  7,
-!    STATUS_QUEUE                        =  8,
-!    STATUS_NEIGHBORS                    =  9,
-!    STATUS_MAX                          = 10,
-! };
-! 
-! //component identifiers
-! //the order is important because
-! enum {
-!    COMPONENT_NULL                      = 0x00,
-!    COMPONENT_OPENWSN                   = 0x01,
-!    //cross-layers
-!    COMPONENT_IDMANAGER                 = 0x02,
-!    COMPONENT_OPENQUEUE                 = 0x03,
-!    COMPONENT_OPENSERIAL                = 0x04,
-!    COMPONENT_PACKETFUNCTIONS           = 0x05,
-!    COMPONENT_RANDOM                    = 0x06,
-!    //PHY
-!    COMPONENT_RADIO                     = 0x07,
-!    //MAClow
-!    COMPONENT_IEEE802154                = 0x08,
-!    COMPONENT_IEEE802154E               = 0x09,
-!    
-!    //All components with higher component id than COMPONENT_IEEE802154E
-!    //won't be able to get free packets from the queue 
-!    //when the mote is not synch
-!    
-!    //MAClow<->MAChigh ("virtual components")
-!    COMPONENT_RES_TO_IEEE802154E        = 0x0a,
-!    COMPONENT_IEEE802154E_TO_RES        = 0x0b,
-!    //MAChigh
-!    COMPONENT_RES                       = 0x0c,
-!    COMPONENT_NEIGHBORS                 = 0x0d,
-!    COMPONENT_SCHEDULE                  = 0x0e,
-!    //IPHC
-!    COMPONENT_OPENBRIDGE                = 0x0f,
-!    COMPONENT_IPHC                      = 0x10,
-!    //IPv6
-!    COMPONENT_FORWARDING                = 0x11,
-!    COMPONENT_ICMPv6                    = 0x12,
-!    COMPONENT_ICMPv6ECHO                = 0x13,
-!    COMPONENT_ICMPv6ROUTER              = 0x14,
-!    COMPONENT_ICMPv6RPL                 = 0x15,
-!    //TRAN
-!    COMPONENT_OPENTCP                   = 0x16,
-!    COMPONENT_OPENUDP                   = 0x17,
-!    COMPONENT_OPENCOAP                  = 0x18,
-!    //App test
-!    COMPONENT_TCPECHO                   = 0x19,
-!    COMPONENT_TCPINJECT                 = 0x1a,
-!    COMPONENT_TCPPRINT                  = 0x1b,
-!    COMPONENT_UDPECHO                   = 0x1c,
-!    COMPONENT_UDPINJECT                 = 0x1d,
-!    COMPONENT_UDPPRINT                  = 0x1e,
-!    COMPONENT_RSVP                      = 0x1f,
-!    //App
-!    COMPONENT_OHLONE                    = 0x20,
-!    COMPONENT_HELI                      = 0x21,
-!    COMPONENT_IMU                       = 0x22,
-!    COMPONENT_RLEDS                     = 0x23,
-!    COMPONENT_RREG                      = 0x24,
-!    COMPONENT_RWELLKNOWN                = 0x25,
-!    COMPONENT_RT                        = 0x26,
-!    COMPONENT_REX                       = 0x27,
-!    COMPONENT_RXL1                      = 0x28,
-!    COMPONENT_RINFO                     = 0x29,
-!    COMPONENT_RHELI                     = 0x2a,
-!    COMPONENT_RRUBE                     = 0x2b,
-!    COMPONENT_LAYERDEBUG                = 0x2c,
-!    COMPONENT_UDPRAND                   = 0x2d,
-!    COMPONENT_UDPSTORM                  = 0x2e,
-!    COMPONENT_UDPLATENCY                = 0x2f,
-!    COMPONENT_TEST                      = 0x30,
-!    COMPONENT_R6TUS                    = 0x31,
-! };
-! 
-! /**
-! \brief error codes used throughout the OpenWSN stack
-! 
-! \note The comments are used in the Python parsing tool:
-!    - {0} refers to the value of the first argument,
-!    - {1} refers to the value of the second argument,
-! */
-! enum {
-!    // l7
-!    ERR_RCVD_ECHO_REQUEST               = 0x01, // received an echo request
-!    ERR_RCVD_ECHO_REPLY                 = 0x02, // received an echo reply
-!    ERR_GETDATA_ASKS_TOO_FEW_BYTES      = 0x03, // getData asks for too few bytes, maxNumBytes={0}, fill level={1}
-!    ERR_INPUT_BUFFER_OVERFLOW           = 0x04, // the input buffer has overflown
-!    ERR_COMMAND_NOT_ALLOWED             = 0x05, // the command is not allowerd, command = {0} 
-!    // l4
-!    ERR_WRONG_TRAN_PROTOCOL             = 0x06, // unknown transport protocol {0} (code location {1})
-!    ERR_WRONG_TCP_STATE                 = 0x07, // wrong TCP state {0} (code location {1})
-!    ERR_TCP_RESET                       = 0x08, // TCP reset while in state {0} (code location {1})
-!    ERR_UNSUPPORTED_PORT_NUMBER         = 0x09, // unsupported port number {0} (code location {1})
-!    // l3
-!    ERR_UNEXPECTED_DAO                  = 0x0a, // unexpected DAO (code location {0})
-!    ERR_UNSUPPORTED_ICMPV6_TYPE         = 0x0b, // unsupported ICMPv6 type {0} (code location {1})
-!    ERR_6LOWPAN_UNSUPPORTED             = 0x0c, // unsupported 6LoWPAN parameter {1} at location {0}
-!    ERR_NO_NEXTHOP                      = 0x0d, // no next hop
-!    ERR_INVALID_PARAM                   = 0x0e, // invalid parameter
-!    ERR_INVALID_FWDMODE                 = 0x0f, // invalid forward mode
-!    ERR_LARGE_DAGRANK                   = 0x10, // large DAGrank {0}, set to {1}
-!    ERR_HOP_LIMIT_REACHED               = 0x11, // packet discarded hop limit reached
-!    ERR_LOOP_DETECTED                   = 0x12, // loop detected due to previous rank {0} lower than current node rank {1}
-!    ERR_WRONG_DIRECTION                 = 0x13, // upstream packet set to be downstream, possible loop.
-!    // l2b
-!    ERR_NEIGHBORS_FULL                  = 0x14, // neighbors table is full (max number of neighbor is {0})
-!    ERR_NO_SENT_PACKET                  = 0x15, // there is no sent packet in queue
-!    ERR_NO_RECEIVED_PACKET              = 0x16, // there is no received packet in queue
-!    ERR_SCHEDULE_OVERFLOWN              = 0x17, // schedule overflown
-!    // l2a
-!    ERR_WRONG_CELLTYPE                  = 0x18, // wrong celltype {0} at slotOffset {1}
-!    ERR_IEEE154_UNSUPPORTED             = 0x19, // unsupported IEEE802.15.4 parameter {1} at location {0}
-!    ERR_DESYNCHRONIZED                  = 0x1a, // got desynchronized at slotOffset {0}
-!    ERR_SYNCHRONIZED                    = 0x1b, // synchronized at slotOffset {0}
-!    ERR_LARGE_TIMECORRECTION            = 0x1c, // large timeCorr.: {0} ticks (code loc. {1})
-!    ERR_WRONG_STATE_IN_ENDFRAME_SYNC    = 0x1d, // wrong state {0} in end of frame+sync
-!    ERR_WRONG_STATE_IN_STARTSLOT        = 0x1e, // wrong state {0} in startSlot, at slotOffset {1}
-!    ERR_WRONG_STATE_IN_TIMERFIRES       = 0x1f, // wrong state {0} in timer fires, at slotOffset {1}
-!    ERR_WRONG_STATE_IN_NEWSLOT          = 0x20, // wrong state {0} in start of frame, at slotOffset {1}
-!    ERR_WRONG_STATE_IN_ENDOFFRAME       = 0x21, // wrong state {0} in end of frame, at slotOffset {1}
-!    ERR_MAXTXDATAPREPARE_OVERFLOW       = 0x22, // maxTxDataPrepare overflows while at state {0} in slotOffset {1}
-!    ERR_MAXRXACKPREPARE_OVERFLOWS       = 0x23, // maxRxAckPrepapare overflows while at state {0} in slotOffset {1}
-!    ERR_MAXRXDATAPREPARE_OVERFLOWS      = 0x24, // maxRxDataPrepapre overflows while at state {0} in slotOffset {1}
-!    ERR_MAXTXACKPREPARE_OVERFLOWS       = 0x25, // maxTxAckPrepapre overflows while at state {0} in slotOffset {1}
-!    ERR_WDDATADURATION_OVERFLOWS        = 0x26, // wdDataDuration overflows while at state {0} in slotOffset {1}
-!    ERR_WDRADIO_OVERFLOWS               = 0x27, // wdRadio overflows while at state {0} in slotOffset {1}
-!    ERR_WDRADIOTX_OVERFLOWS             = 0x28, // wdRadioTx overflows while at state {0} in slotOffset {1}
-!    ERR_WDACKDURATION_OVERFLOWS         = 0x29, // wdAckDuration overflows while at state {0} in slotOffset {1}
-!    // general
-!    ERR_BUSY_SENDING                    = 0x2a, // busy sending
-!    ERR_UNEXPECTED_SENDDONE             = 0x2b, // sendDone for packet I didn't send
-!    ERR_NO_FREE_PACKET_BUFFER           = 0x2c, // no free packet buffer (code location {0})
-!    ERR_FREEING_UNUSED                  = 0x2d, // freeing unused memory
-!    ERR_FREEING_ERROR                   = 0x2e, // freeing memory unsupported memory
-!    ERR_UNSUPPORTED_COMMAND             = 0x2f, // unsupported command {0}
-!    ERR_MSG_UNKNOWN_TYPE                = 0x30, // unknown message type {0}
-!    ERR_WRONG_ADDR_TYPE                 = 0x31, // wrong address type {0} (code location {1})
-!    ERR_BRIDGE_MISMATCH                 = 0x32, // isBridge mismatch (code location {0})
-!    ERR_HEADER_TOO_LONG                 = 0x33, // header too long, length {1} (code location {0})
-!    ERR_INPUTBUFFER_LENGTH              = 0x34, // input length problem, length={0}
-!    ERR_BOOTED                          = 0x35, // booted
-!    ERR_INVALIDSERIALFRAME              = 0x36, // invalid serial frame
-!    ERR_INVALIDPACKETFROMRADIO          = 0x37, // invalid packet frome radio, length {1} (code location {0})
-!    ERR_BUSY_RECEIVING                  = 0x38, // busy receiving when stop of serial activity, buffer input length {1} (code location {0})
-!    ERR_WRONG_CRC_INPUT                 = 0x39, // wrong CRC in input Buffer (input length {0})
-! };
-! 
-! //=========================== typedef =========================================
-! 
-! 
-! typedef uint16_t  errorparameter_t;
-! typedef uint16_t  dagrank_t;
-! typedef uint8_t   owerror_t;
-! //#define bool uint8_t
-! 
-! //PRAGMA(pack(1));
-! typedef struct {
-!    uint8_t  byte4;
-!    uint16_t bytes2and3;
-!    uint16_t bytes0and1;
-! } asn_t;
-! //PRAGMA(pack());
-! 
-! //PRAGMA(pack(1));
-! typedef struct {                                 // always written big endian, i.e. MSB in addr[0]
-!    uint8_t type;
-!    union {
-!       uint8_t addr_16b[2];
-!       uint8_t addr_64b[8];
-!       uint8_t addr_128b[16];
-!       uint8_t panid[2];
-!       uint8_t prefix[8];
-!    };
-! } open_addr_t;
-! //PRAGMA(pack());
-! 
-! typedef struct {
-!    //admin
-!    uint8_t       creator;                        // the component which called getFreePacketBuffer()
-!    uint8_t       owner;                          // the component which currently owns the entry
-!    uint8_t*      payload;                        // pointer to the start of the payload within 'packet'
-!    uint8_t       length;                         // length in bytes of the payload
-!    //l4
-!    uint8_t       l4_protocol;                    // l4 protocol to be used
-!    bool          l4_protocol_compressed;         // is the l4 protocol header compressed?
-!    uint16_t      l4_sourcePortORicmpv6Type;      // l4 source port
-!    uint16_t      l4_destination_port;            // l4 destination port
-!    uint8_t*      l4_payload;                     // pointer to the start of the payload of l4 (used for retransmits)
-!    uint8_t       l4_length;                      // length of the payload of l4 (used for retransmits)
-!    //l3
-!    open_addr_t   l3_destinationAdd;              // 128b IPv6 destination (down stack) 
-!    open_addr_t   l3_sourceAdd;                   // 128b IPv6 source address 
-!    //l2
-!    owerror_t     l2_sendDoneError;               // outcome of trying to send this packet
-!    open_addr_t   l2_nextORpreviousHop;           // 64b IEEE802.15.4 next (down stack) or previous (up) hop address
-!    uint8_t       l2_frameType;                   // beacon, data, ack, cmd
-!    uint8_t       l2_dsn;                         // sequence number of the received frame
-!    uint8_t       l2_retriesLeft;                 // number Tx retries left before packet dropped (dropped when hits 0)
-!    uint8_t       l2_numTxAttempts;               // number Tx attempts
-!    asn_t         l2_asn;                         // at what ASN the packet was Tx'ed or Rx'ed
-!    uint8_t*      l2_payload;                     // pointer to the start of the payload of l2 (used for MAC to fill in ASN in ADV)
-!    uint8_t*      l2_ASNpayload;                  // pointer to the ASN in EB
-!    uint8_t       l2_joinPriority;                // the join priority received in EB
-!    bool          l2_joinPriorityPresent;
-!    //l1 (drivers)
-!    uint8_t       l1_txPower;                     // power for packet to Tx at
-!    int8_t        l1_rssi;                        // RSSI of received packet
-!    uint8_t       l1_lqi;                         // LQI of received packet
-!    bool          l1_crc;                         // did received packet pass CRC check?
-!    //the packet
-!    uint8_t       packet[1+1+125+2+1];            // 1B spi address, 1B length, 125B data, 2B CRC, 1B LQI
-! } OpenQueueEntry_t;
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! extern void openwsn_init(void);
-! 
-! #endif
-diff -crB openwsn/radio.c ../../../sys/net/openwsn/radio.c
-*** openwsn/radio.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/radio.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,409 ****
-! /**
-! \brief CC2420-specific definition of the "radio" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "board.h"
-! #include "radio.h"
-! #include "cc2420.h"
-! #include "spi.h"
-! #include "debugpins.h"
-! #include "leds.h"
-! 
-! //=========================== defines =========================================
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    cc2420_status_t radioStatusByte;
-!    radio_state_t   state;
-! } radio_vars_t;
-! 
-! radio_vars_t radio_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void radio_spiStrobe     (uint8_t strobe, cc2420_status_t* statusRead);
-! void radio_spiWriteReg   (uint8_t reg,    cc2420_status_t* statusRead, uint16_t regValueToWrite);
-! void radio_spiReadReg    (uint8_t reg,    cc2420_status_t* statusRead, uint8_t* regValueRead);
-! void radio_spiWriteTxFifo(                cc2420_status_t* statusRead, uint8_t* bufToWrite, uint8_t  lenToWrite);
-! void radio_spiReadRxFifo (                cc2420_status_t* statusRead, uint8_t* bufRead,    uint8_t* lenRead, uint8_t maxBufLen);
-! 
-! //=========================== public ==========================================
-! 
-! //===== admin
-! 
-! void radio_init() {
-!    // clear variables
-!    memset(&radio_vars,0,sizeof(radio_vars_t));
-!    
-!    // change state
-!    radio_vars.state          = RADIOSTATE_STOPPED;
-!    
-!    // reset radio
-!    radio_reset();
-!    
-!    // change state
-!    radio_vars.state          = RADIOSTATE_RFOFF;
-!    
-!    // start radiotimer with dummy setting to activate SFD pin interrupt
-!    radiotimer_start(0xffff);
-! }
-! 
-! void radio_setOverflowCb(radiotimer_compare_cbt cb) {
-!    radiotimer_setOverflowCb(cb);
-! }
-! 
-! void radio_setCompareCb(radiotimer_compare_cbt cb) {
-!    radiotimer_setCompareCb(cb);
-! }
-! 
-! void radio_setStartFrameCb(radiotimer_capture_cbt cb) {
-!    radiotimer_setStartFrameCb(cb);
-! }
-! 
-! void radio_setEndFrameCb(radiotimer_capture_cbt cb) {
-!    radiotimer_setEndFrameCb(cb);
-! }
-! 
-! //===== reset
-! 
-! void radio_reset() {
-!    volatile uint16_t     delay;
-!    cc2420_MDMCTRL0_reg_t cc2420_MDMCTRL0_reg;
-!    cc2420_TXCTRL_reg_t   cc2420_TXCTRL_reg;
-!    cc2420_RXCTRL1_reg_t  cc2420_RXCTRL1_reg;
-!    
-!    // set radio VREG pin high
-!    PORT_PIN_RADIO_VREG_HIGH();
-!    for (delay=0xffff;delay>0;delay--);           // max. VREG start-up time is 0.6ms
-!    
-!    // set radio RESET pin low
-!    PORT_PIN_RADIO_RESET_LOW();
-!    for (delay=0xffff;delay>0;delay--);
-!    
-!    // set radio RESET pin high
-!    PORT_PIN_RADIO_RESET_HIGH();
-!    for (delay=0xffff;delay>0;delay--);
-!    
-!    // disable address recognition
-!    cc2420_MDMCTRL0_reg.PREAMBLE_LENGTH      = 2; // 3 leading zero's (IEEE802.15.4 compliant)
-!    cc2420_MDMCTRL0_reg.AUTOACK              = 0;
-!    cc2420_MDMCTRL0_reg.AUTOCRC              = 1;
-!    cc2420_MDMCTRL0_reg.CCA_MODE             = 3;
-!    cc2420_MDMCTRL0_reg.CCA_HYST             = 2;
-!    cc2420_MDMCTRL0_reg.ADR_DECODE           = 0; // turn OFF address recognition
-!    cc2420_MDMCTRL0_reg.PAN_COORDINATOR      = 0;
-!    cc2420_MDMCTRL0_reg.RESERVED_FRAME_MODE  = 1; // accept all frame types
-!    cc2420_MDMCTRL0_reg.reserved_w0          = 0;
-!    radio_spiWriteReg(CC2420_MDMCTRL0_ADDR,
-!                      &radio_vars.radioStatusByte,
-!                      *(uint16_t*)&cc2420_MDMCTRL0_reg);
-!    
-!    // speed up time to TX
-!    cc2420_TXCTRL_reg.PA_LEVEL               = 31;// max. TX power (~0dBm)
-!    cc2420_TXCTRL_reg.reserved_w1            = 1;
-!    cc2420_TXCTRL_reg.PA_CURRENT             = 3;
-!    cc2420_TXCTRL_reg.TXMIX_CURRENT          = 0;
-!    cc2420_TXCTRL_reg.TXMIX_CAP_ARRAY        = 0;
-!    cc2420_TXCTRL_reg.TX_TURNAROUND          = 0; // faster STXON->SFD timing (128us)
-!    cc2420_TXCTRL_reg.TXMIXBUF_CUR           = 2;
-!    radio_spiWriteReg(CC2420_TXCTRL_ADDR,
-!                      &radio_vars.radioStatusByte,
-!                      *(uint16_t*)&cc2420_TXCTRL_reg);
-!    
-!    // apply correction recommended in datasheet
-!    cc2420_RXCTRL1_reg.RXMIX_CURRENT         = 2;
-!    cc2420_RXCTRL1_reg.RXMIX_VCM             = 1;
-!    cc2420_RXCTRL1_reg.RXMIX_TAIL            = 1;
-!    cc2420_RXCTRL1_reg.LNA_CAP_ARRAY         = 1;
-!    cc2420_RXCTRL1_reg.MED_HGM               = 0;
-!    cc2420_RXCTRL1_reg.HIGH_HGM              = 1;
-!    cc2420_RXCTRL1_reg.MED_LOWGAIN           = 0;
-!    cc2420_RXCTRL1_reg.LOW_LOWGAIN           = 1;
-!    cc2420_RXCTRL1_reg.RXBPF_MIDCUR          = 0;
-!    cc2420_RXCTRL1_reg.RXBPF_LOCUR           = 1; // use this setting as per datasheet
-!    cc2420_RXCTRL1_reg.reserved_w0           = 0;
-!    radio_spiWriteReg(CC2420_RXCTRL1_ADDR,
-!                      &radio_vars.radioStatusByte,
-!                      *(uint16_t*)&cc2420_RXCTRL1_reg);
-! }
-! 
-! //===== timer
-! 
-! void radio_startTimer(uint16_t period) {
-!    radiotimer_start(period);
-! }
-! 
-! uint16_t radio_getTimerValue() {
-!    return radiotimer_getValue();
-! }
-! 
-! void radio_setTimerPeriod(uint16_t period) {
-!    radiotimer_setPeriod(period);
-! }
-! 
-! uint16_t radio_getTimerPeriod() {
-!    return radiotimer_getPeriod();
-! }
-! 
-! //===== RF admin
-! 
-! void radio_setFrequency(uint8_t frequency) {
-!    cc2420_FSCTRL_reg_t cc2420_FSCTRL_reg;
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_SETTING_FREQUENCY;
-!    
-!    cc2420_FSCTRL_reg.FREQ         = frequency-11;
-!    cc2420_FSCTRL_reg.FREQ        *= 5;
-!    cc2420_FSCTRL_reg.FREQ        += 357;
-!    cc2420_FSCTRL_reg.LOCK_STATUS  = 0;
-!    cc2420_FSCTRL_reg.LOCK_LENGTH  = 0;
-!    cc2420_FSCTRL_reg.CAL_RUNNING  = 0;
-!    cc2420_FSCTRL_reg.CAL_DONE     = 0;
-!    cc2420_FSCTRL_reg.LOCK_THR     = 1;
-!    
-!    radio_spiWriteReg(CC2420_FSCTRL_ADDR,
-!                      &radio_vars.radioStatusByte,
-!                      *(uint16_t*)&cc2420_FSCTRL_reg);
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_FREQUENCY_SET;
-! }
-! 
-! void radio_rfOn() {   
-!    radio_spiStrobe(CC2420_SXOSCON, &radio_vars.radioStatusByte);
-!    while (radio_vars.radioStatusByte.xosc16m_stable==0) {
-!       radio_spiStrobe(CC2420_SNOP, &radio_vars.radioStatusByte);
-!    }
-! }
-! 
-! void radio_rfOff() {
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_TURNING_OFF;
-!    
-!    radio_spiStrobe(CC2420_SRFOFF, &radio_vars.radioStatusByte);
-!    // poipoipoi wait until off
-!    
-!    // wiggle debug pin
-!    debugpins_radio_clr();
-!    leds_radio_off();
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_RFOFF;
-! }
-! 
-! //===== TX
-! 
-! void radio_loadPacket(uint8_t* packet, uint8_t len) {
-!    // change state
-!    radio_vars.state = RADIOSTATE_LOADING_PACKET;
-!    
-!    radio_spiStrobe(CC2420_SFLUSHTX, &radio_vars.radioStatusByte);
-!    radio_spiWriteTxFifo(&radio_vars.radioStatusByte, packet, len);
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_PACKET_LOADED;
-! }
-! 
-! void radio_txEnable() {
-!    // change state
-!    radio_vars.state = RADIOSTATE_ENABLING_TX;
-!    
-!    // wiggle debug pin
-!    debugpins_radio_set();
-!    leds_radio_on();
-!    
-!    // I don't fully understand how the CC2420_STXCA the can be used here.
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_TX_ENABLED;
-! }
-! 
-! void radio_txNow() {
-!    // change state
-!    radio_vars.state = RADIOSTATE_TRANSMITTING;
-!    
-!    radio_spiStrobe(CC2420_STXON, &radio_vars.radioStatusByte);
-! }
-! 
-! //===== RX
-! 
-! void radio_rxEnable() {
-!    // change state
-!    radio_vars.state = RADIOSTATE_ENABLING_RX;
-!    
-!    // put radio in reception mode
-!    radio_spiStrobe(CC2420_SRXON, &radio_vars.radioStatusByte);
-!    radio_spiStrobe(CC2420_SFLUSHRX, &radio_vars.radioStatusByte);
-!    
-!    // wiggle debug pin
-!    debugpins_radio_set();
-!    leds_radio_on();
-!    
-!    // busy wait until radio really listening
-!    while (radio_vars.radioStatusByte.rssi_valid==0) {
-!       radio_spiStrobe(CC2420_SNOP, &radio_vars.radioStatusByte);
-!    }
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_LISTENING;
-! }
-! 
-! void radio_rxNow() {
-!    // nothing to do, the radio is already listening.
-! }
-! 
-! void radio_getReceivedFrame(uint8_t* bufRead,
-!                             uint8_t* lenRead,
-!                             uint8_t  maxBufLen,
-!                              int8_t* rssi,
-!                             uint8_t* lqi,
-!                             uint8_t* crc) {
-!    // read the received packet from the RXFIFO
-!    radio_spiReadRxFifo(&radio_vars.radioStatusByte, bufRead, lenRead, maxBufLen);
-!    
-!    // On reception, when MODEMCTRL0.AUTOCRC is set, the CC2420 replaces the
-!    // received CRC by:
-!    // - [1B] the rssi, a signed value. The actual value in dBm is that - 45.
-!    // - [1B] whether CRC checked (bit 7) and LQI (bit 6-0)
-!    *rssi  =  *(bufRead+*lenRead-2);
-!    *rssi -= 45;
-!    *crc   = ((*(bufRead+*lenRead-1))&0x80)>>7;
-!    *lqi   =  (*(bufRead+*lenRead-1))&0x7f;
-! }
-! 
-! //=========================== private =========================================
-! 
-! void radio_spiStrobe(uint8_t strobe, cc2420_status_t* statusRead) {
-!    uint8_t  spi_tx_buffer[1];
-!    
-!    spi_tx_buffer[0]     = (CC2420_FLAG_WRITE | CC2420_FLAG_REG | strobe);
-!    
-!    spi_txrx(spi_tx_buffer,
-!             sizeof(spi_tx_buffer),
-!             SPI_FIRSTBYTE,
-!             (uint8_t*)statusRead,
-!             1,
-!             SPI_FIRST,
-!             SPI_LAST);
-! }
-! 
-! void radio_spiWriteReg(uint8_t reg, cc2420_status_t* statusRead, uint16_t regValueToWrite) {
-!    uint8_t              spi_tx_buffer[3];
-!    
-!    spi_tx_buffer[0]     = (CC2420_FLAG_WRITE | CC2420_FLAG_REG | reg);
-!    spi_tx_buffer[1]     = regValueToWrite/256;
-!    spi_tx_buffer[2]     = regValueToWrite%256;
-!    
-!    spi_txrx(spi_tx_buffer,
-!             sizeof(spi_tx_buffer),
-!             SPI_FIRSTBYTE,
-!             (uint8_t*)statusRead,
-!             1,
-!             SPI_FIRST,
-!             SPI_LAST);
-! }
-! 
-! void radio_spiReadReg(uint8_t reg, cc2420_status_t* statusRead, uint8_t* regValueRead) {
-!    uint8_t              spi_tx_buffer[3];
-!    uint8_t              spi_rx_buffer[3];
-!    
-!    spi_tx_buffer[0]     = (CC2420_FLAG_READ | CC2420_FLAG_REG | reg);
-!    spi_tx_buffer[1]     = 0x00;
-!    spi_tx_buffer[2]     = 0x00;
-!    
-!    spi_txrx(spi_tx_buffer,
-!             sizeof(spi_tx_buffer),
-!             SPI_BUFFER,
-!             spi_rx_buffer,
-!             sizeof(spi_rx_buffer),
-!             SPI_FIRST,
-!             SPI_LAST);
-!    
-!    *statusRead          = *(cc2420_status_t*)&spi_rx_buffer[0];
-!    *(regValueRead+0)    = spi_rx_buffer[2];
-!    *(regValueRead+1)    = spi_rx_buffer[1];
-! }
-! 
-! void radio_spiWriteTxFifo(cc2420_status_t* statusRead, uint8_t* bufToWrite, uint8_t len) {
-!    uint8_t              spi_tx_buffer[2];
-!    
-!    // step 1. send SPI address and length byte
-!    spi_tx_buffer[0]     = (CC2420_FLAG_WRITE | CC2420_FLAG_REG | CC2420_TXFIFO_ADDR);
-!    spi_tx_buffer[1]     = len;
-!    
-!    spi_txrx(spi_tx_buffer,
-!             sizeof(spi_tx_buffer),
-!             SPI_FIRSTBYTE,
-!             (uint8_t*)statusRead,
-!             1,
-!             SPI_FIRST,
-!             SPI_NOTLAST);
-!    
-!    // step 2. send payload
-!    spi_txrx(bufToWrite,
-!             len,
-!             SPI_LASTBYTE,
-!             (uint8_t*)statusRead,
-!             1,
-!             SPI_NOTFIRST,
-!             SPI_LAST);
-! }
-! 
-! void radio_spiReadRxFifo(cc2420_status_t* statusRead,
-!                          uint8_t*         pBufRead,
-!                          uint8_t*         pLenRead,
-!                          uint8_t          maxBufLen) {
-!    // when reading the packet over SPI from the RX buffer, you get the following:
-!    // - *[1B]     dummy byte because of SPI
-!    // - *[1B]     length byte
-!    // -  [0-125B] packet (excluding CRC)
-!    // - *[2B]     CRC
-!    uint8_t spi_tx_buffer[125];
-!    uint8_t spi_rx_buffer[3];
-!    
-!    spi_tx_buffer[0]     = (CC2420_FLAG_READ | CC2420_FLAG_REG | CC2420_RXFIFO_ADDR);
-!    
-!    // 2 first bytes
-!    spi_txrx(spi_tx_buffer,
-!             2,
-!             SPI_BUFFER,
-!             spi_rx_buffer,
-!             sizeof(spi_rx_buffer),
-!             SPI_FIRST,
-!             SPI_NOTLAST);
-!    
-!    *statusRead          = *(cc2420_status_t*)&spi_rx_buffer[0];
-!    *pLenRead            = spi_rx_buffer[1];
-!    
-!    if (*pLenRead>2 && *pLenRead<=127) {
-!       // valid length
-!       
-!       //read packet
-!       spi_txrx(spi_tx_buffer,
-!                *pLenRead,
-!                SPI_BUFFER,
-!                pBufRead,
-!                125,
-!                SPI_NOTFIRST,
-!                SPI_LAST);
-!       
-!    } else {
-!       // invalid length
-!       
-!       // read a just byte to close spi
-!       spi_txrx(spi_tx_buffer,
-!                1,
-!                SPI_BUFFER,
-!                spi_rx_buffer,
-!                sizeof(spi_rx_buffer),
-!                SPI_NOTFIRST,
-!                SPI_LAST);
-!    }
-! }
-! 
-! //=========================== callbacks =======================================
---- 1,409 ----
-! /**
-! \brief CC2420-specific definition of the "radio" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "board.h"
-! #include "radio.h"
-! #include "cc2420.h"
-! #include "spi.h"
-! #include "debugpins.h"
-! #include "leds.h"
-! 
-! //=========================== defines =========================================
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    cc2420_status_t radioStatusByte;
-!    radio_state_t   state;
-! } radio_vars_t;
-! 
-! radio_vars_t radio_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! void radio_spiStrobe     (uint8_t strobe, cc2420_status_t* statusRead);
-! void radio_spiWriteReg   (uint8_t reg,    cc2420_status_t* statusRead, uint16_t regValueToWrite);
-! void radio_spiReadReg    (uint8_t reg,    cc2420_status_t* statusRead, uint8_t* regValueRead);
-! void radio_spiWriteTxFifo(                cc2420_status_t* statusRead, uint8_t* bufToWrite, uint8_t  lenToWrite);
-! void radio_spiReadRxFifo (                cc2420_status_t* statusRead, uint8_t* bufRead,    uint8_t* lenRead, uint8_t maxBufLen);
-! 
-! //=========================== public ==========================================
-! 
-! //===== admin
-! 
-! void radio_init(void) {
-!    // clear variables
-!    memset(&radio_vars,0,sizeof(radio_vars_t));
-!    
-!    // change state
-!    radio_vars.state          = RADIOSTATE_STOPPED;
-!    
-!    // reset radio
-!    radio_reset();
-!    
-!    // change state
-!    radio_vars.state          = RADIOSTATE_RFOFF;
-!    
-!    // start radiotimer with dummy setting to activate SFD pin interrupt
-!    radiotimer_start(0xffff);
-! }
-! 
-! void radio_setOverflowCb(radiotimer_compare_cbt cb) {
-!    radiotimer_setOverflowCb(cb);
-! }
-! 
-! void radio_setCompareCb(radiotimer_compare_cbt cb) {
-!    radiotimer_setCompareCb(cb);
-! }
-! 
-! void radio_setStartFrameCb(radiotimer_capture_cbt cb) {
-!    radiotimer_setStartFrameCb(cb);
-! }
-! 
-! void radio_setEndFrameCb(radiotimer_capture_cbt cb) {
-!    radiotimer_setEndFrameCb(cb);
-! }
-! 
-! //===== reset
-! 
-! void radio_reset(void) {
-!    volatile uint16_t     delay;
-!    cc2420_MDMCTRL0_reg_t cc2420_MDMCTRL0_reg;
-!    cc2420_TXCTRL_reg_t   cc2420_TXCTRL_reg;
-!    cc2420_RXCTRL1_reg_t  cc2420_RXCTRL1_reg;
-!    
-!    // set radio VREG pin high
-!    PORT_PIN_RADIO_VREG_HIGH();
-!    for (delay=0xffff;delay>0;delay--);           // max. VREG start-up time is 0.6ms
-!    
-!    // set radio RESET pin low
-!    PORT_PIN_RADIO_RESET_LOW();
-!    for (delay=0xffff;delay>0;delay--);
-!    
-!    // set radio RESET pin high
-!    PORT_PIN_RADIO_RESET_HIGH();
-!    for (delay=0xffff;delay>0;delay--);
-!    
-!    // disable address recognition
-!    cc2420_MDMCTRL0_reg.PREAMBLE_LENGTH      = 2; // 3 leading zero's (IEEE802.15.4 compliant)
-!    cc2420_MDMCTRL0_reg.AUTOACK              = 0;
-!    cc2420_MDMCTRL0_reg.AUTOCRC              = 1;
-!    cc2420_MDMCTRL0_reg.CCA_MODE             = 3;
-!    cc2420_MDMCTRL0_reg.CCA_HYST             = 2;
-!    cc2420_MDMCTRL0_reg.ADR_DECODE           = 0; // turn OFF address recognition
-!    cc2420_MDMCTRL0_reg.PAN_COORDINATOR      = 0;
-!    cc2420_MDMCTRL0_reg.RESERVED_FRAME_MODE  = 1; // accept all frame types
-!    cc2420_MDMCTRL0_reg.reserved_w0          = 0;
-!    radio_spiWriteReg(CC2420_MDMCTRL0_ADDR,
-!                      &radio_vars.radioStatusByte,
-!                      *(uint16_t*)&cc2420_MDMCTRL0_reg);
-!    
-!    // speed up time to TX
-!    cc2420_TXCTRL_reg.PA_LEVEL               = 31;// max. TX power (~0dBm)
-!    cc2420_TXCTRL_reg.reserved_w1            = 1;
-!    cc2420_TXCTRL_reg.PA_CURRENT             = 3;
-!    cc2420_TXCTRL_reg.TXMIX_CURRENT          = 0;
-!    cc2420_TXCTRL_reg.TXMIX_CAP_ARRAY        = 0;
-!    cc2420_TXCTRL_reg.TX_TURNAROUND          = 0; // faster STXON->SFD timing (128us)
-!    cc2420_TXCTRL_reg.TXMIXBUF_CUR           = 2;
-!    radio_spiWriteReg(CC2420_TXCTRL_ADDR,
-!                      &radio_vars.radioStatusByte,
-!                      *(uint16_t*)&cc2420_TXCTRL_reg);
-!    
-!    // apply correction recommended in datasheet
-!    cc2420_RXCTRL1_reg.RXMIX_CURRENT         = 2;
-!    cc2420_RXCTRL1_reg.RXMIX_VCM             = 1;
-!    cc2420_RXCTRL1_reg.RXMIX_TAIL            = 1;
-!    cc2420_RXCTRL1_reg.LNA_CAP_ARRAY         = 1;
-!    cc2420_RXCTRL1_reg.MED_HGM               = 0;
-!    cc2420_RXCTRL1_reg.HIGH_HGM              = 1;
-!    cc2420_RXCTRL1_reg.MED_LOWGAIN           = 0;
-!    cc2420_RXCTRL1_reg.LOW_LOWGAIN           = 1;
-!    cc2420_RXCTRL1_reg.RXBPF_MIDCUR          = 0;
-!    cc2420_RXCTRL1_reg.RXBPF_LOCUR           = 1; // use this setting as per datasheet
-!    cc2420_RXCTRL1_reg.reserved_w0           = 0;
-!    radio_spiWriteReg(CC2420_RXCTRL1_ADDR,
-!                      &radio_vars.radioStatusByte,
-!                      *(uint16_t*)&cc2420_RXCTRL1_reg);
-! }
-! 
-! //===== timer
-! 
-! void radio_startTimer(uint16_t period) {
-!    radiotimer_start(period);
-! }
-! 
-! uint16_t radio_getTimerValue(void) {
-!    return radiotimer_getValue();
-! }
-! 
-! void radio_setTimerPeriod(uint16_t period) {
-!    radiotimer_setPeriod(period);
-! }
-! 
-! uint16_t radio_getTimerPeriod(void) {
-!    return radiotimer_getPeriod();
-! }
-! 
-! //===== RF admin
-! 
-! void radio_setFrequency(uint8_t frequency) {
-!    cc2420_FSCTRL_reg_t cc2420_FSCTRL_reg;
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_SETTING_FREQUENCY;
-!    
-!    cc2420_FSCTRL_reg.FREQ         = frequency-11;
-!    cc2420_FSCTRL_reg.FREQ        *= 5;
-!    cc2420_FSCTRL_reg.FREQ        += 357;
-!    cc2420_FSCTRL_reg.LOCK_STATUS  = 0;
-!    cc2420_FSCTRL_reg.LOCK_LENGTH  = 0;
-!    cc2420_FSCTRL_reg.CAL_RUNNING  = 0;
-!    cc2420_FSCTRL_reg.CAL_DONE     = 0;
-!    cc2420_FSCTRL_reg.LOCK_THR     = 1;
-!    
-!    radio_spiWriteReg(CC2420_FSCTRL_ADDR,
-!                      &radio_vars.radioStatusByte,
-!                      *(uint16_t*)&cc2420_FSCTRL_reg);
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_FREQUENCY_SET;
-! }
-! 
-! void radio_rfOn(void) {   
-!    radio_spiStrobe(CC2420_SXOSCON, &radio_vars.radioStatusByte);
-!    while (radio_vars.radioStatusByte.xosc16m_stable==0) {
-!       radio_spiStrobe(CC2420_SNOP, &radio_vars.radioStatusByte);
-!    }
-! }
-! 
-! void radio_rfOff(void) {
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_TURNING_OFF;
-!    
-!    radio_spiStrobe(CC2420_SRFOFF, &radio_vars.radioStatusByte);
-!    // poipoipoi wait until off
-!    
-!    // wiggle debug pin
-!    debugpins_radio_clr();
-!    leds_radio_off();
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_RFOFF;
-! }
-! 
-! //===== TX
-! 
-! void radio_loadPacket(uint8_t* packet, uint8_t len) {
-!    // change state
-!    radio_vars.state = RADIOSTATE_LOADING_PACKET;
-!    
-!    radio_spiStrobe(CC2420_SFLUSHTX, &radio_vars.radioStatusByte);
-!    radio_spiWriteTxFifo(&radio_vars.radioStatusByte, packet, len);
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_PACKET_LOADED;
-! }
-! 
-! void radio_txEnable(void) {
-!    // change state
-!    radio_vars.state = RADIOSTATE_ENABLING_TX;
-!    
-!    // wiggle debug pin
-!    debugpins_radio_set();
-!    leds_radio_on();
-!    
-!    // I don't fully understand how the CC2420_STXCA the can be used here.
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_TX_ENABLED;
-! }
-! 
-! void radio_txNow(void) {
-!    // change state
-!    radio_vars.state = RADIOSTATE_TRANSMITTING;
-!    
-!    radio_spiStrobe(CC2420_STXON, &radio_vars.radioStatusByte);
-! }
-! 
-! //===== RX
-! 
-! void radio_rxEnable(void) {
-!    // change state
-!    radio_vars.state = RADIOSTATE_ENABLING_RX;
-!    
-!    // put radio in reception mode
-!    radio_spiStrobe(CC2420_SRXON, &radio_vars.radioStatusByte);
-!    radio_spiStrobe(CC2420_SFLUSHRX, &radio_vars.radioStatusByte);
-!    
-!    // wiggle debug pin
-!    debugpins_radio_set();
-!    leds_radio_on();
-!    
-!    // busy wait until radio really listening
-!    while (radio_vars.radioStatusByte.rssi_valid==0) {
-!       radio_spiStrobe(CC2420_SNOP, &radio_vars.radioStatusByte);
-!    }
-!    
-!    // change state
-!    radio_vars.state = RADIOSTATE_LISTENING;
-! }
-! 
-! void radio_rxNow(void) {
-!    // nothing to do, the radio is already listening.
-! }
-! 
-! void radio_getReceivedFrame(uint8_t* bufRead,
-!                             uint8_t* lenRead,
-!                             uint8_t  maxBufLen,
-!                              int8_t* rssi,
-!                             uint8_t* lqi,
-!                             uint8_t* crc) {
-!    // read the received packet from the RXFIFO
-!    radio_spiReadRxFifo(&radio_vars.radioStatusByte, bufRead, lenRead, maxBufLen);
-!    
-!    // On reception, when MODEMCTRL0.AUTOCRC is set, the CC2420 replaces the
-!    // received CRC by:
-!    // - [1B] the rssi, a signed value. The actual value in dBm is that - 45.
-!    // - [1B] whether CRC checked (bit 7) and LQI (bit 6-0)
-!    *rssi  =  *(bufRead+*lenRead-2);
-!    *rssi -= 45;
-!    *crc   = ((*(bufRead+*lenRead-1))&0x80)>>7;
-!    *lqi   =  (*(bufRead+*lenRead-1))&0x7f;
-! }
-! 
-! //=========================== private =========================================
-! 
-! void radio_spiStrobe(uint8_t strobe, cc2420_status_t* statusRead) {
-!    uint8_t  spi_tx_buffer[1];
-!    
-!    spi_tx_buffer[0]     = (CC2420_FLAG_WRITE | CC2420_FLAG_REG | strobe);
-!    
-!    spi_txrx(spi_tx_buffer,
-!             sizeof(spi_tx_buffer),
-!             SPI_FIRSTBYTE,
-!             (uint8_t*)statusRead,
-!             1,
-!             SPI_FIRST,
-!             SPI_LAST);
-! }
-! 
-! void radio_spiWriteReg(uint8_t reg, cc2420_status_t* statusRead, uint16_t regValueToWrite) {
-!    uint8_t              spi_tx_buffer[3];
-!    
-!    spi_tx_buffer[0]     = (CC2420_FLAG_WRITE | CC2420_FLAG_REG | reg);
-!    spi_tx_buffer[1]     = regValueToWrite/256;
-!    spi_tx_buffer[2]     = regValueToWrite%256;
-!    
-!    spi_txrx(spi_tx_buffer,
-!             sizeof(spi_tx_buffer),
-!             SPI_FIRSTBYTE,
-!             (uint8_t*)statusRead,
-!             1,
-!             SPI_FIRST,
-!             SPI_LAST);
-! }
-! 
-! void radio_spiReadReg(uint8_t reg, cc2420_status_t* statusRead, uint8_t* regValueRead) {
-!    uint8_t              spi_tx_buffer[3];
-!    uint8_t              spi_rx_buffer[3];
-!    
-!    spi_tx_buffer[0]     = (CC2420_FLAG_READ | CC2420_FLAG_REG | reg);
-!    spi_tx_buffer[1]     = 0x00;
-!    spi_tx_buffer[2]     = 0x00;
-!    
-!    spi_txrx(spi_tx_buffer,
-!             sizeof(spi_tx_buffer),
-!             SPI_BUFFER,
-!             spi_rx_buffer,
-!             sizeof(spi_rx_buffer),
-!             SPI_FIRST,
-!             SPI_LAST);
-!    
-!    *statusRead          = *(cc2420_status_t*)&spi_rx_buffer[0];
-!    *(regValueRead+0)    = spi_rx_buffer[2];
-!    *(regValueRead+1)    = spi_rx_buffer[1];
-! }
-! 
-! void radio_spiWriteTxFifo(cc2420_status_t* statusRead, uint8_t* bufToWrite, uint8_t len) {
-!    uint8_t              spi_tx_buffer[2];
-!    
-!    // step 1. send SPI address and length byte
-!    spi_tx_buffer[0]     = (CC2420_FLAG_WRITE | CC2420_FLAG_REG | CC2420_TXFIFO_ADDR);
-!    spi_tx_buffer[1]     = len;
-!    
-!    spi_txrx(spi_tx_buffer,
-!             sizeof(spi_tx_buffer),
-!             SPI_FIRSTBYTE,
-!             (uint8_t*)statusRead,
-!             1,
-!             SPI_FIRST,
-!             SPI_NOTLAST);
-!    
-!    // step 2. send payload
-!    spi_txrx(bufToWrite,
-!             len,
-!             SPI_LASTBYTE,
-!             (uint8_t*)statusRead,
-!             1,
-!             SPI_NOTFIRST,
-!             SPI_LAST);
-! }
-! 
-! void radio_spiReadRxFifo(cc2420_status_t* statusRead,
-!                          uint8_t*         pBufRead,
-!                          uint8_t*         pLenRead,
-!                          uint8_t          maxBufLen) {
-!    // when reading the packet over SPI from the RX buffer, you get the following:
-!    // - *[1B]     dummy byte because of SPI
-!    // - *[1B]     length byte
-!    // -  [0-125B] packet (excluding CRC)
-!    // - *[2B]     CRC
-!    uint8_t spi_tx_buffer[125];
-!    uint8_t spi_rx_buffer[3];
-!    
-!    spi_tx_buffer[0]     = (CC2420_FLAG_READ | CC2420_FLAG_REG | CC2420_RXFIFO_ADDR);
-!    
-!    // 2 first bytes
-!    spi_txrx(spi_tx_buffer,
-!             2,
-!             SPI_BUFFER,
-!             spi_rx_buffer,
-!             sizeof(spi_rx_buffer),
-!             SPI_FIRST,
-!             SPI_NOTLAST);
-!    
-!    *statusRead          = *(cc2420_status_t*)&spi_rx_buffer[0];
-!    *pLenRead            = spi_rx_buffer[1];
-!    
-!    if (*pLenRead>2 && *pLenRead<=127) {
-!       // valid length
-!       
-!       //read packet
-!       spi_txrx(spi_tx_buffer,
-!                *pLenRead,
-!                SPI_BUFFER,
-!                pBufRead,
-!                125,
-!                SPI_NOTFIRST,
-!                SPI_LAST);
-!       
-!    } else {
-!       // invalid length
-!       
-!       // read a just byte to close spi
-!       spi_txrx(spi_tx_buffer,
-!                1,
-!                SPI_BUFFER,
-!                spi_rx_buffer,
-!                sizeof(spi_rx_buffer),
-!                SPI_NOTFIRST,
-!                SPI_LAST);
-!    }
-! }
-! 
-! //=========================== callbacks =======================================
-diff -crB openwsn/radio.h ../../../sys/net/openwsn/radio.h
-*** openwsn/radio.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/radio.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,80 ****
-! /**
-! \brief Cross-platform declaration "radio" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #ifndef __RADIO_H
-! #define __RADIO_H
-! 
-! #include "radiotimer.h"
-! 
-! //=========================== define ==========================================
-! 
-! #define LENGTH_CRC 2
-! 
-! /**
-! \brief Current state of the radio.
-! 
-! \note This radio driver is very minimal in that it does not follow a state machine.
-!       It is up to the MAC layer to ensure that the different radio operations 
-!       are called in the righr order. The radio keeps a state for debugging purposes only.
-! */
-! typedef enum {
-!    RADIOSTATE_STOPPED             = 0x00,   ///< Completely stopped.
-!    RADIOSTATE_RFOFF               = 0x01,   ///< Listening for commands, but RF chain is off.
-!    RADIOSTATE_SETTING_FREQUENCY   = 0x02,   ///< Configuring the frequency.
-!    RADIOSTATE_FREQUENCY_SET       = 0x03,   ///< Done configuring the frequency.
-!    RADIOSTATE_LOADING_PACKET      = 0x04,   ///< Loading packet into the radio's TX buffer.
-!    RADIOSTATE_PACKET_LOADED       = 0x05,   ///< Packet is fully loaded in the radio's TX buffer.
-!    RADIOSTATE_ENABLING_TX         = 0x06,   ///< The RF TX chaing is being enabled (includes locking the PLL).
-!    RADIOSTATE_TX_ENABLED          = 0x07,   ///< Radio ready to transmit.
-!    RADIOSTATE_TRANSMITTING        = 0x08,   ///< Busy transmitting bytes.
-!    RADIOSTATE_ENABLING_RX         = 0x09,   ///< The RF RX chain is being enabled (includes locking the PLL).
-!    RADIOSTATE_LISTENING           = 0x0a,   ///< RF chain is on, listening, but no packet received yet.
-!    RADIOSTATE_RECEIVING           = 0x0b,   ///< Busy receiving bytes.
-!    RADIOSTATE_TXRX_DONE           = 0x0c,   ///< Frame has been sent/received completely.
-!    RADIOSTATE_TURNING_OFF         = 0x0d,   ///< Turning the RF chain off.
-! } radio_state_t;
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // admin
-! void     radio_init();
-! void     radio_setOverflowCb(radiotimer_compare_cbt cb);
-! void     radio_setCompareCb(radiotimer_compare_cbt cb);
-! void     radio_setStartFrameCb(radiotimer_capture_cbt cb);
-! void     radio_setEndFrameCb(radiotimer_capture_cbt cb);
-! // reset
-! void     radio_reset();
-! // timer
-! void     radio_startTimer(PORT_TIMER_WIDTH period);
-! PORT_TIMER_WIDTH radio_getTimerValue();
-! void     radio_setTimerPeriod(PORT_TIMER_WIDTH period);
-! PORT_TIMER_WIDTH radio_getTimerPeriod();
-! // RF admin
-! void     radio_setFrequency(uint8_t frequency);
-! void     radio_rfOn();
-! void     radio_rfOff();
-! // TX
-! void     radio_loadPacket(uint8_t* packet, uint8_t len);
-! void     radio_txEnable();
-! void     radio_txNow();
-! // RX
-! void     radio_rxEnable();
-! void     radio_rxNow();
-! void     radio_getReceivedFrame(uint8_t* bufRead,
-!                                 uint8_t* lenRead,
-!                                 uint8_t  maxBufLen,
-!                                  int8_t* rssi,
-!                                 uint8_t* lqi,
-!                                 uint8_t* crc);
-! 
-! // interrupt handlers
-! kick_scheduler_t   radio_isr();
-! 
-! #endif
---- 1,90 ----
-! #ifndef __RADIO_H
-! #define __RADIO_H
-! 
-! /**
-! \addtogroup BSP
-! \{
-! \addtogroup radio
-! \{
-! 
-! \brief Cross-platform declaration "radio" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "radiotimer.h"
-! 
-! //=========================== define ==========================================
-! 
-! #define LENGTH_CRC 2
-! 
-! /**
-! \brief Current state of the radio.
-! 
-! \note This radio driver is very minimal in that it does not follow a state machine.
-!       It is up to the MAC layer to ensure that the different radio operations 
-!       are called in the righr order. The radio keeps a state for debugging purposes only.
-! */
-! typedef enum {
-!    RADIOSTATE_STOPPED             = 0x00,   ///< Completely stopped.
-!    RADIOSTATE_RFOFF               = 0x01,   ///< Listening for commands, but RF chain is off.
-!    RADIOSTATE_SETTING_FREQUENCY   = 0x02,   ///< Configuring the frequency.
-!    RADIOSTATE_FREQUENCY_SET       = 0x03,   ///< Done configuring the frequency.
-!    RADIOSTATE_LOADING_PACKET      = 0x04,   ///< Loading packet into the radio's TX buffer.
-!    RADIOSTATE_PACKET_LOADED       = 0x05,   ///< Packet is fully loaded in the radio's TX buffer.
-!    RADIOSTATE_ENABLING_TX         = 0x06,   ///< The RF TX chaing is being enabled (includes locking the PLL).
-!    RADIOSTATE_TX_ENABLED          = 0x07,   ///< Radio ready to transmit.
-!    RADIOSTATE_TRANSMITTING        = 0x08,   ///< Busy transmitting bytes.
-!    RADIOSTATE_ENABLING_RX         = 0x09,   ///< The RF RX chain is being enabled (includes locking the PLL).
-!    RADIOSTATE_LISTENING           = 0x0a,   ///< RF chain is on, listening, but no packet received yet.
-!    RADIOSTATE_RECEIVING           = 0x0b,   ///< Busy receiving bytes.
-!    RADIOSTATE_TXRX_DONE           = 0x0c,   ///< Frame has been sent/received completely.
-!    RADIOSTATE_TURNING_OFF         = 0x0d,   ///< Turning the RF chain off.
-! } radio_state_t;
-! 
-! //=========================== typedef =========================================
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // admin
-! void     radio_init(void);
-! void     radio_setOverflowCb(radiotimer_compare_cbt cb);
-! void     radio_setCompareCb(radiotimer_compare_cbt cb);
-! void     radio_setStartFrameCb(radiotimer_capture_cbt cb);
-! void     radio_setEndFrameCb(radiotimer_capture_cbt cb);
-! // reset
-! void     radio_reset(void);
-! // timer
-! void     radio_startTimer(PORT_TIMER_WIDTH period);
-! PORT_TIMER_WIDTH radio_getTimerValue(void);
-! void     radio_setTimerPeriod(PORT_TIMER_WIDTH period);
-! PORT_TIMER_WIDTH radio_getTimerPeriod(void);
-! // RF admin
-! void     radio_setFrequency(uint8_t frequency);
-! void     radio_rfOn(void);
-! void     radio_rfOff(void);
-! // TX
-! void     radio_loadPacket(uint8_t* packet, uint8_t len);
-! void     radio_txEnable(void);
-! void     radio_txNow(void);
-! // RX
-! void     radio_rxEnable(void);
-! void     radio_rxNow(void);
-! void     radio_getReceivedFrame(uint8_t* bufRead,
-!                                 uint8_t* lenRead,
-!                                 uint8_t  maxBufLen,
-!                                  int8_t* rssi,
-!                                 uint8_t* lqi,
-!                                 uint8_t* crc);
-! 
-! // interrupt handlers
-! kick_scheduler_t   radio_isr(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/radiotimer.c ../../../sys/net/openwsn/radiotimer.c
-*** openwsn/radiotimer.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/radiotimer.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,176 ****
-! /**
-! \brief TelosB-specific definition of the "radiotimer" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "msp430f1611.h"
-! #include "radiotimer.h"
-! #include "leds.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    radiotimer_compare_cbt    overflowCb;
-!    radiotimer_compare_cbt    compareCb;
-!    radiotimer_capture_cbt    startFrameCb;
-!    radiotimer_capture_cbt    endFrameCb;
-! } radiotimer_vars_t;
-! 
-! radiotimer_vars_t radiotimer_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! //===== admin
-! 
-! void radiotimer_init() {
-!    // clear local variables
-!    memset(&radiotimer_vars,0,sizeof(radiotimer_vars_t));
-! }
-! 
-! void radiotimer_setOverflowCb(radiotimer_compare_cbt cb) {
-!    radiotimer_vars.overflowCb     = cb;
-! }
-! 
-! void radiotimer_setCompareCb(radiotimer_compare_cbt cb) {
-!    radiotimer_vars.compareCb      = cb;
-! }
-! 
-! void radiotimer_setStartFrameCb(radiotimer_capture_cbt cb) {
-!    radiotimer_vars.startFrameCb   = cb;
-! }
-! 
-! void radiotimer_setEndFrameCb(radiotimer_capture_cbt cb) {
-!    radiotimer_vars.endFrameCb     = cb;
-! }
-! 
-! void radiotimer_start(uint16_t period) {
-!    // radio's SFD pin connected to P4.1
-!    P4DIR   &= ~0x02; // input
-!    P4SEL   |=  0x02; // in CCI1a/B mode
-!    
-!    // CCR0 contains period of counter
-!    // do not interrupt when counter reaches TBCCR0, but when it resets
-!    TBCCR0   =  period-1;
-!    
-!    // CCR1 in capture mode
-!    TBCCTL1  =  CM_3+SCS+CAP+CCIE;
-!    TBCCR1   =  0;
-!    
-!    // CCR2 in compare mode (disabled for now)
-!    TBCCTL2  =  0;
-!    TBCCR2   =  0;
-!    
-!    // start counting
-!    TBCTL    =  TBIE+TBCLR;                       // interrupt when counter resets
-!    TBCTL   |=  MC_1+TBSSEL_1;                    // up mode, clocked from ACLK
-! }
-! 
-! //===== direct access
-! 
-! uint16_t radiotimer_getValue() {
-!    return TBR;
-! }
-! 
-! void radiotimer_setPeriod(uint16_t period) {
-!    TBCCR0   =  period;
-! }
-! 
-! uint16_t radiotimer_getPeriod() {
-!    return TBCCR0;
-! }
-! 
-! //===== compare
-! 
-! void radiotimer_schedule(uint16_t offset) {
-!    // offset when to fire
-!    TBCCR2   =  offset;
-!    
-!    // enable compare interrupt (this also cancels any pending interrupts)
-!    TBCCTL2  =  CCIE;
-! }
-! 
-! void radiotimer_cancel() {
-!    // reset compare value (also resets interrupt flag)
-!    TBCCR2   =  0;
-!    
-!    // disable compare interrupt
-!    TBCCTL2 &= ~CCIE;
-! }
-! 
-! //===== capture
-! 
-! inline uint16_t radiotimer_getCapturedTime() {
-!    // this should never happpen!
-!    
-!    // we can not print from within the BSP. Instead:
-!    // blink the error LED
-!    leds_error_blink();
-!    // reset the board
-!    board_reset();
-!    
-!    return 0;// this line is never reached, but here to satisfy compiler
-! }
-! 
-! //=========================== private =========================================
-! 
-! //=========================== interrupt handlers ==============================
-! 
-! /**
-! \brief TimerB CCR1-6 interrupt service routine
-! */
-! kick_scheduler_t radiotimer_isr() {
-!    uint16_t tbiv_local;
-!    
-!    // reading TBIV returns the value of the highest pending interrupt flag
-!    // and automatically resets that flag. We therefore copy its value to the
-!    // tbiv_local local variable exactly once. If there is more than one 
-!    // interrupt pending, we will reenter this function after having just left
-!    // it.
-!    tbiv_local = TBIV;
-!    
-!    switch (tbiv_local) {
-!       case 0x0002: // CCR1 fires
-!          if (TBCCTL1 & CCI) {
-!             // SFD pin is high: this was the start of a frame
-!             if (radiotimer_vars.startFrameCb!=NULL) {
-!                radiotimer_vars.startFrameCb(TBCCR1);
-!                // kick the OS
-!                return KICK_SCHEDULER;
-!             }
-!          } else {
-!             // SFD pin is low: this was the end of a frame
-!             if (radiotimer_vars.endFrameCb!=NULL) {
-!                radiotimer_vars.endFrameCb(TBCCR1);
-!                // kick the OS
-!                return KICK_SCHEDULER;
-!             }
-!          }
-!          break;
-!       case 0x0004: // CCR2 fires
-!          if (radiotimer_vars.compareCb!=NULL) {
-!             radiotimer_vars.compareCb();
-!             // kick the OS
-!             return KICK_SCHEDULER;
-!          }
-!          break;
-!       case 0x0006: // CCR3 fires
-!          break;
-!       case 0x0008: // CCR4 fires
-!          break;
-!       case 0x000a: // CCR5 fires
-!          break;
-!       case 0x000c: // CCR6 fires
-!          break;
-!       case 0x000e: // timer overflow
-!          if (radiotimer_vars.overflowCb!=NULL) {
-!             radiotimer_vars.overflowCb();
-!             // kick the OS
-!             return KICK_SCHEDULER;
-!          }
-!          break;
-!    }
-!    return DO_NOT_KICK_SCHEDULER;
-! }
---- 1,176 ----
-! /**
-! \brief TelosB-specific definition of the "radiotimer" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "msp430f1611.h"
-! #include "radiotimer.h"
-! #include "leds.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    radiotimer_compare_cbt    overflowCb;
-!    radiotimer_compare_cbt    compareCb;
-!    radiotimer_capture_cbt    startFrameCb;
-!    radiotimer_capture_cbt    endFrameCb;
-! } radiotimer_vars_t;
-! 
-! radiotimer_vars_t radiotimer_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! //===== admin
-! 
-! void radiotimer_init(void) {
-!    // clear local variables
-!    memset(&radiotimer_vars,0,sizeof(radiotimer_vars_t));
-! }
-! 
-! void radiotimer_setOverflowCb(radiotimer_compare_cbt cb) {
-!    radiotimer_vars.overflowCb     = cb;
-! }
-! 
-! void radiotimer_setCompareCb(radiotimer_compare_cbt cb) {
-!    radiotimer_vars.compareCb      = cb;
-! }
-! 
-! void radiotimer_setStartFrameCb(radiotimer_capture_cbt cb) {
-!    radiotimer_vars.startFrameCb   = cb;
-! }
-! 
-! void radiotimer_setEndFrameCb(radiotimer_capture_cbt cb) {
-!    radiotimer_vars.endFrameCb     = cb;
-! }
-! 
-! void radiotimer_start(PORT_RADIOTIMER_WIDTH period) {
-!    // radio's SFD pin connected to P4.1
-!    P4DIR   &= ~0x02; // input
-!    P4SEL   |=  0x02; // in CCI1a/B mode
-!    
-!    // CCR0 contains period of counter
-!    // do not interrupt when counter reaches TBCCR0, but when it resets
-!    TBCCR0   =  period-1;
-!    
-!    // CCR1 in capture mode
-!    TBCCTL1  =  CM_3+SCS+CAP+CCIE;
-!    TBCCR1   =  0;
-!    
-!    // CCR2 in compare mode (disabled for now)
-!    TBCCTL2  =  0;
-!    TBCCR2   =  0;
-!    
-!    // start counting
-!    TBCTL    =  TBIE+TBCLR;                       // interrupt when counter resets
-!    TBCTL   |=  MC_1+TBSSEL_1;                    // up mode, clocked from ACLK
-! }
-! 
-! //===== direct access
-! 
-! PORT_RADIOTIMER_WIDTH radiotimer_getValue(void) {
-!    return TBR;
-! }
-! 
-! void radiotimer_setPeriod(PORT_RADIOTIMER_WIDTH period) {
-!    TBCCR0   =  period;
-! }
-! 
-! PORT_RADIOTIMER_WIDTH radiotimer_getPeriod(void) {
-!    return TBCCR0;
-! }
-! 
-! //===== compare
-! 
-! void radiotimer_schedule(PORT_RADIOTIMER_WIDTH offset) {
-!    // offset when to fire
-!    TBCCR2   =  offset;
-!    
-!    // enable compare interrupt (this also cancels any pending interrupts)
-!    TBCCTL2  =  CCIE;
-! }
-! 
-! void radiotimer_cancel(void) {
-!    // reset compare value (also resets interrupt flag)
-!    TBCCR2   =  0;
-!    
-!    // disable compare interrupt
-!    TBCCTL2 &= ~CCIE;
-! }
-! 
-! //===== capture
-! 
-! inline PORT_RADIOTIMER_WIDTH radiotimer_getCapturedTime(void) {
-!    // this should never happpen!
-!    
-!    // we can not print from within the BSP. Instead:
-!    // blink the error LED
-!    leds_error_blink();
-!    // reset the board
-!    board_reset();
-!    
-!    return 0;// this line is never reached, but here to satisfy compiler
-! }
-! 
-! //=========================== private =========================================
-! 
-! //=========================== interrupt handlers ==============================
-! 
-! /**
-! \brief TimerB CCR1-6 interrupt service routine
-! */
-! kick_scheduler_t radiotimer_isr(void) {
-!    PORT_RADIOTIMER_WIDTH tbiv_local;
-!    
-!    // reading TBIV returns the value of the highest pending interrupt flag
-!    // and automatically resets that flag. We therefore copy its value to the
-!    // tbiv_local local variable exactly once. If there is more than one 
-!    // interrupt pending, we will reenter this function after having just left
-!    // it.
-!    tbiv_local = TBIV;
-!    
-!    switch (tbiv_local) {
-!       case 0x0002: // CCR1 fires
-!          if (TBCCTL1 & CCI) {
-!             // SFD pin is high: this was the start of a frame
-!             if (radiotimer_vars.startFrameCb!=NULL) {
-!                radiotimer_vars.startFrameCb(TBCCR1);
-!                // kick the OS
-!                return KICK_SCHEDULER;
-!             }
-!          } else {
-!             // SFD pin is low: this was the end of a frame
-!             if (radiotimer_vars.endFrameCb!=NULL) {
-!                radiotimer_vars.endFrameCb(TBCCR1);
-!                // kick the OS
-!                return KICK_SCHEDULER;
-!             }
-!          }
-!          break;
-!       case 0x0004: // CCR2 fires
-!          if (radiotimer_vars.compareCb!=NULL) {
-!             radiotimer_vars.compareCb();
-!             // kick the OS
-!             return KICK_SCHEDULER;
-!          }
-!          break;
-!       case 0x0006: // CCR3 fires
-!          break;
-!       case 0x0008: // CCR4 fires
-!          break;
-!       case 0x000a: // CCR5 fires
-!          break;
-!       case 0x000c: // CCR6 fires
-!          break;
-!       case 0x000e: // timer overflow
-!          if (radiotimer_vars.overflowCb!=NULL) {
-!             radiotimer_vars.overflowCb();
-!             // kick the OS
-!             return KICK_SCHEDULER;
-!          }
-!          break;
-!    }
-!    return DO_NOT_KICK_SCHEDULER;
-! }
-diff -crB openwsn/radiotimer.h ../../../sys/net/openwsn/radiotimer.h
-*** openwsn/radiotimer.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/radiotimer.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,44 ****
-! /**
-! \brief Cross-platform declaration "radiotimer" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #ifndef __RADIOTIMER_H
-! #define __RADIOTIMER_H
-! 
-! #include "stdint.h"
-! #include "board.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! typedef void (*radiotimer_compare_cbt)();
-! typedef void (*radiotimer_capture_cbt)(PORT_TIMER_WIDTH timestamp);
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // admin
-! void     radiotimer_init();
-! void     radiotimer_setOverflowCb(radiotimer_compare_cbt cb);
-! void     radiotimer_setCompareCb(radiotimer_compare_cbt cb);
-! void     radiotimer_setStartFrameCb(radiotimer_capture_cbt cb);
-! void     radiotimer_setEndFrameCb(radiotimer_capture_cbt cb);
-! void     radiotimer_start(PORT_TIMER_WIDTH period);
-! // direct access
-! PORT_TIMER_WIDTH radiotimer_getValue();
-! void     radiotimer_setPeriod(PORT_TIMER_WIDTH period);
-! PORT_TIMER_WIDTH radiotimer_getPeriod();
-! // compare
-! void     radiotimer_schedule(PORT_TIMER_WIDTH offset);
-! void     radiotimer_cancel();
-! // capture
-! PORT_TIMER_WIDTH radiotimer_getCapturedTime();
-! 
-! // interrupt handlers
-! kick_scheduler_t   radiotimer_isr();
-! 
-! #endif
---- 1,54 ----
-! #ifndef __RADIOTIMER_H
-! #define __RADIOTIMER_H
-! 
-! /**
-! \addtogroup BSP
-! \{
-! \addtogroup radiotimer
-! \{
-! 
-! \brief Cross-platform declaration "radiotimer" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "stdint.h"
-! #include "board_ow.h"
-! 
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! typedef void (*radiotimer_compare_cbt)(void);
-! typedef void (*radiotimer_capture_cbt)(PORT_TIMER_WIDTH timestamp);
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // admin
-! void     radiotimer_init(void);
-! void     radiotimer_setOverflowCb(radiotimer_compare_cbt cb);
-! void     radiotimer_setCompareCb(radiotimer_compare_cbt cb);
-! void     radiotimer_setStartFrameCb(radiotimer_capture_cbt cb);
-! void     radiotimer_setEndFrameCb(radiotimer_capture_cbt cb);
-! void     radiotimer_start(PORT_RADIOTIMER_WIDTH period);
-! // direct access
-! PORT_RADIOTIMER_WIDTH radiotimer_getValue(void);
-! void     radiotimer_setPeriod(PORT_RADIOTIMER_WIDTH period);
-! PORT_RADIOTIMER_WIDTH radiotimer_getPeriod(void);
-! // compare
-! void     radiotimer_schedule(PORT_RADIOTIMER_WIDTH offset);
-! void     radiotimer_cancel(void);
-! // capture
-! PORT_RADIOTIMER_WIDTH radiotimer_getCapturedTime(void);
-! 
-! // interrupt handlers
-! kick_scheduler_t   radiotimer_isr(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/scheduler.c ../../../sys/net/openwsn/scheduler.c
-*** openwsn/scheduler.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/scheduler.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,124 ****
-! /**
-! \brief OpenOS scheduler.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "openwsn.h"
-! #include "scheduler.h"
-! #include "board.h"
-! #include "debugpins.h"
-! #include "leds.h"
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct task_llist_t {
-!    task_cbt             cb;
-!    task_prio_t          prio;
-!    void*                next;
-! } taskList_item_t;
-! 
-! typedef struct {
-!    taskList_item_t      taskBuf[TASK_LIST_DEPTH];
-!    taskList_item_t*     task_list;
-!    uint8_t              numTasksCur;
-!    uint8_t              numTasksMax;
-! } scheduler_vars_t;
-! 
-! scheduler_vars_t scheduler_vars;
-! 
-! typedef struct {
-!    uint8_t              numTasksCur;
-!    uint8_t              numTasksMax;
-! } scheduler_dbg_t;
-! 
-! scheduler_dbg_t scheduler_dbg;
-! 
-! //=========================== prototypes ======================================
-! 
-! void consumeTask(uint8_t taskId);
-! 
-! //=========================== public ==========================================
-! 
-! void scheduler_init() {   
-!    
-!    // initialization module variables
-!    memset(&scheduler_vars,0,sizeof(scheduler_vars_t));
-!    memset(&scheduler_dbg,0,sizeof(scheduler_dbg_t));
-!    
-!    // enable the scheduler's interrupt so SW can wake up the scheduler
-!    SCHEDULER_ENABLE_INTERRUPT();
-! }
-! 
-! void scheduler_start() {
-!    taskList_item_t* pThisTask;
-!    while (1) {
-!       while(scheduler_vars.task_list!=NULL) {
-!          // there is still at least one task in the linked-list of tasks
-!          
-!          // the task to execute is the one at the head of the queue
-!          pThisTask                = scheduler_vars.task_list;
-!          
-!          // shift the queue by one task
-!          scheduler_vars.task_list = pThisTask->next;
-!          
-!          // execute the current task
-!          pThisTask->cb();
-!          
-!          // free up this task container
-!          pThisTask->cb            = NULL;
-!          pThisTask->prio          = TASKPRIO_NONE;
-!          pThisTask->next          = NULL;
-!          scheduler_dbg.numTasksCur--;
-!       }
-!       debugpins_task_clr();
-!       board_sleep();
-!       debugpins_task_set();                      // IAR should halt here if nothing to do
-!    }
-! }
-! 
-!  void scheduler_push_task(task_cbt cb, task_prio_t prio) {
-!    taskList_item_t*  taskContainer;
-!    taskList_item_t** taskListWalker;
-!    INTERRUPT_DECLARATION();
-!    
-!    DISABLE_INTERRUPTS();
-!    
-!    // find an empty task container
-!    taskContainer = &scheduler_vars.taskBuf[0];
-!    while (taskContainer->cb!=NULL &&
-!           taskContainer<=&scheduler_vars.taskBuf[TASK_LIST_DEPTH-1]) {
-!       taskContainer++;
-!    }
-!    if (taskContainer>&scheduler_vars.taskBuf[TASK_LIST_DEPTH-1]) {
-!       // task list has overflown. This should never happpen!
-!    
-!       // we can not print from within the kernel. Instead:
-!       // blink the error LED
-!       leds_error_blink();
-!       // reset the board
-!       board_reset();
-!    }
-!    // fill that task container with this task
-!    taskContainer->cb              = cb;
-!    taskContainer->prio            = prio;
-!    
-!    // find position in queue
-!    taskListWalker                 = &scheduler_vars.task_list;
-!    while (*taskListWalker!=NULL &&
-!           (*taskListWalker)->prio < taskContainer->prio) {
-!       taskListWalker              = (taskList_item_t**)&((*taskListWalker)->next);
-!    }
-!    // insert at that position
-!    taskContainer->next            = *taskListWalker;
-!    *taskListWalker                = taskContainer;
-!    // maintain debug stats
-!    scheduler_dbg.numTasksCur++;
-!    if (scheduler_dbg.numTasksCur>scheduler_dbg.numTasksMax) {
-!       scheduler_dbg.numTasksMax   = scheduler_dbg.numTasksCur;
-!    }
-!    
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! //=========================== private =========================================
---- 1,108 ----
-! /**
-! \brief OpenOS scheduler.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "openwsn.h"
-! #include "scheduler.h"
-! #include "board.h"
-! #include "debugpins.h"
-! #include "leds.h"
-! 
-! //=========================== variables =======================================
-! 
-! scheduler_vars_t scheduler_vars;
-! scheduler_dbg_t  scheduler_dbg;
-! 
-! //=========================== prototypes ======================================
-! 
-! void consumeTask(uint8_t taskId);
-! 
-! //=========================== public ==========================================
-! 
-! void scheduler_init() {   
-!    // initialization module variables
-!    memset(&scheduler_vars,0,sizeof(scheduler_vars_t));
-!    memset(&scheduler_dbg,0,sizeof(scheduler_dbg_t));
-!    
-!    // enable the scheduler's interrupt so SW can wake up the scheduler
-!    //SCHEDULER_ENABLE_INTERRUPT();
-!    puts(__PRETTY_FUNCTION__);
-! }
-! 
-! void scheduler_start() {
-!     puts(__PRETTY_FUNCTION__);
-!    taskList_item_t* pThisTask;
-!    while (1) {
-!       while(scheduler_vars.task_list!=NULL) {
-!          // there is still at least one task in the linked-list of tasks
-!          
-!          // the task to execute is the one at the head of the queue
-!          pThisTask                = scheduler_vars.task_list;
-!          printf("run task %p with prio %d\n", pThisTask->cb, pThisTask->prio);
-!          // shift the queue by one task
-!          scheduler_vars.task_list = pThisTask->next;
-!          
-!          // execute the current task
-!          pThisTask->cb();
-!          
-!          // free up this task container
-!          pThisTask->cb            = NULL;
-!          pThisTask->prio          = TASKPRIO_NONE;
-!          pThisTask->next          = NULL;
-!          scheduler_dbg.numTasksCur--;
-!       }
-!       //debugpins_task_clr();
-!       board_sleep();
-!       //debugpins_task_set();                      // IAR should halt here if nothing to do
-!    }
-!    puts("leaving... WTF?!");
-! }
-! 
-!  void scheduler_push_task(task_cbt cb, task_prio_t prio) {
-!      puts(__PRETTY_FUNCTION__);
-!    taskList_item_t*  taskContainer;
-!    taskList_item_t** taskListWalker;
-!    INTERRUPT_DECLARATION();
-!    
-!    DISABLE_INTERRUPTS();
-!    
-!    // find an empty task container
-!    taskContainer = &scheduler_vars.taskBuf[0];
-!    while (taskContainer->cb!=NULL &&
-!           taskContainer<=&scheduler_vars.taskBuf[TASK_LIST_DEPTH-1]) {
-!       taskContainer++;
-!    }
-!    if (taskContainer>&scheduler_vars.taskBuf[TASK_LIST_DEPTH-1]) {
-!       // task list has overflown. This should never happpen!
-!    
-!       // we can not print from within the kernel. Instead:
-!       // blink the error LED
-!       leds_error_blink();
-!       // reset the board
-!       board_reset();
-!    }
-!    // fill that task container with this task
-!    taskContainer->cb              = cb;
-!    taskContainer->prio            = prio;
-!    
-!    // find position in queue
-!    taskListWalker                 = &scheduler_vars.task_list;
-!    while (*taskListWalker!=NULL &&
-!           (*taskListWalker)->prio < taskContainer->prio) {
-!       taskListWalker              = (taskList_item_t**)&((*taskListWalker)->next);
-!    }
-!    // insert at that position
-!    taskContainer->next            = *taskListWalker;
-!    *taskListWalker                = taskContainer;
-!    // maintain debug stats
-!    scheduler_dbg.numTasksCur++;
-!    if (scheduler_dbg.numTasksCur>scheduler_dbg.numTasksMax) {
-!       scheduler_dbg.numTasksMax   = scheduler_dbg.numTasksCur;
-!    }
-!    
-!    ENABLE_INTERRUPTS();
-! }
-! 
-! //=========================== private =========================================
-diff -crB openwsn/scheduler.h ../../../sys/net/openwsn/scheduler.h
-*** openwsn/scheduler.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/scheduler.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,64 ****
-! #ifndef __SCHEDULER_H
-! #define __SCHEDULER_H
-! 
-! /**
-! \addtogroup drivers
-! \{
-! \addtogroup Scheduler
-! \{
-! */
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! typedef enum {
-!    TASKPRIO_NONE               = 0x00,
-!    // tasks trigger by radio
-!    TASKPRIO_RESNOTIF_RX        = 0x01, // scheduled by IEEE802.15.4e
-!    TASKPRIO_RESNOTIF_TXDONE    = 0x02, // scheduled by IEEE802.15.4e
-!    // tasks triggered by timers
-!    TASKPRIO_RES                = 0x03, // scheduled by timerB CCR0 interrupt
-!    TASKPRIO_RPL                = 0x04, // scheduled by timerB CCR1 interrupt
-!    TASKPRIO_TCP_TIMEOUT        = 0x05, // scheduled by timerB CCR2 interrupt
-!    TASKPRIO_COAP               = 0x06, // scheduled by timerB CCR3 interrupt
-!    // tasks trigger by other interrupts
-!    TASKPRIO_BUTTON             = 0x07, // scheduled by P2.7 interrupt
-!    TASKPRIO_MAX                = 0x08,
-! } task_prio_t;
-! 
-! #define TASK_LIST_DEPTH      10
-! 
-! //=========================== typedef =========================================
-! 
-! typedef void (*task_cbt)(void);
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! // public functions
-! void scheduler_init();
-! void scheduler_start();
-! void scheduler_push_task(task_cbt task_cb, task_prio_t prio);
-! 
-! // interrupt handlers
-! void isr_ieee154e_newSlot();
-! void isr_ieee154e_timer();
-! void isr_adc();
-! #ifdef ISR_GYRO
-! void isr_gyro();
-! #endif
-! #ifdef ISR_LARGE_RANGE_ACCEL
-! void isr_large_range_accel();
-! #endif
-! #ifdef ISR_BUTTON
-! void isr_button();
-! #endif
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
---- 1,82 ----
-! #ifndef __SCHEDULER_H
-! #define __SCHEDULER_H
-! 
-! /**
-! \addtogroup kernel
-! \{
-! \addtogroup Scheduler
-! \{
-! */
-! 
-! #include "openwsn.h"
-! 
-! //=========================== define ==========================================
-! 
-! typedef enum {
-!    TASKPRIO_NONE               = 0x00,
-!    // tasks trigger by radio
-!    TASKPRIO_RESNOTIF_RX        = 0x01, // scheduled by IEEE802.15.4e
-!    TASKPRIO_RESNOTIF_TXDONE    = 0x02, // scheduled by IEEE802.15.4e
-!    // tasks triggered by timers
-!    TASKPRIO_RES                = 0x03, // scheduled by timerB CCR0 interrupt
-!    TASKPRIO_RPL                = 0x04, // scheduled by timerB CCR1 interrupt
-!    TASKPRIO_TCP_TIMEOUT        = 0x05, // scheduled by timerB CCR2 interrupt
-!    TASKPRIO_COAP               = 0x06, // scheduled by timerB CCR3 interrupt
-!    // tasks trigger by other interrupts
-!    TASKPRIO_BUTTON             = 0x07, // scheduled by P2.7 interrupt
-!    TASKPRIO_MAX                = 0x08,
-! } task_prio_t;
-! 
-! #define TASK_LIST_DEPTH      10
-! 
-! //=========================== typedef =========================================
-! 
-! typedef void (*task_cbt)(void);
-! 
-! typedef struct task_llist_t {
-!    task_cbt             cb;
-!    task_prio_t          prio;
-!    void*                next;
-! } taskList_item_t;
-! 
-! //=========================== module variables ================================
-! 
-! typedef struct {
-!    taskList_item_t      taskBuf[TASK_LIST_DEPTH];
-!    taskList_item_t*     task_list;
-!    uint8_t              numTasksCur;
-!    uint8_t              numTasksMax;
-! } scheduler_vars_t;
-! 
-! typedef struct {
-!    uint8_t              numTasksCur;
-!    uint8_t              numTasksMax;
-! } scheduler_dbg_t;
-! 
-! //=========================== prototypes ======================================
-! 
-! // public functions
-! void scheduler_init(void);
-! void scheduler_start(void);
-! void scheduler_push_task(task_cbt task_cb, task_prio_t prio);
-! 
-! // interrupt handlers
-! void isr_ieee154e_newSlot(void);
-! void isr_ieee154e_timer(void);
-! void isr_adc(void);
-! #ifdef ISR_GYRO
-! void isr_gyro();
-! #endif
-! #ifdef ISR_LARGE_RANGE_ACCEL
-! void isr_large_range_accel();
-! #endif
-! #ifdef ISR_BUTTON
-! void isr_button();
-! #endif
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
-diff -crB openwsn/spi.c ../../../sys/net/openwsn/spi.c
-*** openwsn/spi.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/spi.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,246 ****
-! /**
-! \brief TelosB-specific definition of the "spi" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "msp430f1611.h"
-! #include "spi.h"
-! #include "leds.h"
-! 
-! //=========================== defines =========================================
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    // information about the current transaction
-!    uint8_t*        pNextTxByte;
-!    uint8_t         numTxedBytes;
-!    uint8_t         txBytesLeft;
-!    spi_return_t    returnType;
-!    uint8_t*        pNextRxByte;
-!    uint8_t         maxRxBytes;
-!    spi_first_t     isFirst;
-!    spi_last_t      isLast;
-!    // state of the module
-!    uint8_t         busy;
-! #ifdef SPI_IN_INTERRUPT_MODE
-!    // callback when module done
-!    spi_cbt         callback;
-! #endif
-! } spi_vars_t;
-! 
-! spi_vars_t spi_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void spi_init() {
-!    // clear variables
-!    memset(&spi_vars,0,sizeof(spi_vars_t));
-!    
-!    // hold USART state machine in reset mode during configuration
-!    U0CTL      =  SWRST;                          // [b0] SWRST=1: Enabled. USART logic held in reset state
-!    
-!    // configure SPI-related pins
-!    P3SEL     |=  0x02;                           // P3.1 in SIMO mode
-!    P3DIR     |=  0x02;                           // P3.1 as output
-!    P3SEL     |=  0x04;                           // P3.2 in SOMI mode
-!    P3DIR     |=  0x04;                           // P3.2 as output
-!    P3SEL     |=  0x08;                           // P3.3 in SCL mode
-!    P3DIR     |=  0x08;                           // P3.3 as output 
-!    P4OUT     |=  0x04;                           // P4.2 radio CS, hold high
-!    P4DIR     |=  0x04;                           // P4.2 radio CS, output
-!    
-!    // initialize USART registers
-!    U0CTL     |=  CHAR | SYNC | MM ;              // [b7]          0: unused
-!                                                  // [b6]          0: unused
-!                                                  // [b5]      I2C=0: SPI mode (not I2C)   
-!                                                  // [b4]     CHAR=1: 8-bit data
-!                                                  // [b3]   LISTEN=0: Disabled
-!                                                  // [b2]     SYNC=1: SPI mode (not UART)
-!                                                  // [b1]       MM=1: USART is master
-!                                                  // [b0]    SWRST=x: don't change
-!    
-!    U0TCTL     =  CKPH | SSEL1 | STC | TXEPT;     // [b7]     CKPH=1: UCLK is delayed by one half cycle
-!                                                  // [b6]     CKPL=0: normal clock polarity
-!                                                  // [b5]    SSEL1=1:
-!                                                  // [b4]    SSEL0=0: SMCLK
-!                                                  // [b3]          0: unused
-!                                                  // [b2]          0: unused
-!                                                  // [b1]      STC=1: 3-pin SPI mode
-!                                                  // [b0]    TXEPT=1: UxTXBUF and TX shift register are empty                                                 
-!    
-!    U0BR1      =  0x00;
-!    U0BR0      =  0x02;                           // U0BR = [U0BR1<<8|U0BR0] = 2
-!    U0MCTL     =  0x00;                           // no modulation needed in SPI mode
-!       
-!    // enable USART module
-!    ME1       |=  UTXE0 | URXE0;                  // [b7]    UTXE0=1: USART0 transmit enabled
-!                                                  // [b6]    URXE0=1: USART0 receive enabled
-!                                                  // [b5]          x: don't touch!
-!                                                  // [b4]          x: don't touch!
-!                                                  // [b3]          x: don't touch!
-!                                                  // [b2]          x: don't touch!
-!                                                  // [b1]          x: don't touch!
-!                                                  // [b0]          x: don't touch!
-!    
-!    // clear USART state machine from reset, starting operation
-!    U0CTL     &= ~SWRST;
-!    
-!    // enable interrupts via the IEx SFRs
-! #ifdef SPI_IN_INTERRUPT_MODE
-!    IE1       |=  URXIE0;                         // we only enable the SPI RX interrupt
-!                                                  // since TX and RX happen concurrently,
-!                                                  // i.e. an RX completion necessarily
-!                                                  // implies a TX completion.
-! #endif
-! }
-! 
-! #ifdef SPI_IN_INTERRUPT_MODE
-! void spi_setCb(spi_cbt cb) {
-!    spi_vars.spi_cb = cb;
-! }
-! #endif
-! 
-! void spi_txrx(uint8_t*     bufTx,
-!               uint8_t      lenbufTx,
-!               spi_return_t returnType,
-!               uint8_t*     bufRx,
-!               uint8_t      maxLenBufRx,
-!               spi_first_t  isFirst,
-!               spi_last_t   isLast) {
-! 
-! #ifdef SPI_IN_INTERRUPT_MODE
-!    // disable interrupts
-!    __disable_interrupt();
-! #endif
-!    
-!    // register spi frame to send
-!    spi_vars.pNextTxByte      =  bufTx;
-!    spi_vars.numTxedBytes     =  0;
-!    spi_vars.txBytesLeft      =  lenbufTx;
-!    spi_vars.returnType       =  returnType;
-!    spi_vars.pNextRxByte      =  bufRx;
-!    spi_vars.maxRxBytes       =  maxLenBufRx;
-!    spi_vars.isFirst          =  isFirst;
-!    spi_vars.isLast           =  isLast;
-!    
-!    // SPI is now busy
-!    spi_vars.busy             =  1;
-!    
-!    // lower CS signal to have slave listening
-!    if (spi_vars.isFirst==SPI_FIRST) {
-!       P4OUT                 &= ~0x04;
-!    }
-!    
-! #ifdef SPI_IN_INTERRUPT_MODE
-!    // implementation 1. use a callback function when transaction finishes
-!    
-!    // write first byte to TX buffer
-!    U0TXBUF                   = *spi_vars.pNextTxByte;
-!    
-!    // re-enable interrupts
-!    __enable_interrupt();
-! #else
-!    // implementation 2. busy wait for each byte to be sent
-!    
-!    // send all bytes
-!    while (spi_vars.txBytesLeft>0) {
-!       // write next byte to TX buffer
-!       U0TXBUF                = *spi_vars.pNextTxByte;
-!       // busy wait on the interrupt flag
-!       while ((IFG1 & URXIFG0)==0);
-!       // clear the interrupt flag
-!       IFG1                  &= ~URXIFG0;
-!       // save the byte just received in the RX buffer
-!       switch (spi_vars.returnType) {
-!          case SPI_FIRSTBYTE:
-!             if (spi_vars.numTxedBytes==0) {
-!                *spi_vars.pNextRxByte   = U0RXBUF;
-!             }
-!             break;
-!          case SPI_BUFFER:
-!             *spi_vars.pNextRxByte      = U0RXBUF;
-!             spi_vars.pNextRxByte++;
-!             break;
-!          case SPI_LASTBYTE:
-!             *spi_vars.pNextRxByte      = U0RXBUF;
-!             break;
-!       }
-!       // one byte less to go
-!       spi_vars.pNextTxByte++;
-!       spi_vars.numTxedBytes++;
-!       spi_vars.txBytesLeft--;
-!    }
-!    
-!    // put CS signal high to signal end of transmission to slave
-!    if (spi_vars.isLast==SPI_LAST) {
-!       P4OUT                 |=  0x04;
-!    }
-!    
-!    // SPI is not busy anymore
-!    spi_vars.busy             =  0;
-! #endif
-! }
-! 
-! //=========================== private =========================================
-! 
-! //=========================== interrupt handlers ==============================
-! 
-! kick_scheduler_t spi_isr() {
-! #ifdef SPI_IN_INTERRUPT_MODE   
-!    // save the byte just received in the RX buffer
-!    switch (spi_vars.returnType) {
-!       case SPI_FIRSTBYTE:
-!          if (spi_vars.numTxedBytes==0) {
-!             *spi_vars.pNextRxByte   = U0RXBUF;
-!          }
-!          break;
-!       case SPI_BUFFER:
-!          *spi_vars.pNextRxByte      = U0RXBUF;
-!          spi_vars.pNextRxByte++;
-!          break;
-!       case SPI_LASTBYTE:
-!          *spi_vars.pNextRxByte      = U0RXBUF;
-!          break;
-!    }
-!    
-!    // one byte less to go
-!    spi_vars.pNextTxByte++;
-!    spi_vars.numTxedBytes++;
-!    spi_vars.txBytesLeft--;
-!    
-!    if (spi_vars.txBytesLeft>0) {
-!       // write next byte to TX buffer
-!       U0TXBUF                = *spi_vars.pNextTxByte;
-!    } else {
-!       // put CS signal high to signal end of transmission to slave
-!       if (spi_vars.isLast==SPI_LAST) {
-!          P4OUT                 |=  0x04;
-!       }
-!       // SPI is not busy anymore
-!       spi_vars.busy             =  0;
-!       
-!       // SPI is done!
-!       if (spi_vars.callback!=NULL) {
-!          // call the callback
-!          spi_vars.spi_cb();
-!          // kick the OS
-!          return KICK_SCHEDULER;
-!       }
-!    }
-!    return DO_NOT_KICK_SCHEDULER;
-! #else
-!    // this should never happpen!
-!    
-!    // we can not print from within the BSP. Instead:
-!    // blink the error LED
-!    leds_error_blink();
-!    // reset the board
-!    board_reset();
-!    
-!    return DO_NOT_KICK_SCHEDULER; // we will not get here, statement to please compiler
-! #endif
-! }
---- 1,251 ----
-! /**
-! \brief TelosB-specific definition of the "spi" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "msp430f1611.h"
-! #include "spi.h"
-! #include "leds.h"
-! 
-! //=========================== defines =========================================
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    // information about the current transaction
-!    uint8_t*        pNextTxByte;
-!    uint8_t         numTxedBytes;
-!    uint8_t         txBytesLeft;
-!    spi_return_t    returnType;
-!    uint8_t*        pNextRxByte;
-!    uint8_t         maxRxBytes;
-!    spi_first_t     isFirst;
-!    spi_last_t      isLast;
-!    // state of the module
-!    uint8_t         busy;
-! #ifdef SPI_IN_INTERRUPT_MODE
-!    // callback when module done
-!    spi_cbt         spi_cb;
-! #endif
-! } spi_vars_t;
-! 
-! spi_vars_t spi_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void spi_init(void) {
-!    // clear variables
-!    memset(&spi_vars,0,sizeof(spi_vars_t));
-!    
-!    // hold USART state machine in reset mode during configuration
-!    U0CTL      =  SWRST;                          // [b0] SWRST=1: Enabled. USART logic held in reset state
-!    
-!    // configure SPI-related pins
-!    P3SEL     |=  0x02;                           // P3.1 in SIMO mode
-!    P3DIR     |=  0x02;                           // P3.1 as output
-!    P3SEL     |=  0x04;                           // P3.2 in SOMI mode
-!    P3DIR     |=  0x04;                           // P3.2 as output
-!    P3SEL     |=  0x08;                           // P3.3 in SCL mode
-!    P3DIR     |=  0x08;                           // P3.3 as output 
-!    P4OUT     |=  0x04;                           // P4.2 radio CS, hold high
-!    P4DIR     |=  0x04;                           // P4.2 radio CS, output
-!    
-!    // initialize USART registers
-!    U0CTL     |=  CHAR | SYNC | MM ;              // [b7]          0: unused
-!                                                  // [b6]          0: unused
-!                                                  // [b5]      I2C=0: SPI mode (not I2C)   
-!                                                  // [b4]     CHAR=1: 8-bit data
-!                                                  // [b3]   LISTEN=0: Disabled
-!                                                  // [b2]     SYNC=1: SPI mode (not UART)
-!                                                  // [b1]       MM=1: USART is master
-!                                                  // [b0]    SWRST=x: don't change
-!    
-!    U0TCTL     =  CKPH | SSEL1 | STC | TXEPT;     // [b7]     CKPH=1: UCLK is delayed by one half cycle
-!                                                  // [b6]     CKPL=0: normal clock polarity
-!                                                  // [b5]    SSEL1=1:
-!                                                  // [b4]    SSEL0=0: SMCLK
-!                                                  // [b3]          0: unused
-!                                                  // [b2]          0: unused
-!                                                  // [b1]      STC=1: 3-pin SPI mode
-!                                                  // [b0]    TXEPT=1: UxTXBUF and TX shift register are empty                                                 
-!    
-!    U0BR1      =  0x00;
-!    U0BR0      =  0x02;                           // U0BR = [U0BR1<<8|U0BR0] = 2
-!    U0MCTL     =  0x00;                           // no modulation needed in SPI mode
-!       
-!    // enable USART module
-!    ME1       |=  UTXE0 | URXE0;                  // [b7]    UTXE0=1: USART0 transmit enabled
-!                                                  // [b6]    URXE0=1: USART0 receive enabled
-!                                                  // [b5]          x: don't touch!
-!                                                  // [b4]          x: don't touch!
-!                                                  // [b3]          x: don't touch!
-!                                                  // [b2]          x: don't touch!
-!                                                  // [b1]          x: don't touch!
-!                                                  // [b0]          x: don't touch!
-!    
-!    // clear USART state machine from reset, starting operation
-!    U0CTL     &= ~SWRST;
-!    
-!    // enable interrupts via the IEx SFRs
-! #ifdef SPI_IN_INTERRUPT_MODE
-!    IE1       |=  URXIE0;                         // we only enable the SPI RX interrupt
-!                                                  // since TX and RX happen concurrently,
-!                                                  // i.e. an RX completion necessarily
-!                                                  // implies a TX completion.
-! #endif
-! }
-! 
-! #ifdef SPI_IN_INTERRUPT_MODE
-! void spi_setCb(spi_cbt cb) {
-!    spi_vars.spi_cb = cb;
-! }
-! #endif
-! 
-! void spi_txrx(uint8_t*     bufTx,
-!               uint8_t      lenbufTx,
-!               spi_return_t returnType,
-!               uint8_t*     bufRx,
-!               uint8_t      maxLenBufRx,
-!               spi_first_t  isFirst,
-!               spi_last_t   isLast) {
-! 
-! #ifdef SPI_IN_INTERRUPT_MODE
-!    // disable interrupts
-!    __disable_interrupt();
-! #endif
-!    
-!    // register spi frame to send
-!    spi_vars.pNextTxByte      =  bufTx;
-!    spi_vars.numTxedBytes     =  0;
-!    spi_vars.txBytesLeft      =  lenbufTx;
-!    spi_vars.returnType       =  returnType;
-!    spi_vars.pNextRxByte      =  bufRx;
-!    spi_vars.maxRxBytes       =  maxLenBufRx;
-!    spi_vars.isFirst          =  isFirst;
-!    spi_vars.isLast           =  isLast;
-!    
-!    // SPI is now busy
-!    spi_vars.busy             =  1;
-!    
-!    // lower CS signal to have slave listening
-!    if (spi_vars.isFirst==SPI_FIRST) {
-!       P4OUT                 &= ~0x04;
-!    }
-! 
-! #ifdef SPI_IN_INTERRUPT_MODE
-!    // implementation 1. use a callback function when transaction finishes
-!    
-!    // write first byte to TX buffer
-!    U0TXBUF                   = *spi_vars.pNextTxByte;
-!    
-!    // re-enable interrupts
-!    __enable_interrupt();
-! #else
-!    // implementation 2. busy wait for each byte to be sent
-! 
-!    // send all bytes
-!    while (spi_vars.txBytesLeft>0) {
-!       // write next byte to TX buffer
-!       U0TXBUF                = *spi_vars.pNextTxByte;
-!       // busy wait on the interrupt flag
-!       uint32_t c = 0;
-!       while ((IFG1 & URXIFG0)==0) 
-!           if (c++ == 1000) {
-!               puts("spi_txrx timeout"); 
-!               break;
-!           }
-!       // clear the interrupt flag
-!       IFG1                  &= ~URXIFG0;
-!       // save the byte just received in the RX buffer
-!       switch (spi_vars.returnType) {
-!          case SPI_FIRSTBYTE:
-!             if (spi_vars.numTxedBytes==0) {
-!                *spi_vars.pNextRxByte   = U0RXBUF;
-!             }
-!             break;
-!          case SPI_BUFFER:
-!             *spi_vars.pNextRxByte      = U0RXBUF;
-!             spi_vars.pNextRxByte++;
-!             break;
-!          case SPI_LASTBYTE:
-!             *spi_vars.pNextRxByte      = U0RXBUF;
-!             break;
-!       }
-!       // one byte less to go
-!       spi_vars.pNextTxByte++;
-!       spi_vars.numTxedBytes++;
-!       spi_vars.txBytesLeft--;
-!    }
-! 
-!    // put CS signal high to signal end of transmission to slave
-!    if (spi_vars.isLast==SPI_LAST) {
-!       P4OUT                 |=  0x04;
-!    }
-!    
-!    // SPI is not busy anymore
-!    spi_vars.busy             =  0;
-! #endif
-! }
-! 
-! //=========================== private =========================================
-! 
-! //=========================== interrupt handlers ==============================
-! 
-! kick_scheduler_t spi_isr(void) {
-! #ifdef SPI_IN_INTERRUPT_MODE   
-!    // save the byte just received in the RX buffer
-!    switch (spi_vars.returnType) {
-!       case SPI_FIRSTBYTE:
-!          if (spi_vars.numTxedBytes==0) {
-!             *spi_vars.pNextRxByte   = U0RXBUF;
-!          }
-!          break;
-!       case SPI_BUFFER:
-!          *spi_vars.pNextRxByte      = U0RXBUF;
-!          spi_vars.pNextRxByte++;
-!          break;
-!       case SPI_LASTBYTE:
-!          *spi_vars.pNextRxByte      = U0RXBUF;
-!          break;
-!    }
-!    
-!    // one byte less to go
-!    spi_vars.pNextTxByte++;
-!    spi_vars.numTxedBytes++;
-!    spi_vars.txBytesLeft--;
-!    
-!    if (spi_vars.txBytesLeft>0) {
-!       // write next byte to TX buffer
-!       U0TXBUF                = *spi_vars.pNextTxByte;
-!    } else {
-!       // put CS signal high to signal end of transmission to slave
-!       if (spi_vars.isLast==SPI_LAST) {
-!          P4OUT                 |=  0x04;
-!       }
-!       // SPI is not busy anymore
-!       spi_vars.busy             =  0;
-!       
-!       // SPI is done!
-!       if (spi_vars.spi_cb!=NULL) {
-!          // call the callback
-!          spi_vars.spi_cb();
-!          // kick the OS
-!          return KICK_SCHEDULER;
-!       }
-!    }
-!    return DO_NOT_KICK_SCHEDULER;
-! #else
-!    // this should never happpen!
-!    
-!    // we can not print from within the BSP. Instead:
-!    // blink the error LED
-!    leds_error_blink();
-!    // reset the board
-!    board_reset();
-!    
-!    return DO_NOT_KICK_SCHEDULER; // we will not get here, statement to please compiler
-! #endif
-! }
-diff -crB openwsn/spi.h ../../../sys/net/openwsn/spi.h
-*** openwsn/spi.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/spi.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,67 ****
-! /**
-! \brief Cross-platform declaration "spi" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #ifndef __SPI_H
-! #define __SPI_H
-! 
-! #include "stdint.h"
-! #include "board.h"
-! 
-! //=========================== define ==========================================
-! 
-! /**
-! The SPI module functions in two modes:
-! - in "blocking" mode, all calls return only when the module is done. the CPU
-!   is not available while the module is busy. This is the preferred method is
-!   low-RAM system which can not run an RTOS
-! - in "interrupt" mode, calls are returned after the module has started a
-!   transaction. When the transaction is done, the module uses a callback
-!   function to signal this to the caller. This frees up CPU time, allowing for
-!   other operations to happen concurrently. This is the preferred method when an
-!   RTOS is present.
-! */
-! //#define SPI_IN_INTERRUPT_MODE
-! 
-! //=========================== typedef =========================================
-! 
-! typedef enum {
-!    SPI_FIRSTBYTE        = 0,
-!    SPI_BUFFER           = 1,
-!    SPI_LASTBYTE         = 2,
-! } spi_return_t;
-! 
-! typedef enum {
-!    SPI_NOTFIRST         = 0,
-!    SPI_FIRST            = 1,
-! } spi_first_t;
-! 
-! typedef enum {
-!    SPI_NOTLAST          = 0,
-!    SPI_LAST             = 1,
-! } spi_last_t;
-! 
-! typedef void (*spi_cbt)(void);
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    spi_init();
-! #ifdef SPI_IN_INTERRUPT_MODE
-! void    spi_setCb(spi_cbt cb);
-! #endif
-! void    spi_txrx(uint8_t*     bufTx,
-!                  uint8_t      lenbufTx,
-!                  spi_return_t returnType,
-!                  uint8_t*     bufRx,
-!                  uint8_t      maxLenBufRx,
-!                  spi_first_t  isFirst,
-!                  spi_last_t   isLast);
-! 
-! // interrupt handlers
-! kick_scheduler_t spi_isr();
-! 
-! #endif
---- 1,67 ----
-! /**
-! \brief Cross-platform declaration "spi" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #ifndef __SPI_H
-! #define __SPI_H
-! 
-! #include "stdint.h"
-! #include "board_ow.h"
-! 
-! //=========================== define ==========================================
-! 
-! /**
-! The SPI module functions in two modes:
-! - in "blocking" mode, all calls return only when the module is done. the CPU
-!   is not available while the module is busy. This is the preferred method is
-!   low-RAM system which can not run an RTOS
-! - in "interrupt" mode, calls are returned after the module has started a
-!   transaction. When the transaction is done, the module uses a callback
-!   function to signal this to the caller. This frees up CPU time, allowing for
-!   other operations to happen concurrently. This is the preferred method when an
-!   RTOS is present.
-! */
-! //#define SPI_IN_INTERRUPT_MODE
-! 
-! //=========================== typedef =========================================
-! 
-! typedef enum {
-!    SPI_FIRSTBYTE        = 0,
-!    SPI_BUFFER           = 1,
-!    SPI_LASTBYTE         = 2,
-! } spi_return_t;
-! 
-! typedef enum {
-!    SPI_NOTFIRST         = 0,
-!    SPI_FIRST            = 1,
-! } spi_first_t;
-! 
-! typedef enum {
-!    SPI_NOTLAST          = 0,
-!    SPI_LAST             = 1,
-! } spi_last_t;
-! 
-! typedef void (*spi_cbt)(void);
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    spi_init(void);
-! #ifdef SPI_IN_INTERRUPT_MODE
-! void    spi_setCb(spi_cbt cb);
-! #endif
-! void    spi_txrx(uint8_t*     bufTx,
-!                  uint8_t      lenbufTx,
-!                  spi_return_t returnType,
-!                  uint8_t*     bufRx,
-!                  uint8_t      maxLenBufRx,
-!                  spi_first_t  isFirst,
-!                  spi_last_t   isLast);
-! 
-! // interrupt handlers
-! kick_scheduler_t spi_isr(void);
-! 
-! #endif
-diff -crB openwsn/uart_ow.c ../../../sys/net/openwsn/uart_ow.c
-*** openwsn/uart_ow.c	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/uart_ow.c	Wed Jan 15 13:48:27 2014
-***************
-*** 1,94 ****
-! /**
-! \brief TelosB-specific definition of the "uart" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "msp430f1611.h"
-! #include "uart.h"
-! #include "board.h"
-! 
-! //=========================== defines =========================================
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    uart_tx_cbt txCb;
-!    uart_rx_cbt rxCb;
-! } uart_vars_t;
-! 
-! uart_vars_t uart_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void uart_init() {
-!    P3SEL                    |=  0xc0;            // P3.6,7 = UART1TX/RX
-!    
-!    UCTL1                     =  SWRST;           // hold UART1 module in reset
-!    UCTL1                    |=  CHAR;            // 8-bit character
-!    
-!    /*
-!    //   9600 baud, clocked from 32kHz ACLK
-!    UTCTL1                   |=  SSEL0;           // clocking from ACLK
-!    UBR01                     =  0x03;            // 32768/9600 = 3.41
-!    UBR11                     =  0x00;            //
-!    UMCTL1                    =  0x4A;            // modulation
-!    */
-!    
-!    // 115200 baud, clocked from 4.8MHz SMCLK
-!    UTCTL1                   |=  SSEL1;           // clocking from SMCLK
-!    UBR01                     =  41;              // 4.8MHz/115200 - 41.66
-!    UBR11                     =  0x00;            //
-!    UMCTL1                    =  0x4A;            // modulation
-!    
-!    
-!    ME2                      |=  UTXE1 + URXE1;   // enable UART1 TX/RX
-!    UCTL1                    &= ~SWRST;           // clear UART1 reset bit
-! }
-! 
-! void uart_setCallbacks(uart_tx_cbt txCb, uart_rx_cbt rxCb) {
-!    uart_vars.txCb = txCb;
-!    uart_vars.rxCb = rxCb;
-! }
-! 
-! void    uart_enableInterrupts(){
-!   IE2 |=  (URXIE1 | UTXIE1);  
-! }
-! 
-! void    uart_disableInterrupts(){
-!   IE2 &= ~(URXIE1 | UTXIE1);
-! }
-! 
-! void    uart_clearRxInterrupts(){
-!   IFG2   &= ~URXIFG1;
-! }
-! 
-! void    uart_clearTxInterrupts(){
-!   IFG2   &= ~UTXIFG1;
-! }
-! 
-! void    uart_writeByte(uint8_t byteToWrite){
-!   U1TXBUF = byteToWrite;
-! }
-! 
-! uint8_t uart_readByte(){
-!   return U1RXBUF;
-! }
-! 
-! //=========================== private =========================================
-! 
-! //=========================== interrupt handlers ==============================
-! 
-! kick_scheduler_t uart_tx_isr() {
-!    uart_clearTxInterrupts(); // TODO: do not clear, but disable when done
-!    uart_vars.txCb();
-!    return DO_NOT_KICK_SCHEDULER;
-! }
-! 
-! kick_scheduler_t uart_rx_isr() {
-!    uart_clearRxInterrupts(); // TODO: do not clear, but disable when done
-!    uart_vars.rxCb();
-!    return DO_NOT_KICK_SCHEDULER;
-  }
-\ No newline at end of file
---- 1,94 ----
-! /**
-! \brief TelosB-specific definition of the "uart" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "msp430f1611.h"
-! #include "uart_ow.h"
-! #include "board_ow.h"
-! 
-! //=========================== defines =========================================
-! 
-! //=========================== variables =======================================
-! 
-! typedef struct {
-!    uart_tx_cbt txCb;
-!    uart_rx_cbt rxCb;
-! } uart_vars_t;
-! 
-! uart_vars_t uart_vars;
-! 
-! //=========================== prototypes ======================================
-! 
-! //=========================== public ==========================================
-! 
-! void uart_init_ow(void) {
-!    P3SEL                    |=  0xc0;            // P3.6,7 = UART1TX/RX
-!    
-!    UCTL1                     =  SWRST;           // hold UART1 module in reset
-!    UCTL1                    |=  CHAR;            // 8-bit character
-!    
-!    /*
-!    //   9600 baud, clocked from 32kHz ACLK
-!    UTCTL1                   |=  SSEL0;           // clocking from ACLK
-!    UBR01                     =  0x03;            // 32768/9600 = 3.41
-!    UBR11                     =  0x00;            //
-!    UMCTL1                    =  0x4A;            // modulation
-!    */
-!    
-!    // 115200 baud, clocked from 4.8MHz SMCLK
-!    UTCTL1                   |=  SSEL1;           // clocking from SMCLK
-!    UBR01                     =  41;              // 4.8MHz/115200 - 41.66
-!    UBR11                     =  0x00;            //
-!    UMCTL1                    =  0x4A;            // modulation
-!    
-!    
-!    ME2                      |=  UTXE1 + URXE1;   // enable UART1 TX/RX
-!    UCTL1                    &= ~SWRST;           // clear UART1 reset bit
-! }
-! 
-! void uart_setCallbacks(uart_tx_cbt txCb, uart_rx_cbt rxCb) {
-!    uart_vars.txCb = txCb;
-!    uart_vars.rxCb = rxCb;
-! }
-! 
-! void    uart_enableInterrupts(void){
-!   IE2 |=  (URXIE1 | UTXIE1);  
-! }
-! 
-! void    uart_disableInterrupts(void){
-!   IE2 &= ~(URXIE1 | UTXIE1);
-! }
-! 
-! void    uart_clearRxInterrupts(void){
-!   IFG2   &= ~URXIFG1;
-! }
-! 
-! void    uart_clearTxInterrupts(void){
-!   IFG2   &= ~UTXIFG1;
-! }
-! 
-! void    uart_writeByte(uint8_t byteToWrite){
-!   U1TXBUF = byteToWrite;
-! }
-! 
-! uint8_t uart_readByte_ow(void){
-!   return U1RXBUF;
-! }
-! 
-! //=========================== private =========================================
-! 
-! //=========================== interrupt handlers ==============================
-! 
-! kick_scheduler_t uart_tx_isr(void) {
-!    uart_clearTxInterrupts(); // TODO: do not clear, but disable when done
-!    uart_vars.txCb();
-!    return DO_NOT_KICK_SCHEDULER;
-! }
-! 
-! kick_scheduler_t uart_rx_isr(void) {
-!    uart_clearRxInterrupts(); // TODO: do not clear, but disable when done
-!    uart_vars.rxCb();
-!    return DO_NOT_KICK_SCHEDULER;
-  }
-\ No newline at end of file
-diff -crB openwsn/uart_ow.h ../../../sys/net/openwsn/uart_ow.h
-*** openwsn/uart_ow.h	Thu Mar 21 21:36:59 2013
---- ../../../sys/net/openwsn/uart_ow.h	Wed Jan 15 13:48:27 2014
-***************
-*** 1,42 ****
-! /**
-! \brief Cross-platform declaration "uart" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #ifndef __UART_H
-! #define __UART_H
-! 
-! #include "stdint.h"
-! #include "board.h"
-!  
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! typedef enum {
-!    UART_EVENT_THRES,
-!    UART_EVENT_OVERFLOW,
-! } uart_event_t;
-! 
-! typedef void (*uart_tx_cbt)();
-! typedef void (*uart_rx_cbt)();
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    uart_init();
-! void    uart_setCallbacks(uart_tx_cbt txCb, uart_rx_cbt rxCb);
-! void    uart_enableInterrupts();
-! void    uart_disableInterrupts();
-! void    uart_clearRxInterrupts();
-! void    uart_clearTxInterrupts();
-! void    uart_writeByte(uint8_t byteToWrite);
-! uint8_t uart_readByte();
-! 
-! // interrupt handlers
-! kick_scheduler_t uart_tx_isr();
-! kick_scheduler_t uart_rx_isr();
-! 
-! #endif
-\ No newline at end of file
---- 1,52 ----
-! #ifndef __UART_H
-! #define __UART_H
-! 
-! /**
-! \addtogroup BSP
-! \{
-! \addtogroup uart
-! \{
-! 
-! \brief Cross-platform declaration "uart" bsp module.
-! 
-! \author Thomas Watteyne <watteyne@eecs.berkeley.edu>, February 2012.
-! */
-! 
-! #include "stdint.h"
-! #include "board_ow.h"
-!  
-! //=========================== define ==========================================
-! 
-! //=========================== typedef =========================================
-! 
-! typedef enum {
-!    UART_EVENT_THRES,
-!    UART_EVENT_OVERFLOW,
-! } uart_event_t;
-! 
-! typedef void (*uart_tx_cbt)(void);
-! typedef void (*uart_rx_cbt)(void);
-! 
-! //=========================== variables =======================================
-! 
-! //=========================== prototypes ======================================
-! 
-! void    uart_init_ow(void);
-! void    uart_setCallbacks(uart_tx_cbt txCb, uart_rx_cbt rxCb);
-! void    uart_enableInterrupts(void);
-! void    uart_disableInterrupts(void);
-! void    uart_clearRxInterrupts(void);
-! void    uart_clearTxInterrupts(void);
-! void    uart_writeByte(uint8_t byteToWrite);
-! uint8_t uart_readByte_ow(void);
-! 
-! // interrupt handlers
-! kick_scheduler_t uart_tx_isr(void);
-! kick_scheduler_t uart_rx_isr(void);
-! 
-! /**
-! \}
-! \}
-! */
-! 
-! #endif
diff --git a/pkg/openwsn/patches/02a-MAClow_IEEE802154.c.patch b/pkg/openwsn/patches/02a-MAClow_IEEE802154.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..dc23784861296f90789630092a2445c2274b107c
GIT binary patch
literal 10561
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
HZx#apM$;|Q

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02a-MAClow_IEEE802154.h.patch b/pkg/openwsn/patches/02a-MAClow_IEEE802154.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..49478f8644842e2e30225125cc87fea4256712e5
GIT binary patch
literal 3023
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FiO<*b#%_jFW2{Ub#=8cFfueX
z(aYcr$tYEDEGSYiGEp!zv@$TXGB#5%GB7mZ($&>fC;}M-H9@yLvw$Si%&bgJtxQcI
zrfH!9E|6P|bSxA=!dwap$|<R7nR%%S@$m@9#d~mZDJbY`X>lnk#3ZJql;o!u<(C#H
zWTfU4q!tx(DJaBLg9s!kgl3RLHP{azTXc1GbxE`Z5>^mn6j1C(w*=$`Bn<YNp@oi-
zImC0Ia5S{gF*Z|xx<Wxg0c3=ssY$$>vs=7dkfX0_e1NN;i>IHv0s`17nCNhUxyY&=
zoxS6OTm!-4$b_weDHhe9ej!1Q0gisiDnV>p1v4EkZ4e9DY)@Ao&)|^wfFRdkSHBRD
zECkys7-BKo#Wgr2-qFP+DBjoK#TB9wMA|ACVKE!x%P`lVU{8N!=V13`aF8=LqZPpJ
zR#2$5=Hk-k(pE^#E6oLmB_uV+rzNMwrxhjUrk14^6=&w>#e)<SD^#O-6%^o5m&6+x
z7#M?G4aK$!209A*`kASzsfMN|x*%Enn$4gZK@=#QP&J$3)(p~sj6uPM(9ER`@}xGG
z0#-kkR2HPd{RTD!7L6g10j}{*u8z(qfecon0P-7Zf&!~{aSU;UC_o`Wo&hCgq?D}%
z;wu=N>X;ZHlD3J7j;RTjq#f+)93SZ#93SlJ92(>q5{Ya$*lcJtV)bBVYEEWx3EYb)
zDHWPZ{rr(lgtEb2#HKpZH5jS{i2^$VZ$KBM=A~rjrNbQp)(i`4XqJul^M~YNC?Bi_
z><};uT{S37z?lI_IoKh{0j;G432QSm9dkoOSX&tASePS)by9wQ4%iX}1qE=r4}iGW
z8WPRO(uv90L8*nMsl_F!DOjWn67xJ=obz)Fic*U~Ima53aFI>OO!dhuE(s_~El$lV
zfy$R==9O5)mw?>>c0d>;<3VjemQE?ogNlOclla7xl%n_&g@VMqOqhF+#Zyv?ORPc3
z4LMXmd<An09Sdl+0jeGJZE*vIf};GAd{Aa7R=}+aS%!;CQK2k9GerSZ06+_sf}&JV
zGVn-EOi3+LP|)x%NX-i@O)X7z%_}LYj4#mw`(7cpI9-QJ5yHkpA_obQGH~F9R2HNX
zV+L}pAem8|np|3xSyJhmmzb23nnH|8I9yW<N-25CseYxoNvTD|7=#pe(C`2|EHAa9
z#3R2z6BP64;aZehQk0ommI@76yx|Hq3@?EcVHx0<iqFg_(SpUJsi8?cL|D_B3*0KO
zG|@3MfaawENJm(FOH=~Fj4%>X4yI;EISb14sd*)Y;~CQcu<g*=mau-zgiCUo#dHFx
Ui4`-cB2uX$mjXuqAFy-^07bRTL;wH)

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02a-MAClow_IEEE802154E.c.patch b/pkg/openwsn/patches/02a-MAClow_IEEE802154E.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..335825ea3090f7efb285799c0151edcf610cdf2a
GIT binary patch
literal 67753
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02a-MAClow_IEEE802154E.h.patch b/pkg/openwsn/patches/02a-MAClow_IEEE802154E.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..42c7d4e94e85149f14b29d3ce66d49964002c540
GIT binary patch
literal 10500
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FiO<*b#%_jFW2{Ub#=8cFfueX
zan;M<49O@}a4aZNFfvgvG_*1>v@$kRFfuSS;nLOBRVV_P1T{jpJhOl_<IJo~O|48#
zAjWB-0xpni4GnaR3>82UTwDqY%9(k|Ii)G73QABL^)i%Dgp=|Ui&Ek<^V0G`GF%D@
z`ueuGfkH}ZQfazEN@`kWUaA6abqE=dBM2Euv|$iqxwsS+l%Y-tj`VZ(2=e#yjPmqz
zk9YQP^z(D|QGfs=0|kA3h2)IHyu8#Lg_4X^h1~p-RE3<(;*!+7Vuk!Xg_3-Q;>x__
zjH3L!%&JsSxIm2!i3oBH3G#FehM0s(8iS0@E6q(xEmFu&Q}A_kRwzm>DauSOR!B-s
z%P&e*NJ&l3Ni53DOIJus%*;tmK`}W#z(3qI2-Qdk&)5)TvZ1Z6k!gxku8xASp{+rR
zQ?7zWZeoQ(Sz=CUswR?2L9PhTJBE1r`?-fY2Dv~?QZNOXl$obsY?SR$rBITYoL#J^
zkeivOkdj$kl9-pA3i3NBNK*4sK%M|Gi*xczK*GhP$;qk3X{9+il_<djO1z-dWu&01
ztE&r&SQ1m0Hd1mdPR>Y8Da}b8cB#&w!Y~mO_@n8LTImi{mLXwqDQ9G=V{8B^<v_{O
z$V|uF5|S(x;AMl4r>|#-k7JO#Ylx?>tFwPlkgGE&pMbLnID?dA6r~nt<maR)AhI(!
zuYj@vBon79Br23-=B7I57Zs%@mt^MWDJbP67Nw_xi&1EC;p6J(9^w%Xsss#8P2znW
zBfxfm2ty+aP-+0>;GERF^pXrvZc7B^=FAj@qQsQUe1(F<<m}WEE-q~aeSJeyJ(E-g
zP;p$8n+UcoH77MUHLs*tp(r&cu_QHxOB?P%kbTffCqBS2(#PM?CEmp~*g4+E)h|BS
z!_zGU<N^dXs4y@gM!S2Ee`r9wr%SxAkFP6SyM{r9fuVwpje?=3g1$bqUMW^6&d5wF
zQ82_|F4#FCkpZspKK_30aI;VtAae<75BBg6Lh}yP5Q7Q>11@cX26(tSy0`|#dm=mp
z)vo|C0BfisoDU0MO#M*j>+9#F<|(9Qrskx8surkveTcORAcOEZ5foz(rSYDw@xG41
z-Z0mJX@d$kSCB7pI}&67)J|+B7*x2qxe^E_kP!$sV5A>QLheVh9$m93ID+)`(~I&;
z3p`!)p^4hlh3o)x^>Oue^$YQIiAOjYDcC@f;^vCa#o$El=>pF<Xu%Fj6o#%~XT#bW
z$k`1PpYhn-faG($c>;^|NLoSp30xk4b6{|3l7gqJ0yqa1B&Me-SQz8;87Lk>YQfnT
zGcmxD0`9aF9O~rh0?x2ljUXmyFx-IbIRyn%eD23$J+f{?aHQz#BL@wnbby475k9j)
z?gA^u>N5oeP~hOtXb{)oHUktopp-|NE08^?pkRSdGd2exYX^r94g)}877uDRf|3Q;
zAaL=5LKsvSIuflNvzoz`>LFJ9_=mU!Ir_TB`*`|!V>rT~!q5q?)!4Pe9D&zrP#YlF
z$3FzaQi$gbDh!kHS&g9`W+_BFIMA`?D6qdhUE`q{9-<tL1eI1eEO&JFj`sr*AO|4Y
zFo?280hDO*lvJQDot74tf<kykYMw$Ow6&p-32IOzr)HL=rsybSmVo%>MVTcfsd);S
zdBvG2so)Nie?e+qU}<V;s%u_JQDuCIt{t?oqM(penwFMYq@z$=l2}v%>gptxfVCu5
zmVi1ypgvuSLQ-l@ez_htt8)@7AvS}Wb4aZ_Ef8P9!cfP;4AHzZG&ayNG&X}Z@Dvmj
zLW+Iz^U~e1v<Pe!6ckL1b<jds0o1WoP%tz$FeokN0!xMzhg3KwXS<~4Bvyh2;DoJ$
zf}yD)4kJv=49pNl1ZU(Im0)oO$Q6cWIE+v*1-k;&-UE9DpCQHuxD2rb83GFbTw^1J
z<itFM^8BJ~h4R##9EI}Ck_?5CjLc$CJF^tjv4z-^lV9ReS_ElV!hNftV5^`I;2#tc
zA5t8Qq(TQAWQL{&AbTJ|rmwG%T9KMu3T~Jd7o?`9z+0tY<8l)#LMmJmOA-T$QVSA`
zQo({?0%ire3LQ{%V?@8DxsIWM5mNk{nClpt!W;Ot)?AR*GNkR9pQZpxbj1ppdEgY7
zlbM(8UjTMvQf5hRVgZ-7LTX-Vu0m#NYO0~BNoqVoMLbxdnoAqxN;e-z_xO;Ac(h)>
zt%A7@l7b*C3e1od1ba9Jxw;^mVyj?^tN@giy<J@cKtmP~yKEIqKng$}1Bbd>urIjR
zQKXOpjjv(_jpY2?q|7{U>=lE15heM#naKzhpuquseT9$+tYK<sWU6Cm3hgt2d<%*5
zU{7~HSC@ECzmWKFPnQr6u(gQJjy0EpLahRF%Lh~zWt3PW55hRQgu$Cpkgkw|DM%jw
zxKCMPQD$ONPHHhx<4Cr)wxAIQ{6-cO<(K4_R2C3zCd5dE#FX63JT66rvi!^xaL^zK
zc$&$~%Pi5*1cisbzCuB1Qch+vmm(w#LGc*`4L$`#DoZTRbID9g(?~4Ni!aeqD9+DK
zbqw~?wB}M&NXpO8LD&IiAuK8m28~I9?854z#Nxd0qRf)iko<t`5)JecT1z3VC^0t`
zYzr3eAT$T37G);pXq0B=l~{nBmsnJkSPAoAY8j}@NgzbPCBJ`~8^}HlNCD#M>k12q
z<ivuK(xTLqkWAdJf%`c%FNIix!1*ILvltZmSb`BeKp9Y!nO72@Seyq5MEuG!!QoAe
z%G|`{;F83WVvt&RwHi|k9@RCpFw!wLFhQ!Kz#&3O_Co4p7bI5Z<R_*mWTYmhq!xiX
z1I3_<M?qTw)VxrDa6BNA+6tibqu}X^G)#&mhZbj6rRJw;Kurd<ic(UGlZ!G7O7e^1
zOEeX<6=Jv)!6_350W|>R0FdtD(j<rjK$<~Xh&2E_0t+&sM3YMq1_=y9=jMaP4i$(m
zLO|v!fJ%mx)HH?SlA_Y&5`}7r|Mc}0pvg%=K>?gsL9R#O#Ns?_1P{gnjVzZI6{Y5t
zC?qBo=jW7`q$+?1P$45p5Tii?{%L8&sU`6xP>l#7WJ8fm11V6*2W!G<NM341iDPm}
zW?3qz!iLyj4H{+wNhl<OWgxCWHVB*`gB)Ev{ZR|7lvGfH0p-*D(h|6<^z{`o^2-%+
z6Z0y;MindMq^6a?M!0kG^NUl9!NbE4S7OOykc<U45E=lW8Y(E%RUtDi4Kf~|2{8sb
z2%iEPddo{K0X1eIChO}fB!Y&S^2_r;11q4BYVe4CetJ=2E<_2u94RhIEJ+22HJF8N
zHz<g}5}@i6WRP31FT@1QVpJg|u_Q4hKR7in1=$!-;h&$GSCU!;awy0QkU9{%I5jT?
zuVF!{koGphI2?u*K^5XOEipM8(`6vf6`(pTF*%!{%Mz2bF&&1(EL4Z#N>4e7#U;*2
zr9Z^K`uYkW2?bca0B&eNe2B{+P|1MRAQUqcN{ds$sRpDRVxYc0Z1g=Nzn~y9FC8Kb
zt?Qr(5lp2Or4~Zm2j)TveSHOxL}_YXawROOBtvsMD1YKKF0nWdmK&i)fhc`_Xog1a
zT7j!+aIvHSZGK~9P4Murf1YPvCMa9#>z9LiaG<t5w4n=f3b@4!R;W-?S_Gcfg18QQ
zpn_HU=Y?b@7hCJ=!!vkEW^ysO*MQyROweo@#8`}c4l^+$6Wn_M6+<QY3d#9-B}Mr;
z3Ylq04$Mdd&5)($fnAyk9wyBMbxA?~(Bo26s717$$`Xr;<4df;;S&(#=<e&N0qS{b
z7;1uBHrPvYEb$8pegy^4@II)F3&;iqB)A2E<n>%=K?W~@@<EQu%g@twboPe!mm!`f
zXn|vLHaImQ7oMQm1GFLzWI>*Sqq8@}Sa4Kfv=l&2&&|w3YKwz%Wo~9(W^QRNIQJ+d
z!zU#O8kAUpZct(cZiDc8)CF8$fc*(_5v0NcXOm1&P$nv*q=K@dLPlaiL26zqv`|dT
z$xnn;f*`LUa7t-OrE_I+PAc5U+(b~f1}dtMSfY@cn4F<dTw0J?1kE<cX$4fGLlTPu
za#8`M6fQ*^l|DGgF)|$7O?joc@p-A`pxPDGT*sM1Q8a)ex`=q?$jxWsbs<{HAU#Mq
zCM78ynqjyU3ACO(U5V~<L1)}SCW7iZX!|oQzepi5CkN3SEyf6FXyXc$kPOY@OB5iJ
zU-8g^|ICzlP!<Mz0b(Yo0f^iH1xe}aL*zgS3feN&Q-GVGP@b8SqmY!UU;t_#K=dZ1
zrhrBPAhT!%iRpR@7KY&90NDl_<3dxLpQliur(j_KDrdN0o&=R$pmrVDm&w@*nW+l8
zy3jGQM1-Hg<t1c*rC321<}QWI6a`y@3d2;8k8O>>$<NjR)Ket36jR8|D**=?C_RBP
z5_ok6C_HKtle6PNqKJGC3N}zNiIMVQo`HrS*e^Lb3ee`hf~RXS)X$)hK{Sf1_4N%6
zlR$1)FiBEK&rDG;Oal7>Qox``CwM*w7MTkA`jBxL(8`L8R8TJk8kD*UB^im}F-A}#
zO3h75O-V^jf%IMSixeRJ1_e)7P$d8=ouS4m*xG_7=L{hVYryVM$jQ%3SFlw8MQbh8
zH=sa(#6P6-0;+@HK1E3ADZtEyr5r;-DF>V;Ks_9V;?g8g)Ix(3T(W_@Py(91h4jsk
zEh<k1wMroNDP*SD8iL(!3vx7Ccw-OO;?g8f7ep2Txd7xzq&^m;YSh;U1t_R$gH&GN
z!68sU!jmgBh(M76YB?a%YjJ5(W(p{!CPLh1pr8TnMrwj0-`0$z6bnig7V#yZ-cz(`
zEGVgh3PzY{R(@t)d_hrWeo<ygB}lRsl&Uj89>Sh<!J!WJSWbQkxWHFP%u7-5$;``!
zbZb$=5Y~}XfLRD?Pk^;$B<7{$q=Kx3xd)uF;PRj@EV3-f4|%1zpy9z{ka#UzB}fS7
zV2rX3#Q|U&N{anTb3rDc*qfXI>5d^wfUE==o(~?dgxCt=d*-F($AglAE2vZljW*z2
zmqqiDFVI*LY;*{9^b1QZ3h$3mI0Oc@6zeb;+>Z3r635~^>JDUK_zBkI0QHi=El`lt
zK#_}t;Vwed(U4&=LZ*R=JlGfnM*CU;vgQskqy@4W>;(KuA-!)6B2~kOwxH@k2@X7K
I6jRFu0F^p!4gdfE

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02a-MAClow_Makefile.patch b/pkg/openwsn/patches/02a-MAClow_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..13c91eadb9153df1ff2e9ad49c8c3a3f1f7ac419
GIT binary patch
literal 1319
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FiO<*b#%_jFW2`?%uY?q%t_@8
z$tYEDEGSYiGEp!zv@$TXGB#5%GB7mZ($&>fC;}M*)va5eS%B9h-~2oU-^5A<Ln8%4
zV=DtoD^o*=Nm{6Y3*<%v1&|=v5<?whBL!VuU0p71h2T&pUw;=XTNRDsjMSVQg`~vd
z)V##pR0S0c=g=S*&mc`ry+kf;1!X5sKNrs+1zQCbjUZ3|5GTiAS55t-%shRNAwkYy
ziSo>xl;p&s6a_84WKAw@1%D?muy}Bgvz4k|vaN~+#1u_cy?l_oi)#Qb`4mkqZ7yvE
zPd{g$P#4!=1#MdeT~8#dQF;2smBsp*dC57YDXC~O$@xX8IHXdFGRsnnaA}0eCMO#j
z8dSvRrQ<Lqxu8@(u_!k_IX^cyKM#i@ko)pdOJK5~KtuN$G`Nw{3>N<*6eWQYRz_xe
z20m5BiMpNv9?p1`B<Xqvl$qgEVxk)o<miV-MRHMoaj|YrVr6PkF*w@v0zCZvBCQnQ
z5w4;ENobH*#S{i9^>^|DB??Xz4M!JE6%EHAO@*T5Vq`OX{ar$RTs0L`G$3k0=~AJf
zG$%(PGfyEUwIDSwB{eU(QXw-hEngumzeqtVwIZ{)Br`8vOF=JR0hIlUxwI8@VJQV{
zj+I`%tsXSFDJvxB=N4q<q$(ulr6{DQ=A{-TmZYK^&83ZSl&W67m4d2XGMBaj%;C<?
zAQw8j`8c`<gIKVL)>Kf?O;%9R(o0s*%}1D^qNSHlq;6kdh;};^-6<g54h2P-c_nEI
zO7O5%Qm9c#PApN-MOCa|r=VYwTc8grY2x!sOBB@96mrYZ#NdXgXz8VZV^mq8C^a{~
vEEO6+i6xo&c?tzZ`6;EzC6G8z&Ph$ovjVxLC|5x@4H`)bDjF`X0h(L@CZ%6h

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02a-MAClow_stupidmac_Makefile.patch b/pkg/openwsn/patches/02a-MAClow_stupidmac_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..392531cc8aa8fa971151988064f8982a560934e7
GIT binary patch
literal 531
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FiO<*b#%_jFV`<FDJ{rM$xTew
z_f5=BP0P$l<qXLvRd6gQQZO=6Ff_C>Ftjo@Q!p|xG~v?K)m11083#2-w>-0e3^UEF
zOiis!O(14!p#m<DyA2dTf?(?mbxag=b#-;Qv=w~)T|#|at!z~^iZfDkaukvhi&OIw
zb5j*mG@L_&Ts(s`HMz7EJpG(~LS0;g6|`*?bUjrxf;|00oE(E)HBou`#g)bSnR&@M
zr75XsGRgTxsW_xkiZaVmi*RX#$tEWo8X8o@=cVH?CApwfKd~q`J~=-(H$M-DB9Qy?
zQcGa6`dr#v+6piSBY6uRZF->a;EGZ3%U8%tEzil!OI1iLQAo{8QOHkI0L3d80J<xk
A=>Px#

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02a-MAClow_stupidmac_stupidmac.c.patch b/pkg/openwsn/patches/02a-MAClow_stupidmac_stupidmac.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c4604f46e7756987ed098ec3cd6df80c786588da
GIT binary patch
literal 3894
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FiO<*b#%_jFV`<FDJ{rM$xTc~
zu=J8SLo!Mg91DsRj7$^^4Xq3et&GhSj0_A-xO8=O6^cM6LXFZb&nzI%STieAQ!7&w
zh_PCzfD7b$V?!Mi69te2mx6-6zAbK`P*9X#l3!9;kXo#OTNSbl7ng#9a%Ns~PH9T2
zf|94JtE+{9k)f$cd~$wnZhoF#vJ#h~LRo%hib6qRa&~G-P-=2&W?5>AhNd-4BC#kp
zC^0W3Ki4TSIXgcsEhIBHwFo4y0MVG7k(igB8ed$JSdywynweK(5nrN^ms$=M(6k1*
z0PZP;w4(f6h0=n8)FOqP#LCnnh-_w_0wj8T9i4R)N-|OviV{;Y^A$3S6%upG6Dx}q
z^7C{Qax#lcQu8wN(qS%x=*dk?j?c`?EYZ+ZsOC}t0kG!yq6+^!4QTAerxm3ZmZs(<
zSH^>!o0poSX$?^e;=)}Y9PjDk;~MYd864v3=jrDTQ-rW6C9x#Yttc@!H6%YcH7`ZM
zR>3dS$Hy9+Tp;nNtE;O!h~g0xw}j#ns%EgoC)im77^k2diG;y<)yUXF#|V~NiHPRR
zvc!^9BJ--Ptt}TUX`|;xSTJO!DQI9xjj(L1YnPLnmtK-#X8_L(3ZOCtVw^&9eqKpp
zW?r#EL1JZ2eqxG3N@{UQW?pKFLP@?tVjfDy1Z5-;&dV=KEsigOlneOm)`a8&SO|gh
z0sTS<C9w?dP(n&mASNVTnON!=nVQ0C0R;tUfe0$x;AIXhmf@w2f<i4k#o#EWVF{-M
zRBD3?>7o+<ywu=~{1S~2PhZ!dcwa~7cqd0^Z+|y89bZpBC{xo~L0><_-^E{{2we7O
zR;6-*Z3ESdMo`CsqZpJ%sN`6bIHZ<?K|zd!A)#$<sAFUSuX7bZJ_BJcMTMmN{2XNO
zq$ZW72NY%IAy+S{C8b4q3T}=*!LFcMq!v<%L91N_u)~WL(lU!cRTVe~6r>hq=BH#P
zL*x`niy=9#q$n}3I5)FIM<Fo}oCQmYGSkyjixi4ei!u{)6f*M)N=x+fOG^q$OSqub
zG}!cbP_lp-8lRR~1gfyXF|C}LmY0&6rV#8J<mu?+=@;zm;p!6V;~E61?LgHb#PImy
zlKcWlEv}rJmy($VuELC<0fUIyT1d3x3mBAWD;ku6gK#1R0fdx_KukzVvNYE*HZX?d
zTX0;LWMmdAq?P6+mt^MWfm$%2=1hKGszP~2W^#r?QEFmNPNf2<!IGI+l3EOI?LZSk
zaWP0sewsoev^Ay&Hqo<0AwMstQXwTjwOFAzUm-IMtjX8W8PbLVS(2HjfZljPO2y!&
zn2thzNk(c>d1i5{LS~6VN@`kaQ88w+N`kcVP*RnG0?1ON!XIp)tu4Bh$dwL`G8ocs
zQnUp%n~;?&C@3H$&H_-5b1f>$FVb-K_YLs(bM*@Wl~g*eK|%2@jv<b2L5{wzA^yRx
zelGE@K|%gOI*{}WjSg`71qa^niVj3N9uiRk$|gt{oMViQ%yf*6jUYJ&TzSBY7?AHE
zMI^X@D^Dy*&Pd5mM^B2y<(VbP8OZG*aB@UWP05MHsS3gIArbLG5suE@R*=#UY@33<
zzNdPwLZSjR)0LE@7U?LYWTxb)mncA+ISP)>-U=F^_I-YuLP&%{F{Ja5s;LJ~WiT&*
SQyJJ$BE10eAl#V)>J0#^0G~Jj

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02a-MAClow_stupidmac_stupidmac.h.patch b/pkg/openwsn/patches/02a-MAClow_stupidmac_stupidmac.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..080735d64fb241d736de9f1f4ee5961810bbea8a
GIT binary patch
literal 1230
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FiO<*b#%_jFV`<FDJ{rM$xTc~
zu=FxGLo!Mg91DsRj7$^^4Xq3et&GhSj0_A-xO8=O6^cM6LXFZb&nzI%STieAV=E&|
zh_PCzfD7b$6LTFi0|k%-mjVblI(x^5J9>u1hj{wBf&{?W7DO5wnd>O%>nj)<<Q8)&
zDAZbWaVaX4<!7dVB;h`c&&<m#(a^N!QdCGSD#|a4FHu0q6{qH<X!sYT<^`6fmZrMq
zl@wLRmuM;E7N>(XU>XL};F6!0id~Zq+zPN&n$}zjSR7Q4n4Fzj5?_>>oSIpdip~Cl
z>=M%LhZq|KH5Jn-h_ETi%uOwd&rM8@PfASA&QD8=Ps=PyO@Raw%+Cl#<%uQ987cYc
z_*E687G>tAWF{l4O3KgAL5+-*)TGk%fTGMiaFlQ<C@81qrDUdoQy3)bb#--hsT%bl
z4}n87zZ@JZv`qjAOTd;5Y!bk94B<oo4=xY`6nQuk0!RTkU_lI2m1v0pqyVfEZ-RiT
HLL>?R7#NO_

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02a-MAClow_topology.c.patch b/pkg/openwsn/patches/02a-MAClow_topology.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a86ce007a580a21172123c732cdffba60f3777ee
GIT binary patch
literal 1715
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FiO<*b#%_jFV`>0FUZfyPp{NV
z<_yUwRd6gQQZO=6Ff_C>Ftjo@Q!p|xG~v?K)m11083Wa?Tb@}!f>~x(rlwY=CJ?i<
zPyrXnohCYl#tI;DE-nQHeSKTpKp`bHEi*5*SOK>ZG#M@~MFnMuE`<>P0Dm8U_sDo(
z{}5M01%nE+G+eSq3I-KPmbhe%6$~njleiQKI=3vbC^IoBhj<4Q4uOKA{F3~V$^xRz
z1V<k@h;?;!bqQMl2`p*_v4J73Km-M`fe|iQP!Jm!<B~N|FsLvv85+S4O4vvkoZ^j*
zbc`(_NnQa36s4Aw7UhK{=GeM9`UJaLb0NvrB6E_8QWLYSxfG%D$%)0OsOj6-3NERj
zppcoSppluHnrdNSWNK&<pOKoFl3Ju|S6q~=mza`L6mMpd6m1@BYm1Uaj5HOhk?mAa
zP(ZjZBq$Wkc?zjH#i@97Kz#%%O^l6nOw1L)=@IGyD1|T|sv0T|qVV}&fi?l4P*Z~(
ziXc~z9Ev8OP=v)3$OOz#M3SwAg(8v|O1MMA1xdOV*@<ZB0!z4<P@XW1L0*D*1x6ww
Ij_ia10NJ#zUjP6A

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02a-MAClow_topology.h.patch b/pkg/openwsn/patches/02a-MAClow_topology.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/pkg/openwsn/patches/02b-MAChigh_Makefile.patch b/pkg/openwsn/patches/02b-MAChigh_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3f2bd179f3084e8780c4726db50948c3694f16a7
GIT binary patch
literal 1321
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FiO((b#%_iOwZ8wP0UVB%gjmT
z49O@}a4aZNFfvgvG_*1>v@$kRFfuSS;nLOBRVV_P0@bcto>_q3DBt`%1>eL<1w$hR
zLt`rgODj_Yh*4UofD7bG0|k&E*cL+_V<QD!U0q!+ZH3@aCtrUTD_a$f;*8Xs9EGIB
z;?%sv+*Ab>4d>7x7tbI~O}#`eZ3Sf~Pd^vWAO%|m6^$TI{}3m~U{_83q|7{hkRd_N
zV2Sd~oRs9mq7(%!y<|-;Z3TZPFR*xUkh7JlUb3x<2E-IiRlR(Wyo+l9F8LHqE^RJt
z1y4U`pHLUqU<GYk1zk@ht5JFS#g)bSnR&@Mr75XsGRgTxsW_xkiZaVmi*RX#$tEWo
z8X8o@=cVH?CApwfKd~q`J~=-(H$M-DB9Qy?QcGa6pg=?S8Z@}|4U7^&sU|1C9E<-E
zir`5LpDN=-UC#gyXS_<1bUg#g%<w5O(G3Z5^uwbfxhTK5ST`rJGPS4}9Bq059{zrj
zRtoS4SJ8kZG)Sys3WJpTJ9&W;1*eLJql>1BhGUSXLQ!%tvKhYqE}=fInhGi!5VfFm
zsZdawlcSKCr;w6bkeZj0nwMOukeQd3uaK5sq@a~rky%`lnU}7mpqH-z%74XN+6ua`
zlma%#N-y7551QPR6_WFF3o>(36%zAO6w*`kQi~ExQqhg((ndH+RWIL4K~*oAOIrcv
zaA#+b3!UA39NmLKELcQqDk$hCE2wDcB`fIWBTP`y(#t1Ox34cmyB&(|6p(I*f}+g4
zk~9S+c-Sf_)F>n;mMG|=Dps&l&@ag?&<7PY@%g1C3TkQ!xn*c#a6?qI^isevs;p3y
ynwwvi3JsvdlFa-(g@U5|l+xr9NSr6<q$cKBf!tD*tDu_(jU)vX4Hwq{O)daZ>|gQ#

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02b-MAChigh_neighbors.c.patch b/pkg/openwsn/patches/02b-MAChigh_neighbors.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e26b96d9d5c80bbcd623829ae23a4ea41c11a6a1
GIT binary patch
literal 14774
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FiO((b#%_iOwZ8IOU+ErNXjoN
z)=TCL$tYEDEGSYiGEp!zv@$TXGB#5%GB7mZ($&>fC;}M-H9@yLvw$Si%&bgJtxQcI
zrfH!9E|6O-bc_rXK;m3n3JUuAwzz>pSz=LUVp2|Ou>x*IC^B4Jx(X$g1*s{iX$r+9
zMWx9l3e{Y?3JMAeFwY0&m&ccY1V9)jSRC!^7~vP{>*wm}?&0Jg6dY>}(Up>zUX+-Z
zjnDzom0RiJ=nfKwDk{y)E3rUTqM(qHnpBz|lwS^2lbM`bP-a$CkQ1MhnIE4~q6IQ2
zB{SbzL0>;RHMKw?vqT|1CqF4MN1-HNAt_Y><ZTcWY>q;5eo;|sa!F359+$2{E!;E3
z@nwlc#qlN9T)JEcFTzC8lvxuF?}DQIl6+A35gXv(<YJ*?Xsn>CtE&r&UQoosFo>^U
zWTazc0f}z~g|ht26osPH^vvRt)FQvsazAL2)ZhYz2Lyu>UVLIoN>O}?7TgP-E;>j`
zPy)QDxHwaXOA(@3K|vw0I1i)~!cQ#D3(3q)EiOsSEr1!IY0agekd&XFqmWq)cK}vf
z!78C{&do1Ng{y`|IV=Hr=B1=oXj+4V!_ZX62pS#(>|x|k0s9vcCJG8!`I&hEMVa{l
zMXAN9c_ql|U_JvYg{h-M$idPKlm;gqV>2BSBUsYW*V5urP>4w?%1ljD@XX6B$xO`2
ztV%6bD9OkyR>;jyDa}dM<5E!2(&tiyq%&CL6vt=gWtM1YDpZ4VfC8w{QAo~7O)P@y
zLKHI)f99s<7N?eIs3G)&a+!{SPH|>cYJQpqs(5^fCN$!W4RwsoAsInIfnw)^k{wN*
z3=L@*1rBjjGaWN%h=T&VD7B=tD6d!{1QNt0sp`cF$)!a_sd*&|E{^UBph6HH=7_Qq
z5kTpwCBCrI5*z{GWCbx6p0^?8l^#;Ds-RHI1<p&RhB~IuAf>*0U?EI`n_z(jrNLol
zW~yUu2uY==ZcJ6kE6q(xEmFu&L--YzT#>^vr&1w1FTcE4AwLZsny`F`5|)0Yxv(Or
z7!jN>rJ0~|O+i5c#)kxRSYnPfBrwekbj-{k>65MwMG0q^<M25a8oDqF9Lg4kIu_=T
zP)5sKL8&E0nW<%|3b~aE1x2Z8sYOMpDGCLNpj4_}tl%2zX=b7Ts!vjji}kp;6cu6$
z5{nXZ6{7P?OJZRXA^G7&nI)+T;Tfq#si1nd9Lz1rNX2F*)HH>Xd}w?@>l2j73V^vK
z0PGak(o8cG4U}pIY7EqFP-X`wMOY9iC}cuv6mv5j3nNIxQOEB?!|Sm4htl9=U}$2X
zV`yRqNeIZP*ioS%KQpf+wFne>plE}|g?ce8j&&6Bixm7qeS8!$(-iXZ6}%l4GK&@R
zQd3h>Q=svvsDKhdFf)qd(^E^l9btJ7GwXrlO#vKXU?wOE4b2d3!jjC~)Zom#<W!H;
z#G({vK1Hz#)Nn~jDS{^&NX#1=o9Y;v7((KHz`Tn!1B3lZWiLZx8b(24+`?4H&=Oj}
zq9uRNyp+u3#FA8n@{H7yjMO59;{4oHcv%aI-9&}r5^z%*7L`Z^05tn4L}%v3DuiUD
z!qN$-yhctzItqyjX{9+i3Wi1&x=EQO3Z4OFW>Cd?pe98Oq@*oY2nh;x1tqSMjKmTY
zXFwdGqu}P~6YQ#x4{~dHW-+Y20_t-aS{UdUT0o0uYI+mwJD67o(wDGUh0@^2H8L{M
zF*1gB2g&d?qP&O2FLDVF^EEgKKwd|w3(%vP$f$%{i7z&d3@vqxj7%Z<mfHRTdk5w>
zx_Jv4Z7>QFeWu1bMy8gK(wH=FW+WCXBr4?Om!}rNo01CPe3P4s9EX{po)sdCLb&;9
z5T&q4SIEp$K+drW;5<)EgyM2Wo<eRa-Uv3a&@nPKAt!=ySy`fh;&X5;L%a)$V+d<t
zJr0X|C=E#h<|aBu7G&jMA_GDJ;&pI%43>}pmDomRmO4h}WaV)peGc|A#P@^6<It#w
zQQ#zCY+$BiYzQv}bfHx)thL0YprETzT%K8yoDp1-n3S25SyJhoUkYlgAyvjXM)Ac(
z$&ifh>*%adoL^d$j8P>QBqnF4mgp#C>ZR(T=J@iAd<D>02GT$ftc9YW09FdotB_S%
zT%u5vnw*+h25R=fy91zMBn1VC1A>BsJr&9`OEMJ7GcuDiAbmEd{_@0PY}!EsO~p{{
zj=_Eki6sQ}g2yVLLqxEW3^Y~&Y10H%pmr7@0famXhU7me6YsbfR1Fe^F;Z5H(FcKb
z(_q6#d5AGPXs^=Pz);875Z-VhEB3(&9pXU+$|E0C6F?&iM`VNTgGM;%aShfDjqjlw
z)yRW>NNEDfgvB?Q3mXQ+GF%9jM<GC6ANXiEOecxy3Rb*8X-Fw!WT|6pYyxR(fXZKE
zBQqUiV|e)scLX9Ufrjn$;N0lUSiQW`+@K0=ZD<D!q6Mx1JeZEE9+XCGK?I79+|=CU
zf=cuOLR6iJ#d$j5Gy)qn1ZOtTP@y)&S`ewPUs{j?>c3<aa3Kk2rYUH^LJk_{wzi<Y
zg=RIfGNf4z=nxv*D<HqZOt6J9tdTX>f;uiBH-NFez5>)Gke&*x?AF0maD#P02#{;x
z7GnuRR1<A&!F?c5f`G;@jDp0nnSqY68KQp=8LfrQ7%1eWmc#p1kilAr?eK{NXgDcU
z!|MT<UgX&ZNKvDs0E$^1(1bxqF?gt70W|Ok!r;M2V>3e?V>86?Bi-DhgE2r4i$XM4
z!h#M;LqgEpRL9r?8iJszH?K4|q{7kJ8(a@37U!W>x+$r}C6G!FRPcg$nR$sNnfZCp
z4lZa=5~=#cQuV?^8j>7fB&b66gw(d6dKt+K@UR)Y-i0`?q$D-Bprjb$5<mE`X-QFH
zUU6<_aWU9IFhwQ#kQy15>hutUdgY15@oAZPi8(oy@u0Rs3dBTE=26H@19clx6`*wk
zs3LcC_Et|#QAnx;I}c_arjPRT6u_n`U~>?X_23*2Yej(S25^HtRUs#_xCDn@{H=fx
z%vJy>j_@}FP>Nub@YR7NY;!XmV+&})#-BvMbzP28JjhaT)eK^gmqLh45MUco9IZfp
zdH@@SnI_0d4n!sau#J#pFeu|6T2#O&aFJnRWUOO?7=;1#HPSLub5e?-P1wYuRA}{(
zqL5gWY6UJypmX3zrAcmaI<x@{G6B}aR>(~)E>28Og|w%0i_>-O3KA=G@)J`aBet1&
z>98SN7f*l8tf!!mk(!v2S_B=T#nWDP@$}d5FG$S`EKMy<b<Ha&sszmg=N6}fDjRUI
zgpx5pBG3VL6C)EH6JzKws{(i|kc<ETM?EMIDD^&VJq(L_C=E#g#uhpzCh%!`P|zqS
zq~#YWXk^+NSZCUxEswCy)YgUvDnv1;9?mQVO%w*@m-{A`BxhvirE92ZfFnG|C_XQ>
zqQpO_peVI0GrzRhBfmgXCsPy64A5wDnt}$lGyt#lp)H-1%zRxt(Db7ntk8x^z`39%
z5HyV{sHu@;rh+cIb=XX`b8&TZ4D|`|@$~a{_74t$v_~MJ0U<HH2NKuUhgLS_pn)%t
z9~5%(^RtT;ic5<NGLu2UlT)bxTCt;}ke`=RsgRkMT$Gv%nsZH5NXjh1;uW~_ur$A5
zVW4fRfaYM7HZ90y3JT!qkK)v#%*34df}+g464#=l{2~o!f8PLqKUcqyc=!q#9oL|s
zcpt|gch`6qNB1B{KX3eX64-o=RFHAt>9^F9)S~zjO*EIoqm>$l!OccW3ec%~6Jtvq
z6BA3=@EzE3LnFN_*b$R9X_Mj=>@?7lkd~2_ucx1fe*h=}c=|a9xjF{BY7YLKK%75D
zXa<2+3@{2(L0B5-m{=lJ5M`-Fm7w8!SQ)0H;Hi+CSgBB+m{$U-&yzC}^U_m6E$gEE
z(h^W551Ek%RpYt}o(f5+$%(nC3W;F-`S~R}3dQ-L8GKlARh*Gunv()r31<M(f^Ag~
zq{j+hU*edT0_(OyW>Hh~l2frw)n-~licmyrASW{~+d03u1RCKW31cJB>}^SEUP)p}
zW?3rKS)k>53dTm@S-@h@d@g8?v9vff1?1)8(p*T&2kD0lfq*89Ak+VzDHTxD5ko5o
zS-1SsycEckuZg9hj)^5w(KJ*-8pkX#a%e-Q#6eY_C#X(KEKapXgxG+DI4qGvX>eLM
zH8j^THG(fTfm99z23sJB8<Fm84WK@Q=+@U)NKVX2F3m|SNmT%)HihJTP>&F;BMS)(
zh!#+T3SNU@sn;Q0Bxi41TLVx#1F`-Qq#a}hC_yXWuk>pbQgez^kp@dZdKJJ9gzDCS
zre#eH4GoR7ocu(LDjV)bP%R5~l%_t>N*$fOH8r&i4fG6PBO4GG)IxG7goB<56>JsY
zmSPDQXjavRg#k)LfI?LP-9Q^O<KQdNK-DP34G0oLv#(<Wv;_o;2ZTZpOJ83h4V1MN
zl2S`RYf~V}L<dxGrWPR;ci?WhsiB3AsS#4n2bnOm(j9WvR=`MmSX&Dy(Ss#Ha_Z}w
zg=7Xhdnn{)=4Iw4<|w2TC8m`qloo?36@NDaaJvm;u|jfwZb2!iyw1-<PCp6?;Dw5?
zB1gei0i3Eqg%M4YHP*Hfs&|o{iJq{COy(e;!@P!K_+U-y(4rPbL5f^c107RS=%6L?
zIw$Bz4P?A8tu!wgJTwXJnxv+Hm;01}I-0nq>J=gDyupj;13>+mcz9Mvv<$$qu%-ia
z+&}>|9tjOjxE4rZ16CfCUv7)G5Lgc;p>3$Cir!&{l<Xiw^@{S#ZE+Y0X#tp;8tIst
zT0lA{bP5cV${XyFK@uRaWCEojsl~!X$J7$K=70-2B7|+6A7zCdbj1wbo+W7$sNg9b
z@J<c|@U{c^P6K#F0IfY06f$+Pps5Mo{LA!6EK7BSHW^YNtwg9AP_>bn1FA5<9p++4
z^<ZJ9V`>Rqaxxfwjdw;7?rl(|2Aj@+PHy4V2oFMJjZ_a{X!3$l;ACcIXslyq2w&F#
zvLA-g@-LhVZv(*;B4}F$)FvT;iXGgNa&-1a7yxErF@==bNZ3{wj7dq<=A*v8LQ1}Z
zr$S;*QEFmJr9wtx8K|oU>aQTLu2!&z6l-9Yfe36#TEP~w>Jgf>LCU}wJi3@=Yhay)
zF}j$AF}euW0a{s!Ugjb~J}Xua(z=4?sJ!G<TU%eph=3qhH`gFnKWA4^q5(}Dn;Dwx
zm|<yW5fdX2hai(!Vg&9eNQD9C!c)h<#Ve%GtdLcJ-12~qyQ1Yv=u|3VCKc{$xQDR#
w4`v9`tTSrbs^wAyLAYTc2GQwFL04BH#NWkV0Xn=;lCMx&oT}gzFys;<0IC`haR2}S

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02b-MAChigh_neighbors.h.patch b/pkg/openwsn/patches/02b-MAChigh_neighbors.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..454f860a41f5b2de5b8c5c122fbdb9ffe4344a87
GIT binary patch
literal 3927
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FiO((b#%_iOwZ8IOU+ErNXjoN
z*2~}w$tYEDEGSYiGEp!zv@$TXGB#5%GB7mZ($&>fC;}M-H9@yLvw$Si%&bgJtxQcI
zrfH!9E|6P|40Vjm6hIPS%RpRn1zlZTT`n#K1?7~~w9LFz1z*Pq7f1IXM?Y@`G+<DX
zmX?-=q}0XL%`wy`1dDQnAza!BlRf=B`~yHHd-^#CxjF{B!YnW{HB(T~*H1}JODxSP
zQ7B8yDNR+#%u@&o@KH$2OHuI6%*)J8%uz54$qaV(P)I3COe+DoSzq54H&7_4EJ#gB
zO;f<F1Wkqu6iT4rfng9|!Pr8_#2683#+EuJrjSqrJHIqDuf!t01k45#d8N4_6^_o{
z)?8pNHu><P#DZdLef_-B+@#bZh5R&ylFZ!HVug~7RE3fXh2;Fwypq%+g>sNGJ%!}N
zJcXoGg`(8l{Ib*(h0HXC+|=CsqDqC#VueJ7qSWG&qRixy%=|n(g~XiVe1+tU)Z}ah
zP%0|REG|vV$*f8(0vVmB2XRqiaUQaJ6%-PS^Q^hFL9WGcY*v0|UO-W1KFBk*3b1q>
zlwTfS0ul-ca&-4~)F?<y&eqV>w8kEQrWQKp&;V3W02xx^lA2VS?w6XGo|IqYnpaX(
ziNiES1^h8wmROXTn3R)ROl%wzPBaBY`6c<FltZkUTwIC@W%-#Ypx}dGSSS_8XXa&=
zXlQ~0N?%_gJ+-7HwWyd&Q6VKUy(lp+8yX1+<>{#<zLhSH?jT8!Hbn*0_&`zVSDFh7
zL2$7GQmmkml%JmiaRG=#Q5;Z|nwDBrl$sKdSd^Mq;#!(%W}*Q~A@PYRDMj%mS_&XK
zwYWGWKfEZjBvsRzOA(xc;PUXeFOE-7E%A1Q*$uH;Utb{;lw^zY(-TYbi;B5$yC$<Z
zxC9hua09S80~}_!{F7OX<{hj)(X<8^a%KiP7RIpbO4Y=do1apeld3>`8st*sQiK;u
z#U(|h$t4QaT#Cq%1<qI?0T71AV6?AegkPwypR1?4hm(I$a4aZx6co_X5lD-If<i7V
z1wj>|CLySz6i@~X$}fki$xO~IC^IW6$cazM%#Y6~(E=$;$;`J_(AUpSO)XH!EKx|$
z$xlkmQ7Fj=l|`Tk1Tn$pC?w|>6{RMZ<W%Z$DS|UNw6=>cODrk|Wo<4{>5f*|B6Ag}
zpX)$b5}b-i&v{U-#OFS!2Ha^rJ+%Za$x<^1LakQ>hw@;|hp_4tN`q@va|;~{Q%J3<
zfT#RS$xKcxNe!ydfK*+ebcu{n$_}VRj!}GZQL+wp4d|6MNKa95ai$I=AA-2Z7+h6?
za|1#&u{bXTR9lxM<`!UB0#0(E2tlZaXXE(HJcxHfNbyceYH<k;&tS{ikk&^@NosCE
zNwE&N2(+-!v9y2{frQ*PXoDI@453yMkWhy;S^|nvi&OJTaOlJqdN7^X;#HfAa6+YH
z%tA90i~?sWO9N0$gM=VuL3(NltYS|E)ycRbKRvYsZ*{B#3oB47As*B^f{SG4rKDDX
zQ@y^vLT+MSVtQs?x<XNYX$gqV%uCD1(>^LKNJ%V7g|~Se^HN~WfE1UhdC95p1_rpU
z;Zj6v=72>5iZb&`;^7$$q6O8nV0C_=au`)<UMjZMsFp%;az;*OaS5nRtDvB-r3KDO
qh6ctuhK7c)yacIQhJFZxLJAgz;BX=?l;PSy3`ouckzf-j326Xt6;R>;

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02b-MAChigh_res.c.patch b/pkg/openwsn/patches/02b-MAChigh_res.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ff894f4fb0172543a6603154a90995de2ab35f6b
GIT binary patch
literal 14675
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
a3Q7<m&>V#Vc-fYcrnQzncr6pY)CK_UBszxx

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02b-MAChigh_res.h.patch b/pkg/openwsn/patches/02b-MAChigh_res.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..30cd06010b7a219f682d1a6281d0316e871245e4
GIT binary patch
literal 1902
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FiO((b#%_iOwZ6SN-fsQ;0(zq
zRd6gQQZO=6Ff_C>Ftjo@Q!p|xG~v?K)m11083EO+Tb@}!q&a3*rlwY=CJ=M9PyrXn
zedanw778G7E(L{{#FUhh{Pd#y(gKAb*I<xHHJ5^dmOdAkf`Y!jEpDKYlA4y8m#TnU
z1-cAjBTFg^Qd3gXh&PjqOOb#p%Myz+6O(dMi-|Rquqz9S@=NkTP9@e%kSojbGgA~4
z6cmb5i{mr%GD|cxt+^BxlJfI&K%yzBNu}ulMVWae@wt^Qj_yT?dD$Qppg2%SE6UGR
zC@m;REmFuytV}K9QdCGSD#|a4F9DlYoSK)S;a`xN7g(BFn(CTYQdAjVqM(&qoUUmN
zjzow7Ir-&C2Ed$Cl31J_UzA$xmtT^Z7Mz-w;*y`23bI*I0jrXr)a2C6GO!Ae*;-nl
z6jKXMuI4(%77Dt$y1F1CoXJXCK{+!oIj1xwRY3`qwo5W|Q;UlAGL#61`_M>mx%nxj
zIjIW7r#mi1E=2`Uass9N;*z4$<PwEyE=5qXD9y|(F*J)W0kJ{2AhjqnKgBmOGp{5y
zFEKAU6_kb)6yV7Sqy~hON{cH&k(rs7?wx225&>a-eT9&qP*;WWjMO{@kP-z@(#gzA
zS4dRIPE9S)P0YzGONH1BOPC;iAPiCtHPJDp3}z%A6Y~@jQ_50{N-~R6b5rw5Af|%+
zV}bCFLP~KS%qWm0P^_=7kX%|+l$uwfkdj!Es8F0*SelxboT`vlnwtbp{t5~T=tlV_
zCi|wBgd`ScJLi|?m82Gd4F(wn;VP8mE2N~Bq!#6Z3a#>t#1e(v#Jt3Gu<H~+*#N8}
zAL3AW%8buU0l62PN<C9R!Cec^bY+P}#qlN9gcB`w3JXwP1Q!@c-o{#HKolx~BF5jv
z-%6o8u^5s%l1fVylJj#5auPH1Qd1O^lJoP@ax#-kK+z9Me8ozj{HzZtD^Lp?P{Bdd
T;s)YqE&@dkR29gXuwn-QFOnNL

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02b-MAChigh_schedule.c.patch b/pkg/openwsn/patches/02b-MAChigh_schedule.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c2cb38dcc52b054cb573559ac6f1ffe7a3e5c385
GIT binary patch
literal 18904
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/02b-MAChigh_schedule.h.patch b/pkg/openwsn/patches/02b-MAChigh_schedule.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f18bf2d589a678aa7f02b6dc142c2b3498cb8c58
GIT binary patch
literal 6975
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03a-IPHC_Makefile.patch b/pkg/openwsn/patches/03a-IPHC_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a0d23c4efe8b922a086a4ecc539edd1ad6ee04e1
GIT binary patch
literal 1315
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FizC<4DfK)_f5=BP0P$l<qXLv
zRd6gQQZO=6Ff_C>Ftjo@Q!p|xG~v?K)m11083EO+Tb@~f#~k1MJO$sxN(DnB1w&&i
z14}CtONcpIsDKOPJ_7}iAlM2+9b+Q}U0q#WE^US2P$yr17b{y8jpB^doE(Lu#NyPv
z#N1Q`6%FUmAQ#UdO-;Q-E^P&6Cr>{Y&maX`1r?1TPyY}n$6!}Y{iMu1eUKqR&R~i1
z%$$_u#G(`hExlw-E^P&WCoiygaFDZ=s$R0KiU!0KO;x>oki3g)0516yO)hONZ3Rz1
zXP;0P*I)&0TLoQDB&$(*`o)#S`k8sjIi)G7Xfnz9MX5NXQi?LmQj2hDgvll+8yXr^
z#OI~sFeSO5R6nsOH$FK(H#a{Iha!;s@={A+vY<di_Zl>~^$m;?b$uP3bMniv_#dGt
z38W|^Gd%;JDrnNft0YO+GoZ{2pAr+@kRV4tJSvil@{5aga}q04i;BU~rWfGh?-yyM
z0FQ7L4M;+R#44sRNU6V*7bsD1s%SX6XsT#925Bl3B^M)`;p^`b>f@@ZprQd$3rd#?
z1*JJT3YmEdDX9gic`2!R$(0J3d1?6yY57G8TB#M8#U+_}=~@bU`3j)SSIniYpbJYW
zU~{bW@@@5?$xT@yIX|}`GbdFcF)u|SJvA@2D6u3J-DoatgrijT@~sq9^^&=?6<`i`
zb_Ti7+0Dn%Js8A-MYN`Zf^M>cik4oof^I&-1Qjj4d?I!G`a-nZq3BKl>2@e6%FHWC
zQ&573t&&2GLULk>f-b6J1v>@(lH3A)P&pHyUs|G|rlycvh9(9#L`6$41stQw3Pq{8
x`DLll07@*$%+FIOD9TSMO)i1Nd2&u_VxASqEk(Hsx@pizQc%%waShPq0sutnU0?tJ

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03a-IPHC_iphc.c.patch b/pkg/openwsn/patches/03a-IPHC_iphc.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..397c6f882973c1e62da35557131d6b039b9b7a1b
GIT binary patch
literal 24912
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03a-IPHC_iphc.h.patch b/pkg/openwsn/patches/03a-IPHC_iphc.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..242a3e48bb07d200d24fbe9854a9aa3f22d52c27
GIT binary patch
literal 4003
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
P!A)LVtwFGUwALU1l%Su2

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03a-IPHC_openbridge.c.patch b/pkg/openwsn/patches/03a-IPHC_openbridge.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6d886566abe1518e841920ff394eaf98054394a6
GIT binary patch
literal 3953
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FizC<4DfIU3nUd~rlhCpC3A*k
zlqxtD6e$>)C>R=A85mj_n<*F>7@BbD>gp;KfsBFb*DcR10Ba@AEHf)pQ!7&wh*?^w
zfD7bKOC1wK1&}zGf`Y!jEpDJtmROXTn3R)Rtbkh)iVPP)BMXZ1OY%!93y3z8OP8>j
zrAaxN$;7(R*4CDbOHrXLKQl!E6vB`QiO<Z-EYZ+ZsOC~osKq8<Qk0pVo?7IRSds`;
zrl6ounweK(5nrN!0GW9Or6uu6rD<uYMbU=FX0g`#`sMjW#U%>KiN&c_3KmWZ`DqGy
zsTCy(8TkbY+6sn75TTUBl0+`BIsOHyd4Z*=rKzrYB}J9-C0Ysv*(KHxIZO-lN^?PO
za;hvzEw<)TgeXH6RImkmvpBUVGchMVJ+;ISNr#4}HJ2jDR!~SFlz4)C;RN=ChMES7
zpA2F(b&!n*833_VU%wzfvmifHp`r{XP?C{ZtdLo(kf>0Snp==xl$fJXo?n!mSd?Fy
zm!gnZtWch+kXV$eke6DPTBJ~1T2PQ*oSLFglCO}STB4AgQJR-s3<@tq;OOh;<maWQ
z7AcfuB<3lAU8VpDZH3~@s#HBa1y6;<;^NZWRFH}i1rHY=XNB_2oE(MX{G2j~pdObZ
z#M7B+3L40Mu`@I_(*&geP>3ifActE)QD$C=Yf({tk%qIsZ-Bp_t6xaGe}Jo>Q;?^N
zyQ_|CP*A+5UqEPxQ>dGpYf!w8tDk#_hYrLZsBv&gBNb#&L1Iy2ZfZ$tQGAJ}0nsXv
z-3tnPn4$XmMX4pFMS0Np1PLQWh(bwfaS1p?^z;yJLN?156nyz<D3PrRO?9=fbOj2q
z%#_^3yu|d>B2ZfLEOr8yXBwKewjn{Gt_o^u3dp9~89=fW$T<q2bPP?6g`o5eGQh1U
zH8mhHIXkrkn%uC3F3cSY3JM?>6l9m!+WLk1_<+m?m6qTVO;=Y}mtavbC`vR!#cl!B
z$}><Q2MQ!2$~1)1VN<TbN}-`sEP=9#zP^I5qq9OrYGO)i5vcGqG<H(ZR<J-+8pZjb
zax*zGFE77DAu%~QwV*_y0Gx-4!C4$!q#_rShK3eSkX#SSJ}CK9!_e4FL07@ZP*b6%
z1|{p-SZG#5H0kS?<SP^urIw}Ul_-?t=PMLv<QJ7F<QIWCAd3_rRfj?vs6;CUmEYN*
zBDW+XRiU^fF*zF&6CmFq)iX3MQjxt$bm?k<T%^JZRFJzBKxH7frqtI@&M&CU%u81Q
zc@J9m<mV-)f+8h5FTY$Nvjh}vpvVCQR#Ij<Bp8vro}OAlRuv11zCl+0f*O)Y7~H}%
zHP$h;fHW~d#j~lgj+v<fw0s5!rh>kHL1JZ2eqstdWk3>eT4`Q#NoIataePr~acWUn
zss}h51ZP&IY7}IbptL-6Es*Mk+|=CUf=ZAYT|21JI%q8y3$&ICSid%xHpE2=`uece
zN=d##a$-qx1~`I2Q3y%z5Etqx6s6|om!*PYIWesywMZeYT-VUR7!>8;CPs=L+(=M#
zAtyr{Ls0VqW+BvG(pwo}jy|3)!LC7`jy`Tdj=rusa0_8ZqS9EK8|bbes72EnZcQyb
z*7Ws@Q}Ym!2=cH-W<f@BJV@BBC_fk4JSfO6(bTlHb&Yp(^aNMiNY;V!1*AQYhTa$e
zX|o0;DWnvp1>!518R(dqL6R8QD3Ft|w%b7tammk1)xd04=N6~yD1e({@g)!%QdcS{
zDC8EW>)Pd)=cN`Y*eYOal0aKVAP<ApCKsh9mgE;H+G0}-H<t7^WvHKPM1ZSvh^tF{
fu&bYoi@%?%4!DPCX0BsyjFhR!4uJgfp%?@J!6ARf

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03a-IPHC_openbridge.h.patch b/pkg/openwsn/patches/03a-IPHC_openbridge.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0538cb68a6fbbcc5c4844d3e0310ef126c9f90a0
GIT binary patch
literal 740
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FizC<4DfIU3nUd~rlhCpWpIXM
zlqxtD6e$>)C>R=A85mj_n<*F>7@BbD>gp;KfsBFb*DcR10Ba@AEHf)pV=E&|h*?^w
zfD7bKLo*#C69te27ng#9zP>GPpioehUy@%^S&&++fLj%^3>TN8LRo%hiUP>-5WmJ}
z=4F;>Xj)^DDJjZKPfsm!Ni0dkuAn$IFU2K4FIB_8AT=+rG_^F<HLs+oGQLDhA-6bP
zM<KPSD8DGa1VU?Cb17h0UX+@gnpuX!08MLf5NK(E1051Dy1Kf$U{N{+3@Ee+1`bX|
MgaRnPoN7S?03KH27XSbN

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03b-IPv6_Makefile.patch b/pkg/openwsn/patches/03b-IPv6_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..1ae17af35c43e38a4661963259561e1a3e762980
GIT binary patch
literal 1315
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539Fiz6-3@9_x_f5=BP0P$l<qXLv
zRd6gQQZO=6Ff_C>Ftjo@Q!p|xG~v?K)m11083EO+Tb@~f#~k1MJO$sxN(DnB1w&&i
z14}Ct3y3*dsDKOPJ_7}iAlM2+9b+Q}U0q#WE^US2P$yr17b{y8jpB^doE(Lu#NyPv
z#N1Q`6%FUmAQ#UdO-;Q-E^P&6Cr>{Y&maX`1r?1TPyY}n$6!}Y{iMu1eUKqR&R~i1
z%$$_u#G(`hExlw-E^P&WCoiygaFDZ=s$R0KiU!0KO;x>oki3g)0516yO)hONZ3Rz1
zXP;0P*I)&0TLoQDB&$(*`o)#S`k8sjIi)G7Xfnz9MX5NXQi?LmQj2hDgvll+8yXr^
z#OI~sFeSO5R6nsOH$FK(H#a{Iha!;s@={A+vY<di_Zl>~^$m;?b$uP3bMniv_#dGt
z38W|^Gd%;JD&s_5&j1f+yh<Rc6Q2?j-H;$hKRhaui}H($b#oFcQ;Ukh(WV#R;qMn|
zr2vm`6%9y2gTyMPFi5GtlNTsaaH?oHx@f9sI0k7d6eSlUo8jy466)issi2|(Q430!
z3I(M(ISQG13Mr`tsd*`>dC8RunR#jX3TgR83R<ZZnZ+fUdFfgTdie^V%va2%t)L4_
zDPVJ~^zv=>pvg^HAvr&{ATuXbAu%sSAw4xOwJ5P972RkqZG@v#_42J0RP~a%v=v|u
zcXkH3(Amw$(LET%f<?5Zf`V?cf{K=2vVv|t!UPp9y?i2d`}#t(+o9-A0qJ%qD9X$$
zNmEdQhpm!AjY4u_iGnVwVg)+|{gT`QeNZ_QpI=&{pr)pfTZSeEH$+8CF9jT<$_hoP
yx%p+O&;Uv-$;{7FC@9KLDNQbc#CdW~YGR%h$Sp;=3c6{~NK#PIaB&UL<N^SS@m-?;

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03b-IPv6_forwarding.c.patch b/pkg/openwsn/patches/03b-IPv6_forwarding.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d5c9b4e4de1d0ee8610e4ef17b7142c44abfae6a
GIT binary patch
literal 18996
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
IQK6O#0RN4>r2qf`

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03b-IPv6_forwarding.h.patch b/pkg/openwsn/patches/03b-IPv6_forwarding.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..32d5eec13f1c49b503ed14bca83f7a131d4572c9
GIT binary patch
literal 1455
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539Fiz6-3@9_xPs=YVPb^Bw%uCnH
z;0(zqRd6gQQZO=6Ff_C>Ftjo@Q!p|xG~v?K)m11083Wa?Tb@}!f>~x(rlwY=CJ?i<
zPyrXnorVTFMn(!C39wa$20F$@3c9+wx?Efe3d)&z$vLGdsR~M&1sTbD8A@DS+FS|>
z`ueuGfkH}ZT4r9V0&W%PGF)8R3d&GjK><GT9{vGNkskg5@gA;@F0MiG{sAGL{(kWx
zkpZp>3I-Ks#$ZRJ=9T6uRC6hSK!CG%h?{><xMPqDh^t_$V5ozT33l~^2rDQk*eV!-
zWNNKJmO_otR!~szk9YHNbO$RisIV~5;Q|Q;Aq$#71>KMZjlhDn)?C_PH{lPMlFEYA
zl+-lhLk1KD`dV6`cmhQb41@RzCI&htmXLTO7$XHm`6c-v+lz^`n~O_Pp)5Z$1r(Tw
zWE!8Dmsz5rY0agmkXlrfUld=WfFxO*nwO&CUyzy?Sejaz>Y7(lR2g5Qpp{#k4%UIi
zIFJsP{Jc~QU0Mpc#pyb5OTd=lGNdRqIW@Bkrx}?AWoGdisfj76Me&&#B??G<O>0>A
zDk#L%f>Xb#fsPp>_2Z9Css<`3bih8$F9-XUW<d*%5FG`CHDK$&R)gGt7U8%87h(#R
zB1kzdj1<!7A+JM>&isO;%8dMiczC3N*x-mHpuMOdCq5&;Aitm_Gd~Zc9b`&UB}gnD
IB8V3A0Ma;;YXATM

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03b-IPv6_icmpv6.c.patch b/pkg/openwsn/patches/03b-IPv6_icmpv6.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3210588efd973894e25bccdfd60b0e935a4f5a89
GIT binary patch
literal 1122
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539Fiz6-3@9_x&rHrOC^OSb<_yUw
zRd6gQQZO=6Ff_C>Ftjo@Q!p|xG~v?K)m11083EO+Tb@}!q&a3*rlwY=CJ=M9PyrXn
zeTGIlM&=422`(-L1$}*6+(4nAG$|)DSpl~SbQvx#MTN5b%oGKPALBFgGD|cx6{@)u
z6ly_osYONkMe!vt>EhJ96b=7^)V#pb)Y4Sfypp2I_!2FJ+~RbI9t8yuTh}hXJTJ9K
z0Rn6loc(<R{QX@0LgGE0eFMtOthvB4xy9+ab~z^T1x5KK`N{b?3bqQKj((1)ii%Q8
zN{jLo((;SS6N^$Z^U~wNZUET`G6w8OWDkI3UGno%vAa@70p=kvjm^<Gom*U<S(2Qg
zpaFAsaeir0a%w<+QHg&LB=kZm3sT`mDkvx<Cl;q7dnw-4*~33R$Tcw3H8{iyoM<4C
ntE;Q4ORvZU1s24S;IPXt2ZzLPieiM9z+QuRRskht(l3$$`|C*x

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03b-IPv6_icmpv6.h.patch b/pkg/openwsn/patches/03b-IPv6_icmpv6.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3d55420303ad0de046306d217c568c17b2867fff
GIT binary patch
literal 758
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539Fiz6-3@9_x&rHrOC^OT`;0(zq
zRd6gQQZO=6Ff_C>Ftjo@Q!p|xG~v?K)m11083EO+Tb@}!q&a3*rp8uAmJoBaPyrXn
zeI^z<re+Et2`(-L1$}*6+(4nAD8D4Xq_QBjSOK>xWEn0lMTN5b%oGI>fcP^$GcU75
zL(`f|Q6aUcD8DGaL_q;6Q=FQYqTyeVnip7_TAJ#bS5j0NU!tXuTbvG7j&2Z0xl4Xt
zDt0Y8aO1(&Xj*eAU^t~HH90l242J=l*5Clq(gFuRB$#w{b#=j_bP6Vrm%)C|F9-XA
Oc7cVk0BjK@!36+=vfw8G

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03b-IPv6_icmpv6echo.c.patch b/pkg/openwsn/patches/03b-IPv6_icmpv6echo.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ac4bcbe1ea95cf1b8c4d07470834a26cb79ea8d1
GIT binary patch
literal 3201
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539Fiz6-3@9_x&rHrOC^Jh<&dAqG
z<_yUwRd6gQQZO=6Ff_C>Ftjo@Q!p|xG~v?K)m11083Wa?Tb@}!f>~x(rlwY=CJ?i<
zPyrXnohCZQ#tI;DE(HbU%)I2B(v(yMC6HyssYRKIIeHmN7&3*Wsimpt5(SCL*{LOI
zrFqFEnfZCeAZacI1$}*6+(4l$u_!Y!DJQj90k<L)87?keg_6pG)RfdTh2oN;(&Q3_
zYA#&`1qFqq{QMjc4Z=yK#g)OSc`2EB>DCZgkbmM6Q&NiJOB6CPiyc!^ic*V<p^~MU
zc_oHs@g*Rw#i@lL(OLyW?8KKP78S>rSaa!eDPRhti&%3J^mRc|en~#a7sPs-2qR0A
zax#;N4Mkg9TP`j|g|ht26lCXT=4F;>Xev~5fdT?q0u%sxNP((gtKjD76YOe@U1f1<
zA=m^EVXI&OQdNu1zLKKM^z_ssgq5I(u!t{F$SciFN-c^{sw_z@j!!Gf&yCN_D=00A
zPby7IODzJKr=Xw!Q;aMXZD<w?mG&=4%?kvjQ`fwbqRRLZErs0Tba3P-fKp|8YKcN}
zer|4JUWx+91_hA%U~r08&@eP}QUGO9g_P9dlFYnBP=ZzfrJmH{Voivj@jFq$Rsoda
zAUP;LJ+;IW<bEfx^EK2oP@HTKtEp3*S(Tcfh9a)1X${W%COSrz3c9+wpu|V*{Hd*=
zua7V@B{iuuy&#izS$72F9#EDVfE<KkEi7Z;PomIl0#l5VBnjpsZBU6cbn+3XdPBnC
zde6c{$I<{+@hK=M)N+9^mQt}eH7~^_KQC1SR6<~sC^`zMMMe3bY6VQg<36`IUDqzZ
zJTJ9K!B)Z9-#5VD&($v^-qYDPpv=tG*~1?i{+VeC8ep}_MX8A;`9+Gh*c59jRO{=P
zWF(d-lqVJ|Bq~7aS_MyqjKma$y!;Xcu<q0pNZF*IfL!_%6lLa>xPlz1fz4<g*Px*I
zP(Rm*09WS_SC{x;S3egQe?M0paOq=VpkrYMD}E>mrTlVm_{5h$!fQB%6H>|oF~O<J
z(pbmR5-oK>qXpb}icc#_O$`9In4q;nZgILMEKR^0hTx_L_L^5wp%#=0K{+3}sxC@R
zPR%UCkyzoOj+vB;QVVh_AvKPLrH-X3TAWkc?KE*bDD;sqI3f&9EOiV`jnJY3+#JE*
zG%YB~EK4j&CB8|;6{FynuaK8oo|BoEs*qTskeZjGke{ZImYI_Z&P#?SraFcu7HA<$
H6Q=+GcC@#)

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03b-IPv6_icmpv6echo.h.patch b/pkg/openwsn/patches/03b-IPv6_icmpv6echo.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d3021216879a54e52a516a1d45af4d722007c3a4
GIT binary patch
literal 1189
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539Fiz6-3@9_x&rHrOC^Jh<&dArx
z;0(zqRd6gQQZO=6Ff_C>Ftjo@Q!p|xG~v?K)m11083Wa?Tb@}!f>~x(rp8uAmJqYF
zPyrXnorXp_MkWd%2`(-L1$}*6+(4nEvLH1jHBAAx5;PeuE=2-HmL(QtCMM;i787eI
zVOJIu<(K4xoJy>jAXk><XQn71VkAB@FSA5L)0#_B0bQn~C^J1hwFtXpacW+QOMYIe
zhJQh7USMfzX{u{pNl|5diIzfcak`E|YEe;sQG5x6*0knQz%afjH90l242J=l)?n{z
zX@Qf4p^=WUfr75Ct}a-V-cgsEpHiBWsz7`Uaw&2t!qZT3Nl|HXi9$7(qJn~gLQ;Ny
z4u}Tfq|)Nb;MBa7%)E3^_$w$VfRcWEVoC}q<T5gg9aB<@Qj3eBlBJn>C5C44B_OTE
psf8fXTI854ODrmmFM$Lc-XNl0x&b8_ylDrg0z&C0znp3*2mmAFRnq_f

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03b-IPv6_icmpv6rpl.c.patch b/pkg/openwsn/patches/03b-IPv6_icmpv6rpl.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ec159ea8f17328bf05f63d9f6e0152d96efd6c16
GIT binary patch
literal 13672
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/03b-IPv6_icmpv6rpl.h.patch b/pkg/openwsn/patches/03b-IPv6_icmpv6rpl.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..06e712ab94857287e8dc2f17b0ac4971d014435e
GIT binary patch
literal 3401
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539Fiz6-3@9_x&rHrOC^IW6$kEH-
z49O@}a4aZNFfvgvG_*1>v@$kRFfuSS;nLOBRVV_P0@bcto>@S=QD#=ArdFmV5TmqE
z0T;-X7CMH;3LtT?MHV`SrV6^cy1HBn3Nh7O3JO~KTwK};%9(k|Ii)G73Q8bHlw{_n
z78UDdC~;|XDJbac+u{ZaDXD3hd8rDxRiMjoaVaP$Lv@9C`nm?iyLkG?gINBdAqp^H
zXl`Htaz4o6Fbv`=n3(IB8X^2+VyR<l0rL>d*npz6c*ppZ%>4NLf|AVqykeNC3I;Yd
zCP?;!6guHjXbcJ%eSL-8#0rJH(%hufB8B`kg@VMQ)Vz{ng~YrRh2)IPoRp%}JcW{c
zh2qq_6ot$@1s6wuE^P&U{o>SQkktwndPaJN3I&Pj3TEaCL2k}wrltl8y1ELb#hH2O
z3W*BErAfu9C7>vPhKa9ZM0|*2kh^P0e1Kz+t6xYk%=HEp28Q4mNzE(G1;w3$f`34W
zr@vo(kbh{1YrLnQn}3k6BUmIPGQd?qLBUqRpu)gdhYMr`RIQ7@i=%tIv%jC4r+a7+
zl4`J86CF?}!$KTHgZK)TCOU=&29RI}nWa#gnO9;FUjk->h@yg=%)H`~#JuEG&lGEr
z2q@v`+b9&LmMA1uDwJfTDu8WPD9X<-(E~dO!w~Oym-w`t#Pnio?D9pa#i>PQsVUZ6
ziXa=%-QeQrADmiP3UUJu1Hdlubcr@Jiv_8uRe)#E_>{!__>2;eXh4voyRV~0L1J>Y
zhNh-9INKN+80Z)pn86a7f&zxy2T=f|<|U_sJc7lQWCZ{y6(C`7f-p2P)iE?SgQW=c
zkSs|oN>44p5ul(F0DqxUP?TSiUs73+T1;fY!o{ViP?n#Wf)t^dd6^{|nxLeDCIQN+
zF8O(>8vX^Td4Z*=rKzrYB}J9-C0Yu(#pyZ<sYONkMe!vNS`!qIXa*FeCZ}eW;n1&X
z4fdXv7N~%&g(MzhLmfjiV_4!LEv!Ig33?HV#8=48PbtkwRVYg=%1lhkAtJ!Iw7Iku
zKw+Dbnx;@(QdF8;qEOAH4a!jZ`U;6DxtVzoUQ&L34oDOeCzTdg2B+qwWagzqvpQ6b
zzP`SVLUL&lsEEv|1eb}RQqINGU*E;iUk_p~dbWk?RZxHw5S}h>If?1PsU=88gU!t>
zhA99SDv3Eosfj6-_7Fq$^%Yz^{dJ2{a}rBZQ@Ft1LCV~jpv;Z1C?zu=$#jIc0@$L0
zqEy|2{DM-jQ3@`e{tBS7AhiVQeoze=pO}&YN+U>G6%-UwGV@(hi%T-|5<x{jk_}*E
zK`jD>6okA2$c)tDVuiH)B9JY`Q1e0IV`zp{w!$qbNG;0DPjT_|M=}~L2{u2av<Pgk
z4yYQ+E!F|mR*4GWy4(|_3CzqdMfL_*GCnf})iSUsSPPmxU~4>GKn8=#bFeyv(&E$<
zcm?R<>5uFU<Qf9(P%x2_nv+<G#TSs!M^v?7^TF;=NG$_bx=E>N`9-M;iOD6Ui8)9K
zED;ob(BK251V`K{0bI<3odG6N5=lr2j%X<XDS;*C$Cnf(<`rjx3Oxk{P;CO`qlO_k
z2+<OlqrZYu2t>1jXI@&qk^-dJqL7iAn37rq^%t6DumTop7nn;et3W9n9QZhsh9i0s
z1p5nr(r`pc8hBGUhVhW3fj@;i`lF?AP)5R+0x@lYSVLwCgcNYdrF&UoQE_|;q(Z>k
uh^AV72db&asq^y7DX#Uj;Y}h$N=;8K2@3G>%!9NGT{NK119d836(j&_Eu<v?

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/04-TRAN_Makefile.patch b/pkg/openwsn/patches/04-TRAN_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..791e087de18d945a06a756845dca48ec80db38e9
GIT binary patch
literal 1732
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FwqSOa`e;pP0UVB%gjmT49O@}
za4aZNFfvgvG_*1>v@$kRFfuSS;nLOBRVV_P0M)8no>_p~7~lLn1>eL<1w$hRLt`rg
zODhv|h%s8IfD7b00|k&E*akx#6C(v(U0q!+ZH3@aCtrUTD_a$f;*8Xs9EGIB;?%sv
z+*Ab>4d>7x7tbI~O}#`eZ3Sf~Pd^vWAO%|m6^$TI{}3m~U{_83q|7{hkRd_NV2Sd~
zoRs9mq7(%!y<|-;Z3TZPFR*xUkh7JlUb3x<2E-IiRlR(Wyo+l9F8LHqE^RJt1y4U`
zpHLUqU<GYk1zk@ht5JFS#g)bSnR&@Mr75XsGRgTxsW_xkiZaVmi*RX#$tEWo8X8o@
z=cVH?CApwfKd~q`J~=-(H$M-DB9Qy?QcGa6pg=?S8Z@}|4U7_XeI1>1^2@RKAE77-
zq$ndZJp-RA<3wH001s!pN|JOv1Io<sDS;$kd@9U!9SaKd^D}bt^HK?`D@iU$P0q+C
zN?~SRR%&tyQA!JnGV_Q~S(-wm?WHLN#M)k(Qjn8alA4!XN!X>ODFwv4v?wtzg(xG7
zOY)0y@u*BL$}cX~%}K0GEh+}*EWH2^f4@j81$drR(SVc%kc@{Z3{vXv<ORyNoGKcQ
zE}AMDjzO9VMajj;X88KMg!;H@DyV2c)Pjl*g@V$Y9EHq0g_P8S)Vvf>Fezl_rR6K6
z<rgVvrB-AXmt^LpYbogED}ai}VlHh3U07xYn`5PyZ>t9_5tJ2@^K%O_b5a!&^HLPj
zQ}a@b5=&CijpouuI7(G7-%3GMFPTeQ0p@ULXOIh>-FzI~gF!4<Uer`j&`nlQ(b7v+
z(9K7fprWM*O0C4`_VtBmw?oklibGBZaI~i>D8a*4Nufp|Ik7}R7ge!>oq~QzZh=0i
zCWy~3Em2TYQ^+kt6N4L~qNSGtj!|WWqSV~{vQ%gQC6;97=P48v<)@S;mq6k?IVUwS
Y&k7U{MY#&PY0yYgP|<L44bbEQ0B>K<I{*Lx

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/04-TRAN_opencoap.c.patch b/pkg/openwsn/patches/04-TRAN_opencoap.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..92eed82c7ca8d5409ae57eb7d6c794c7a16d38bd
GIT binary patch
literal 14142
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/04-TRAN_opencoap.h.patch b/pkg/openwsn/patches/04-TRAN_opencoap.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4a9dc828d446bb0d6107cf33a11e70684c512d06
GIT binary patch
literal 8272
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
Po+1t5JVZ1Ni$V<m0vsGh

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/04-TRAN_opentcp.c.patch b/pkg/openwsn/patches/04-TRAN_opentcp.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..1e71e1d63e1c210ad0923d2e235334a47dd278fe
GIT binary patch
literal 13212
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
R<*AaUwU#~?sKJIWi~(emGSL74

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/04-TRAN_opentcp.h.patch b/pkg/openwsn/patches/04-TRAN_opentcp.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c22ada62c475cab692274ef169b1eaf2eec092a8
GIT binary patch
literal 2150
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FwqSOa`Xf9OOgxpGB`srN);Rn
ziWH1Y6bucm3=FM|%@m9b3{ALnb#)brKt@3I>Xv5~fb|hJ$IQyq*viNfVvZIn-~zeN
zM90ur0VK|)prEg%#igJSlbDiHlAm6bUs|9LQk0liT##Q>0urz0Qbd(>4uA+NC}`<(
zf%NO!;sy#SscD&csS3DNpv!=aOwB9JRj3AsfQgQwse-Pqt}e(X(p>6akeU~gT!8Fa
zZ3X4byyTqHlvD*JP_UL{=B5@E>t!f$X@ktCnNL7LjfBB*U}>RaXlMe91qB6#(#*UP
zL$ml2h0>z*)Vz}Tg8a<9lGGw=E(L{Jg_7ig_>2;3E-pm{eZ0;rODxJvOv*_uCN|7L
z0gm6uf};GA{F2H7qRj-kvMfI{MF9lB;hbC$pP83gqM>QcrKpfvRFq#7U!tG@lS<Cd
z%S%lz(E#z|6H`)(;!Cs?Qc{acbP$13kXV$M8=sL`9FSjxDV|#i62@+NacW+Q1}HHE
zmZp}by5^M>Rf5dVElvlk$8ab}y-R*xDt0|OaOZ=)p$Uo}3?qtClT$OxaF_tL6|5O0
z407^|Qz7A#l%Jmi3ORWAq@*U5rUw*d=79qclu{u%p%$D)3=Ir)42>*dxrAydDK|f*
zG$&Po_yonJ$fc+NN+&6)X$r+9MWx9l3ZUWx>LLq}cftOG62&EnC8?kU0aajZgr*|5
zGB~x+uQV4)4LE~9^@Ax$%p<A5FeM|i*e|uBgs@T2#051ADKUaA0uvdT#hw9WW{xQ-
zMXANbP?eZzOF=;)C9xziBtJMcFNKh*AV^|?se{Kp*g_})E~tV_5{pVwVd_Bc0}IDz
zroh7uEZ_-N0x2`f5{ruCLFI-5fpUY2nH-cIz==G+95b0yGpl1UAC!5qXI!w0Ku!Y(
vDLC|!3*tfQ@nv>|6=1KBo81w{z%z9+IKzV+1a=ub+F>q3%Jfi0$Qd61ZL)H1

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/04-TRAN_openudp.c.patch b/pkg/openwsn/patches/04-TRAN_openudp.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..1392a56513e229ec3bfabb0405cbec8ac9700a34
GIT binary patch
literal 2263
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FwqSOa`Xf9OH&H;k~u>%N);Rn
ziWH1Y6bucm3=FM|%@m9b3{ALnb#)brKt@3I>Xv5~fb|hJ$IQyq)XLNZVvZIn-~zeN
z$WX`FKmjDd#igL2uWySRC=`??<zyx+;8uYy!^NejP?n#Wq5yJuX-YwSW?p8AhNeO_
zmx4kqNHVpkD8DGa1TJ5knwO&CUyzy?Sejaz>Y7(lR2g5QrI1^k4$-8b0AlOf<(KEB
z7AZi0t%9?^Z-Bp_t6xaGe}JoBs7rt~7g#E{I9=B+$0WX>D8D2>IX_3iR>9NJ&oLg0
zip0vC{KOOm1zU*u1rWY9IOrikq^ql|OSd2b1scT1;9$xxAM^nQN<l~%oVJY3bxe#Q
zX$u@5MX4pFMR^Ko`9<Z4MJbti>G9zB2E{HY#=u?$`5YxVxa8-hVowq}3b0TC(~$5&
zO(D3`Msay&Npgk;EQu87mlh?b2ILo&_y=Vs=N6Qig;W-#!i`i=P)JTJPE`o^4gjT|
zcxQjd04s3ffcO!dIB4TXMBERMFOgyu#01Bzp@D^tp`j^K+=4w12_!!cXK)||_y>gq
z$D0Jlo48m(G9*Ni0;rr(fP}b0L4Hw*m4ZP<nn99+wt|9*LQ-Z)u|j5^Zcb)iDyFWK
z)Z!AT9tE7b6yf%O82F<Yl;y#;8z^WiK#~JA^G6%RD%ja6m}n}fDHv23q*-%eHy7lj
z%)G>s%>2A~kZ(YCg0L;beYnguK$r_sjlczo$=RtTX{C9|AR~+8OY)10JyH`>Qj0*&
z(=pTp<rRc-1%;%d)WmFrU@bUZ!eR)KG9g;P$#@9I5GV|E?QleqCM9u%&185aVFWtm
zu>{IYNEni@ObvAmP0f+=RV}QlOv=yCfftM^sY#{j0Y#a4u-a5XK>=F2x;gp;yMj_f
XEf*vqK#fEs1cF9_%3yfWhiNPTb@6TF

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/04-TRAN_openudp.h.patch b/pkg/openwsn/patches/04-TRAN_openudp.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..265ae18f9b80311efd98427d6ae6e3d9f76c8856
GIT binary patch
literal 1012
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FwqSOa`Xf9OH&H;GB`srN);Rn
ziWH1Y6bucm3=FM|%@m9b3{ALnb#)brKt@3I>Xv5~fb|hJ$IQyq)XLNZVvZIn-~zeN
zM90uT0VK|)prEg%#igJSlbDiHlAm6bUs|9LQk0liT##Q>0urz0QbdsqbqRn7D=28`
zbAeq6HceMoSC@3t{0ma^LQ@KmO$0d$2}9g#s$*&jaWKdZeOuf>p`a+gB)_DxAhlQl
zw<=^AE-podvi!^x1qB5KP*|6y6vSudWtM1YT5~BXq!tzB7sZ#rWr|btQZzu$4lGSA
zO?AyHDXNSw(Nf4QP6sPTHwdKMB|k3}yA~a|@nCB-t+^C1oKlpUoSIpN!vL_IN%{FX
z$c|4*O)5<fD9X$OdjS++kSMN&#1=R#!O;bhqElFc!UgQu{Bp2YX&0gh3&0jpKTM%s
J0R<i`TmdDCD@_0Z

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/04-TRAN_rsvp.c.patch b/pkg/openwsn/patches/04-TRAN_rsvp.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a3c8b49d0b35eccf45ff2366e632bc5ed4493c13
GIT binary patch
literal 1221
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FwqSOa`e+LDlRL~OXdv8C{=JQ
zC{i#oQ7|;LGBC6<Hd8P%Ff`%P)zwuf0_lfp)Gf~}AjS|gD^pV|Qxk|GTBv{v<T68Z
z9V2rEkOY?k2$W{#l~}}=D1aOkUy_-dS`?p|V$G$XPzx3*ODrmmFR|w0QdB6*&rCs9
zmYk%aY0br@01<;IM6l7cWaed-XlPbL?1Y=F2WAzd7G>tAfE;71U;wgO0m)2=5}3mj
z6rf6K!65|kjIOS(F2rDpJOlC{i5>!Lp{A!m@q&cGF=lM4V`2o0F_4XrKrYNLjxS0r
zEKMyg(SZ3oDKRglJhLQ2M*$>aXa<Vc)U=}1;*5AmAnPcA(o=k5N=i|Di9$+hafxO%
zC<;M=ub|*xkeU}*np&FbnpaX(8DFBMP>@|>&7}yDRY)x=$_HtKaupO5@=HsS^K(<7
zai*XEwic9{5K1z2vcQQ1B2tiDqF@VlLm|kX`1I5gx1!Y4fW+kN)DoxCw6xSB4QGGf
z0DnJMzmWK#;IIHqgyETK3K|93CAPMHp*}vE3f15w016#51!xi&$k53zCqI0&xwIkS
Vqo4uuf+jp%QH3+D(bUl{XaUzrX(9js

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/04-TRAN_rsvp.h.patch b/pkg/openwsn/patches/04-TRAN_rsvp.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f959c2828585f76efcf139ae89b89c17f3717548
GIT binary patch
literal 440
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FwqSOa`e+LDlRL~%is*jC{=JQ
zC{i#oQ7|;LGBC6<Hd8P%Ff`%P)zwuf0_lfp)Gf~}AjS|gD^pV|Qxk|GTBv{v<T683
za~(r7V+D{D7Z(?oqC#1IW{QG>f&$1%@tJv<B^sL6Tnebdh55ztMX80Qsl_E4rI~pp
z7V#wtNr`zW<(VZJItm~WL$ml2g`(87qSWGy_=41;%={D`klW)EQ&NiJOB7O4i%T@E
exwsS*lvDFkGSk35ggHi6S63I8V?fTMi-Q32NrhVg

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_Makefile.patch b/pkg/openwsn/patches/07-App_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c14082be4e66ab0d96bc035fe85015422ad57337
GIT binary patch
literal 1776
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~DA4y!%uY?q%t_@8$tYED
zEGSYiGEp!zv@$TXGB#H*GB7mZ($&>fC;}M()u~&aS%A|N-~2oU-^5A<Ln8%4V=Dto
zD-$z_DO#w23*<Hf1&|=v0z(}WO9fqBU0p71h2T&pUw;=XTNRDsjMSVQg`~vd)V##p
zR0S0c=g=S*&mc`ry+kf;1!X5sKNrs+1zQCbjUZ3|5GTiAS55t-%shRNAwkYyiSo>x
zl;p&s6a_84WKAw@1%D?muy}Bgvz4k|vaN~+#1u_cy?l_oi)#Qb`4mkqZ7yvEPd{g$
zP#4!=1#MdeT~8#dQF;2smBsp*dC57YDXC~O$@xX8IHXdFGRsnnaA}0eCMO#j8dSvR
zrQ<Lqxu8@(u_!k_IX^cyKM#i@ko)pdOJK5~KtuN$G`RH*j1qNy9i4OX%dz+$p(qKY
zC?hjH1D`76L|xAS4`;kel5{--%FOU7G0_bPa`eNe0+PJ*Gjj6tQVFXoNiIlD&d4W9
zVP;-dYH|rtN(+iI^YE!mF3K-1*3C(*Of4z~CoUJyAaKGe%FIgxxdzTJPtD26&dV>)
z<I+}u3Bo-G6F~R^Nd)d(Br%w~U_zxSFz+LYU}!8&Dac7INzF^HL~=xFN&yzriW2iu
zP!$!I<QL_F{g{}OW2FGkcPbi?{0_=|oDOOEMGBb;nRyB-8X%WwDp)I|<SQttX!tsM
zyJ{*a=sGK?sAPgg^HLS8!RBEa1v1{>$qQ_xiiV?$rizARkfuUWaxt>KzWy$uKCYSy
zDjE>AT-plC3I(M(IUxH}QVUY^Qb2xH07ZoY$YENk6`92)nR)423VQhppi;A#OItw~
zmdU~9Sn1{4>Oo5iWrgJY+=9%URE5O66ovHEywsw^l2ipWqq(#Zj#Aajw^C5mOXkv6
z;LOcV$t+UPEkMYEM4{esb_TiI+0Dn%Js8A-<y=h#1>Ix?6)nAF1>JmvP8BUZP-@~N
zLbtCkM7te|Zct=$I)EcO4HO;FLQ|<GIk7}R7gec(oq~QzZh=0i(umJ5Em2TYQ^+kt
e6GKFrmR<@t8k2KU6Z5RBK%OKv8GyAQ5(5A~F55H!

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_heli_heli.c.patch b/pkg/openwsn/patches/07-App_heli_heli.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/pkg/openwsn/patches/07-App_heli_heli.h.patch b/pkg/openwsn/patches/07-App_heli_heli.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3b76048420424f618ac39ac34f68ffa5f9a6f7b9
GIT binary patch
literal 1103
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~DA3PH&B+84dKsJ{8Knx2
z1w{%*CJKgzRtAPv#^wq}28JeFy1KdwMIbYvnsv)F3y3wy%*xc*%E%I8kQOT70=dvg
z$Iw^-B+jLvpq!GLmYJ8T5FhX1>f;&j!NsMZps%IHrKk{-n37VGpI($-TA<)qP{5_2
z5K|2zkc2%_b233fAaN~yuvUFr+&}?p7j6~kGK7sRsVqoMNljBg*NKx44q77}LsJD^
zU0q#LLLfASs6f!>(pFH;%uCKGO-WTyg2ta-h7u@X2Y={*k_8e5rx!yD9U~J+g5gq7
zD9g`GQ2-_4_{_Y_5)Dmj6tR+`%=GlsB9O2mlG5VTycC!Gyi^VUg4Ddg($vya*SwOV
z%J>p3h1}wF9fj1QqWq%x5(tfEWKn8zYGxS@tzflD`T02zC#9q&m8J(2W#)k$28n9}
T9V0VHWTUv0imuNur;YmoS!OpO

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_heli_heli.py.patch b/pkg/openwsn/patches/07-App_heli_heli.py.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/pkg/openwsn/patches/07-App_imu_imu.c.patch b/pkg/openwsn/patches/07-App_imu_imu.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b620a44b8da868db7f0cc0dfbad4cc220762cd87
GIT binary patch
literal 718
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~DA3Q$Ed^n{WX_O`QU%9?
zA_XH81w%tC14Aoga|I&<LlZ7tU0sDDkO@$&y5*S##2I5|Wom3?WC<}w3l(sITxV*c
zV`iWLlHgKMsO92PP|(-+RLCkVE>S2>%_~tzRPgi-RVYYI&Q2}SQAo~6P0m*ERLDzB
zO;ISxS13v?PR&bE$j?jVQdB6*&rDIs%q@)viMizGrE2&Wq~-;drk19<=9Lsx#+PU*
z<QAvvD5Mq@<rl@5Kxj>cYAyv3$SqFSwaYKhOD$5cRdDwA4e<AK^$Usj^bNI!D9B7x
z&;Tn+E=o--$uCm0MNtJeNI^jX6i&sdMVW~?@dZVhc_pqO8#Pdr>$nC5#fSR2Mg+Jz
ihq$`L2fO;YxcK|I>VQKV5-hs9y1MiWmi+QT9xwokSJ(Ui

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_imu_imu.h.patch b/pkg/openwsn/patches/07-App_imu_imu.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..274a168fac4b4d21cb99177ea249f2d4a9a9976b
GIT binary patch
literal 716
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~DA3Q$Ed^n{49<{@QU%9?
zA_XH81w%tC14Aoga|I&<LlZ7tU0sDDkO@$&y5*S##2I5|Wom3?WC<}w3l(sITxX<X
zp#T!*QczG%NlnYlOI3)E_w)^o_u%4EP|(-X;!;$INlZy8$xkoJFD+1TEGXboP>87p
z5lF(BxuqbHYOqs5X6owd>XKk)XbOH~K~6-%V5b{e=opzm9M7eoP?n#WqL7(e8lRb$
zS)!q7jVx4Bl$oBMS_BeRL?|py%}a5~&r8+tFG$S`EKMy<b<Ha&s*EquQphb%*HK6<
zD#|a4FM-gg1{S3zr)HMn&<R$Wl%Jmic1}uaQfYcXQDz?4QQ+`_I2;^8$gZTC!}H5&
G;dB61E!cVh

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_imu_imu.py.patch b/pkg/openwsn/patches/07-App_imu_imu.py.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/pkg/openwsn/patches/07-App_layerdebug_layerdebug.c.patch b/pkg/openwsn/patches/07-App_layerdebug_layerdebug.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d2a9cad5e0ded0e41ebc5ba2022f5515f35036a1
GIT binary patch
literal 7696
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_layerdebug_layerdebug.h.patch b/pkg/openwsn/patches/07-App_layerdebug_layerdebug.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..77bd2ba11ad3557a62aaf744cd62acb7127d8f35
GIT binary patch
literal 370
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~DA3PItV}IRNlhwEM`G$_
zaE4@*DmWGtDHxe37#dm`7+M*dD;OCVnsDjr>M9h0%!3-FTb@}!j-h5&rp8uAmJma=
zPyrXn<wiOd3Ls%F1qJ1l)U?dJRE79>AIC`7AQxAsQ1^HbE-nQHeJw36MTMBel$4VE
x^rHOI0tLr{0xkuGm}(G#BwQ2%5~v0{A7rwwuC6ZWCOhXl20+YFK(Q2NIspGcYEJ+F

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_ohlone_Makefile.patch b/pkg/openwsn/patches/07-App_ohlone_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..387883424711aeef432b59371ecf685ff9f7fb09
GIT binary patch
literal 1334
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~DA3Q($jQ%3)%Q)zPEE_q
zN#zX5C{=JQC{i#oQ7|;LGBC6<Hdin*Ff`%P)zwuf0+|CfK({=zfRJIn`FRSyiIob5
zMhb?;RtA<<CT0-Bv`_&T$fX7fAVIJ_hC0SZ3c9+wx?I`{!J$sUp-#U3E>^ZG8pRo@
zIXMbRiN&dTiMgo?DjLqAK`x#_nwolvT-plCPM&@)o<Rz>3Mv{wp8g?Dj=`>)`bn92
z`XF<HoWT<1nK>!RiA5<2T6)QvT-pl$PF`T~;2>u!RlQ_e6%B|fnyPyFAbA(p09^7Z
znq1mk+6tb2&OV_ouE7f0whFqQNLHir^ouKt^)vI5b4pWE(PWbIi&Ak&r4(hBr554R
z2$M}tHZ(M-h|f#MVM=mAseWQnZhUfnZf<@a4n-jM<)xOuWI=(3?lov|>l+v)>iRl5
z=j4}T@jpUQ5=c=-W_kubRmO?Bo&g@tc$FmSdIpr4;ZtIw8xrK`het(nQGRi;Zcbul
zYEdyb+VlcE{QV-W6yOoAq5)59kch=91JdB{<ONC^oGKcQE}AMDjzO9VMajj;Ci(ii
zg!;H@DyV2c)Pho{LP2RxjzVUhLP}~uYF<ieUUH>EW?ovpLRx;2f>vrpW^qYoUb>co
zUcLe-D;9HUE9k<~3)mbhy?k3eXrfbANY2kK$jnJqNX$!7NKeg6ElMm&MK_vD8{sHb
zy?iSLRlQ^`Z3URaot;50bawM`bPooxV9~9qprD(qprWOhte~5ZFhNC2FP})=zP=Fc
zb||`2K)M|YiZb&`(iD{7!K<WDqmZ0fqM(baSiw#~za+OnA5`kZ=a-f!sHrLBmZ6Ek
z4N=k3O998LvO-a6Zhl!RG=LIIGV}8k3X1YmN|Q?<F`t~1nwVz=a!XOJf^Hf#k`z=l
JTwDV*xd2vhWW)df

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_ohlone_ohlone.c.patch b/pkg/openwsn/patches/07-App_ohlone_ohlone.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..bec8cf83f21512f5351c66d5e7bd7fd073552075
GIT binary patch
literal 2688
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~DA3Q($jQ%3g;ILSoFN&d
z3XTOu3PvUhhK5!KhE~Sr3PuKoCS1C@x(Y=gbD#$3mS+}_Vwjngsi~Ez3B)ihRKNvt
zsilsIkpf7Zi%UU4U*8rtP$)|*%1lhkNi9~utq4Vii%VCbq_QA2B{fZ<xTL5wxkRCw
zOIJZbLBYQuH7~F<wKUZ=ucW9lzC;ToSdd*}4UtaD&(8sgpy1-vyp+tmbf}Wj%)Amq
zv-lDeB^f0p1<o0zdD%#cEYQ>_q^Fhyr52W^7MDbaI0wYLxVkxp`h>)Xd-}QfhsOtd
zM!Cj<wAU)+gCi-vEU~CK9^^7E1ymtqo;Bg%D=5k@$p-}ovEj$XrKnJrpP2%)2NVDW
z*(Dm9)?5k-;2?s!FgYVNIol*TBeAGh0~9VGFDDyDo5boUz_~`zCb62txUw`UCo`GY
z7`C;wMR#RpUS^4grb0CrIA)+O1cjj<Ja!ap6%0UrP(TS#J*0>+h*hvvP}f(-ugVat
zN&!t(d1_KYVtQ(EJj5j+BWgj8L=LgyjQrA^6wjQ@;*!)nglmgZOG=CK6heYRUE$iW
z#sJKFu;5K9O-oBH!jqoBfq|+zJ|{KLnhTu6Ep?1d6?AoVbqS{;GBP1bD94w;k`pLS
zh)EFCO17YY90Exf>`Ykv4vFN8;$mWxFp4JBgh^I122~+Q7*e-b=olK9Kx!9o1^`uJ
zg`i?TKCLJ<H6SrLJGI0KoOLvEi_^i01DsVsj)NsrP^ssVpO>nES!d)Hr|T%B78T_e
z#g{;6c)62XoUUt^U!Ip*q+qMy?C%@k@8{|l67TQf<L?K~+X@N_nQ00jYjy3Ci&7Iy
z@{1I0(G|jt1C>+-sd>ezMVW~?@dZVhc_pqOdo|E?=(q+2#fSR2Mg+Jzhq$`L2fO;Y
zxcK|I>Ok_jp^l|FB%{+TJo3wjN{ApO7Z4MiWDE@rbPNqGDNHlT`FVM%$tB=qgC#V;
zX$-kKNJ&j9O%DLYDn?!4=I9d)PB68QqT0~FSjW)Nh{8xjb|BUW!{<a$?trIEXnsd>
FCIF5-7ApV%

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_ohlone_ohlone.h.patch b/pkg/openwsn/patches/07-App_ohlone_ohlone.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d5b7d04175874cb91f925864508c93503f4219ee
GIT binary patch
literal 1764
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~DA3Q($jQ%3g;IJMoFN&d
z3XTOu3PvUhhK5!KhE~Sr3PuKoCS1C@x(Y=gbD#$3mS+}_Vwjngsj-!jCB!f-RKNvt
zsgaJ6xdKR>OF=<7B{eNGFI6Ev-rvK=-_JGPgNsW+L0?OYOHm;vF(suWKfNfwv_QeJ
zpnyw3A*LEcAPGY}1rh|wXz7DB>)YZ63Q+rSt3a0_Y-CAgL262BngY5`oO~`WMFoAl
zt}II|%1lhkNi8PUP{OV(D9SI%2RW5kGeNE_%g;<vfCO@UW?p8AhNd-_qC!%Behy5u
zI3vF_C&e=-v$!NR4<xOifUKz~H90l2ELFq5AT=+rG_^F<HLs+oGQLDhA-6akY#6fY
z;?%qpm;5{&%5@Y{i;D7#;!7YjhVJD2yu8%p60iZ7Dv=$XlA2VS9#E8-2lfy&!6_)j
z)PfVgk&dyMg08NvE@|mAB$>!0s;!`$nU|bXnv$xZ1j=J2$pv~DN?h6?ci>GGLnH0x
z=BJeAq$&`fgt-*C6cs=z6O@UHONvU9OBAZP6crQ{6fl#Gf`URpb_pmIDkwk_B1j!F
z1|_1*ymY9N(#*UPL$ml2WEBb-B_##U8KrsINQx}b)F`B<mIS31mZlb$M29#B#Jjk<
zIfnX##D{zOx%h|22YW`j#)7oh!g4}cVo`B?i8Z})A}HU0vjB3!M$L^-CA7?u`Q?~7
f4P-4WP>}N^Hnqr(N6M8TBQzmFsig%f-fOu42u%4T

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_ohlone_ohlone_webpages.c.patch b/pkg/openwsn/patches/07-App_ohlone_ohlone_webpages.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a009d6390fdf226787dbd231df52741646d622b4
GIT binary patch
literal 702
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~DA3Q($jQ%3g;Me5sYwNi
z>8Ztf$($h>r3#J(MG8hH3WkPO28LF~<_bmzh9+FPy1EKQAOoQ$>6T{}kY%cwm8q$f
zsR_hXEmXh-a=VeKj<KNvNP>$?K|x>N7B^5RC{4=AOjf|H0$qlSOHrXLKQl!E5(03q
z$7kkcmS|`yRC6hSfW8)l&P-F#(9%##EzLAD(Kgn!wKb?Pu+&tj2C2cs`uYkb8JWcj
znZ*i;3hthMjtWWniA5<28hQC83W*9yiN&eKC5a`O`FWZU;}sMX(kqMdp_W^N0~z9d
QU0q#Wx_ciKFasR~0EF|pP5=M^

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_ohlone_ohlone_webpages.h.patch b/pkg/openwsn/patches/07-App_ohlone_ohlone_webpages.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..19a779042c6026d07863ae3337bf89509ff206b2
GIT binary patch
literal 698
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~DA3Q($jQ%3g;Me5sYwNi
z>8Ztf8Jr;*r3#J(MG8hH3WkPO28LF~<_bmzh9+FPy1EKQAOoQ$>6T{}kY%cwm8q$f
zsR_hXEmXh-a=Veaj<K-<NP>$?K|x>N7B^5RD9SI%FR3g@Empv-3R#AWOHrXLKQl!E
z1R$XR_kMh4US^4grZty>LTP4RiA8*gf&!`%4VbuAdTL2fYGG+=afuFCv7uRfi9&Kl
zX<jyj57MkvkeHmETB2zU@`rM2UP@*fSB!#RzCvDVc}`|tszPFkLTX-$LVlV;T4qiv
XIEW#h*VWb41!<zY=RrX;Z~*`Sk}A-c

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rex_rex.c.patch b/pkg/openwsn/patches/07-App_rex_rex.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3ef1472b7f77dc2750ea619781c3ff1ea0ea9412
GIT binary patch
literal 4404
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rTtpH)YWX_O`QU%9?
zA_XH81w%tC14Aoga|I&<LlZ7tU0sDDkO@$&y5*S##2I5|Wol|=Y63Av3l(sITxX$U
zXsiGd2U}vHV`!?NtE;QarJ$gknU|bXnv$xZ1hTa#F)t-QS1&^eMW#48BQ>QoC$$J7
zp|6k7<mloY@0^jCmzSCYlGH{rFEb@KF)uM4q6=BV)7910!obMT)Wj8}hf6_0U*8rt
zP)JEl%gjqHR=}+UO@<5PXOM4U7{pgFvd}RxfCK_TD+`M9OY%!93y8Lri%U@<wWuh+
zD859YD77NKC^b1Xvn*A^zaTX)ur#$a)itlAs4~7pOCh&7U585nD@e{yEQrrYO-xBG
ziqFg_(Na)A62Yq}zn~;DKMz?GM5I{LnoB{UEI%^^WFg35C7HRYMe)f=8kjPP#o1UT
zic|AaT=Mg9dPWgsHZ}|k5HPK2%|$raOOtXklZlULTP|>VHa5^PF@hv$!d8$Iv-#y<
zFO0@5B9;+B0uCA)#V#xZLuqh6Hnq?(Ga))3XO<<Fq!OQ^sFIIS@+~A&5|NRix*!=B
zNf$(*SW}@IQfw5ZmXsFdDY(YFIePk7gEN4cfsUCO(HVe@AVI`7s0<;iaD#dexp<>p
zpg_|Li~^?{b0Zyd3wXK#mx&<Hl)#ETSomTV*#+4p)?DCH4xHBGOAy&WA-}XFIX^cQ
zRLm+UD3oUAl~|z2=auIAgA3<koJumSA;p-viH?N<JQm4wAR?j=ZlsbEVSx#y!C`7)
zq+@9W2~)6rApaYh!2=+%EFCNiB5V~5u!n$OJVKeRf}w#mC=V(qD5T{VDQINol_+E?
zfb=S4D%dE1)mkfLYHMpkBBUBZftnDYrbv2fNm+hQNn(1cMnQZ<d}dyWrZtx$OigiV
zu7b9$0$3dCmRd-j0=d9ep|~_xA7TR}LM%*l3=N<a3&;!L=%tqT^z{`|^7GV76pBjo
z6f)Bk^72a*iYxPyGa#<bOjFRvOifKSG&M<$&nylG$!KUQ*xD+%Ir;><YAQgA0VLmn
z!T`z0{5*w}#Pp*4{1PMsVNJ65^wbj1Vi!kuki3Q_sB8hJZ;&rR?LcrVp*X&{B)>od
zlu61Gi;DHYf}Sa$5Cy3NVYnkeoLW#wLo9>D9oBeLfJd2vzCP|a0~x5G0E!Z#qYRob
zVH7xl8XB7G7#cydJ=n~G#N_PMlC;viWKff-IKC*gIJKxO)dSq@3eK!b)hNg=(J9WX
zO3hCL`@JBsB*Q>c*AU!bQczIHP0dX%sMJs^$S%>fD@d%&$xlp)Hi*?x0|gXVF+SbI
zSr4)d93g0yfPH{M*eYl^`#T22`v-)0`uoNE_&Ym-7y*tU9=ga9&i;NOu6`jQkpZrn
z3N|(hCJHr>qz?*YOwU5I2cq=S)`kk{>nkMZ=ar=9mFR*R$O@3^31Sv;o-=}_AR;`6
z!wcv>FoZe|#YDqcl#l{*Y!$#J`ntM+LL%NVAi&=_#5E*1B*@j#7itKqr$N0kLnCt?
zLt_g_*$g&^IG+yHROA=x8y_0v2}(pmHL-xa08R65{z1NuA#_YKuo4JLLkc1j6CFbn
zOQgCIR(2{V)Pia}czsWxy9MuNg4-gXk{g^LL8W#fsG}L5R+O3=050U5O4HI(i!^eJ
d)4^p|Ex4^{XlkNkXljX+mdSMpqOC!OQvmVXt{wmY

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rex_rex.h.patch b/pkg/openwsn/patches/07-App_rex_rex.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f2ec2e9a4d3283331a52a74786629f9a9cc82a80
GIT binary patch
literal 327
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rTtpH)Y49<{@QU%9?
zA_XH81w%tC14Aoga|I&<LlZ7tU0sDDkO@$&y5*S##2I5|Wom3?WC<}w3l(sITxX<X
zp#T!*QczG%NlnYlOI3)E4|0u&_u%4EP|(-X;!;$INlZy8$xkoJFD+1TEGXboP>87p
b5lF&CAs~TjuuDNk>gww1l3-+L3SLtId1PAm

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rheli_rheli.c.patch b/pkg/openwsn/patches/07-App_rheli_rheli.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..def335b266db322d53b8d4b4f8261d3e77a01aa4
GIT binary patch
literal 2416
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|s;NX^NFkb23SAsM9#
zjs-;uMkWe|hE@iKR>tNEMh1o^T)Mit3Pm7OpxSlIGYg0}%FN2t)XLNZVw4st-~zeQ
z&{D_PKmjDd#igL2uWySRC=?Xsm*kgJ7Niy{;8uk!!^NejkXlrfUld=W0QPQtQEGB(
zW?8C+e?e+qU}<V;s%u_JQDuCImO^fEx(=5D4v?ImSP-9)nwXMW6rY(<qNSjKBtk%2
zenClQejc(mh)A)fHJ5@yS$<{;$Wn;&N-}d(i!`uE6sP8;xa8;IbhskO3~U(YeK4(Q
zO++A<Cgo%%6B)puz~%xc5lB4h>gwteVFfwym|qU|!pMzDL;!#Tf<|!(%85uAoJUP8
zbxbXY&ZC)Si6yDTr=LNdM-{5Mz<CQC=J6#8`K2Yv`MIg!jHIBTkeQ~Sfm9Ue+BxT^
zq}tj#`#T22JNvu1#s|3u#s~NZhiEEPLox~^Fp145WCSK6oj}TzK~?0zf)n9LiUJfV
zrGl8?)M{p;V-BrRU<G1sak{QuPHJ9yNd`;^m9|wdfW@c+s1{NvPAyR=$w*aj&UXw@
zfE4^(x==kR@$K&n6-A=Jros3qszIp(CIO>u6_8U)a6r7Xhohgns|%8Y@*#;1rUR3<
zRd9_D4s~{R4Gy*j7sqBMI%bv%;8X?*7$gi1BXdg~3lm6=1{(%y3dHB9r9rBmT2P(@
zS4@x;M4<A4SFzwc0!rv$GePZzLQoYOpH`Hb8jzTrom%2lnwFMYq>)>k4zA;BxndOj
w@)hz@%X2dGQWX+Q6jJk26!Oy)(lT>W!TvC}(6KOv_ycSxWe!E8Ix0IA0K^`Q`Tzg`

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rheli_rheli.h.patch b/pkg/openwsn/patches/07-App_rheli_rheli.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0132ceb3ce08e9ec75d2dd15ec9512e24043546e
GIT binary patch
literal 346
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|s;NX^NFka`)MAsM9#
zjs-;uMkWe|hE@iKR>tNEMh1o^T)Mit3Pm7OpxSlIGYg0}%FN2t*viNfVw4st-~zeQ
zNXJ3}B+R9tpq!GLmYJ8T5Fa1p;p*cV@4>~TprEg%#ighalbDiHlAm6bUs|BxSWv*F
qpb%3HB9MfOJW_KqL1NWlCxgt@)z#G{$z11r#{h^C3Mf`0nGFDjykUy~

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rinfo_Makefile.patch b/pkg/openwsn/patches/07-App_rinfo_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..a98120ee47477fd553312cf73914fa58f39ca0da
GIT binary patch
literal 1332
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|s;%uCDH_f5=BP0P$l
z<qXLvRd6gQQZO=6Ff_C>Ftjo@S1>X#G~v?K)m11083Wa?Tb@}!z%1YVJO$sxN(DnB
z1w&&i14}Ct6Np(_sDKOPP6GvyAlMp19b+Q}U0q#WE^US2P^aKfCtrUTD_a$f;*8Xs
z9EGIB;?%sv+*Ab>4d>7x7tbI~O}#`eZ3Sf~Pd^vWAO%|m6^$TI{}3m~U{_83q|7{h
zkU2rlV2Sd~oRs9mq7(%!y<|-;Z3TZPFR*xUkh7JlUb3x<2E-IiRlR(Wyo+l9F8LHq
zE^RJt1y4U`pHLUqU<GYk1zk@ht5JFS#g)bSnR&@Mr75XsGRgTxsW_xkiZaVmi*RX#
z$tEWo8X8o@=cVH?CApwfKd~q`J~=-(H$M-DB9Qy?QcGa6pg=?S8Z@}|4U7_XeI1>1
z^2@RKAE77-q$ndZJp-RA<3wH001s!pN|JOv1Io<sDKXIv33BwqqawK|zqnX8C$TcM
zs2Ch=dI28(evwuR@CaAYfTuM`#A1~JY4CUQ0woPj6%9uhO%)BtAWem$<YHu#eEnTQ
zeOxsaR5T!JL8()rpfo2(Au~@QCAA<mFC{fExl#d?_Y~6dixjj{D>92qGV{{46!h{H
zKsm9POItw~mR`W-Sn1{4>Om8ovO;oxZb4>FszPF3ib8s7UTRTdNh-S0T-pdnsp{oh
zDX8itb7?EU9PaE4a-p-EkE44qhy{yoO$7zrWCay1y<`R5e1r)qT6+0J>h|@8XtzVr
zodVMBP*9YaSCXcn1P@*%g&KwA#1aKvRK*H*3i>6vpaLqtBtE~iL_tkWA-4=o3~q>u
zmR<@tUX>M!QgidmQlSBqSdy8ar%+IopHiA!0*U$LoYcfTE09}?ausybppm4YqT%8i
HpveUQC)i{3

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rinfo_rinfo.c.patch b/pkg/openwsn/patches/07-App_rinfo_rinfo.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..9ad63ee0d7ac5ce3653ee98d0c48fd4dda8aa81a
GIT binary patch
literal 3356
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|s;%uCCMkb23SAsM9#
zjs-;uMkWe|hE@iKR>tNEMh1o^T)Mit3Pm7OpxSlIGYg0}%FN2t)XLNZVw4st-~zeQ
zOvlhr0VEE#$V|u3NI_RuSC>mcK{+!oIj1xwRY3`4b8%`>W@3(Bh7yKMQDR<7elEI9
zQhs7l3P?~J$)L=X+{C=Z^wc7d1ebz>zP>GPppcT9mYJ7YtbkhynhY1nM<BnzFo>^U
zWT<0o3h^RAD+`M9OY%!93y8Lri%U@<wWuh+D857i9HH?=smZCCWvLqe1*v&~rKzQ<
zu6ZRzmGLE73c1DUI$R1kKyrR!L3~DPVoGXJd}c<8mVyG32mx*R1tppJdC1xzBE_24
zTnY+h`I#voOCioHPR&bk$<M>-K1GmHY#8QCFs*6LMK~-=lX5bXiH|*7P*{Q;3vp>?
zUS^4grb0C&$n^CU3W`z-5{pt5N-|Ovic*X7ON)|I6;e`*lZ!G7O7e>o((;SIa{48y
zxdjRZi6t2jtq|kN5{ruUK&tgXG6p%Rc__ZLRVdD^O3hExfT#wm(bP2r1)zcgG-}a|
zC`-&iGeV;@Gq1!VzC=q?Lk-y+YjEZ=GSV@&gyb&5fk#e4%r6H=&ah942!De8OSi-b
zN}QkssmP_s1<og#X&Ue%Ej~T9#IxAN(Y+`?zeGdR);1(4)KycVD7B=tC=Z&9hIk@|
z6{}DhT)LW==$IN4UAktLC6=TTUnGD^1aK5nJxP;SxPo=T%2tJHNFsnaFu$}UIX^cQ
zTrw&sC}gH7Xn@s23UysO=lqmZTU%#;$AEZee;3#IAlJZnch?Y5f&v#0CKfuT=0q0{
zWP~Il+d#@DYSmOoz9gZd0_#E#ON0|C2~BAFgi+vhYGJ5jVF5{}utGbxI9=DSAh9wh
zKQSd5TKa?9WWgng$=QC1xv84EhT5jOhOr8^3hD;x+WrBqe&NA>@nNn(!Jhtp@d1t@
z&K|JnRsgkT6pB+zz*UfQzGHv_B;p~7L;<Bf*R}I^hPeVk+bS4XV^<AIItX<TmaPJE
zQVIqoD!&j{zYrt`LBkND9vf+^;2Iws>g?<q9Bj=6PJ|YwI+lizL<rMB=U_r^_dqfY
z%powE`aXxH6etZ&FqS4dmX=5f22zkKK*JPNpx1(mCs3ULZ5|M4TEW|i-~t1b?ZF-b
zHLeRm?Zo)BqSVxY#N_PM5~tF%wA3Pv+~Ra_3$B(cM!_#%AuqK&Co?ZqA+bauH7`XW
iKTRPmGba@sZI<Rbh6eDKJE*||u68JKEg~yY*}VX+kDZ<X

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rinfo_rinfo.h.patch b/pkg/openwsn/patches/07-App_rinfo_rinfo.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3842ed37772587aa965e807f68ac7d5258c4de6c
GIT binary patch
literal 628
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|s;%uCCMka`)MAsM9#
zjs-;uMkWe|hE@iKR>tNEMh1o^T)Mit3Pm7OpxSlIGYg0}%FN2t*viNfVw4st-~zeQ
zNXJ3}B+R9tpq!GLmYJ8T5Fa1p>F4Gj@4>~TprEg%#ighalbDiHlAm6bUs|BxSWv*F
zpb%3HB9MfOB76)%Le*dwgN)VH)zu}*Sm%7l0EiI^C^jOD2DuaogMDCVrekCT@dL=c
z`nI@%LP1e}Nq$LXL29uAZdJ%KTwIC@W%-#Y3gFm^&&<m#(a^Mp1&o41OfA^E5I2B5
MOdmIZ+=S*105x``?f?J)

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rleds_rleds.c.patch b/pkg/openwsn/patches/07-App_rleds_rleds.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4aab9e366e01d6fad4f0a68a506c1bdbb91383bc
GIT binary patch
literal 3663
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|s;Nlht+kb23SAsM9#
zjs-;uMkWe|hE@iKR>tNEMh1o^T)Mit3Pm7OpxSlIGYg0}%FN2t)XLNZVw4st-~zeQ
zP{%?6B+R9tpq!bPoKu>Ts-Oh5N-sl+OA$#J>|&50y4vLY!~%5jg2d$P)RMH)yyTM1
z{Jdh2G_qMB&x6F!jVdfnElmYUa49J0>)YZ63T25!nTbg`sl^Jo6`{z0gA(LlU0q#W
zqWv46Uk-8(x;x4AG7i&d>1$BzB4J3Zo9h@GLgJlZI2RP<m*kgJ77!iKTwIC@sYONk
zMe!vH;3N}Yl$xBHS(d8dUyzy?2#R3Wypp2I_!2FJ+~RZ{E(II_6vpuxsfj76Me&&#
zC0Ys!NFoHZ<rjdG9kMovNU^3hmx4lBer5{DQi$`4Q}a?>^7C-IPZ6XP8;1E3Olw+m
z5f01Jq@2uTViT;btt}`l!H$KvG&3)=L_<@d8WLps`U(X_sRfBesR|_-sR~7@#rdU0
z$*Bq{sl~}fnFS^JMG9&8MPNC7z4FwY9Np}^{PH~g<ou#kg@VMA42UrhqstPDiuFJ`
z^*}NPIjMQbKDJdT&a6t!Pt$-X1}o9jH3WsFf&w&_(M%{y%t19lqck(G#3H^#OH)G)
z*%)g`#snuxaMmOojN~NA{Bm$K4f{li@F&>6^hlQR!!%tY6`LR?xac%7&@r(jy6DU-
zODstxKEH#qJ2=(`XDU^w<^q?6Fem1hmL%urrh*GT1qFr7G+2h$Kq{zp?VR&dQf+OW
z{T&11o&8;0<AYoS<K10D;N_SCsHz7QU#TSukY<BIL1JZ2eqsu^WPpS?u_Xf;A&$r~
zkYZ_2RadYuM>vx9p$<yyNEn>%O)YiIOd;tW7R$Au3J=23*H<V`Edf_G&iRf33Xocx
zOBW)GTyN{z`8z{JktkaQ187~MfKtmt5)YC>Fw<56IWYx;l9gYGt6vB#Au1>+Km!S^
z94ld~;2Iws>g?<q91N*|Kpr$v04Fmfzk`@y|C?LtSfKeow>VwbE+;iFy(9yx6$)Tq
zK`L2D8XwRw@^JKXcXgpCjLa=`ER1o7k%gs>r3q3RDM~FVEy{z%1t@}RK_whggN8uU
z3*L?dmpJeO1JpkOH<{zpic(Vpz&#D8(zLYHB8}YQbZ`r=mMccVFJB=qwLB*?FI6G2
lL?JaVMIk>;AuTf}6<n-XnCn;?LHq)aJ<1)6$f8tsE&v8e=>Y%$

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rleds_rleds.h.patch b/pkg/openwsn/patches/07-App_rleds_rleds.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..3f36eb11f0ac90e99ed0d11bae3251dd68c07c94
GIT binary patch
literal 631
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|s;Nlht+ka`)MAsM9#
zjs-;uMkWe|hE@iKR>tNEMh1o^T)Mit3Pm7OpxSlIGYg0}%FN2t*viNfVw4st-~zeQ
zNXJ3}B+R9tpq!GLmYJ8T5Fa1p<LVL|@4>~TprEg%#ighalbDiHlAm6bUs|BxSWv*F
zpb%3HB9MghQcHYNQ;I>N)nG@1OxD%a)g{Sf=X}Qih!F}XmZF#raxW4F`@_&o$H)lc
z6OgO*ZE*vIf};GA{F2Io)M5qPs*q*4xD*x2@-tHuz;PCznU`6jp=k{Z9tDM%TCk5H
NZUFn4=5E012mk?nri%ao

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rreg_rreg.c.patch b/pkg/openwsn/patches/07-App_rreg_rreg.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..963fec56040de96271788092d2cc5e88ba6319e9
GIT binary patch
literal 6004
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rreg_rreg.h.patch b/pkg/openwsn/patches/07-App_rreg_rreg.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2a0529148614c6f0052e9938260545aab12a9ee3
GIT binary patch
literal 338
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|q|N=*k7dKsJ{8Knx2
z1w{%*CJKgzRtAPv#^wq}28JeFy1KdwMIbYvnsv)F3y3wy%*xc*%E%I8kQOT70=dvg
z$3g)l%%z~9oRXTBnU|^%A0HIt>K^aG#igL2ucgJMs1TEwl2VeNUX)*2px{_gz@?xN
nQw<`Jgo}bw(?LSjVCRBN)z#J2CB;<de8&KY2?{6{B1{GV`l(*4

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rrube_rrube.c.patch b/pkg/openwsn/patches/07-App_rrube_rrube.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..7ca51bc8faff5da37b23fb82377065f309ecd6cc
GIT binary patch
literal 4738
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|q|Dosj-kb23SAsM9#
zjs-;uMkWe|hE@iKR>tNEMh1o^T)Mit3Pm7OpxSlIGYg0}%FN2t)XLNZVw4st-~zeQ
zLdVcV0VK|)prD+Ymz-0YlB%GTnUb5BmzbVfq?e(DB9WAzSd@Y;n30;32@+F8G9f25
zr5Gf}rJ$g%Z;Kl!q@<>0=A{-Z;8ubr!vzi!u)B42b#+mkM;&*^=a<vU>7bBC!r&+{
zHrFw+fW!g8&?+d(FUc>dEFe0-xVRJ*Qj3c6i{eWZz$q@iC^b1Xvn*A^zaTX)ur#$a
z)itlAs4~7pOCh&7U585nJ4nt?EQrrYO-xBGiqFg_(Na)A62Y%4zn~;DKMz?KM5I{L
znoB{UEI%^^WF^FLC7HRYMH*Nnic|AaT=Mg9I$IHB1{MtSJD3KWTbh|yVi8}Wkdayu
zlJ8iYoSCUniV)JY<{}&krAaxN$;78vTX2enL^C+a61IVyXwEMOdvb(EG{X1bP#CbN
zM#|kFCOC(i8|YXV5S_y_%MwdciBDbB$>B)38In_x1aM?;unI_4M$!TiDArV{202VY
z0bcs#mzE^w=ca=5mx6*qW}1QqB+r*678UD3n8hWDC8@TyK|!HTuJOSk@t!U|t_o^u
zh(ZZ$C!`qCwR6r-Nwu|g_IC`3clLL2jSq4Sj1TY+4guK>sx~3PPHc`NBiIpX4&r=r
zidG~aA%!Bui<AXC!gcfwdQh@Q!r&ZWX`o|i2FU@iLOQoNUDqxrH7~s+115w@+bS5q
z5{m+;6`@d^TB1;rk*eUF?--x}2_Y_Bs2-$X)V1?>hKeFlVAEiH6xE<)1e1W#whG9}
zDmWlM%+bfw1=Tr;DP@Uy$*Bt9M5~aSn4FQBmkKWGLB2Ir04F@8fB-SUfnjKDrekPg
z1Pcyu4G2j<(CSa28j|8MtLTF45>Tb7pr8P&vtTY(P{=FI^#@nA#nxQl>JVHI#+M*e
zDCDE&L4AFNlG36)h5WQM1yCanVk?LhpP!Zns)j+?$k5nS$I!$O;vZ;*O$+BD(ksHn
zBs&-s$VeCx-e!h6hGyol@P?RPkeHmET9Q_pmkes16vr2(7N-`KrFwvyIKi1!sTu{@
zB|62KRjK)D(1NNUu_VJlQ`Zn&w?ItEP0dX%sMJs^$S%>fD@d%&$xlp)Hi*?xg9H#*
z2SG!Ka|*~>aI`8YD4<!VV5^`3POts}A)fwz@u5MU0gfRanhG{H3ML9QkZ6TC7>&g0
zKWGY5Ku%KH+6Ym7eTCfAlEjq6l0<NFH#9TQF*GxSB@l=e#CZy<{ewPy{X%`|8OBKI
z8N>vqX(Izu9V0`-(KHQ7ZOA0nG=)gLh+-07nl>^p(J?YK7){g2A&X#B9LAu8jD#U+
z+So$J$ix^aO&6tt>L*a#)q+}+NHrya{vf>739bV{4MMQnL1QR|pgwPWT2X3h0JsWp
zDosmEEz-y>P6wAewOla@e)$S{spUDDd8rDCB?_r|DGK>%3Tc@+klNkI*j&fR#0V*A
Nknc=HokwMd0szAiC*lAA

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rrube_rrube.h.patch b/pkg/openwsn/patches/07-App_rrube_rrube.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..eeb83065263e21b73633340d916004f10ef9d66e
GIT binary patch
literal 346
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|q|Dosj-ka`)MAsM9#
zjs-;uMkWe|hE@iKR>tNEMh1o^T)Mit3Pm7OpxSlIGYg0}%FN2t*viNfVw4st-~zeQ
zNXJ3}B+R9tpq!GLmYJ8T5FZ~D6zb#}@4>~TprEg%#ighalbDiHlAm6bUs|BxSWv*F
qpb%3HB9MfOf=ZK8L1NWlCxgt@)z#G{$z11r#{h^C3Mf`0nGFERBw_0S

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rt_rt.c.patch b/pkg/openwsn/patches/07-App_rt_rt.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..70c74e3943adbee122552eff2639df28bdb0589e
GIT binary patch
literal 4505
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|q|(Jv~|OXdv8C{=JQ
zC{i#oQ7|;LGBC6<Hdin*Ff`%P)zwuf0_lfp)Gf~}AjS|gD^pV|Qxk|GTBv{v<T4|3
z9b*dxkOUW(f`Y!jEpDJtP?TSiUs73+TC9Lu6|xK$m!d*yQBi(Te2GF)NqkXia%yH-
zs)m0-YF=PzYH6x#UP)19e2JDqZgIK}mjVuuoS#?_pOKoFl3Em>nNgyppnxPoKwEx6
zNoIZ?vNniFv8FYbf<jq-W(vsCqLTQM%-qx>4Rq1s)Vvgz{5+gaRs`wBhGD)2)0);q
zgl%b3PG&NZ;R*_4E^wNFM4zs%t}YQ)kQ06R<zO$2xClh}8|;4?MIk8PAz^TiG_}w%
zGbcJnW|k$Eq!OQOXp|$#%aCAQu>7b{%>~X);NXrgQOGYXNzTtr1!YqO1%=Ygyb=pg
zB1|k#Ni0c>4tDhm_6+e1bB%X&c6RlN4{`Mka1C+{2@P_McX14H^l|lz1?M^i1%=Es
z1r4xOkTOKq&N)9N)z;S8-!UNG+26%AKFBpNKEOXXL{p&}oT(r&Ky0QWBL)zOi;ATp
zk{3xR6v4XC;{f5l0g45rJON^Y^M$#Ej)e&%U%*P-+~RayyPVX#^pXsi5Grk}U;s-6
z3ZU9e!8zYCKmn2txOAav!9f5K)3x(=hKeFlU{hdx6xE=V1e1W#whG88D>xuN%+bfw
z1<4utkd&=ptKb?R9O~@s8XRm5PIn+58Y_U)9mv;67#skW<~oK3*g~Knu`(w=F(ukC
zR>4-G2%1AI;prdZ^WxMJg_4X^ln?-CI0cmY6i*0XRZUa~IQ#pBxcY@)2?JQ5VbCan
z0}dTaGaW+%BS`STl!Frh#okA5Pe4isnE5aoBTgyy5mMxWnBWLDG&IsNG(@z<z|9jx
z+eD!n(nP{+J{4q_SfiGnFo!GPC`S?Ud8N7j;6_q0T2YHo0!vav7P_Fes-dBQj-jC$
zB(`8JEz-P#D1;C$fo2_?E~UO_K#_xlA@O8vsbgqrfK(P0BqnF4mZX*DC4-uq#qmX{
z#i>PQsUF})Yj9>&szyO}iB555Rcd~kMo~$8L1IaUfu^n@xV@>MppcuIn_N(-p;nMx
zqH70B&jztNYB05U^b%(`$SQCKMzaDDwlJ2hf(Ez%^A8B|^!JPR@ppCvF#;SzJamyI
zpjjX!GQd?+!Nx|xM4<+fJ{1%cFntP*GDHMvYeR+f^%auy^GZ_lN_0Ve3k67J1Tl&@
zzZq#lQ$G=Y!{GyT4;Vrnhhm~(EG&!=G_+*!b#(y+M7(1_fWLEyYe;ZNkgKCF)DTop
zgR_URxsIWU1tfcb4I|E{nBh7EQjlM$Z+vKwCny08(S!o>0W`V0`3LzrhR`v&AQe6!
zCZqr|Gt)6NH$*Ccic(8Ti}FC}trpb8ht(Ve`mgZLIk?dcYW{-LB4~`E5Y#`9Pb*4I
z4FH#IPNivSsYM#O#p&P_SIZTn;FqtEms*~anU|`NSfY@cm!goLrjVAIlM1e`4b4n+
S49zT&k~o=eMAQRRb|nCvK*Co5

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rt_rt.h.patch b/pkg/openwsn/patches/07-App_rt_rt.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c37bb3813496eac6d791cc8cb9a40bea34a70ffd
GIT binary patch
literal 322
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|q|(Jv~|%is*jC{=JQ
zC{i#oQ7|;LGBC6<Hdin*Ff`%P)zwuf0_lfp)Gf~}AjS|gD^p`DBTI-OTBv{v<T4{2
z3k8rcmx6+FN@`kWUaCTTd{9Wd2N#!ug1(j(m!d*UVoFL$etJ=UX@P=cK>?S7LQFM?
iKoTwr0SQ!toe45gS65e;coUuT9Rncx6;LdLnF;_NWmww)

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rwellknown_Makefile.patch b/pkg/openwsn/patches/07-App_rwellknown_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e854d58293cc554123ffcccefd13a2ff10308d76
GIT binary patch
literal 1342
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|q|PtD26&dV>))Avox
zPEE_qN#zX5C{=JQC{i#oQ7|;LGBC6<Hdin*Ff`%P)zwuf0+|IhM7KP%fEWXP^YavZ
z6Dt)AjT8)xtqd%!OpGB0YM}xykc$lzK!RYq40Vi+6m)fUb-A<^f<v8xL!Es6U94<X
zG>S7)b8-}t5{pyw5_3}(R5YAJgIqj=G&S`SxwI9Oojm<qJcAT$6;w2WJpDtQ9D`jo
z^^-F5^g-qXIfEt2Gjmds6N^$5wDgiSxwIAhoxH%}!9mVes(Q(`DjE<|G*$KTLGmuH
z0l4H-G`Y07v=u!4oP9!FT!R&~Z54Dqk*r4L=@(ZP>u2UA=ai<TqRAxZ7p3BmN-4@L
zOD)2s5hk0QY-ngu5ucZi!<6KLQvJlD-1y}D+}!*;9Ew2h%S$bR$$|n6-D}X`);BOp
z)b(|A&dD#w;(vsqB#@$v%=8R=s*DqLJp(+P@hVBu^$aL8!>7bVHzdf>508rEqWt1w
z-JHbA)S_Z=wCM$S`1?g#DZnFKMFXDJAQ6jI2Bg8?$qSS;I8`(pT{KlR9D_6!ijs?w
zP4e}33H5Q+R8Y}?s0F1?g@V$Y9EHq0g_P8S)V!3`yyQxS%)GRGg|z%41+CPI%;J*F
zymT!Ey?g~wb}Z)7R?vl|7qB^2dil0`&_t)Kker`ekeQRJkeHXEke-^CT9jClif%NQ
zHo{S=dihogs(Q&>+6pj-J3E71=<Md>=pGDW!J=DJK|wcJK}Ab1SwS}+VS<X5UOth!
zeSIO??ND^5fOI<)6lLa>q$w!DgI7tRMj<(|L_rr-v4Wj~eo1bDKB(l0&o3=eP*YRL
zEkhH78=|76mjaGgWrd>D-2AdsXaFUaWaj576cpvBlqQ!zVm>)1H8IZ$<d&jb1>H1g
OBq^w9xVQ#rasdF^J!oA3

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rwellknown_rwellknown.c.patch b/pkg/openwsn/patches/07-App_rwellknown_rwellknown.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5c0aa0fd59ab8e32b25dba5f41dabad503b74876
GIT binary patch
literal 4232
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|q|PtD26&dV>)Lt^SB
zbB1J;DmWGtDHxe37#dm`7+M*dD;OCVnsDjr>M9h0%!3-FTb@}!j-h5&rlwY=CJ;ll
zPyrXn<t93Y1_~f?E(HbU%)I2B(v(yMC6KL!rKzQ<dKpS65(SCL*{LOIrFqFEnfZCe
z=+Yp4#i>P^i8&w{MJ@#eeSKTpK%p$LC^IoBC$(4sw;~i7E-nRylFEYAl+-kZ;*z4$
z<PwEyaA1M`p{uK_i{f06d#K<Kq>#x>$xX~lOiwKWd5}Kd1H}#!21lErrH-*NB;E)H
zazRmkNj@mhhz(^fE=7gZqN4nw_!0#~%8f5dO-{`$OV#i%NX-ibB@WlTlA_A^5-o+?
z;&dG@1$-bmKd~S_BQ-H4wJ1I_qeM$V0ZD`yz4-;81c$5_B2uhr&847FmY<mdvL4B`
z#i@BIF8O&lovR2^j}ybZ52iJ(LCFq(N-ii(%E?S7HW}O6+JXWZ>}(`AXXa&=XlN=_
zL&8#DU!kBVwIH!5RiPv!RiP-gIKQ+gIaMJgwK%ybv!EouNFgo12rQ?s2P$B6Atg+5
zeo?AIL1IY;#26&=%My!<^+4M7K+*;|sd>l&V5?A^S(Tcfrh%jbtWHzc5ERG?3dpGe
z&8)J-98|M3N;C6HEaFSFG&R&P473L4Sx_Q2R{&>P+9cxqa&Y{O++>Uh0B}IiHz9*k
zHz+YHaw&3wb6aMb2E6!;PfsoJEOv2pFUrp^(a^ND4G9W$)l?`-Eh#O^v*rR-9SWf0
zbr@#>q%s}E1efb3Mmna3M3?KCWr-!J#FsgsA_trfhD3%?sD`8(n2YmEOOo?*Q^94i
zf`US3nt}#W9inUJoS%|vYwPUq7!dF5@8TLC<Qf?7?ivD0fv}QEUmsM8rj{r`nlTCm
ziIq9|i7DX1$iz&?)RgGLh>Va&<VB?7aFEuiu&_tCnTDYcO8iI|oDWRRb<8Z``2Z4s
z`uYlqDJjq*LIG0!L#j9h1!#=I8>aC^sl};9WvL$ECP#2)RjLN4kz%B24M|iA3ZO=d
zt{pT5L>t6H>_8@M6~KwfKOn@@-!I<T-!H_~FC-)~z*WJ<M!`g(25vX9CLC;71&VI3
zA#QtpU0pzy#XANB_;~txyZHzCI)=bfKcs9dPAvgf|IYc20Sb`T72JC$dBfis(_OX-
zhKRsGQ4PvT=<1<?0nJ&#pgaZ+4<rXclL)#_1m9M{H9k1h+1WKX7}}nwRY=V#PK7q%
z%?x$Sjo>*DqHSQ~+%MD@7VnVY9}+Q-+_Z)ii;%EHkTi}=q|6Lrf-|(ak&d}JBtwJU
z0jcN}plJq_9BM(;6R6FA+{z@-iidYoz?B5NsE2p^;?s&!Qv<+#R;SXmwA3O{DFE&<
z)N;ir_~k3)rIzPp=A|kmmMEm=r6}a5DWqlQq=G91b5k7)14weDri&3pDwW*~0Nomn
AumAu6

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rwellknown_rwellknown.h.patch b/pkg/openwsn/patches/07-App_rwellknown_rwellknown.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..000ac9795168fc72cbce84e0150dcab78c340c56
GIT binary patch
literal 680
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|q|PtD26&dV>)Lt^S>
zaE4@*DmWGtDHxe37#dm`7+M*dD;OCVnsDjr>M9h0%!3-FTb@}!j-h5&rp8uAmJma=
zPyrXn<wiOd3Ls%F1qJ1l)U?dJRE7BXpm0|oA8$YZaKCsDE-nQHeJw36MTMBel$4VE
z^rHOI0tLr{0xkuGm}(G#BwQ4pnv>%V@+U~58te^_4Z6Czx}@9SobMO_F-HN#a&%ij
z?nlC4e;JzT7#Tr)2J(QuEpDJtP?TSiUs73+TC9Lu6|xK$m!d*herAdSB3|P&^D;{`
bG_7I5rJxW~3-&(5A>aU@qeDQhLvsuOI-<Jn

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rxl1_rxl1.c.patch b/pkg/openwsn/patches/07-App_rxl1_rxl1.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0ff35576cb84ab7c4e1a0645242ab44e7f99b528
GIT binary patch
literal 4314
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|se$T0*HddZw28Knx2
z1w{%*CJKgzRtAPv#^wq}28JeFy1KdwMIbYvnsv)F3y3wy%*xc%%G3m6kQOT70=dx0
zT*uf#0VKi2rJ$g%Z;Kl!6cpu`<d;+yq!ugSR)s9X#igi_T2z!@6knnM@@jlhYI163
zS*nJAL26!LX=-VzYhFoFWqgU2LT+)o4wnKBker`b5TB8nn37r)pP5mjrJ#T$LO@%7
zK}lwQ9<nxwNU^3hmx4lBer5{DQn2evGILXlG%&@BQ}a?>^7C*yTM=XeHVpGSnAWr=
zB7{qmax#;N3|&x2bAeL_BocLXb#;lbf}BXqF9&;JghnI6_ux>VQAC3BAQA@WPBQ}?
zGfSd#XJ%PqNh<M)hi18xyvzyK1<RWX)m-3Q1rG4|5{3NIlH~l{R8W>xP*5n%%qy_~
zCC0?^l*E$6=wMgBV9yZGFxPlTXJ=QR_z+j$0M{VLkkBC4co)YIM;}+eSa9xBP*BKB
zQ_uig1u0K-?VR&dQf+OW{T&11o&8;0<AYoS;{*JILo^kt!I=vZ2gGJBGU5P{yuhUp
zwaQ2&Pm)kXf_0(C0>Xs@6c0%G0>lL84GUu(3uxYemA$#e>AH3~sd?!o889JK+E&2;
zmJSp^wVi@<zGHv_Bqea^Le+wU03xPq=kE*^MWVo_!1yStL1_sl0i$gdkkeLhKzx{^
zkEaWgGx8y6TftVrH9k1h+1WKX*czPjKt8lk0H-{VuaPh~01OQbbqo#6A;kmCw%pX*
z<bp~KHE>WABv$6+C#FOj#OkOOLGy}5td0ew1cPYN*H<V`Em0`RNF9*CaQ62LarFzq
z5*!fcVIeWX$<V++$I!qOPe>V>=@=RrK|%^v>w_~Jw8~eghO|8}+a(3rCDy1#5yC~#
zh(jxs5b}AYx&GkRM=?$%uvj6o1Oqh%4Gm3n42=vRz9rW)h#ZY@F8#fOl%hdQNUAn5
z)-g0Sfy5QqaRrIV*{LOIrFqGqmRxasQEG8&QCX@7xIGx0S(U0$kX@ovoLQBcpQZth
z)q=#53<FJFLvT}0K|ukQDGIVnbnQ?wMMaKbJXkee{lvKdWF5HDLbC?!2^7LsK?7VS
z_y>e|`uoNE_&Ym-7y*tU9=ga9(997M8Q`j^U}K|TqEG`#rwR%R*!&AkW{7mBtqm2@
z*H=i+&nrpIE71it;1wVxJj5{Kd}pKy%?CvI4u>Dmy<iA+9EypCu_!?W=0J;3Uso4U
zP{cb11o%6LxP}CW1i3o;LJdLnG&rM}80r|B8bLA&*c{?~iY;V^NJ{bx^^Fe=@&qNM
zA)8=8et;%?H~%1C#}GOu8&D~PgdqizxuK4sxfxP{RFqm$T9gM$ceS84G`J55E_VoY
z6ybegaH|&7z67UAP`ADi)ESOXD@sib0GD=7rD<uYMH;!q>EM)C3vLe>npx@?nwuac
NXtG^`DF4ZD3ji5FlX?IE

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_rxl1_rxl1.h.patch b/pkg/openwsn/patches/07-App_rxl1_rxl1.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..8ec3b84e03ee28772c09f6c0d6148a1120d0453b
GIT binary patch
literal 338
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|se$T0*HdKsJ{8Knx2
z1w{%*CJKgzRtAPv#^wq}28JeFy1KdwMIbYvnsv)F3y3wy%*xc*%E%I8kQOT70=dvg
z$3g)l%%z~9oRXTBnU|^%A0HIqV;Jwj#igL2ucgJMs1TEwl2VeNUX)*2px{_gz@?xN
nQw<`Jgo`443_(KGVCRBN)z#J2CB;<de8&KY2?{6{B1{GVFK1n2

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_tcpecho_Makefile.patch b/pkg/openwsn/patches/07-App_tcpecho_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..56d5d606bb6f8632551d454e2274c55fcfc15f11
GIT binary patch
literal 1336
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rSE=Wzz$k+Ex%uY?q
z%t_@8$tYEDEGSYiGEp!zv@$TXGB#H*GB7mZ($&>fC;}M-H9@yLvw)y!zWI3yzKN9z
zhDHj8##RQFRwhOe)3i_l7s#y!3LrtSMTR=YMhd#Ry1HE23c;aH!J$sR{w`LwDjLNZ
zsW~|cNr}a&d5O8H3Mv}Tp+PR5L7JL+iCo$W%1)ksE}lUOwhAg5L7x60PL9E@n)*qZ
zdHNu8f}Ft;<(WAt$%#cN3R-%}nq1ln{!U(C@!%k5D^<N@TNMq6DVnN!`5<{0*8p7d
zDVki`T-pkre$GCjF0R1}+O`V1o=8@s^7M-<i}f?}l5<K^Qqg3R^NUh(NTn2ImZcWq
z(g>4HPBt_&sEE%?$6-oxL8*RXQEq&4er|4l9u7qy_vNLQz+^#zhVC_JaO)cwCF=S*
zI_Kn<WAQ&iQ4&Z|MrL{jK2^qvx}E_Z&Ulq1>3Rl~nc-7nq8k$A=!Zu|a#4P9v2IRc
zWol6|INJ0AJpBD4trXx9uA%`?YmkV=Dg)Bs@8kta8k{N`jxL%i8jeAl3Ps7q$R_#v
zyM+3<YAUE`K-7X#r$Rw#PL4umo<d4$L26z~YF=`sLS|lCzCv1lk%CrgMP_kHW?s6M
zf?mD?C@&UsX)EZ$(hJxeE4_SMJ!qm+R!GjzEy&DCRY=TBQAkhCOD#$)NkuoBOB>-R
zRlR&G1y#LdE^P&v!=0T$E_8PDadZy`v0%}ysi2^nte~Q$m#m<hk1#<+OD~^D-M+pM
z?RF@-Q$V^M3W_rGO41aR;K8e;P@|BXSfZeds#w8JLBAxoKp#}>#OIfmD5$9^<d&g{
z!3|N-(n|rytFl5-YHog6Dl~u+OEUBG6bg#+Q%aLdATghulbV=k1#(MKu7YkFG?Ell
KG+bN*G`RpT)@6bK

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_tcpecho_tcpecho.c.patch b/pkg/openwsn/patches/07-App_tcpecho_tcpecho.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..051f6e718cdf149e0b5844c6f33b455be6b47db5
GIT binary patch
literal 1388
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rSE=Wzz$cNE-$($h>
zr3#J(MG8hH3WkPO28LF~<_bmzh9+FPy1EKQAd{d*=$2;|kY=2jm8q$fsR_h5EmXh-
za;>3(j-jOjNP>$?K|x>N7B^5RC{4=AOjf|H0$qlSOHrXLKQl!E>gV{(yvz~}O@(SM
z1%+CWWKw>94qUQ0Bfm5!#WN?fxFj_Xs!BmYp(wSav?xy@Bq-F?8ln#rED(3=>gwv!
z&D|iM5a)J;O04b&g*Flf$Aht<j<Go;9uz>J7UEU3@GDNuOL581OV#i%NX-i@O)X7z
z%_}LYj4#nr$SqFSQAjN+$}fs9fzS}QDky-YbnWuX^HPfxY!#gSeFOacT>V1gL!1L#
zojv?PfvTXOkeQ~Skz1UuYnNP<npl!wq-cww5^kV^f&wT-7N-_vCg#K!6lLa>xPolf
zz|f-O8Wa>C>gO5};OZRW>JlI9>gVF(@8_xmPTLSqgCh~-X9e;+onJnLyp0s^ASO8O
zO^kI+jgaCV6t;z+$c;}cN=*$&OwLX%aVkwqODzJ$kR~X?z_|yM%;32vIX^EiHMs<w
zIv^1RR)dnmQc{yj(*r=!g^|779DRb3^B2TTh^V31O;}?IuM<JugZKoIi;$cN0IK<q
AoB#j-

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_tcpecho_tcpecho.h.patch b/pkg/openwsn/patches/07-App_tcpecho_tcpecho.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ca12822d17e53546d6c7f6ac275a3687df9f7fbf
GIT binary patch
literal 1076
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rSE=Wzz$cNE-8Jr;*
zr3#J(MG8hH3WkPO28LF~<_bmzh9+FPy1EKQAd{d*=$2;|kY=2jm8r3nktM`9EmXh-
za;=e$g#t*JOF=<7B{eNGFI6EvKEye|)!D;8-h+!vK|x<ji%U@<CNU+YBtN|<zqCNX
zv7mrUK_R9ZL?8*5Bp0|QXXJxKtHDkOnXRj<t4pHUA<2Y|2RRuDgS}#CrekCd@eIh>
z`nI@%LP1e}Nq$LXL29uAZdJ%KTwIC@W%-#Y3ef0_&&<m#(a^N!QdCIF&(DDi7iZ*`
z=A?M$WEPjC=7HoDP_-4MCZ}eWrE2&Wq~-;drk19<=9Lsx#+PU*<QAucjYF}eI5jWD
zB|i^`dL4z-qN4nw_!0<>sXaMAFE2H@1Z)CW7R9Y8sY#{j0Y#a4V2^;pOiK$Cd$r)$
rg9Ily{y<Xn2u_gKF`bDTq);`q4c7c}5&{;RVqD=2bv-CRVPOpbPrXK{

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_tcpinject_Makefile.patch b/pkg/openwsn/patches/07-App_tcpinject_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..7cbf6c5efe601199a9b6dee060d9955670cf2278
GIT binary patch
literal 1340
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rSF38NwN=+`&_f5=B
zP0P$l<qXLvRd6gQQZO=6Ff_C>Ftjo@S1>X#G~v?K)m11083i>%w>-0e2=jdN^Avm&
zD-{fl6by~63@oioj3DM|p#m<Ddkqvof?%r*b&QP^bai!gxwI96L!E*{oqYXWtZY>@
ziZfDkaukvhi&OIwb5j*mG@L_&Ts(s`HT4p?v=x+{JpEiegA{BPR5XG-{X?7_gIzWC
zlQQ%4LFNQGgC)u{b5fEMi&7M{^pZ8Xv=#iFyujkYLC#jHddapb8W2-7RrT^g@-D6c
zxa3nbxwN^o6+Hc%eL`JagB7%G6?8q3tVZSO7grYRXXYj6l%}Mj$t33&rQ(oEDatHM
zEyAS{CYzjWXlPIopO=oql;na^{luc&_~iWD-26Noia_qmOD%!Pf&vZQYtZ1<H!w=n
z^>uX4$uGy^e}tkWkfMyt^bCBej1zS|13aAZDoN7y3@9_hr^G}zB*@VZkBa1?{NiHW
zoW#o1qGE8g=>>TB`$bwQz$08m1D@6(5sOs@q`}|G3zRfCRWux3G*vVlgESS2l8cc|
z^7VHK^>NiyP|<*>1*J}fg3_EEh0HvKl+=RMyp+_u<VuCiytI6UwEQ9kt<;Ll;*!j~
zbS(wFd<9T$EauWy(1oQJusK$G`L=q{M5nBfoS$2enUkuJn3tlEo|>0hlvt9AZZwxR
z!cnSv`Bn<5ddXbc3NVK|JA+*4?B?U>9t>i^qFYlzK{r`JMN2PPK{p>^f{K=2K9Rb8
zeIeTIP;{q&bUPFjW#*NnDJa2%S4p8pAvv)`K^IlAf}MhXNp68YsNjjuFD+3}Q&Y$-
zLlc7=qN1gj0*+T@g`(8l{IXPN040`W=I1FC6y>LsCYL~BJ~<~fG0zI*mZDq*-85(<
NDX3_;xCUr)0RSKEXFdP`

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_tcpinject_tcpinject.c.patch b/pkg/openwsn/patches/07-App_tcpinject_tcpinject.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6f41d3e1e36a522afd948518e643c2a9b69a8f59
GIT binary patch
literal 2961
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rSF38NwN=+_7u=J8S
zLo!Mg91DsRj7$^^4Xq3et&GhTj0_A-xO8=O6^cNnL5<NZ&nzI_NHZ%_Q!7&wh>=>T
zfD7bma~)%21&}xwmx6-6zAbK`P?lJfnV6K5TC9Lu5sC~Km##udWkG66YMMfENl|HX
zi9$7(u7ZMsf`373USMfzX{u{pNl|5di55t(AiKmGBAt|<p92y>!NsY0DVcfcP$i&H
ziBC*PDT*&asLIGJc1%erN-Zvisw&OQD={=fR-&Mwkdav&kY5D0t5yLXEAeHCMaA(T
zQ7#1xQ8WQ-!huy#lwXn$@;tGjMTC*1NjaIx#0I{ttt}UqqC#1IW(tz)GxIV_G&B{e
zxfB#?LDJxmMub6eMt*5dif2w{aY<?(RGor?LQ!f-X;Geno1;&#t2In3n#m<and#}N
zMF>rxu(yaWQOGOJO-e0_PpT|QEsjqs%Fm6@%qu7@iBBp`OG_;R8K<D208@-C6>Vq{
z3zgQ_PfsmTNY2mAP0UMC02u;KLcys;nTa_H8ir<03Z4OFW(p~(#U+_}i6xo&c?zJ!
zky>1=qhREOB3_VRRH6yaUgkPRW(vBxy1InJo{Y3V+*1)K{)tUV2(=`pCKQdZL^3#2
z6sQnI!r;=?#8k)B5K_E?ODRyPRgzo~pPZkUmzrFnp@ztMpyEdlQGn@S%76+jopA4f
z_z>rScuzksSLYB-Q2qdCWKcjM<#VV7F8O(>8mUD^`JiGFOhaN!K|vuiO#vcfYwH>x
z9O~@s8XOFlR6tL>dIi}f3bqO$_ZNc7?fCT661Sq%)PTg~?9>t`a8}lE_V*3&_jC0N
z0l5&#fncwLEkyHFL3W9)tzW2*56EIrg=cJ`V`2iyl3-0B`{*8C`Q_k{iZ4+B(;&Bj
z9W&@c3@NpNnBWv=ZlYshfRy5DaTM2}+7z5RFstI+;&dH|*D-=1w>VwbF26i4wMfBM
z0ZVj)k|Q*2ft4l~r6!i-7b)6eQ40@O1qE=rDh3zk@dZVhc_pr(B#SLQ>9__3#fSR2
zMg+Jzhq$`L2fO;YxcK|I>VOM$GjkntW2EFmuIF*30I;71r}se#011QBf`x^Sr3ox8
zpcN2BsmZCCWvLoiqaPAA;Bp16fsm4#RGJ<DiXucskEL}0%F7mpIu_=z$e_CIAOj)J
I#9E^O094O*-T(jq

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_tcpinject_tcpinject.h.patch b/pkg/openwsn/patches/07-App_tcpinject_tcpinject.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..89e7e8d30b40d02a3502e97a3856ff4558b568f8
GIT binary patch
literal 1703
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rSF38NwN=+_7u=FxG
zLo!Mg91DsRj7$^^4Xq3et&GhTj0_A-xO8=O6^cNnL5<NZ&nzI_NHZ%_V=H3=h>=>T
zfD7bmBOMC`kT92mf^te~T4r9VLVSFPbAYFxm#cF~yayMTf`Y!57MG$zOkzq(Nq%}!
zerbV%V?hCzf<jC+h(Ho9NiOgNdl4jF4fX=ad|h2#U6RcYNhZb$kkgSc*h_{+Iz~`W
zfgG=IiyJ7ER2HPBq^2q0R)QwO#igjAkJreu#G=f^q@2`ZVhsfcF<v7Jit<bHK~5#s
zOpq(f@-tHu;E66iGcU75L(`f|Q6VWmKL<&oI3vF_C&e=-v$!NR526B1Ye`XNdU|RR
zR=MQ-yu8%p5|{kERE^Z4qWq%x5(O{~whGOl;?%qpuuA`e)V#pb)Y4Sfypp2I_!2FJ
z+~RZ{h(;s>6co@5C`wIE%`8jRz^Wf?Bbw(@Qj<#41Bx>9z<viM2Q4j7;;aQHPD3Ld
zV^ali@&rlYjRR2dQ#qyN=BJeAq$&`fV7L^y6yZs>xTL5wxkRCwOHn~VK>;&F6ciK+
zvP(b_uAl&kbC5b@42q7-ymY7%P&pHyn34jDLAa`n%worsl%mw)VyLRp%)Amqv-lFY
z3J@bBvp68X2y9m^QpzezEGmvKv8H4C1|=74$pAHt!&QM8NbZHDbC59D6c7VR9yzV&
hmxEI|Qess^PpqKe#h2PKji73J2RU9768Nw*4*(Dc_J;rf

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_tcpprint_Makefile.patch b/pkg/openwsn/patches/07-App_tcpprint_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..eabba9b048e0a38502d9eafa4ffa7e5e16d5d100
GIT binary patch
literal 1338
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rSE+{C<%q!9NP0UVB
z%gjmT49O@}a4aZNFfvgvG_*1>v@$kVFfuSS;nLOBRVV_P1T{jpJhOnXalZL^3ciVz
z3Wi1shQ?L~mR2T)5aYB^0T;-%1_~fSuuX<K#zqRdy1Ket+6uv;PQjs0zWy#&wkjIM
z8L2rr3Q38@sd<UHsR}9@&Y?jro<W+LdWl@x3d&BNelDIt3bqO=8bO}^Ax@6LuA2Hu
znR)skbAp_~66KjWDanaNDGFM8$(mf+3jR)BVDaD}XDd~`WLp&th$)(?difxE7uNt>
z@+q2J+FaTSo_@|gp)Rh$3fi^`x}Hc@qw@5ND~t6r^OAE)Q&Q1nlJkpFaY&^UWtOED
z;nE0`O-?p6G^mKrOUGeKazUwnVo`2<a(-@ZejW}*Aot~^mcV2|frjoiXmINr7$xfZ
zIy&d%mt*liLQxV(QATEZ20m5BiMpNv9?p1`B<Xqvl$qgEVxk)o<miV-MRHMoaj|Yr
zVr6PkF*w@v0zCZvBCQnQ5w4;EPiv5f#VP~R;P2!GN*bIh8jdcSDjJSKnhHh9#mFZ4
z`n!bsxN0h>Xh770Ql~;eX-<wpW}ZSyYC&pVN@`wmr9x(2TE0SBevyJ!YDH#oNoHQU
zmV#cs0w^;Ub7?E+!qN-a94oziTRmu^Q&vdM&n?KzNmWS9OHoKq%}XsxEJ;N-noAqu
zC{?|DD+N`(WG-z5n8Tf&K`wN5^Ko<!2C-n#t*M}(o2;OsrI)Orn~yL-MN2QANZr1^
z5bbs-x>G>99l&Kynt~EMc$E}t6p|B56m(G)E7&RMm*f`cgUX%w{L&HyH8q9YGBh!`
zAu3vWDd2cjRwzo%%`Z!Z22f&2W`3SRK~a86X>ti9=96<$6Z5P<ZYj!D&`pCzl7fnc
Ji)(-;7XZ@-W}N^4

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_tcpprint_tcpprint.c.patch b/pkg/openwsn/patches/07-App_tcpprint_tcpprint.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e5edc9d02183564088dc45c250694f05fd4de1e5
GIT binary patch
literal 1045
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rSE+{C<%qxL2^pZJ4
zGD;O33yKtsOcV?atqcsUjLj8{3=B=UbaizVia=&T4bd&nEFjfDGb>Y5D^nAQfm*15
z3*=%$106$41&{<6mx6-6zAbK`P*9qblbNi5TLrod7nh<!S$<}U0?gm>nR%Hd8k!2#
zTnY-cAlan+{2YXAaYlY=PKswvW^qYso`xn!m4bpoQEEwPQJz9bP^halL?0+*AP(2n
z)zzh+!$E!_((z!WI6VLgZzK$k2_q97V>3uhD1ZPc)(cBhOH<?1ic(Vp5|gu2OPos6
z(o%~wa*NY7p+SKjz{&Y}d8x@IF8O(>8mUD^`9<+13Sb(^-5|Fi1$t^;3Rt;+L26zg
z$U@h=lA_A^5-o+?;&dH|ZY-vtMqNs3QfYbsC~ZTd7ZGu8jy}Q2F$eJ|IOah9RG{3W
a`Q>0QVsRvCUd3$=PS1iYfCMd84+8*=3pgGC

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_tcpprint_tcpprint.h.patch b/pkg/openwsn/patches/07-App_tcpprint_tcpprint.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..c0c10dcf0a62d4456d0984fecfa0ccf9faa59273
GIT binary patch
literal 1109
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rSE+{C<%qxL2^fEX@
zGD;O33yKtsOcV?atqcsUjLj8{3=B=UbaizVia=&T4bd&nEFjfDGb>YLD`NwQfm*15
z3*=%W9Sa4JFqeXYa!P7iW?rg7e0+#=KtPbEUr4+M7ng#9zLpl3qC!k!N=iw7dQpC9
zfr4W}0hfY8Of`r=5-v$D2mtvGBwP)4KFD-kU0q#LO%F*X!UB-9kucahhGsfO<`55o
zT&{168z>YM<(K4_R2HNbE8tdzEW^d6s8E)lnW6xT#`w&<%n}VvYc55Fr2PCGgm`gA
zerZmMXHI5uNopQQfdZPwqSWNn%(7Gs|AN%Kz|z#xRM)(cqRRLZErs0Tbg+S_7A5EB
z<)tQ<xa8-hYNQqw<rl@5D1d1!YKv3zQosta8m<G;hoT?V@hPcErRm^^1i2g(j9OZt
zD6IuYDI|o!kqVNcO9+F)0_;&#hoXiuR1q~pI=>to#wcM0vIZ%l34}E^6Hq;Y6xtx8
OHLYP;PC+52mJ0y=a8|zn

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpecho_Makefile.patch b/pkg/openwsn/patches/07-App_udpecho_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ec9672ff28796422a52e3c37670b9bf4143edda1
GIT binary patch
literal 1336
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDM(Gu$k+Ex%uY?q
z%t_@8$tYEDEGSYiGEp!zv@$TXGB#H*GB7mZ($&>fC;}M-H9@yLvw)y!zWI3yzKN9z
zhDHj8##RQFRwf1z)3i_l7s#y!3LrtSMTR=YMhd#Ry1HE23c;aH!J$sR{w`LwDjLNZ
zsW~|cNr}a&d5O8H3Mv}Tp+PR5L7JL+iCo$W%1)ksE}lUOwhAg5L7x60PL9E@n)*qZ
zdHNu8f}Ft;<(WAt$%#cN3R-%}nq1ln{!U(C@!%k5D^<N@TNMq6DVnN!`5<{0*8p7d
zDVki`T-pkre$GCjF0R1}+O`V1o=8@s^7M-<i}f?}l5<K^Qqg3R^NUh(NTn2ImZcWq
z(g>4HPBt_&sEE%?$6-oxL8*RXQEq&4er|4l9u7qy_vNLQz+^#zhVC_JaO)cwCF=S*
zI_Kn<WAQ&iQ4&Z|MrL{jK2^qvx}E_Z&Ulq1>3Rl~nc-7nq8k$A=!Zu|a#4P9v2IRc
zWol6|INJ0AJpBD4trXx9uA%`?YmkV=Dg)Bs@8kta8k{N`jxL%i8jeAl3Ps7q$R_#v
zyM+3<YAUE`K-7X#r$Rw#PL4umo<d4$L26z~YF=`sLS|lCzCv1lk%CrgMP_kHW?s6M
zf?mD?C@&UsX)EZ$(hJxeE4_SMJ!qm+R!GjzEy&DCRY=TBQAkhCOD#$)NkuoBOB>-R
zRlR&G1y#LdE^P&v!=0T$E_8PDadZy`v0%}ysi2^nte~Q$m#m<hk1#<+OD~^D-M+pM
z?RF@-Q$V^M3W_rGO41aR;K8e;P@|BXSfZeds#w8JLBAxoKp#}>#OIfmD5$9^<d&g{
z!3|N-(n|rytFl5-YHog6Dl~u+OEUBG6bg#+Q%aLdATghulbV=k1#(MKu7YkFG?Ell
KG+bN*G`RpeLS=*i

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpecho_udpecho.c.patch b/pkg/openwsn/patches/07-App_udpecho_udpecho.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..7a74d19fe79a18edd76d58aa41e917ed66485ba3
GIT binary patch
literal 1281
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDM(Gu$cNE-$($h>
zr3#J(MG8hH3WkPO28LF~<_bmzh9+FPy1EKQAd{d*=$2;|kY=2jm8q$fsR_h5EmXh-
za;>3(j-i<XNP>$?K|x>N7B^5RC{4=AOjf|H0$qlSOHrXLKQl!E>gV{(yvz~}O@(SM
z1%+CWeJGMesmZCCWvLqe1*v&~rKzQ<u6ZRzmGLE73c1DUAWfj)fVfvzS63ILpDykN
zITB<&S#Ab}ED{EXxrvF6sR1O+6+oaC5*%n@Rh*ia;*y_-BRq5zQj3c6i{eWlG{k)h
z3ZS6UwaYKhOD$5cRdDwA4e<AK^$Up)bqR2F_VBmn0@<gKnWmtTTb!<Imt2&ZSdw3)
zXp5l|ZlHpK0x0zrrxs-<=EN5iW#*N*f^62n(4ylS6ciuo=Nb{<>Kx+g5+Cg9=i=h;
z=c)rv#}H40BM$5a@;seiK7_oD6z?D=IPOhNbj*<B9u&5Ppu`@ZR+O3=keHmETH;ii
zmX=xsiXlx<gw=wwQBr<>4m=yBq$ZW72Y{jinwb<76pB(yN{jLo+#G#^U7@-_`2}Jh
OBG@Ul50M$L+6e&tkZ^4P

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpecho_udpecho.h.patch b/pkg/openwsn/patches/07-App_udpecho_udpecho.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..556763163c5ef622da870cd3a263305fe81d3791
GIT binary patch
literal 933
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDM(Gu$cNE-8Jr;*
zr3#J(MG8hH3WkPO28LF~<_bmzh9+FPy1EKQAd{d*=$2;|kY=2jm8r3nu>r(5EmXh-
za;=e$g#t*JOF=<7B{eNGFI6EvKGY?^)!D;8-h+!vK|x<ji%U@<CNU+YBtN|<zqCNX
zv7mrUK_R9ZL?8*5rWCj)XXJxKtHDkOnXRj<t4pHUp(%uo2RRuDgS}#CrekCZ@eIh>
z`nI@%LP1e}Nq$LXL29uAZdJ%KTwIC@W%-#Y3ef0_&&<m#(a^N!Qa}|hN=;79EKAk!
zFG$S`EKMy<b<Ha&s*EquQphb%*R)1Ar8qS&#U(!vhk6}_)S{yNqWBUB4c4BNpPvJF
zL`rH>X?j3WW**onAYW@~fx^EQ9R8310mlGHiXH(13L=^ZN`5)<!2)#<$p5gQ0RRJf
B6NLZ(

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpecho_udpecho.py.patch b/pkg/openwsn/patches/07-App_udpecho_udpecho.py.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f3b6eb0764b7dc71e5eccaac13e55d7e6544266d
GIT binary patch
literal 2113
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDM(Gu$cNE-1(lp3
z8Knx21w{%*CJKgzRtAPv#^wq}28JeFy1KdwMIfV~X6Tk@7LaJ3nU$%rm9YWDJS|kf
z1#+*kj**!HNSsSSp(wSmG_|-yK|w*mRzayCKNF6WxD*s}D;-l(ic*V<L9*)V3d*^u
ziFw5e>WMiy>R{=B{35Vk1zQCpLsK&gE=7fm%wm`(TLpC^0|P@V6LSMA6N@AZtK_tl
zR4YRhLsKhDBLf2~LnEtHGvg$XQ5l)VFtcnG%()b~6ch@IGV@9lltNOAOEUA)6-rYI
zT$3~M_4M?VxVRJ*iu04RQ%mAA67y1WQi~L9p#pjkaSaHi=jayi>E{|^rUT^%`#XEb
zySN8A`f6gBp;w$*Qj(dQnqOL?VTwgMDKjrcLjxWpI=Ph~7i(fsS)7`eQj)I$4O<-z
zM3Cq}{R!3u^<YdMRH1^BHr#Y=B~>Nu;*uf_s4dz`3c7X*O4<mc;3{B7aw$TC3~HRV
zl7a@rjGWXwm}4|GwUrc-Doav}HI=v&6-tUKt+*6Hv0s#0kW;CXl3835pO}(@2vArE
z>lLLYm!%cu=V}-l7@2@Pom!EcT2KNDcWB5#O@n(aFJA#{GRU&joZ?h;d9b7c#F=o*
zqYYv;;od`t8iGV2!GJTIAfAC(4>lV;6bf=G(ZT?dG~oVB&dD!M)zIVuWsb!1_{_Y5
z(h?1&n7jaRJ}62pDJ{xVD9Kj<t5Yb+$ShVU&&*57F9)SeO>hP_)-g6x(ACw|1(`wP
z43?CXlw<|ZQ%P0^#s-E~1_r5?*m9LZacOcgD7L}b-GEC`AuTa82T6cXu1m`=Qpi-u
z%u^^z%u7$zFf`CajZjcIr=X;utpG~8nV?jnpa4xFumC16t6~^~ky|lU;K{I<iiym#
z3h)r3Vzz}FN<z+6P(aGO3ZR0V)cmWUpnxw6!yTm*lZTv(A*ltFZfrq>wjm_TA!Tl4
zo!~r3_52OD0c<?sEDmuqDDm5Z2$-93<$P^uL8=5&466NLDH_DrRM1vXg5(>RFen@}
KL3y2w@&W+435K-*

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpinject_Makefile.patch b/pkg/openwsn/patches/07-App_udpinject_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..8d9116ea862941d45bca6614cd517c0b50e5008a
GIT binary patch
literal 1340
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDag#rN=+`&_f5=B
zP0P$l<qXLvRd6gQQZO=6Ff_C>Ftjo@S1>X#G~v?K)m11083i>%w>-0e2=jdN^Avm&
zD-{fl6by~63@oio3?Sxdp#m<Ddkqvof?%r*b&QP^bai!gxwI96L!E*{oqYXWtZY>@
ziZfDkaukvhi&OIwb5j*mG@L_&Ts(s`HT4p?v=x+{JpEiegA{BPR5XG-{X?7_gIzWC
zlQQ%4LFNQGgC)u{b5fEMi&7M{^pZ8Xv=#iFyujkYLC#jHddapb8W2-7RrT^g@-D6c
zxa3nbxwN^o6+Hc%eL`JagB7%G6?8q3tVZSO7grYRXXYj6l%}Mj$t33&rQ(oEDatHM
zEyAS{CYzjWXlPIopO=oql;na^{luc&_~iWD-26Noia_qmOD%!Pf&vZQYtZ1<H!w=n
z^>uX4$uGy^e}tkWkfMyt^bCBej1zS|13aAZDoN7y3@9_hr^G}zB*@VZkBa1?{NiHW
zoW#o1qGE8g=>>TB`$bwQz$08m1D@6(5sOs@q`}|G3zRfCRWux3G*vVlgESS2l8cc|
z^7VHK^>NiyP|<*>1*J}fg3_EEh0HvKl+=RMyp+_u<VuCiytI6UwEQ9kt<;Ll;*!j~
zbS(wFd<9T$EauWy(1oQJusK$G`L=q{M5nBfoS$2enUkuJn3tlEo|>0hlvt9AZZwxR
z!cnSv`Bn<5ddXbc3NVK|JA+*4?B?U>9t>i^qFYlzK{r`JMN2PPK{p>^f{K=2K9Rb8
zeIeTIP;{q&bUPFjW#*NnDJa2%S4p8pAvv)`K^IlAf}MhXNp68YsNjjuFD+3}Q&Y$-
zLlc7=qN1gj0*+T@g`(8l{IXPN040`W=I1FC6y>LsCYL~BJ~<~fG0zI*mZDq*-85(<
NDX3_;xCUr)0RSpxXFvb|

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpinject_udpinject.c.patch b/pkg/openwsn/patches/07-App_udpinject_udpinject.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..340791e7fcff9f81a1fc414828368dc06c928b57
GIT binary patch
literal 1487
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDag#rN=+_7u=J8S
zLo!Mg91DsRj7$^^4Xq3et&GhTj0_A-xO8=O6^cNnL5<NZ&nzI_NHZ%_Q!7&wh>=>T
zfD7bmLqi=S0|k%-7ng#9zP>GPpioenl#`jPfLjH+3>TN8LRo%hiUQp4@tJv<B^sIv
z)m#b+wOFJ}iZavFQ;VP~6ciNv3sUm}OH)fzUGqwcD&tGE6biCSthp3GpfoeD#3H^#
zA+IzyDYYm*sj?)sI6kc?KQ}%zub{LfKB+V<Ewu<uF|t&&p+&4UIHV!LpsTB^OUGaU
z1r6b#K&YZmaDdVR5(cLdQxhFCXet2(yh1IG=qpamOL581OVz-Pw%p=$9fj1QqWq%x
z5(o|Px`Kj2ZgIM<U4D69YLSAig0sJGfWM!sUr2nYOMs`Jm#cFKGzK%%6g0p}lZ#Rl
zOY(~pZLz3@8>*n70LnSVsYRKIIq?NWnRz9yAlo&tXwq>F3W^W)bBzdabq;ZLi4S)5
zb8+$abJYQ-4T$H#X@erq=a&yT?<1uH5EGmh%q(=wO&}!(I5<F|TnNgc@o7b=sR4<}
z*{LN?;G74FElp75fpdCNetr&8L6DM~RGJ<DiWWp>FG?*bEy`1HbMy&zh3W$pgAf}L
N5kR?(D0vFgRsaYgw($S}

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpinject_udpinject.h.patch b/pkg/openwsn/patches/07-App_udpinject_udpinject.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..aa83f22d872aac54be989b2b63a7aea068a7ecb6
GIT binary patch
literal 1025
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDag#rN=+_7u=FxG
zLo!Mg91DsRj7$^^4Xq3et&GhTj0_A-xO8=O6^cNnL5<NZ&nzI_NHZ%_V=H3=h>=>T
zfD7bmBOMC`kT92mf^te~T4r9VLVSFvOMs`Jm#cF~yayMTf`Y!57MG$zOkzq(Nq%}!
zerbV%V?hCzf<jC+h(Ho9O)2mMdl4jF4fX=ad|h2#U6RcYO(Dh#kkgSc*h_|HI!0y?
zPk|h-Z;Kl!6cpu`<d;+yq!ugSR)s9X#igiFmY<oT0FTc2%)HDJ4NYrIiISqs^z_ss
zta8Pvc_}XWd8r!y1*v&~rKzQ<u6ZRzmGLE73c1DUItr;pMfpYXB@kNEno9xQ)}qwp
z)XXv*`oXSA%FoY1a%M_uQfYcXQDz?4v7nIA(gMX(EjXSafd-B#kQ99a4HS@Ir-B$r
bPK5;=NEn+up}@;8r)ls(odpUfSP%jL5?VGL

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udplatency_Makefile.patch b/pkg/openwsn/patches/07-App_udplatency_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..5eb880f5950fbef0d4a7450c0f795d292184a098
GIT binary patch
literal 1342
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDac7INzF^H)b~xy
zPEE_qN#zX5C{=JQC{i#oQ7|;LGBC6<Hdin*Ff`%P)zwuf0+|IhM7KP%fEWXP^YavZ
z6Dt)AjT8)xtqd%!j4dGsYM}xykc$lzK!RYq40Vi+6m)fUb-A<^f<v8xL!Es6U94<X
zG>S7)b8-}t5{pyw5_3}(R5YAJgIqj=G&S`SxwI9Oojm<qJcAT$6;w2WJpDtQ9D`jo
z^^-F5^g-qXIfEt2Gjmds6N^$5wDgiSxwIAhoxH%}!9mVes(Q(`DjE<|G*$KTLGmuH
z0l4H-G`Y07v=u!4oP9!FT!R&~Z54Dqk*r4L=@(ZP>u2UA=ai<TqRAxZ7p3BmN-4@L
zOD)2s5hk0QY-ngu5ucZi!<6KLQvJlD-1y}D+}!*;9Ew2h%S$bR$$|n6-D}X`);BOp
z)b(|A&dD#w;(vsqB#@$v%=8R=s*DqLJp(+P@hVBu^$aL8!>7bVHzdf>508rEqWt1w
z-JHbA)S_Z=wCM$S`1?g#DZnFKMFXDJAQ6jI2Bg8?$qSS;I8`(pT{KlR9D_6!ijs?w
zP4e}33H5Q+R8Y}?s0F1?g@V$Y9EHq0g_P8S)Vvf>-c!iTOUqYC%P&&UO0CE&F3HSG
z*HX~SR{&+lVlHh3U08Ynn`5PyZ>tAQbjk|J`MCv|IjIVXc_|9%sd=eIi6yD%MssN+
z9Hpw4Z>6BBm&~QD0CTvrGsuO`Za$9g!5|hax-}IPbdwcSwDgh{bn_7=sA%cs6RF$R
z7oyz`MRy8Fw?jcuW?o5}f)YG<l@w|ek`qf5bWs&6*eU3j<QC|IN}l-q(h>zVHHF+V
zG%>g#Dq4Ce;CNM5C`!%EFH406P-01Dex5=>QGQBkatS2nlXFrN^Q=H_DauvQO@l^~
Mf{KQVYk(#f0P#9#E&u=k

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udplatency_udplatency.c.patch b/pkg/openwsn/patches/07-App_udplatency_udplatency.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..bb210be5b8c8168556d0cb688dbead250268e2bd
GIT binary patch
literal 7332
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
J?Kn^_1pr@RU%>zX

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udplatency_udplatency.h.patch b/pkg/openwsn/patches/07-App_udplatency_udplatency.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..fd1611b02f5b72bd37a6a3c0884b721e91bd56a7
GIT binary patch
literal 1673
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDac7INzF^HL}Kb?
zaE4@*DmWGtDHxe37#dm`7+M*dD;OCVnsDjr>M9h0%!3-FTb@}!j-h5&rp8vr1`tEF
zPyrXn<wiP2<_aKjE(HbUl+?7$yi|qw_)wPsAIA_^Kj+AJ4=yeR1$`|oE=7fy#FUhh
z{Pd#y(gFp?f&wl@G_lf@0w0JkxfB#)s<{*twDiHc^=)wj1*oOCRiMidHnOC$AT=d5
zO#xjePCj8H%Myz+6O(dMi-|Rqu#p8t`6c-vrxI%>7nh<!S$<}U0wOuZXXa&=XlPnv
zktr$4OixcO!Y)~ynwR2|pO>oPUyzy?Sejaz>Y7(lR2g5QrI1^kuA`7zRFq#7Ujm^u
zt+^C1EG|k-PR%UCVF1`cN%{FX$WBd3O)5<fD9X&k<>18PY>;cA=}kc)rWTwJjC70*
z6?AoVbxBX6p(zERG+GTJkP>ewy%MUng1)}KLS|k`YLRY1VsdtBi9$hYQD%OMf<|VZ
zLT+(ta(-S)u_l)`JntcLUVv+mr@xB=2pAg}7$B+f3-t}~4heA$4gpC*u`x&qDCqEJ
zHc)aKNjU?QUBHPE#6V7ru-pL>$Etu(4#_X4aUQ|xvJy}}fy#m+TuTd7+}3gd0B6|Y
A;s5{u

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpprint_Makefile.patch b/pkg/openwsn/patches/07-App_udpprint_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..aa91cffc148714188933fe9f109d2b4a9018bcf1
GIT binary patch
literal 1338
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDJUq)%q!9NP0UVB
z%gjmT49O@}a4aZNFfvgvG_*1>v@$kVFfuSS;nLOBRVV_P1T{jpJhOnXalZL^3ciVz
z3Wi1shQ?L~mR80V5aYB^0T;-%1_~fSuuX<K#zqRdy1Ket+6uv;PQjs0zWy#&wkjIM
z8L2rr3Q38@sd<UHsR}9@&Y?jro<W+LdWl@x3d&BNelDIt3bqO=8bO}^Ax@6LuA2Hu
znR)skbAp_~66KjWDanaNDGFM8$(mf+3jR)BVDaD}XDd~`WLp&th$)(?difxE7uNt>
z@+q2J+FaTSo_@|gp)Rh$3fi^`x}Hc@qw@5ND~t6r^OAE)Q&Q1nlJkpFaY&^UWtOED
z;nE0`O-?p6G^mKrOUGeKazUwnVo`2<a(-@ZejW}*Aot~^mcV2|frjoiXmINr7$xfZ
zIy&d%mt*liLQxV(QATEZ20m5BiMpNv9?p1`B<Xqvl$qgEVxk)o<miV-MRHMoaj|Yr
zVr6PkF*w@v0zCZvBCQnQ5w4;EPiv5f#VP~R;P2!GN*bIh8jdcSDjJSKnhHh9#mFZ4
z`n!bsxN0h>Xh770Ql~;eX-<wpW}ZSyYC&pVN@`wmr9x(2TE0SBevyJ!YDH#oNoHQU
zmV#cs0w^;Ub7?E+!qN-a94oziTRmu^Q&vdM&n?KzNmWS9OHoKq%}XsxEJ;N-noAqu
zC{?|DD+N`(WG-z5n8Tf&K`wN5^Ko<!2C-n#t*M}(o2;OsrI)Orn~yL-MN2QANZr1^
z5bbs-x>G>99l&Kynt~EMc$E}t6p|B56m(G)E7&RMm*f`cgUX%w{L&HyH8q9YGBh!`
zAu3vWDd2cjRwzo%%`Z!Z22f&2W`3SRK~a86X>ti9=96<$6Z5P<ZYj!D&`pCzl7fnc
Ji)(-;7XSjEW~TrE

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpprint_udpprint.c.patch b/pkg/openwsn/patches/07-App_udpprint_udpprint.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4c3d0fdec70f307be11f57b8b4f94dbdd54eaebb
GIT binary patch
literal 1151
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDJUq)%qxL2^pZJ4
zGD;O33yKtsOcV?atqcsUjLj8{3=B=UbaizVia=&T4bd&nEFjfDGb>Y5D^nAQfm*15
z3*=%;9YYHRkT@5Yf`Y!jEpDJtP@0sJnXG_Y1-c9um!d*herAdS%-ivqd6^{|nhMoi
z3JSHDvc;)+DK7bWsT%$Tsd<5=simo|c_l@a@g-Ucxy9)^3aLd!`9<+15E^2Nf`S4l
zbc$1pG81#+!C~tPQl;VS?;GIn=js;{AL<ei5aj6>qT?DA6d&s68WG^?9OCK{AMEPq
z;^Ob;s>7v#8)$&-EJ!R$%uOvxEs8JEG$2*IrZqSw!2zwStE)@DfChy<B$&tu?EG@D
z*N0+ogOW262B&i)6CGm%NJ0n4HYn8;f|6K#T2X3hKw@%sYKc>6T3Tw6Ms9JsrZp^u
zCgtbnAkuG2YEo%>04N7TQ?Y`ALQ!f-X;Geno1;&#D^wdO=Rzz5M>usXM8qamO9Aib
BMZ5q2

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpprint_udpprint.h.patch b/pkg/openwsn/patches/07-App_udpprint_udpprint.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..871019c3e6cb4003bfb3cf60f327b2eb8288d491
GIT binary patch
literal 949
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDJUq)%qxL2^fEX@
zGD;O33yKtsOcV?atqcsUjLj8{3=B=UbaizVia=&T4bd&nEFjfDGb>YLD`NwQfm*15
z3*=%W9Sa4JFqeXYa!P7iW?rg7e0-=&KtPbEUr4+M7ng#9zLpl3qC!k!N=iw7dQpC9
zfr4W}0hfY8Of`r=5-v?C2mtvGBwP)4KFD-kU0q#LO%F{W!UB-9kucahhGsfOrVtN-
zT&{168z>YM<(K4_R2HNbE8tdzEW^d6s8E)lnW6xT#`w&<%n}VvYYg$?)Vvgz{Jc~R
z|AN%Kz|z#xRM)(cqRRLZErs0TbRC7%qN4nw_!0=MY0ag8W^Pexa%yH74((w3lJfI&
z5bj7xO)5<XhdszOAfIb#fnuQ+91D;@0mlPKiY|cy3Ma5bK@5aL2?b1kISqpb<P=S7
MSdvyyh^gfQ0NceJB>(^b

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udprand_Makefile.patch b/pkg/openwsn/patches/07-App_udprand_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..242288b76bde2e845b184ab9910efa01e34048a4
GIT binary patch
literal 1336
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDJV+JOVRgD%uY?q
z%t_@8$tYEDEGSYiGEp!zv@$TXGB#H*GB7mZ($&>fC;}M-H9@yLvw)y!zWI3yzKN9z
zhDHj8##RQFaMQF<0T;-v1_~fSutkPC#zqRdy1Ket+6uv;PQjs0zWy#&wkjIM8L2rr
z3Q38@sd<UHsR}9@&Y?jro<W+LdWl@x3d&BNelDIt3bqO=8bO}^Ax@6LuA2HunR)sk
zbAp_~66KjWDanaNDGFM8$(mf+3jR)BVDaD}XDd~`WLp&th$)(?difxE7uNt>@+q2J
z+FaTSo_@|gp)Rh$3fi^`x}Hc@qw@5ND~t6r^OAE)Q&Q1nlJkpFaY&^UWtOED;nE0`
zO-?p6G^mKrOUGeKazUwnVo`2<a(-@ZejW}*Aot~^mcV2|frjoiXmINr7$xfZIy&d%
zmt*liLQxV(QATEZ20m5BiMpNv9?p1`B<Xqvl$qgEVxk)o<miV-MRHMoaj|YrVr6Pk
zF*w@v0zCZvBCQnQ5w4;EPiv5f#VP~R;P2!GN*bIh8jdcSDjJSKnhHh9#mFZ4`n!bs
zxN0h>Xh770Ql~;eX-<wpW}ZSyYC&pVN@`wmr9x(2TE0SBevyJ!YDH#oNoHQUmV#cs
z0w^yQb7?E+!qN-a94oziTRmu^Q&vdM&n?KzNmWS9OHoKq%}XsxEJ;N-noAquC{?|D
zD+N`(WG-z5n8Tf&K`wN5^Ko<!2C-n#t*M}(o2;OsrI)Orn~yL-MN2QANZr1^5bbs-
zx>G>99SVvv^Gebbl;FXuq)?-foLHiui>g?`PC>sUw?H3M?8N7nmMEyHDdd)+iNOs~
z(b7u+$E&hJQEF~}St>Mu5=%1k^Ark-@>5EaOCT|yoRgZEX9aRgQLch+8Z?p=R5V;%
H12nk+kvV0S

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udprand_udprand.c.patch b/pkg/openwsn/patches/07-App_udprand_udprand.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..957854b02de15484fc90aadb65df9afebefde48c
GIT binary patch
literal 3254
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDJV+JOM%gP$($h>
zr3#J(MG8hH3WkPO28LF~<_bmzh9+FPy1EKQAd{d*=$2;|kY=2jm8q$fsR_h5EmXh-
za;=4qp|Ju;9Bi3|j-k1NuCA^wmx6+FW?phmX-cYs63BLtlk;=+GL$f6lJgS_(8Y_B
zGg4DZb5e^y652>cWv1jN<|U?MN_e`ux>^_*8Je27g7t7A>nh18N=-}wiE}9^=<D0!
z1_~*uX_<Mc#R|BUpviE7f&ml&Fbv`=7#ZrA7(&8DL7`Rw8fWokiABZnCDvSA3TQ$o
zTx%{xg6=FR$}h<;sVpGcsa#x&3T643DR7%gGILXlG&I4E!5=0CrAaxN$;1bVErwm0
zd6^{|nhMoi3Lt<S8hT)7c&32FZ52Q%1uRe;UtE${RH6YAfFzyx^wbhVvm^~o)lip!
zAV)u!0M{T-e-|Byks$3v;1Ew=*PwWaPEThY5I5d8m^3qBt_QnQ)0#^`p%%lxC5gq^
z8k$h=D)<+q<^`6fmZrMql@wLRmuM*zWS4+6Du7aBK~ZW!Vo|C>L1J=tY6-+U1=%GE
zkkBXu=>z%Qttd4$0IbBRG%YQ)NW<CRH^AS|)h{F-8X#b|C@3gorYUF?WS7|5`i1)V
zfC3#<3>cZ}n3}?}CK(A*L0`YPB(WqjSs^(iu?QSd<;8jNu)ruTNlea;_I3^ObM=XL
z_V;s(4-Rp3_73)pa*g+O^z@4bd6z&cqf&|nC2~5ZYOr-9EM<fJOdxe@b7_Mzq`tmF
zN`9Vti9%6n9w=qz<(DWFSLP*WK%_xwH8V9e)zH)=H9oUA7$l>isbFiX;O6KP?5e3y
zlv+|+lxNKaHBJG=y!<?cl*II+{QMFm(_l3ODARZryEwXo<TW%w83F7f1qE>G1!rGS
zF_T}Q0ZYZ8;u%&TX<9?fR8T;;0py`tE^SC2)z_ze&V|(}P#Rpdm>KAp8^Ed-1yJb&
z!Z=EIg=#KE1qB6oeHvd-TAUFNE}meX261#k9D}_Bf;|1>o&6mHzy%3rp;nxlm*SG2
zm#TqTp5+#&>nNla73CMjmq2JxaD#$NA-6bP*Dk+2FSSU)Rso~T0u>9;A`7fAxhOTU
zB)>?}7DFZ6Kxq6Grxs-<=EN5iW#*N*f^5bt5OrLGg5pE{Tq6QpokLt*;)7lNTwMJ9
zTy?;06>}3E3wUFNKsbUEJTxrH2u)BF=xae*A@N`@rh;oWj1p8w0e2Cq1CB{>m?8*J
zoCSG?M8^9ExcY?$`@!l09R=qgSH}=nNHHAZ8XSUEJ4zZ*P=az5KuJPL(^^X(Yvo2L
z9psk}p_Bm4SuhHm!^|yoEZ~hdXmW$p!)fT1aBgurBDWB#-!jV*OHzq%MsdX`_~k3)
nrIzPp=A|kmmMEm=r6}a5DWqlQq=HkhrKygk1*}dVKz9NF2)dQC

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udprand_udprand.h.patch b/pkg/openwsn/patches/07-App_udprand_udprand.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..be05ff1d28d2ed7532f8f826f019263902944ea9
GIT binary patch
literal 1050
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDJV+JOM%gP8Jr;*
zr3#J(MG8hH3WkPO28LF~<_bmzh9+FPy1EKQAd{d*=$2;|kY=2jm8r3nu>r(5EmXh-
za;=e$p@9NOoJ&DLIVCkMGcQ#kK0eeXAjr|rCEkOJOF=<jON&cUAto^;r6fPSD8IBo
z!Lgu#OA$@1G^HRYF)xKnK_RA^OF=<Pp9}1Ku=%>Wy1FEqADU7CvY;A7AlV#>X$#2l
zNEqxZLo*#CbBMP<9?-YN4HOEB@=NkdDhpDJ6>zIUmf_-3R4B{OOi_TwWPD~`W{HNT
zHM(#~QD%C2Y7rKh;?%qpm;Ag`4gZ4Fyui}b(p1;HlA_A^5-o+?;&dH_)S{yNqWBUB
zt!d4rfNEb+YI16384lfGcO>QK=fItplA2VS9#E8-ht-jZ#n~Vif`Um)3lw{`;CO?C
vAUNVcQuGKxP?&;U4`RSw4+}+*Af_y#kjyWqSy*CsPzfkJp;DlLgM}#oe04bt

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpstorm_Makefile.patch b/pkg/openwsn/patches/07-App_udpstorm_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..95348b137169268a07993f04ef0f929149c78e3a
GIT binary patch
literal 1338
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDJU+<FUr;TP0UVB
z%gjmT49O@}a4aZNFfvgvG_*1>v@$kVFfuSS;nLOBRVV_P1T{jpJhOnXalZL^3ciVz
z3Wi1shQ?L~mR81Q5aYB^0T;-%1_~fSuuX<K#zqRdy1Ket+6uv;PQjs0zWy#&wkjIM
z8L2rr3Q38@sd<UHsR}9@&Y?jro<W+LdWl@x3d&BNelDIt3bqO=8bO}^Ax@6LuA2Hu
znR)skbAp_~66KjWDanaNDGFM8$(mf+3jR)BVDaD}XDd~`WLp&th$)(?difxE7uNt>
z@+q2J+FaTSo_@|gp)Rh$3fi^`x}Hc@qw@5ND~t6r^OAE)Q&Q1nlJkpFaY&^UWtOED
z;nE0`O-?p6G^mKrOUGeKazUwnVo`2<a(-@ZejW}*Aot~^mcV2|frjoiXmINr7$xfZ
zIy&d%mt*liLQxV(QATEZ20m5BiMpNv9?p1`B<Xqvl$qgEVxk)o<miV-MRHMoaj|Yr
zVr6PkF*w@v0zCZvBCQnQ5w4;EPiv5f#VP~R;P2!GN*bIh8jdcSDjJSKnhHh9#mFZ4
z`n!bsxN0h>Xh770Ql~;eX-<wpW}ZSyYC&pVN@`wmr9x(2TE0SBevyJ!YDH#oNoHQU
zmV#cs0w^;Ub7?E+!qN-a94oziTRmu^Q&vdM&n?KzNmWS9OHoKq%}XsxEJ;N-noAqu
zC{?|DD+N`(WG-z5n8Tf&K`wN5^Ko<!2C-n#t*M}(o2;OsrI)Orn~yL-MN2QANZr1^
z5bbs-x>G>99SVvv^Gebbl;FXuq)?-foLHiui>g?`PC>sUw?H3M?!@PpmMEyHDdd)+
ziNOs~(b7u+$E&hJQEF~}St>Mu5=%1k^Ark-@>5EaOCT|yoRgZEX9aRgQLch+8Z?p=
LR5V;%12nk+NEK$a

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpstorm_udpstorm.c.patch b/pkg/openwsn/patches/07-App_udpstorm_udpstorm.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..fa0b15962d71a84c4e15573fa7fe5dbf79520a93
GIT binary patch
literal 5734
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
RfsKXL$y9MUq7tUE+X2?ci_8E3

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/07-App_udpstorm_udpstorm.h.patch b/pkg/openwsn/patches/07-App_udpstorm_udpstorm.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..1ca03304a389a9fa1ac8b13f2add7248bd6ae68c
GIT binary patch
literal 659
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV539FxPb~D9|rWDJU+<FUo~8^fEX@
zGD;O33yKtsOcV?atqcsUjLj8{3=B=UbaizVia=&T4bd&nEFjfDGb>YLD`NwQfm*15
z3*=%W9Sa4JFqeXYa!P7iW?rg7e0-=&KyZkEkZ-&P7ng#9zLpl3qC!k!N=iw7dQpC9
zfr4W}0hfY8Of`r=5-v?C2nP8MBwP)4KFD-kU0q#LO%F{W!UB-9kucahhGsfOMi38y
zT&{168z>YM<(K4_R2HNbE8tdzEW^d6s8E)lnW6xT#`w&<%n}VvYgi~LD8$r){S9#j
O*ynU}2FPV-P5}Uv7_&M6

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/Makefile.patch b/pkg/openwsn/patches/Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d9ebd971fd930cfae676e6faffe819a9b3b8d93e
GIT binary patch
literal 2074
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV55VP0UVB%gjmT49O@}a4aZNFfvgv
zG_*1>v@$kVFfuSS;nLOBRVV`Kglf?(&n&>y?wg;d;G0;fU}&UZXl!L*X=Q2z(XNFG
zxInHkPyh*nO*YgqHCNEp)z#(FR!FTV$S*2U@bz~I^>MYbRnaKUNX^MnNJ=bD%}dNp
zRZ!7z4h?eg4ARupOXSj4P<Hb4bMXvPuvJje2=ep~adHfH)znYQ%+u%6RtOGq21}G@
z=A<Mi7Nsa?=_PA&X)E|Ud4a`)gPg5Y^^$E>G$5vEs_Nx~<Xv0?aLK1=a%ppED|q@j
z`-Hl<1}kXWD(HG5S&homFRm=s&&*5CDNRX5lS$4mO2r|SQj}SiT7*j@Og1^$(9obF
zJ}(`IDai$;`iVuk@yYqQx%qi`6y+8dm>3)A;#CLoM_y_P%oKgBfdGvdEWrbn(Kj$k
z)b(|A&dD#wt0)PiC?hjH1D`76L|xAS4`;kel5{--%FOU7G0_bPa`eNaBDpBPxL7wQ
zu`;!&7>_aob6v-R0{x=QytI5Gl$EFE<YedNm*){yo1c-BpO;ElT}g65YH|h<mX{<K
zWaee1CYKOpW<gPA9uX=_Q;4*^G=*r}OH&GR5=&C^k}C<jv^1rFc$XF>=A{s2WN}G;
zQ7$O0b7?EMcm@S4*uogvwhCw|11zs?tALWm5rW8R8ZL@R!w4aGnuQC&(<od7oY+9_
zQb^3nu~LASUn&}qauZaDaXO^s7b#>aWacTTXn=HTDp)I|<SQttX!tsMyJ{*a=sGK?
zsAPgg^HLS8!RBEa1v1{>$qQ_xiiV?$rizARkfuUWaxoTr6;w1JYPqx(lobj}b8<lT
zr=%97=B0olQUR1d6hIEsO0CE&F3HSG*HX~SR{+&MpzNg!D=fk0Sn1{4>Oo6fWrgJY
z+=9%URE5O66ovHEywsw^l2ipWqq(#Zj#Aajw^C5mO9nZGGdDXWvq(X=03pq#t-uNO
zkF&ETs9tgNadZy`v0$aUrh<ZQvVw}1Ub2F2K0>F8mL4dZ5u@AJ7oyz`MK>t%aXNt0
zYZ@p%ptX-uO>$z1f-b631v>@(l3Y;9l3x;^Us|G|rlycvh9-uHH7&gqP&|VCtWcDi
in_rd+4Y$OS%=|osf};GC(&Q3QP$%c4CgxdLaRC56ttkos

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/Systick.c.patch b/pkg/openwsn/patches/Systick.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f0fe6cc9028abac22a2ecc4cc9339160f3b53a93
GIT binary patch
literal 368
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV52st}HIeOwQIz<_yUwRd6gQQZO=6
zFf_C>w6rp|R4_6yG~v?K)m110X@%<1Ezc|<px?~O)Y!_{5TaiT6>x#vW1s*M1RHIr
zV`!+LtE;QarLCZxnU|bXnv$xZR9up4Y?NkbP!XS#nWUGY#HG!ptx%d*oSB}Nnxc@L
zkyxZq403vQe5N&qOi@X4d~s&Ft)UKxRgjZdX${t2mY<oT5L{Utl9`<Ck(if~lUk$!
w64OMI_Af}y3lH{-hboJA&d*EBOou4r(pISE(pFG_nE{iuGynsTF$%R@0NZnH>;M1&

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/Systick.h.patch b/pkg/openwsn/patches/Systick.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0bace0e5459239e7e7a125857d8c43425b456cba
GIT binary patch
literal 303
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV52st}HIeOwQKJ;0(zqRd6gQQZO=6
zFf_C>w6rp|R4_6yG~v?K)m110X@%<1Ezc|<px?~O)YQt<1fpLH6>x#vW1s*M1RHIr
zW2&I5tE<bU4T1_~`I#vS!Ii}!naSDl&iQ$1ndurJF->bOZH3f|lGLI+h0?s@%=Em}
z6ourB#3F@akQcJ!GjS>?DoKtn&P>+<(FHk)mDXG_3V!(td8y?&nR%%Si6siDc_|9{
LX$onXIjLL#`g2>=

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/at86rf231.h.patch b/pkg/openwsn/patches/at86rf231.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..bf07de6212bf1d062f850a4a68f08b197b554f4e
GIT binary patch
literal 24775
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
VPG(-JLSl(RD&%nSw9K4TE&zbva!mjL

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/board_info.h.patch b/pkg/openwsn/patches/board_info.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..83d73c202ac3507509a1ce8b900573c3aa0905e1
GIT binary patch
literal 3418
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/board_ow.c.patch b/pkg/openwsn/patches/board_ow.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..79e1f8d1159df5c86e7061299dc867c6f5be018f
GIT binary patch
literal 3509
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/board_ow.h.patch b/pkg/openwsn/patches/board_ow.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b86aff1d389402cbc2e6ed291948beb77d9096c0
GIT binary patch
literal 1965
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53X%1<mxiO(<B%is*jC{=JQC{i#o
zQ7|;LGBC6<Hdin*Ff`%P)zwuf0_lZn(k;&{AY_1<m8r3nu>r&YEmXh-a*?5qp^*Ye
zoJ&DLUrUQiK_MooC^I!p!MP~ExLCI!C$S_gzbIEBB{exGu_&=5Ge1v33G7-Wg{0yF
zh1~p<(wtO1E|A8=(vpn)B88BQ{M^K1h493ZlGMt)R0W%ID9a%=HMv+XDYYm&H7B)F
zFEypqPDjBlHL0jHv8WQ{L?b;e1qCgAE-qaK<;=9al+-kZ_;@FO#~_z@50F?&YFcJq
zDzX@tf`W2pUUE)pN-ES@@tJvP`Fa^jAQ$QD+u{ZaP}6X$K$ii>fT50|xq_~)t}d50
z7Ds9;C_{}!I9wYVwAu<Wi76>1`RPUZr3DI3!2w*_3Nh6n0!bJgv>>r+E|9*#5E*n0
zVo*{<!jLp-rekCYOQZ@43f`X1-tocC9<DB-KCVGJTnY-c3fY;-+40568L6P;SQKAk
zO*sBbDhpCUNen%jaq<ZpS(aFonV6K5TC9N65L5}mMivz1m*j(-O01b&T#5>1`I#vS
z;G`6vnU`6jp=pgOSe%oZT7V&1lv<n$Rtw5isd*`xY2XxZWT<0e2}$w_AV6gBgR=)T
zlci|H$GiK5I>*OrDyXR`z<IW|CYlP!BEFt}{z38aHnyf<g^;`i((M}@U}9_#AFs)!
z4RV9NzCvzsL3(nsf{lrusa^#*GeXM&o8rv$yu=*63_Fl0#0Uk?;2@1MO@++7lGLK2
z(t;8NjWPvgWrg@KSLYD_AWa1b53DLbGX-Rea%xU-D%`gGl8n?MB=h3q1A-jgeI4WD
zH7Ya};sc5j({mFwlq<kGQSC%hT9%qzl3!#CvJ7r>d_2NY;CKVeqPhee7ohS0e~AW4
sCL<$7$LE)8fC3A9!p0^8N!&0QE=6!{r>GE9%LOGs^^SsqG9=vt08FnSyZ`_I

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/cross-layers_Makefile.patch b/pkg/openwsn/patches/cross-layers_Makefile.patch
new file mode 100644
index 0000000000000000000000000000000000000000..84bb535263dead4aaaa3138c6d5f84c40dfb53cb
GIT binary patch
literal 1323
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XF3K-1*3C(*Of4$b_f5=BP0P$l
z<qXLvRd6gQQZO=6Ff_C>Ftjo@S1>X#G~v?K)m11083Wa?Tb@}!z%1YVJO$sxN(DnB
z1w&&i14}DoQ;1nwsDKOPP6GvyAlMp19b+Q}U0q#WE^US2P$yr17b{y8jpB^doE(Lu
z#NyPv#N1Q`6%FUmAQ#UdO-;Q-E^P&6Cr>{Y&maX`1r?1TPyY}n$6!}Y{iMu1eUKqR
z&R~i1%$$_u#G(`hExlw-E^P&WCoiygaFDZ=s$R0KiU!0KO;x>oki3g)0516yO)hON
zZ3Rz1XP;0P*I)&0TLoQDB&$(*`o)#S`k8sjIi)G7Xfnz9MX5NXQi?LmK#_x8BTP0q
z+0f9SB0eu2hbhSgrTU3Qx$(*Qxw-jyI23{0mzP=slLZADy4Rq=t#4qIsO#(KoReRU
z#s3IJNgzcTnduq$R2e7gdIoqn<5iNR>lsjHhEIu!Zb*=$A08FRNgW(*dI28(evwuR
z@CaAYfFv|XtYQj-l=?e)ff5C$iiV?$rizARkfuUWaxt<QzWy$uKCYSyDjE>ApmeEF
zP@0pYkeR2Dl3I|Omy(*7T&a+mmzJ-PmS3cxm0FQmT#}iWuBD)tuK>z`#a!A7y08cb
zn`5PyZ>tAQZpsSD`MCv|IjIVXc_|9%sd=eIi6yD%MssN+9Hpw4Z>6BBm&~QD0CTvr
zGsuO`Za$9g!5|haqBRv1bdwcSwDgh{bn_7=sA%cs6RF$R7oyz`MRy8Fw?jcuW?o5}
zf)YGzl@w|ek`qf5bWs&6*eU3j<QC|I%9{B6(h>zVHHF+VG%>g#Dq4Ce;22d_C`!%E
xFH406P-01Dex5=>QGQBka!D~*MRHDRVxASqEk(Hsx@pizQc%%waShPq0swJ|V*mgE

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/cross-layers_idmanager.c.patch b/pkg/openwsn/patches/cross-layers_idmanager.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ca7964bca37f0ddd25706274563735dd6680a0bf
GIT binary patch
literal 13766
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
CFNdlC

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/cross-layers_idmanager.h.patch b/pkg/openwsn/patches/cross-layers_idmanager.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..560bb46769c8f730902816c4ee4c76470d9d319b
GIT binary patch
literal 2237
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XF3K-1*3C(*Of4$b&rHcp%u7s9
zEz-;249O@}a4aZNFfvgvG_*1>v@$kVFfuSS;nLOBRVV_P1T{jpJhOl_<IJo~jjfCg
zAjWB-0xpni4UKdR%@sfrVA~9hbc_rYbai!gxwsS*^!06V1BH~-w9LFz1>7poWw^Ms
z6_la69Gycv{r%!2U4s?CKs{0&Q`XNPET^EL?uSJ-#NXZB$5lZ=K|MsBOPio`ODYRe
zQ&Q82cP}UeV48|cib|796skdC1_~?~2Jsb)jCD**AYll0FDSO+6H`)(;!6}16mlyA
zic-@uE3CN`6lxVxQj<#4Jzabuk?)#UQdAjVV$H>+NFcDw5{ohulX6mviFH57_4wnj
zpeVm2ALKz|%>=o!EI%^^>`4#-PsH(=d6^{|n$}#33Q76-IUqSOMkq*6E%7XNada=r
z&j%}1P{3hQF|tCiVR@<LLHRkU1Wk7;%1lX51-Syh;ZSvGW-BNlMVpoaipzZ~JzX?P
zGxJI;;!6}jAqI9!YEe->B#IRjkkl8amVnix7?+n??&+clN&;YO!GVLKE3??Q(lI5a
zD7Cm)14Sn&9f7UG5nd%lnd#}NMUF}Nr6oboz*WQ*xX6m3!Jr9Fd?>C0r_q3-%)FBL
z%oI>~g42?g7Py2kGS@LRhm;UtUm!V_YKc8JKczG$Re|_4&!xzv2#y#~28ZWWMUVqg
ze5Q~IOM{@Ks-S?HS`{*jA%OywME9DZS(2v<4mmRu+;RbqemM2P$_7P+TBI~omRM8_
zE*1!t!Bo$~pi~A<ZYbe~k{b~D7^)b5c7tVluz@7zWuh#A#F++~`K0IP{PIDXqoJWd
XO0I@#K`)O{b2dy7mx6-6mKGNPfz^it

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/cross-layers_openqueue.c.patch b/pkg/openwsn/patches/cross-layers_openqueue.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2c170ee734b1b21ca3a9d798004339dc5f1149d1
GIT binary patch
literal 3493
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XF3K-1*3C(*Of4z~3l^59mZs_@
zbB1J;DmWGtDHxe37#dm`7+M*dD;OCVnsDjr>M9h0OoAGrTb@|})=9K+W>%)AR;DHp
z<Frr#7s$0{I)<hSAaO1(1qFS5TiigQEU_pvF)1gtSOK>p6d5iqU4@d$g4C4MG=<`l
zqSE9Ng=#Kc1qB5K|AN%KK#=cU^Gb>;<4Y94K@lAo>Kf|m<Lc)g;t^}jrK?b@0P;9k
zF1{?Ws5rjFnoE~U0Yel`z?!gM3X1Ye@<DDR)-&L^Fw-$KRM6Gc)dd9|D9~US#8)sf
z)-ke#gr$OlzLpl3f<jDEQD$nIf@fZ4NoHbBW>u;}Nk(R|LT-LaX-=vhmx6+pK9{0G
zS$<{;k{2@bGD|cx6{@*FA*E27nO9;FU!ss{4dJKd7b$3D+8S7A+8_m&b*8qqCRB$4
zasU;j7N?fPr-Fi6LrnuUIQ76G8=V=esc8-NpP{9WktxK3l=}eWE4upv79mg?952Qe
zIwmHNcmYL8QEEwPQC_h^NKmM&LS`ByM$$_2l1no4^Ark-GV@AOQxuBxb5lz)GV{`P
z6x<wrf?XBzOEOZ6$}@`*(Uz2-pQDhHnpBz|0MZl>4oyVFfn_ifdVXn1L1_tEN+&g<
zLD@)GSHajs$HV{<U3BmmN_^7RbI{m>QQ%m#w9qj$fJUQ&LJTYxUE_m8ot<5SgB8j%
zQu7o_GEx=Nic(WE^U@W{6N?p!OOumR(@Jwdc@0UAo1>=>LIWf_DkSHZ=A<a(<(DX=
zW#*-TjVdlkP0mcqOifWJNKDR7Em24+O-oBH0+|NRxv51(`9<+1NSPO8c>q|g6IiJR
zdJ51|D9A3snJ+y3LR^D_LIXnLU0j`g9D^J~JpKJNG@*Il#WUE^$;UMwt|}NL1*#=1
zO>_(mplM;ygie0>pa>sWGJ?|J)MRL6rekPq1Su8J$~w2A)KrDUoE&fpK#BKah2)~t
zL{RaNRH=}t08Jgq@ba8XQ6Z)vu_!TDA-_B?wMZc(BUK?YB{i=El!l5F@<D}7szP#p
zZb5!tYF>$sLP=tFYMw%7o`SQ#Z-Bp_t6xaG7Bq1wpjQh;sk!-Osg5~0&JZ^^RcgTM
z2C%F0i?F3CP~tE&GSV?LvVfEnH1I6c`oZ8`XdJ^RNL-s*>KK|~Y2_#+C+6g&rYIy;
zDg?O(b8#tRv`e&*a&}Q_v3qJsaB5x&B!44HdRR2Ts%UujBry{knwshunn7C_$jvbd
z9g0$NQ^T>a;DyqVP&PNwF|;s%<tPOO1xOLC;1}xS11i62i3{MM)a2C6veXos1+uw;
zj-k03EHhBcopcFfBO_BCBV$7f!Z<fE**&$yF{O-F!E0n>sAFVgPC@XZJCW)k3jjeK
B0(JlZ

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/cross-layers_openqueue.h.patch b/pkg/openwsn/patches/cross-layers_openqueue.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..8a9ae20bc379f454b56a74c22bd7a1fad6638c05
GIT binary patch
literal 2098
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XF3K-1*3C(*Of4z~3l^59mZs`u
zaE4@*DmWGtDHxe37#dm`7+M*dD;OCVnsDjr>M9h0OoAGrTb@|})=9K+W>%)gR>lSp
z<Frr#7s$0nMmi>@3LptC1rR9B%qy{oFHum)FV9OYvgT4ys8vWwO)5?IFG$S`1Uc9>
zucW9lzQme~OHn~z-xfDeC`&BLOiap2Empv-2t|gAOM!rq1x5KK`6ZPFM4JgQQXw%V
zH#3h*QK2k9GX>;LBn%2$a7@H!=4F;>Xj*eADkSCS=O8HoF~NZlP?VWh5)W1lQV4Rb
zLULkGPHKumQl&y-UZp~Eer`d2UTR(mmx2O%kZCC>AS_EyEpaPKO$|s)&Q2|HDosmE
zEz*DmesWQ2Vo81x*eR(+MfpXb2mv_)f)R$Kp__ndWkGg{CMX*5`n)JLH@_^^F(=0v
zWOHhYQzaI+DBur0xEcQCc_=1;Qxez>`ua$rRg_xHrHDU_ic*W+Q%izV^GYDW1PXJa
zv;?Ilr)HL=rXaMTMU|(ktE+{9k)f$8p?JzoOm<H#aY-ymgc=44{rJR`l%n_&ErpVN
zztqh1j3j7eVFo`^j6+OvOeupJq-hOKoLX933JNi`;LHxnjg|_!y1Kg5&yBhHDWy57
zBxFi1MJ`1JP+m((O;ac?DJo4aQK;rp1f@ZAe=2~pM08-NYpAP_tDk#_M=U5C)gt-6
zEU~B<Txx(~0wvd@aujHv#X(sCoVSR{=1|2TS0g1}nq>9-a`em&N^9VtjUQ<_9UAQ9
V<aVf5v=|!<IUedVP%Q_`^#CczjqCsb

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/cross-layers_openrandom.c.patch b/pkg/openwsn/patches/cross-layers_openrandom.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..0e04c3aa242c8e3f6af19508393ee39446097d6d
GIT binary patch
literal 1693
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XF3K-1*3C(*Of4z~3l=5jrR3-8
zC3A*klqxtD6e$>)C>R=A85mj_n=2R@7@BbD>gp;KfsBHhp<A9=0M<&pd1h9ordFmV
z5c9N90T;-<COSsu3LtSVE(HaBeOuf>p)9c|GchSAwO9eSA`}@eE?tF^%7WCC)HH?S
zlA_Y&5`}6mT?GXNh0@Ht5<|225{2T7%(RmDqSSP2knIZYi8=Y1#Sl@2qSW-v;*!)N
zh0@~G6ory}h5V$F#LPT}M1_Ll)Y6oET}TKj<dx<or517ND%2`KMB>X5i;Ck*thsc#
z6i|hbdDet|Tu_u>k`M9$v0f&^$kL>o%w%Fi(AL(Li%U_VEI%_v0h9=!{>#kEEYZ+Z
zsOAENrGmb`LUAf6gfdd0{(}aILV9XmYEfcIevv|XW=V!ZNk*zdPGWJ1f{{W}Wl3tW
zLVg-p%-7LbAu%PTD7Cm4Vj|QUP%!GjV@N^4R>8m;p8{=Lh0K)P#Jt4x)S~$G)DquH
zPZteG7nh)TLo+8$T|1B+@rGte(FU<vMy6)eG0QL(WKJz8nBb`jDX7v@OAO7D5P=0!
zV-a7XppXgDhMW}Pp3W&vg~}ldL3|I&k|sJv#tOQ+y1Im8n~W?oj8iNq8IPt~a1J0Y
L)uIF#g((*R{W$e-

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/cross-layers_openrandom.h.patch b/pkg/openwsn/patches/cross-layers_openrandom.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..303b08863cd33b594e857d4ee194e1d5368cdab9
GIT binary patch
literal 1226
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XF3K-1*3C(*Of4z~3l=5jrR3-8
zWpIXMlqxtD6e$>)C>R=A85mj_n=2R@7@BbD>gp;KfsBHhp<A9=0M<&pd1h9ordFmV
z5c9N90T;-<MmmND3LtSV1qJ1l)U?dJRE79>{{UCNAV)tJf8TfyE-nQHeJw36MTMBe
zl$4VE^rHOI0)>p!oPyM%VlD-Rm})esAh5?EG71V>`dna-fGyJ1)zu}@BIIy`n2G8T
z|AN#!OdCNyLc(CL8k*=BnL_*u@{+zSZlF+7S&*8Nnx=qT37QNSm!g6`UL(sAi!u|F
za#D+lH5451c#SM5$}h<WIh9y5L9Q&z&rDGO0Z^)fB*OU2yvz~}O=~Vih0@Ht5<|22
z5(OmL^wbhVvm}r_DBQHPK+#YOj#N;PS}K5J6(oh%u^@L+IY@K!Q%ZAE6^IX6E=4Xy
zc-$736qP2ID1ef$f&#+h#Tl7tCGkb6>DCGg`uYm)i8=Y1#R_0ig`(8-%;J*NB8Af8
z)D(r1e1-g^lElnBg+zsd;?&ZVd|gO*D&&>sCZ!f}DJs+|Kt$rp5{ruCORVV~r=Z9t
N6t7S<pa_J;EdZ{tQGfsd

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/cross-layers_packetfunctions.c.patch b/pkg/openwsn/patches/cross-layers_packetfunctions.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..718e0f79b9e2c364254a219dc3f713ffb8f81f80
GIT binary patch
literal 4864
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XF3K-1*3C(*Of4$bFGx(zPAy3*
z%}XxH%+D*<OXdv8C{=JQC{i#oQ7|;LGBC6<Hdin*Ff`%P)zwuf0+|OjNVhz*fE+{3
ztV~U<Oidt$YM}xykjo9tEp!YmOcg*<U|S&q<_fyHy1HBn2#}bPQj}U;9G{b#mtK;g
zV5?wZjVzs1l$w~05J^rfPE~MpaS4hyG_r8A;?jm1gb;W1i*$Aj4zWTu1j7zPGlY=}
z3JOq5wBdSEQqvMkb4pMQ0fks`YEfolPJBU8W?qSNQD#YIa$=5#v%hbEzn`mLNPK{!
zv$t!ATd1FNh^N0_u#Rg`P<(ihzn^<N*vTQ00j@f5JD@Jdq%=~Cit>vJ5{nXZQ%h2d
z;!8AP?l;u6E2%6<)d7VtC}3e2#8)sfGuJUPH->~b*wljT5?#B3#LArf#1sWxTZN3&
z#FW$`Xh=f?0IUWY_6pkA)nukAXeeluX6BVx#FuDkYJl}X&DB(}!6F4pkD3aa3e{YS
zV3#N;pog9-$d3eq&coHw#Wg5C#NR*O$KTJLP|#t9n*r%sz<z^-hbA<LYQgE($jnm5
z$lMeu{eqQ3gJG}*FOi9J(1b87B|~X&f;Kia(lNHQge7Qw{o>SAg^ZGt0xNy}^73-s
zywnoC<YK+j+{EHyz0{Oa{p`}B{NhyolA^@C;)49568%t@0KJTo+#DT+{34jnlKlLf
zV!h1Nk~F>iqI7+bw0==qvY~;wA(w&ziY2LedgYnfnFXmSnTcS<AfA3`acWV#OJYf4
zdQoC-d_YltNq%yEj<RP!nOS^5uxqG`zb+(LxfB%2@-tHu(2D2y<iwoh(wxMSROgJ;
z<m}?oTn+z%)V#pb)Y4Sfypp2I_!2FJ+~RZ{1z3(#NQNqmFDNMjWhz}zrUK=tcu>g@
zU!tH;lA2o(pORW!5?@f1nwD8%&4o`*Zep^TNfI=9Lv4W=0kbLEC>BjRC$pp^CpA7J
zHK!o82rLcG+WPvLd6^}di8+~7iJ;mCQoMnk12@YcRzbm5!2oI?s+=KA4s4nhOb^JX
zAWuT{LF6=$CAAGTk>vFCi}Op1l2i3TL6DgTc8LNgY*LGhAw>{+BxDvC8d)TT<okky
zLPJd>w>VwbF2@)gh)@$8Q&Kc_)WGfqnF|eCWD!U}YFb0=0F{&I_7o@PraD5ZI1Nmr
zGE;IB^Agiji{jH$OMELmT{OTIML>|Nn`eZkCMd4KepgUXKn;I`Sdi~4(o&&TV<<3$
zD6lX<D1ZeLEMOEMNd@9|1qFrtywqan{M>?^)ZEm(lHk%@4Y1c?p{|4C0v#imuNA<#
z1|0lwlU+kSi8fXPM<AG)IB9C?+JRy*-pnLP#{$JdP=r9E32rOIKMERYsa6&SnnXJQ
zpTDqKLyG6XAqX-g9+Fh_FuhZ&keXARid0on8c(<a6qc%V?H~b#7NU?G1P@G7e2L3O
zlB1C5IK!S>A)yP(*gA%0u;fw;F;rh4QmaD>D3mylhU6w_`GhJ3&PNd2zztNWA~N%e
zzJ6Y6MG3SaM!ri-;tQbF4yDfVboLD>GlN!95C;+R8aObZ%^n>v2NJNb<`Ou`!wL;h
z(8k#+7*x2qL7j>!Z5XS7Dy^?yUX)pqs*st7;wWqt1FA^|unJ2HOFe<A)G*c>+@v!$
zHPJD)gg5C>>i&`4zyMdh<TngpIZgrIHb_+{D$UEw%u9#2Wgv+SHDZWsD8Nj&1px(6
zyGx;<IJGn-AC|8aVJZ~R$}|l~!KaXzm!jYr>S<;Itt1E~c?}#@6z&q0TobXDm~iia
zDiX9x4<bj%I!HD}Z`@!Mmk`7B^%WpF8WKgQ<sn^)O1L`)O=$^p5h%&oDnLs=E=8EI
zLQ!gQYKcNgMk+jgD<qc|6{Y5t<Wz#nGLQ^h7btgOE6`wVHEbmqNDdMoM8!4KE~=K#
K(BTn!mCyii7};C^

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/cross-layers_packetfunctions.h.patch b/pkg/openwsn/patches/cross-layers_packetfunctions.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..733d43ec606612bf52499c30d9a8943829d71e1c
GIT binary patch
literal 415
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XF3K-1*3C(*Of4$bFGx(zPAy3*
z%}XxH%+D*<%is*jC{=JQC{i#oQ7|;LGBC6<Hdin*Ff`%P)zwuf0+|OjNVhz*fE+{3
ztV~U<Oidt$YM}xykjss9EEGV(TnY-xDXD3hd8rEV@d1v`-mW2Tp?=OGp8kHp@g7`U
z3JUsKT3m_>F^MTDCHd(^`K1L48L2r1sYS(H3JNjRAOcA$0PIyam{&ov)nHG7?9<iN
T)g{M1<iLcOsDR=gtd;@*VqAV~

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/debugpins.c.patch b/pkg/openwsn/patches/debugpins.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..baa264464011588f2abeed0e518fbf77610b6df6
GIT binary patch
literal 1330
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XNlhwEFUZU*)=TCL$tYEDEGSYi
zGEp!zv@*1`GPYDOGB7mZ($&>fC<1AQ>e4OGEFfrtnU$%rm9YWD1T9p+1#**t0!R>S
zxS@`Tk%F$St}d6hg1(j(m$pJoQc-4VngYmDh>I0cQqwZ?GD|Y^^Az&a6iPBu6_ntP
zS5inSE>OtLPbtkw)#K6z=}#;z$;dBKaLh?eO-aejOH~L@EzU_S$yBgOgbC@DLxdbM
z^NKPP_0o#$bQBc467xzEiz>m+*5lGv(9-A9R#48&OU@}xNmWoPF3B}EN;5R5h|kGP
z(#udnk%YSkECKS1zAbJ5@lk5A0&XQ}GGL$S<2AD^u_!Y!DTjDdi7>OED8D4Xq_Ti$
zLy0l7G$|)DnRu_;g3T<;&rDH(hjKh9J!ohuRM%pYOe;#vO^q+fPfyQDg(^}&(+^RS
zoKu8XzBsi6D$k{jZbETRehGd%z$$QC0hY#RLt1ezehWYfaGMX3#b<m;VsSQp^T8@`
oTL6~EXG3Oj5q=9m3UHeblEr6yQDRDFK7I=zN^n~Nkw>xw0MZef@&Et;

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/debugpins.h.patch b/pkg/openwsn/patches/debugpins.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f0e9b0f37af6562caecdcc14ebfb73ba057a3216
GIT binary patch
literal 2423
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XNlhwEFUZU**2~}w$tYEDEGSYi
zGEp!zv@$TXGB#H*GB7mZ($&>fC<1AQ>e4OGEFfrtnU$%rm9YWD1T9p+1#*+2j-inP
zNSsSSL0?OYOF<zfsVFlwO~JV+zqnYpASbaTEx#yNAtg0AC$T88Br`uxK`AFSrC3QJ
zsklHPH$SB`CsmINq%X0wBqP5_AtWO|H?deDJh7xCwK6YN!KNI_a!5^0F4jv*Ey_;K
zNv+gNO)0h0QE*F5Dk@DZssy>vNRLZFK}(;DOIJZTGc7MAHBBKt-o@1^)IGq{FF4)<
zB%YF*mYJ7|E)H_MzAbK`0M&+D1-cB#NBVe;EU7F=1vwF2Cr&;%1`Tx#%@uTYb#=M4
zad=W&K^f{=RL^UJJgKF{rL7Q?n37VGpI($-TA<(*8~_rj1`$ZY@Dv3SujT^j9R%^J
zpnyL}q5j4hf*2CCh$T>FK*Eq*Vya_e0?8(zSiqYu3X1Ye@<EBCSOLSmSOvJa6cx(y
zGgB1ckrtnsmsz5rX^llDttc@!HNGT2Jv}ECqyj@LL_u;+5gys%RIuram=+i3<d@(x
z9W0N_aIhq9v(t)m@fi)0#$_@{4!6N2iN)FYOa{y2G8!z2+w9EZB78=Jq;Z)HlEZCq
zQDRDFK0c!%3UC<?k%b!1rJ$gknwOH91}<WZ40KFQAY}~w5-TVHYg%(*Nm7sm2~Dvu
zW#|bWq6p+!{3<{mhN-}xdSR;2Z2~7!d=`Nf;I{{q90_@-I5!@jEg&QCTLMm)1Z)AT
z!DkIv0e*Wx$&`RKASL*00m<XH1d?0{SOZan&mxElB&)a-!L1fWg_v3{C;@6f!1DtD
D3PA9O

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/eui64.c.patch b/pkg/openwsn/patches/eui64.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..31ab7cebcd9ae54a208b37fa486edf1ea7bcdb72
GIT binary patch
literal 1256
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XEzLAD(M#qG$tYEDEGSYiGEp!z
zv@*1`GPYDOGB7mZ($&>fC<1AO>d-CEEWoSV%*xc*%Gdy+TMHF%f!t!C01^ZnY^Y;w
zqM)m*tIMUWps%IHrL7Q?RFs*TrU0@K;!=f_)U?dJ%#zIfJcax;g_4X^1tqYfl@yYS
z3lwtmQ%ZAE^|-V_dJ{`aGV+TQ9CH#=Q&KYXQWe5ei*pi7G8JqRVM2Q45Fv-myrRrR
zy|f}b9R;t%ywb#?O0bLdxU?0t^ufj{XXYj6l%}LAC>56!W#*;pWhilJD<DL{t^f;y
zT(5778$kS!TC9Lu37QPpM1|s#Tw|j&Lj&WY)Jh!%OEcZ1%o2styv)MVR0U5Lg~XJU
zqSWGIkfXqXl&TQw=NTC48t>^6@8lTl8t>@h666{jtN;fF6^3qZZf@qT7GNLh<8^dd
zVo_#dQV#LX2Ai3jpI2O>P@0)nVi8}W0O4tsW~M0EDri7>FgYzSR}+V$t-+?@cVR(M
zeo1~wWdYGnB*x6rq@2uT;$zAdY-U-0W{LthLByx0mS{k|s0E9nko@qX%#u`1E^UQs
zE^P$`H1TMISOr^!(#(`-gIH^9@`f;ZL+tWKFnJ^F^2RWEW9;%KFnJT~@}@9(Q|$6)
eFnKfV^5!skbFh3ZILrveZDv_wNh<LX!36*()?pn0

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/eui64.h.patch b/pkg/openwsn/patches/eui64.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..745506fde9c4b745036eff8b6def3f44f3189954
GIT binary patch
literal 937
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XEzLAD(aYcr$tYEDEGSYiGEp!z
zv@$TXGB#H*GB7mZ($&>fC<1AO>d-CEEWoSV%*xc%%G3m+TMHF%f!t!KV`!uR66aD-
z(AU!9Qc#FVD#}bvQ*bWIFD}+C$Vn_o%P-1RNJ&l3Ni0e%$;{7FPy)MCNg=7YKp{6j
zr8Fm1j|-$Rv9u&3zeph@BR@B>SRp*Iq$IU6FIB;&9LjP?O-(M=OG+)uPR&WJ)Jsh%
zwbN1XO)N^z0J+adk4r&8OP`BNS3x;5EiWZCO(8zsHPqA0B;ErgmXey5nU{(z#-*U3
zoSB!LQ<{>hU{hR@l9^YcmthBTioU)rZlC})3AYM#8F088>KK|U=<4d~a%p36ptgcC
z)L4Y0wV`3Etq_x#l2VeNUX)*2px_i7z@@DaQw<`Jgu!77607C{=^OA^pj+625+4$V
zq)JO2BWSV&C3zzg9b+R%*mEf;l;vlpD1d`2K0UQWqck(G#3H^#OCd2Or6{$yI3z#3
zD6=G0)0&G*8=R!I6=G^Z0Sh9u^ueL4oSK)CnZ^~P;FqtEms*|!N?3^{3aNQ13i)XY
JX_+~xTmUTa23`OF

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/exti.c.patch b/pkg/openwsn/patches/exti.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e96f8fc4b4b21ca0d3da91410605e8bf9f1f631f
GIT binary patch
literal 484
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XttiRVOXdv8C{=JQC{i#oQ7|;L
zGPJZZwp1`OFf`%P)zwuf0_lTl&@Im_z^B>F%GB7(*Z`tg3l(sITw<UA5(JxTsAFiN
zpsTB^%cZTLucgJMtq_w`l$n~Q0J0C_PKA`zw9LHBlFa-(h5R&yl8jUZC6JSq6q1Sy
z6ms)ZN^?^6xU@l96H7}n@{1H4a}rZiQZn;W6~a@Ca}rB36>Jh=LVD#8A&1PoqRd3S
zv?4nl1+T=s(!`=lu!Hruv=y}U!N%$9D|qH5=ai<T7K5D#awhp0WT=92Cd5DmrQ(uY
zW1}=fgNpc^%p|=GB`$5OlIaDR`CwTtZH2P@%oGLJijvHD&%DeM4G>q8OIx9uOIx9q
HOPdP-(ujpG

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/gpio.c.patch b/pkg/openwsn/patches/gpio.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..1da8fa3e9893245feabbda9473950d278c985b49
GIT binary patch
literal 1504
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XFUZW-OXdv8C{=JQC{i#oQ7|;L
zGPJZZwp1`OFf`%P)zwuf0_lTl&@Im_z^B>F%GA`#)C8hg3l(sITw<UA5(JxTsAFQH
zpsTB^%cZTLoSB!LQ<{>hpj2FvYiyKeXiyPfl$@-Wp@c&+wW1^ww=CFOXnNsdT-ply
z`nI@%LP}~{W?pKs0&XQ}GF;jO%`8hS%1lhkA>LFX%q%EP%E?S7-kG+xAVayd70U86
zQxx0-JpJRH^YhX&)8id|eBvEF{WL%lnq1ln)m+*N3J?{Zd6^|4l?ACTsc8s-;F6-!
z<dV{&RBMol3JMDP`U<XjApe2YxF{s%K`d}pNY2Sm&ITJ7<m?>p7~o_SkXn>kkl_px
zcg{`GKoyP$Im=O@Mgfbk6WAC9>;S6{XY2;KkYtdfo2S2yf~%jSlaH$=l7|Bv!N!0b
z91jX5c%bNkg#t436l}r45g(A57w?#pV~tn6Z+=QDOaq7wiV!p%8X$umbrjS<G^(8-
zhe6^Y01`}?N@(jWCqmA0#_M}pg_biRXF<{ey+g|dx3g+NSqe)gEiFnc$;{6~$)g~(
E07X2fi~s-t

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/gpio.h.patch b/pkg/openwsn/patches/gpio.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..db81487909c5df33423afeaa10eb86d3685cb83d
GIT binary patch
literal 533
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV53XFUZW-%is*jC{=JQC{i#oQ7|;L
zGPJZZwp1`OFf`%P)zwuf0_lTl&@Im_z^B>F%GB7(*Z`tg3l(sITw<UA5(JxTsAFiX
zpsTB^%cZTLoSBxFlA5LvAMYOE=^yU_5=u!;%gjqf65`TU(AT%c4HO_ciWP7xL6hOq
zCTM0^Vo_#dQcfz-rV?RhK~a85eo18k(T0M}EX&VKQ2+;zbADc0W_rA%k59a#r=JE$
fLerW{TLHvCR#94%Sdy8a2Uh?J)zrL{%rq_ln=*{~

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/isr.c.patch b/pkg/openwsn/patches/isr.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..dc9562cd11925d182b939ec914e4ede6b0b63391
GIT binary patch
literal 1693
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV54?EH2VZ<_yUwRd6gQQZO=6Ff_C>
zw6roYR4_6yG~v?K)m110X@jcQEzc~#qu0#J)Y!_{0HRk56>x#vVW0pK1RHCpV`ieD
ztE;QarLCZ^rQn&DoKu>TS_~Ef36qbt^g%}ID`!HCR8T4|$u%}gGc>4(&n(f)P~y^7
zK*;5!rW8ZO^pSKV6&J*pWag$8L8K7MixN{Z^Rdbl7i3~p3=!1VN3yf1BpKOs6uHvG
zBB&ctgi}(JO4AE6^Pp};a!_(I#0I#KO>s#|X1-pA9hWx9rzxpvnR%%Su6~YAKCbaD
zu1=xu3K|BQASrkNflUV+!=<fImY<oT0CHkRVqQv4YLNy=0HnT}OIra1z-DMDsTRlN
zDe1(=2L!o>gha->h59*%c>4Rr$7@<c6=tSs1cf-qyQh}8<s_yDmn4>y7K24RL*gBM
zf;1HrZ54uCgIz;Frh`m|*`S~R(&wC$npor+5|Emgl9`w8lv#qT*BYc=K|x<1tO}%F
z!7(SXC|4mfuOzjosI;I&p#Y*$At|#2>L7@@;fa|gZuvz%iNz%$iN)C(nozSKCPGMk
zeUK`J(!7$)9EF_3;u3}OqRf(1h5UllqQsKS{5*yHJg}ujsp*-;C8<Tl3K@yT3Tc^n
znZ+5YDNy@rxwI8(!O;K;Lr|b5g4`HSFk}@B@rSLxz5+PTKq(?Vv$!a}IJHCr8t$2C
z8m<u`o}gg&41oqZSimPUFV)Z-J=8&A&Iy(Wha^gPgN32mV3CT*0U(QEmV$f=iVZYp
zCFc}DR3L>yaY3db;Siw6|G@#C@t#J(pddg>dBFjmhB`1QHy=m$_@D?sS8U+{N(03O
znPhq}wW1``gi;^kjYShAM}y)I<X)Uf0-6@}^+82ld}>iqeo=f$etLRNDkN$^n!yo`
oC;m-9X$x*pkh61qcw%;HX#v6naI%007+fi?^q>IB7Yemp0OOS2I{*Lx

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/leds_ow.c.patch b/pkg/openwsn/patches/leds_ow.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..27b06b821b9356f3aa3944881a7da981b358744d
GIT binary patch
literal 3946
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV54?Nlht^&o9?Y<_yUwRd6gQQZO=6
zFf_C>w6roYP%ttuG~v?K)m110X@%<1Ezc|<px?~O)YQt<1fpLH6>x#vW1s*M1RHIr
zV`y%opsTB^%cZTLucgJMtq_w`l$n~Q0J0O}T!oa>w9LHBlFa-(h5R&yl8jUZC6LRN
z6q1Sy6ms)ZN^?^6xU@l96H7}n@{1H4a}rZiQZn;W6~a@Ca}rB36>Jh=LVD#8A&1Po
zqRd3Sv?4nl1+T=s(!`=lu#5G$v=y}U!Nw_P<|XHprlcw;6_?~18>JZ<RK(|GCh27;
zacL_cBtdQgg(658<O_XU+yLU2)M5qPO3-9LR)GT`Rl&#AB|ga2B|gB@PXQTd7~0qv
zX`(4~4{~+&LsJS;Xo{}TKgiL~-4#_ONTH#DCO8!I@%pDMu_!Y!DTjC;5n*OQQGQ8&
zNo4`ihJwv3%g;<va7oQctkeK8HLby-_+4L6nv|27OnhY6g3SaOuK<p9P_m5AFNavj
zrL9oSrLCZ#ps%ms9^mO8@0pib5>i=^>XMp<5C|?QDorjaElRZprxh@vpr8=s>>TeH
z;A9k#T9jFk;hdA7ob8;OqJb(L4>HzCK}W&W&(X=p734()eSMe_AW5*Da4Yn{LIIh1
z3bqgj1Z3vLn<~^GIEDtuJR^vk6ciu|K<-B~%QrtI6=oQS9q(US5+4viP+xFCYHA8h
zBbXC!YT)Zpg{e^k<Yp%w1vL<j>K!!yqJ|B=AakZL$P5iI-8nD;<4oOvaiK6^22Fx-
z!5uEO;5@6ZuTYel!lkW%$h@gVMfpYX`FUu$7nJT?bnX0If)vzj73z=*T~H#Z#b!iW
z8g4UcY>~@tTt<}Sr>Ezn;x;7?t0|?Kc_kL{C6KZR;+@Q5e{>I(S|}uCmK2vHmXsDN
z*eV!Q7=V+rf<k7Rf(AId!Muy?QcVR#TLq0$V<SyaJ)ocfE!z}um<0+K1%=d{;#6=E
z2q_3L6dQv4ub==?T$EZ;T9k({4<rYYL64!NoXoszNYE%$!(%hOC^a<?B{GUD^OCVg
zrxR*)!mCD18zE+3jZdf{(D)=|2F?hD8Uu|`3}aBD6zm$ZVianN8aPJbmJC>&LaM0z
zqQty(Q2Ic`a8Y7PW<K^vb4HCce|R$mGuEJ{V2w7YG0<ouYzoeZgBk>lI81|3Vh-Y>
zOmZ?K)E-FG`NMrZU~va(&Qzx6<m8v5<hGR5q|$VF%z-l|QrQZXg~bSVY2=`Ws6Yur
zh#8siFjS~kfEF1B){tTVk&Y5`a^P-(x5L0qG)S?SpQizCJt#oRN^r(P6N5w<Oc1po
z0viwW3|8~g(y&;7CJ40wCW>hVa)4m71uBo>6D;BoyO1T&gDg3-D7iEzu_(ScBQvc8
zQoa(l6w<&Z-~voVn9fmvw$;H#p}Q?JFS#f+H#HCHEO6ogmmz4KBV?{ZK~ZK|Vo56T
zt$A?60Gx&(4hAtny(38F1xky?M)4&InV<qkK_M-_NF&qMz*-^G#-Jh%1gsS@wYA~y
F2LS1lYkmL#

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/leds_ow.h.patch b/pkg/openwsn/patches/leds_ow.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2bd0c03c21b4bc8e5b844ef1fe791200d9a91347
GIT binary patch
literal 2461
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV54?Nlht^&o9@@;0(zqRd6gQQZO=6
zFf_C>Ftjo@S1>X#G~v?K)m110X@%<1Ezc|<px?~O)YQt<1fpLH6>x#vW2j?jqyQ4<
zQc%#>(&AE3h)F8SOifd8F3K-1)-A|MEJ@2R%2h~7P0mRyN-W9D&r?tWxm8IasklHP
zH$SB`CsmINq%X0wBqP5_AtWO|H?deDJh7xCwK6YN!KNI_a!5^0F4jv*Ey_;KNv+gN
zO)0h0QE*F5Dk@DZssy>vNRLZFK}(;DOIJZTGc7MAHBBKt-pAD?INk#!l#-g3nU{(r
z#HFC1oSB!LQ<{>hpj2Fvl9^Ycm!Sl5i@v@sZlC})2)7D!8F0uO>KK|U=<4d~a%p2a
zPg_A5YAW2t+RzZyR)|SVNh!%sFUl`1P;d$k;L=uzsRj{9!k`cZ2~~4}v<-qNpj*&_
z(jF3qBuaA~Qv*n<1O+1A$Sf$zFUc>dEJ!U@K#w-;d@e3Ug|ht26a@tZ1yHcZXXa&=
zXlPnvh^H16<rl^0=YizVv_PfO(s0U^<fo_Sq(Y=iGxJI;;!7a5L9}KT`{On@DJL^8
z8>|)GsYQt?nfchA1eL<-B#0bNCqbm)PC~b|xH2ypyPXgjtX6`haM}o##c5$mYEo%B
zb{nBmSgnM};j|MXjnmS^oE+>{f+et82$DfqhaPOnnMKK^If+H_#Tl7t-~@)2h%)n%
zi&Aq_^T2YTvMe<(B{L0N))*P-m>EC{8#-lx`22DWP_EFl=2ArW2_(tp=fM@A<{zkZ
zS{hz?Xh6a2P{5Tb;0iztcpin=0m&F332e@UBx9V;gi7OdCPW^uGa*XANeGuCz$qK2
z8z8bcodA}`>jJO}ybgdQbDS=KO5=0_L>{jjAWHB$0+cgwIsq(+(*Yn^RO```BU;9S
h#RO`iL}V_gJeMN4eWR!lQ_BS<Kurw=1!YLK0{~lx=Fb2C

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/nvic.c.patch b/pkg/openwsn/patches/nvic.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ec6bf463568d6e66d7e29e1829324c008265830a
GIT binary patch
literal 5022
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV54?E6YsQOXdv8C{=JQC{i#oQ7|;L
zGPJZZwp1`OFf`%P)zwuf0_lTl&@Im_z^B>F%GA`#)C8hg3l(sITw<UA5(JxTsAFhk
zuAr-{tIMUWps%IHrL7Q?RFs*TrU0@K;!uT@)U?dJ%#zIfJcax;g_4X^1tpN1l@yYS
z3lwtmQ%ZAE^|-V_S`$l4GV+TQ9CH#=Q&KYXQWe5ei*pi7G8JqRVM2Q45Fv-myrRrR
zy|f}b9R;t%ywb#?O0bLdxU?0t^trSZlr!^^b4pWE6_koga*d7B3=Jycb25|kGL%40
z)wjhBAP!C~R=}+UO$O|GeY|FtB^G5SCgl)sDiLND6y=xXmsA!IZ74BjmL}z7CKK;<
zTd<jB`I#vSeqo-@@t~O20C6?Bv=yqkv=tN-lrz&(QqvR^!d#t0;zJyr;)5K0!4mpf
z3c;x*;1m&-np~1!q!0oMB88;H;#7s4{NzM%nn^5CFsLvxfB;C`DnRTCPA!4x18dU&
z+Yb^5NlXISp`&0>VW4RZwn{lQr#MwXL0=2u3O66eU=IbDfh4%az=A}#fNer`O<qc7
z8ke?0EjaY_^^^1S(lXOaiy%HOO)M%=$jmEAEh;J~E#cBu0EH*S%OEMV;MLc6hU!iQ
ztFclDC`wJuEdU2zKv8CXQD#Y{f~|tFLSkNuLU3u40<s`Dbig6!nU`4-QdyAdlA5N#
z2^R@2DJo4aDJ@Ecgd?W79z-Z8&^aS9FE2Gm0SmBI2n}`&3NeiL3<}I6)*ys0;O+(a
zf>`arrAY{VP&e5s7!#}AIX4BW2|?K^xcWId`M9E)p`iu|g1pQUcxZu>9roBQF37|Y
zxy1#UC~*tTIKcs)@t%J1o_-;&K|!GbA@RQcF0SBsBR1*{u|>Th*a*1OVNnkkfcpi_
zyKr&znCC=<6r5$N5FFr1dAuvwDi{*$45WxhxQGP(&bcWFeK3!Z8uiMlcyoACaY0FD
zZfX&ZgaDI9Nev1L#74IfU7}mTRw2aG*ND<QZL45JM$D3uAV67})cC`mb&E=p@kJX<
z8c(zZg*Ypu=j10P=0Kyqw4lTaoDqqQT>9i?Sh`21Z54t-oGFcN1zQCJa^f525YjR-
zOc$IcF&$vU3@H8_a}tYk$&Ee(BJw8A5*F?aBnCKEz)qq<)R0ri!rekb%!0BcTpyG{
zV$|ShI~66SWai_|q;LhJ*%aDj!`{*w&8Fy$WwaL4Xf}oR!$3U;5*xwbYzi$y3()#F
zU^%qRNm<*+09=m4Teh&KF1WiC4{|*`Dv7O{pk)>+Wvk#C5#nh=aXG9&W}67^8VXBd
z1?m*V`DxGyE-gUq#KQWk;NC7;MC<Dl9uh#rCU~>~)Yk$F>FXOQBxRNqE2QNYVeJHi
mI>1Ouko&@51HdT+)@yVx$}cT|I2AIqfFcoZ1hN)f2>}4`v+<7r

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/nvic.h.patch b/pkg/openwsn/patches/nvic.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ff145d0dd90c0f97e58a13878a56f3b4df157453
GIT binary patch
literal 972
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV54?E6YsQ%is*jC{=JQC{i#oQ7|;L
zGPJZZwp1`OFf`%P)zwuf0_lTl&@Im_z^B>F%GA`#)C8hg3l(sITw<UA5(JxTsAFuP
zpsTB^%cZTLucgJMtq_w`l$n~Q0J1ALza%v{#MjtJAtf~}GcU6wGe1uuKTV+|BUQmK
z%+pzqOB<viv9u&3zevG3BQY;sAtW^~JuNj;!KMVl&`SmhJEZ3(X6EQ6=jYn#C@6T9
z=2U`QXQaoat)Qh3HbprzEiWZCO(8xWWOBR*m$rg3*w$1eA&?{WZE*vLJ5!4la4SKR
z0o$#Q*UYlSqRhmk9O6wS!pwrA{F3~V$^xPdg_;SDgv1<h=qrFCqaZa86idY=xyD9Z
z+6ra)nJHk&c#ujB5LeS0sy8`5FD)~@v?vi4jhT5RsYOMl1ts`Raz@sN&&b^Tl+v73
z1&FZ)r38#EO)M&bn}+1@;(|<U!b!yiC7HRYMcCwuN|JHQC8lKN<CldS2}*ORc`2D`
gTrmoM`3iZd<vE#osS1fD3aNQ1poE{6nUl%|02wzOlmGw#

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/openhdlc.c.patch b/pkg/openwsn/patches/openhdlc.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e69de29bb2d1d6434b8b29ae775ad8c2e48c5391
diff --git a/pkg/openwsn/patches/openhdlc.h.patch b/pkg/openwsn/patches/openhdlc.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ba3cab76a9120d8fe89603fd768db9ff4378f352
GIT binary patch
literal 343
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFU|wg87Vo*dKsJ{8Knx21w{%*CJKgz
zRtAPv#^wq}28JeFy1KdwMIgOUO}gco1z?SM3^21YHMKG|ff%5L3b;TnGBngNG*<vg
za49G#XXYj6l%}LAC_$~z%TVItQc%#>(&AE7h)GOIDalVS$}cTYNG{4RF4oOStV}H`
l=2B3IsRj{9@*XZe&LE*`u&W`K=<4d~l4MCrQDzxI^8w4<VkQ6p

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/openserial.c.patch b/pkg/openwsn/patches/openserial.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4b255af179023db5dcb8cd5b99164cb92f62637e
GIT binary patch
literal 39039
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/openserial.h.patch b/pkg/openwsn/patches/openserial.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ae1da1ba551dd4385aa166498af0d8652fb00028
GIT binary patch
literal 3847
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFU|wg#i>P^i8*>1oFN&d3XTOu3PvUh
zhK5!KhE~Sr3PuKoCS1C@x(Y=g-B4}1<(UOwt$2+vvobZcGBtr1p@j;#K&~=0&@nVq
z07-BuC@5#<CFhi;q$(&uEz!$R;^I<J(AU!9QdEdZOi3xpPcO<ZEl@}<$}cX~%}K0G
zEh^?xP>87p5lHg>1*v(#U_XH*s==;@Sf#70t4oqqDMguOMA`!K1`-B)(9A%`(g5N?
zkWch&aRY^t%7WCC)HDU$O3-A$frHn`f};GAe2}@tM4HOQrKnJrpP8bdpr8PX1xU(>
z&&<m#(a^N!QdCGSD#|a4FF}?pD9X$$2`))2DJ|A0&CDyYh%Zqn26J6=Qgc)DN^}&U
z!dePRrD<uYMGyf)v-lE)oYcJZk_@~?d*-F(!wpVO%*n~jOOH>^&n?K$LpB`hwB-Dh
zR2?pm`|)A0HwqGq5_3~aQbGPnEJ`;dPn!{5$Gd{UYsk9ZxhS(FGdVG5$a=sfu_O`Z
zc+}JfN~K7N51K-e({*}kiC<|h$ONa#lGI{Q`d5IZWHfc2c?G2<PT;hSZd*uxcu{6a
zDkRB+EX_@<@GH#)8wpN1Sh8DjNn%k6*i4Y6SaT#;iGOKHK`At2Vl^he0AfH=etr%p
zJEWv0m8J)P@@srP%)y>{DXA4O?_n_|H8}&G{Xjv8$j+eL?30?OX$>ie6f*NlQj3a8
z3rZ9+67y1WK*c7)?U}_z@kk{~Q3b?hFbmP7OTf~gB2!BXREF1r%WyLT9YaH71#lq_
zlEYi}fr>p6i&Jd{eY{5I=BJeAq$-pp7G)+T<)jiWRJpXdwBhA?aY<2Wa*0AUmo_LW
z^z{`IQ*tx&AUs&|Q&3RI%}+_S#t=osoO6CDD4d~6^z{`oL5UATLs4p>8>o1THq<uM
zHqthXwN}vAS4hiAOjpn_bkfvONY2mAP0UMC&@ck=oP(U9EVvS!MtY`HKy62Ic1~h(
zNl*nSSwrPuX-+{wA*r;uGAK1UHM1-;FC9}F>;c!}<irAmG{|Id1)%`(pL0<%R3k_R
zl#djkGESvwZkahbxMib*U4uLwed0a+0zyOLokHE*T!Z3+J)>M>p?dW774pG33F2cU
zheL#+Hl(IN)q`9BbsIzhR>wi4oJ!L?Q!2udbVA*ZEFFYL8s>Wc&=73SuSG72$`Xr;
z<4df$v<YSosx}Njc^F)j<(Gr&Rq8YkK;eW`K;t%hNVE@dJAY`j5OBMH$g~k~djV9(
zqu1Mr3L7aAf^t46T_ROv=&b~3W}tsd0ctU##zk@@a%%y<y8HqSxB^%~h^TuoTMbaf
a3fOuLG;29PEk$@0v-JQ~0xAe$EeHUyK8@u7

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/opentimers.c.patch b/pkg/openwsn/patches/opentimers.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..e5a046ee25c0c596b9fb6db3fd794a21ca91a44f
GIT binary patch
literal 9303
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/opentimers.h.patch b/pkg/openwsn/patches/opentimers.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..17795ef572faa1ef91020967dc94d1f9c816131f
GIT binary patch
literal 2082
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFU|wgC7HRYMa6m<oFN&d3XTOu3PvUh
zhK5!KhE~Sr3PuKoCS1C@x(Y=g-B4}1<(UOwt$2+vvobZdGB$u1p@j;#K(4aXF*H#C
ziGwY$)G;zq(ACw|<>FFMP|nOt&M8evRZxOjsh6R|#iflTo>2~VcYJa|DM$`ksvxx}
zvmhfrIX^EAEXAd*ps%IHrL7Q?n37VGpI($-TA+|plv$QqR16ZW1`$Y7{spOdA>cp(
zNq}Uv^trUT6cqIJZE*vIl+?7$yi^6;D$r#>9@W>^SMW`&$jmLxRmdyNO-e0N$WK!M
zd#zZZBqOmzAvrNmp{O)ZAvr%UxwNP#HLoP65)^!(fP-NWU%|*o$H*KJp2kKx#+L8^
zEvYO>O-W5tD9g`GQP9u=g(}37_~fJ#O%0H+rZqT(q2BNhaP<rE^mPpij`s)$GvYm6
z6f_Jqi3kapW#}Hp$p?i5OjBxJX|6&w$VV{WfoKq4!Ng3*6q;fbKp-hUKL<pk;Ecp#
z*NTG7qSO>?xVXN)LU~4NNk(dsLP<udLULkGPEulWwn9c?u|i3{LJ~wMHHAw-p;iGY
zY)Y&_F2f(~1x5KK`5?y^6B+efT#ArrfIAP_%FMjX5)DmjE(L^Od}c~~34&W3UtE${
zRH9LunO9<L6kh^0CZ)6}u_QA;PlpRCfQJG{eLTp~VC^6VvD#p|Kt@3Hfl3Ec3mtQ4
z?gd**mzdEekRfyPQ%ZAE70MEeG82<>QVGWomo}HS0?1RKoKjp;RGM6(0LuOfNRd$t
z4l%GNq1n`_G%ecKF(TeC)HfcSQG#QwxwJtlu!cfWX<lAtUOH4sfPYX3L|1&cr%Q+j
zNSgvQpM%Pv{L&I@1$}*(5ZKE6(h?no%shpX%;aoP0fv%f%My!<<4dfG$fdMMxX^M0
zDZB=G;sup0NElqqn40UD86XN$b8{UFb4Wp|fG6V?m*f{{z{?JZw=+|~IT;ix;E06~
za7D%OMX8Xy3>QMu$EA(Www%<|0#E{R&d)7KEe7X&aEV}O7GI)J43pIaB?Nf&R|~4o
QKm@ctQ%=oG$xPz{0OOZBd;kCd

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/openwsn.c.patch b/pkg/openwsn/patches/openwsn.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..76f11fcb00457e6ee78857d9914025094fea40e6
GIT binary patch
literal 4949
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV2I}ddZw28Knx21w{%*CJKgzRtAPv
z#^wq}28JeFy1KdwMIfzEJ-X$Y1u%Uu8cn~Mm8q$fsR=~C7AoKZxyMw;&_Dqs4mRCX
z$IwJUS65e;OF=<PpNmUDK{+!oIj1xwRY3`Asa}Q>mo}1cadJj#N@-4N5xPW4Mp0^F
z3c6@geqvEde118)cus0cF;rMVL0{h%1Qb$=GRsnniZPr~oLZEbm;*8bp|-drF*zIL
zC6H%e7{pgFHr6pQh4>NOKgs!t1u$cDbrli|3KTSw^K*0a^EA0YMk9P*RFs+yQmLq*
zua6{Jo|==BotIyphea+kFD)M=3^EAh9b1t3Iho0cC7JnoAW!M*>*^|mI0tYkB86v3
zazScx23RASaAsasYH|t4L^O$lqRc$7IEwc&a`N+1L8?La>*^|mx&)vEWN8ZAB2dCI
zHrFw+gvC9=hoD#|CzKE-6rqI?k_;&!gdFTBVT2}u97<?X6o(TmSwU%V>N2s^F}HxF
zE@TT!QwnktOH%WaD`Am<@Of!UL2*fbQ7%kIS69I~-w~7$kWDB8WeS)Qgyte>T%#yW
zt-zu%BQ+-zi*QkC5<Fob8C#KKh^aUyu`;zNB{iuOocf_jDL1n?87+Tcw<<HY6l5e=
zEjSBcCltyOi!u|Fa#D*Guq(h21r<%uQUXH`ETB+OlwXoxQdvN>nOt0o3T643DGHz@
zUtXLSpP83gqM>O`gjJ<UIho1CI^EXRmIxz@GRqQ6Qi(SchwBxpxfDPE8dmTURS_fz
z@+hPzMfR%#D3T#z2q{xRN)^CmRdP{&aj`BqNkFO#V;w^S3s|9noF1u^_>pP^q=Y(f
z>0cYQ^f!aML|0dV<V>Nhpq!GLmYJ8T;Ogh-<l`Fe;_4LYuApJ4iBiGBGoLmsvXQnz
zaY<rHX0k$ZMq&{>>4PIa+S@hA&($a1+27ACJ~+hD**n-X$~E5C(bF&1nv1Y&sFVXi
zc~a9FJ#!Y9Bo>uuK;;MqOabXRR2#K00NWQ|0&deltW~Jy(gtS@aI|SCsTRlNDe1(=
z2L!o>gha->h59*%c>4Rr$7@<c6+(2!Cl{qAmZWNcav!Le0f)7Y0`9=pfoca^h9Clh
zJpF?_Ln7n-16=*WgZ*?AoP%5)LtG(I72+Bkf<q&c#YH7L@P?fN#Cb|!=hkv*b72bs
za=i|!$>I}pa^myT(m-V@B;+8CK~OmxpI?p;hBqnU#S%n0%;6vn2-O9pCB+&_{spOd
z;lX}TPk<72QAuiw9>h1GKtmV`j!KArkT>DQ9k|THAQTFyQxt=fszNmvxa3tJBF!k`
zDY^B*&3&@VZfN@jMuFQgh6V;YhK9zlmW+Y|xG(@U{a~>G3PpW=1yJZ`Cgx;Tr79$)
zrsWr<DkSDrD&(grlw_oWTQTU(TyTYg*}4V`gPPSa^C3Z_ua9UjV#t6RjBr8J@JTEv
zKyF)uO@}wH6%-VpZAQ3ma6FVG7eLyJ7{cJTB3u;Yb%lIziyBo7TrEOc)(Q#=&?Yrp
z38-CdXl$TkXkrYjBnK>9afNCT1!1bMk3Co+;@CnKB14tHg{5974N1g?<~oK(mPm<M
zUmwvFfyWCtI>9pFRyeviqBRaqMc`&Qx|*UA43X3d3?Wdf7()=${KgQh$T3701Glrl
zwLiKHqO}2bAU0bvb4%g6z{$|WT*uJN04W)Q{SWP-z?G64GSKoHs(oMr2V6<$>lc|}
zL=B1I1x-;f3X-yn4Rs8SO^{L+s5XL@z~J=knU|KY;q31l;P2<^7Xq)9U4w$+o&5bn
zTwQb^1r|7run`)mMMe2V1&Kw8xv3?oMe!w?24rXfH<fC+Vif%H74lNcb3pCO#1e(n
oycAFwotBxC3U0a^ni=UBnwcS`hr#S0P;lw%E1<U`6cuW@0LX$!8vp<R

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/openwsn.h.patch b/pkg/openwsn/patches/openwsn.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..faf22ecb248bd2fbc59f0f768516a41aef62b830
GIT binary patch
literal 17260
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
TB(*3Hi({Z$_d&bWAr1ln(R%m_

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/radio.c.patch b/pkg/openwsn/patches/radio.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..6d7a9245287920a758dc6c46a81e415e292965aa
GIT binary patch
literal 13229
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/radio.h.patch b/pkg/openwsn/patches/radio.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..466c38496086fb72a904ca67b7ed9c04ba276acd
GIT binary patch
literal 3313
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV531N=(Vj*UR7x$tYEDEGSYiGEp!z
zv@$TXGB#H*GB7mZ($&>fC<1AO>d-CEEWoSV%*xc%%G3m+TMHF%f!t!KV`!uR66aD-
z(AU!9Qc#FVD#}bvQ*bWIFD}+C$Vn_o%P-1RNJ&l3Ni0e%$;{7FPy)MCNg=7YKp{6j
zr8Fm1j|-$Rv9u&3zeph@BR@B>SRp*Iq$IU6FIB;&9LjP?O-(M=OG+)uPR&WJ)Jsh%
zwbM~>OHC>&O)RPeInhXuOF=<PpNmUZK{+!mFC{fiAwE9H(Z$n0-UB3-lA4y8mx?UL
zrJ$gknU|bXnvx22R!L@VYLQ-s639jR`nI@%0@O6zD$r%X!EdNzXs)2EtE<bUjm44L
z3d&Gp5f0ae2CcS2Okzq(Nq%}!erbV%Q*Z#6wn9ubh(Hns2Q5gfnhT_FFhmAjgBX+)
zkuW%onwaRABN8dzI4vm3FUc>dEJ!U@K#x7_d`L1;NKDDi%;Qp2D9g`GQ2+sOJj7?_
zWtM1YT5~C&OBAP;_?M*?rRC(8J11#?6@wFAd~$wnL1IyAd~#BWLUIxgt<DfdWatbo
zNh~UHD@x2wMbn&EP*O_BTGzZ3;<W1PD-@*`r<Py_2v`^rBKrCYU@v0{9FQYJK>1K3
zz&|J?KE%`4H7GvZ(<Q`1p&+#=Ge1SsnoCguLk=8_@#(20V7+09Ii;x(tI%Sl7^)%w
zY!)SUKurKglfJ$}kQ+21V2f|JqSV6D)V$<Mjnd4#5{vi}g*2E5*gI&BEK2jw1Gyd}
zO%<j2r=@{p6cqIJ6+$8~!!IX4F(n`|IXkrkW|fvg0hq6&0JA$MH4mGuB^9oDiAg!&
zaKo^<q{1)19By+^1eWN<r@aWF9nG)lsU<<F$*GxTsgMMQaCTB@T2N|YiVhbjPvOT<
zpJ^%Nq~?*RM?oPsvBIe|%_lWa2V6*-Sn8NVOKDIjW6%0vQ3YC*7@*(*rzsEv>}yEU
z9@(V^C@{dGLZ6ZYZXJk$8VTU?1)BFUN+IG)D5wb_^I`s?dI<tG93wA7N)f0mD2>ys
zB!Sw2;Q~l$0+j{30B?x`Rfu5>q*Q^*VwAgss$@ZGmw=eywu!l^j)eiN0S!)NcnEkA
zmt2&rX$@_9WagEm78R8ilqh5*=B4DM78P?TDr9FSXU7*OXQYB!*G2Iq3JMC4A|$i8
z2vmZD+P$fHDVb^D;?BZA$I<}OD8*wtREkQDfX0|2mm;{|pr{a2%LOGsEqDb5Wr+I#
D{}j&w

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/radiotimer.c.patch b/pkg/openwsn/patches/radiotimer.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..413b472f3e7d51af443c18d1ac2b50a0da6dce73
GIT binary patch
literal 7856
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

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/radiotimer.h.patch b/pkg/openwsn/patches/radiotimer.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b0b2508ec6b7224158bf1bf7eeb5c01c76a3293e
GIT binary patch
literal 3241
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV531N=(VjFUibJEz-;249O@}a4aZN
zFfvgvG_*1>v@$kVFfuSS;nLOBRVV`KhHBF-&nzHpgqfA8v6Zm_#0V`^zy)%Zp^lM(
z0!W-oK|x<ji%UTvCaEYhHBG^}D8IN^w;(66BrU%vS0N=eIVZ6wu_QA;PeBRcVkL#7
z;sS--{FKt1R6Q<`?!?lPjQk>nkc|A?#A1c;#FCQK%Dhwsn{p`2AvHC*ST8BHC_6PL
zwNfuNrPNMG!7VkZs5G&t668)JJuU?WEqyL7T?OULw7itmG==#1AV(KZ{}4}K*PwV0
zkVHyqT4r7<h6I;_f^ueFa!zSVs)AB+NlIp3iC%^hmm-pAQhs7l3P=#-VSQWNKmlq8
zZWZV<Aph&*HL|3#AQj{xbe%Z)TwIC@FimConJEeyT8O}pPtMORNGwW?PfjY))X=o%
zQoyG+v7n?BrZ&JoC?p;doZ+4>Asz~#<X2phm|LJ}P1qM@iA9--Nja&-3OL=3DgjQs
zhB`*33c9+wx?I}0B34^L85-zlF|G}YEG;cAZH1V`l$4VE^rHOI0tKhw0FX#Eh(HoX
z1Q1A~nhT_P&?IUi6KH&X`EX35pd>t)(<!JRM8e<_(#S~1!~|YM;?3R#MfoN9pzKO)
z&Vb}Kg~XKH%sehd1yJxPfB+&1$7kkcmO%10Hre9T692N)qO_d+a_1xsByC7VgF<o=
zILvYAcZL)q<Z2HtNh~UHD@x2wMKb|W-VktrYhDU5`mqO3G01uijPk4?wJ0+`1?+8o
zeT9_FqSWLPg~a6K)Z$_;MFkAyNCB6gS`wC+Q<@42a~xKtmIQ!}$73x)JD?`OTnLRW
z9BH69IU^NR!(v*PpO#jfTB2!<Lt}DcUUF&<$SVp8`uYmVkT@Y60?rVHDIuA;;D7)X
zzxoQ9c_pbuMWqEL3K@xcDLJV{ps>u&OwNvnIj|_cL_t9TDKs;Si$J!6>gCkDl*}}6
zO<-iMV`>7a3P8?6tt(J?3N*`6pv(Xcd=LYa<&a%HnyV1G3aRA<X(|wrwJ`J`r3iTb
z0tGzIgj<Z7$1n_pI|7=~FchHL2+eI!D?y1)fs`DFVLEZy4#hf1j)G-93=>h^i<1AK
f#!!?8p=Ky@DS})1iV88cTu=hk)K*YXhGb6wr*z}*

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/rcc.c.patch b/pkg/openwsn/patches/rcc.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4ea0a2ad61578df74e4d043e74cd39c089316e8c
GIT binary patch
literal 2635
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV531N>0{G<_yUwRd6gQQZO=6Ff_C>
zw6roYP%ttuG~v?K)m110X@jcQEzc~#qu0#J)YQt<1fo|96>x#vVW0pK1RHCpV`-wG
ztE;QarLCZ^rNyPK5R+7tnVO~mvMM*fBsDn1*VsrQB{eNGFS8^wKTjb)O`#+sRUydP
zS&vH_q&~5<BqP5_!8s!_FI^!dH7`9aHB-T+1j5iu1_?W)=O$+6=q2ap+UY1Lc$MZ<
zf*fb0$EB^HrO&0Upq!bPoKu>Ts-RR{l51>~W@u0mpOcxSm!Sl5mcA`+0C8Dru>x)-
zXfj|&>*F=EEU_pvF)4?5Q;9IMpeVm2zofE&XhVrHvot9uGnsg=+k(w3%g;;!MPIyg
zeqLH;dTCK2C|)%{!kS##3e{ZN3LxNGRFq#7T#{H)TCCs^>>6B>SX2^P01>bT8w66N
zuLUwnp}4ZRBsEu|D784XL?bP~NFgOPsWe@optPtUzc^JB63Za<LC((cE~%b*nI#&U
zD5kjPfkGT)6RKj5U{{DcH9%TDf?ebN{ZMs=CuWu?lw{`QfHh|pD-@+Brc@$KL3g}@
zEy&67AZ>2>MF?4B2W6&dAS57uR<N~I2o802b`1^&1rx|Ku%J><(AQFcdLW=EH7&Iy
zIYYszG%YQ)2;mF`1vekZV2^m10*JhGZi)sr@py=FNInHy;+B(GoS|T(P!95QaY<rH
zDy9X&sU<#%C8>GIl~9wRym%vY(>$DgycKK}f+K@L3~){ac}oEtJ|Ib?kcTLWcgZX>
zL^meD*~i;R!BzpJ1KByC2m{L@83R&-(-1?bA^Jwxj4{Mw42G8ie0)HDu~jfM^Yy4w
z&{r^0&{D8euvIWOQUD2{c@m@?oD0CIE5OGmIKQ+gIW-=X&RjCfjC8<35#ZzFTbdJZ
ziSBVo94Q3&_+Yr##|IR%u6~YAKCbB6Kq(KBU_m-D6Rd(lc}8YVD%eTxsU>bXiRq9e
z2o`bkadeLl@bL+9iPQw8$spHY*AQ5WRDfq+1%+C8CIu&*;MAPd<PxxB6N_OPHaRCh
zIa{F^>}hmAKw=yz&>;fQ5CVmqk2gWDl@_O_C=j*}#ly(<XlN=Z+A0`S7+B!&A~?Y!
zysEFC3Moh&-8}uFB^f9kItDly1*8^b7GyYsybOvQRN;7#1|0=Nj6uUsU%xyfHBX^D
zF*~)iKq0A8Au%VhC|5@z8JuiNi&7Pel9Rc#6+p$O0?5d4uu5`^Q<(ETf?bhZkE;*_
zdtP53k)S++T@_#n3aTHo9D_PDvjnsF0~<(k;RkbcfR7K<Qb-X3N+Y=`8c1OZHeUhR
z#mHFzt{EjckeL1vX+c3jUtfV>vWHs=iabctBPGov1wPa(c#=HaE))+!EQRDNtm(ZL
Kq7OuYd<OsnmBb?e

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/rcc.h.patch b/pkg/openwsn/patches/rcc.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f2ddfa92c2d060342d296e40ca5563588a4c85eb
GIT binary patch
literal 673
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV531N>0|x;0(zqRd6gQQZO=6Ff_C>
zw6roYP%ttuG~v?K)m110X@jcQEzc~#qu0#J)YQt<1fo|96>x#vVW0pK1RHCpV`QM9
ztE;QarLCZ^rNyPK5R+7tnVO~mvMM*fBsDn1*VsrQB{eNGFS8^wKTjb)O`#+sRUydP
zS&vH_q&~5<BqP5_!8s!_FI^!dH7`9aHB-T+1j5iu1_?W)=O$+6=q2ap+UY1Lc$MZ<
zf*fb0$EB^Hr4KemIWsLUB{fYUK0e6VIo^XyTR|CYXDUJj<U)O0+yLUp)M5qPO3-A$
zHtXXxvn;VFGchTLcvFcmv!E!yB)_DxfM`R(W|rk=rhq~{-Z?)nEi=8eC=nDL8X#d!
xYg85CiP@>81;|p$sd*`xX<RW1e)$S{spUDDd8rDCB?_r|DWLdF%gjmT0stEGx7q*z

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/scheduler.c.patch b/pkg/openwsn/patches/scheduler.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..b46f7a5671414ccead9fd5133a8a83e72c494934
GIT binary patch
literal 4816
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV531PR>Y8Da}bO(o5zH$tYEDEGSYi
zGEp!zv@$TXGB#H*GB7mZ($&>fC<1AQ>e4OGEFfrtnU$%jm8l8D1T9p+1#**_j<JOT
zNSupHK|wh)FFB_)B~?KQYKLBi5{fXwp&3eCib(2{@)L_v&{e0TCY7caWabrvB#>3-
zq^5wyxD*xi^=)wjg|ft=%*3Re)M5qPicn;@xD*viDhpCmQqvTQONvU9OB6~Hi?ic%
zax#lc;!6~&xfB%?6d+>BNhKgQ949APBgqyNW#-2tDFE@I@@4s%DOzxCP)1&AMF~j0
z7Hqf=$hypu)ZBQGAf}^`+<~MNVid^1PNiwlA&$Y`@jjlxA@MG*0U;i-Ak(34N74gv
z2uM#n$d6D(rI~pp7Rb&A8J$;}8<JR@UF=+1M2s@u#0rqIS_OEl$Co7*6@z@lrGO!b
zCSc8_h|||Ja$HJMI>>Dxdl4=M3nIBKB`Mt+l+^L3yMm(pl6+7)A~xZ1fwQNXj**Fi
zuCA^w$OZ~CQ+$3oDBB=sO1$|AsvbF;Wt5j>=B5_KCl)1VfXqUcE6FHIO$6syP(Dsc
zP0P$nRdDrlbn<bHcX4$Jbyv_Z&;&`riv+OkAY*8eYl%rusIdr2+$hmZn`i|UjYt?=
zW||o4n3_QfO$7o4SV3u0PG&N(rI)R(Ehy!H$`>ThX69v<XlN=_bLnz{a<PKGz5+-n
zGchN#DzPLpKTjbyA5?oFN=t~k+|=CS)DjIfL@0r>ua1FEab{I&ewqfVczlVbrZp~&
zDM{(r^no)MNE<|-zP>_g9;mohD9K1gctE{aAv3QewWz4HphTfKUm-YLAvrNmp*%4=
zRiU&1RV}0d4tDl%bqV!x4T^`RNKd~I*Px)#fDjF^8*8zIQgKOQ5hR$vfdncLQA){z
zkc`Y?Q1J)#WO+trPO5^2At+$MIusNXz+!0Oq6abwT(m0M`i1)VfYgJkVk2`M6KH0q
zYa#%<b@(R%eSQ3i0948=C@6r7Dh(yo;+Q-oo%r~GAlHzP$auF<Kj#onf4}&6B9e<X
zI7Epu2wUw-&2)uS(14iW!p77>$IJv$*g$d_*twuW0F=o<iBq8@Um>+3HMz7TRUxw&
zoS*XZQWX+Qz|4%)#1w`6G%&lcG_^Dp*%Y|rA%-GITSWE+SNe!t0IJv#>Ok%&&d5xI
z*abFUA*oUUWIxDh$abL?HwXh2Y!%?n(6xg!qrkPPiJ6Y65xhEu+o`V)_6x{(y89gN
z2w1`^D$N78_Y_nM6v{J8G890~L<Q9pP;x}}R&tUKG8d!@oHXGE>gy}eA{;@<2nmBz
zl)0gfg*hZe!L3(7b{!}V5Hhw3pkfbNYC?n&QJIpIu7}jD)YV0(tA&*13JMC~mIJ6C
z5D$v9_~e`-P%#c}h$|>4fV&Ry#W|^|1<1l^nm{#~rZvQRbW&em!P7BFp*SPIG$%zN
zBQd8$AtSXYRUtD?AuqoqBQq}@lu%OgA*r#JOF;o#fheHWvjwHa8DJM`K%ALWq5z6E
zFb5Q2@g?Bc1yulG7l0&Csu*xeaL&&wNzBYkErNywx+*QODv-YL#GGunGI$La@8at0
z;~3-!D!;(t0dcj9XE3;J23Hphl7z_V>no&X=A|ek<|(A+7L-(iZBR&tIRu=UOf7ZH
zEg_i+?05))mhm8hAd>P(*Vl&@sd@PdDfxPOdNFxQnxOs!$aqkVi59_VsX|{LSHjTO
zN7G4_qybBfkalr=WoBwl3MhoZuC3()R}xSU<)kK-W#*;p>FFtihq&1*LOe!!q5|7N
zWR-@kCIUzMAWVKp<qwDnE`tmW&2<cop!FI!j5E^|kXl}7<%%8l62~{O0-hTckh>7b
z+I<r%6ciMYD>P(Ta9<egfLd7l8okX4&S{DYwcs8tp?+g#Sz<{l@$G$Z-ZV6@)G;(P
SM#`OoATYpTf+HvtYPkTT8f!HG

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/scheduler.h.patch b/pkg/openwsn/patches/scheduler.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..ca19f56b01619a38bb5dfdac2fe1af59247bda68
GIT binary patch
literal 1868
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV531PR>Y8Da}bO(#zls$tYEDEGSYi
zGEp!zv@$TXGB#H*GB7mZ($&>fC<1AQ>e4OGEFfrtnU$%rm9YWD1T9p+1#**-j)ek9
zm`g!HIVCkMGcQ#kK0esl!__6!$2BP4gNsW+L0?OYOHm;vF(suWKfNfwv_K)HD6=fJ
zsF+JZA*LEcAV~$o`~niM2D=($hpw)!E@^gTrxxX<=0HqQK(QUo3Xt=WFxXqh#yX~k
z5RY*wD3nwdq^6{%DU{`BrYLA=l_VBt$0sM1Xlj52G_AR~6czOKZE*vIvc#gy#H5_m
zVg=laP-MWthS$h~qWqG4ki&>I6Jn%7L1|J>X0k$BX<l+kW`15Vmm<Vl@H7;knU`6j
zp=pgNQCyN(1eQ@i*HTbgoDmNS77Y*q3L6C|LkGerD9X%_FHrzdpzu;q(AQVU%qvMP
zDk?1~QOHQlOUVJH2dG;zi;LnjQ&Uq7O-)kc^HR%$bMnFVVv{b(%uOvqaxO@3VoEYd
zL_tA0GYu4Pp20!!?vX+MTu_ID)TCDy<wF&v=A~q&fm52Xv5uLg0ywP^7ww=30NGGn
zQdF8;0`Y53PG)gQe2GFem!g7#0z@o1sRYD^<K!ez_`+mC!4i+80K|vNgHo6lTpN^;
zms(K*lCK3D?gO$evm`Y)9wbOGE#~HfiV6~vB$pzWB0LK~J&NQvB<ms01I4^kX<BrM
zW3YF;k7sa5yo+l<h(|2Q#ZVt3>4A6-q$eH}Zcs&~nRz7^$Uy=!I<GW0B(XTV*txWb
z7-hbR6(D7`3W%g#mRM8_3njFugZhX@7N;bogX{$rh69<aL8%FM&W6fDGYKNp=#jgj
ScH_?Bm<m9-94bm$P6q(BktL@9

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/spi.c.patch b/pkg/openwsn/patches/spi.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..4fcbb8e37681cf4ad74e5b9857a742352a9b7347
GIT binary patch
literal 8853
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV531F38kN<_yUwRd6gQQZO=6Ff_C>
zw6roYP%ttuG~v?K)m110X@jcQEzc~#qu0#J)YQt<1fo|96>x#vVW0pK1RHCpV`OTf
zpsTB^%cZTLucgJMtq_w`l$n~Q0J0C_Oof!xw9LHBlFa-(h5R&yl8jUZrQ(82C55Eo
z0)^cCl+v731&yS{;?xuckcxuTyxjbf)Zh?bV<Uy+{FGEpJuYpKxrwDE8TmyDAsP9(
ziNy-xi6teem3gTOHsw&3LuzVrv0hSYQFdxhYNcLkN~xWWf?H}*QE6gPCCE2MdPv4N
zXC&sOD}<!xrKhE4D%g}j7<$PdVTbhG#LOJM<osMa9R&ri(i}|fjyZ{`DJhwGsS4q#
z#W{&3nF=<EFd@Bih>$~OUQuSEURsfzj)GTW9?TggAZKXlb7?CmXXYj6l%{~fqa@eZ
zD9zBIB0eWGNiRbQO)@1jADdua38rXKW?njmXh9~rP)=$}aeRI`SQy2!qU2<-Ad=(q
z$}%BhAcf$_OjU68b9C}?jdyW%3Uyb|Fwg`^!F`jGnp6sL1SnPL+u{b0w2@k@fLjTg
z3^*<5<2AD^u_!Y!DTjDd!Dg0J7Nn-6rYRJc6qP2IC{%N4D<~)^=<6$F=B4Eq<tBpD
zZ(>q@X$d$9Czlo#rRJ3=loTcA6(=TxWFb0AGxJI;;!CtZx<R<WFSVj1q{6APB-I*4
z1xON%^Gb6=DpFHGDvEI^DFN#*_DM}EfvPAj$c!&aEh#O^i!TA00%3<#7NFUJ>W(0=
zIZz{@E(PfZ<J`mwh&;>{AUo1Bi;7DiRw!f^yMcI6?I78lM7X3vX0cCVG0b`T`U=G*
zi6yD99G?r$=h*$9R9ajKGE+G-4HN;v0iN-me(|1uA+A9|p#dTBzWy$*5S{w^3dxB%
zIZ27h*$U+usd=#CBPBmC6`}&<sN^JYh=BbBQw}yiH7_MIjZ0ghRsp1}EU~CK9^_sw
zZH2OYP#(@nMUsFst-;9yf08RG$}h<Wr66KcGMBbOW?l}c`~U@0X0k$AerAe7kZZ7O
zNW8O8kOqjWsZg!p9^mQktZU~K6r^CQU}$4wXsu9-Pj9em2!`HZ!kV3f^WxF9I_lav
z!L^#;v=^im-NhiSFiUak4EAw#4Z!d%vR)&wtpp2^g3_d%%w*!r5L<AJf`S+v$)L(f
zLlctYK`AUJHL*wmUWkCxRc>l-acYSMIB2yr)nLg-$3Ukzvnn+|O#>zpU!tiANiYfu
z;Dnr)Spv$GE~#k<fnabEQ(6Sds$k>w^;7deB^F4Fp$<6G9U+vHLSkMDSio6F!8s>C
zIUB4Y$k{pGF~G?vAhjs7AOkG!oSUM7DjXji;AyA>EviATQczGpRe?(*DAhTVt<xD<
zC)m0A`p)@zX_@JzMX4Y!>K3KuB$lM6C=_Jo6<a9;IO>@yBo-?KJNtNpgcNiF9QDjV
zBEFu%{vZ(@kQ#Hah<~srT*L$<q95$)0}=sS1af%1CsLTh1(3sBK>-}1V1;mTJ+RV%
z%sd4J1zU)GKxSUNsX`5cV-6}taBKF>Pf3Mq265sY-QoiR@M{V#NKH+F*$C#un;Q6f
zRH5n806EW5M?nolqq-avwWz+w>M58VAYYlGnU1Cb<aR_bfOw!1+0Dn_F~rl)9lu_%
z7vP})=F!SS$UZVbjwd7hP6T-fR69VU8N`kEFD=20Dk=mzvKtMl=`3gbX+d9KAuYcs
zIaQ%3wK%l|oIDV<3n;}XC@6r6ZcwQY<s!;skN{XqT7Hp&2B@82Xck|hkY#INon>QC
z;pXP%W}T(2t!b^GuV0*-n3JPWo|stzE>#tvl^D!iurX-)-w-SaD;^PP4<zD}S(FNH
zO@Sf^jBP<hMm$_R-pD62FSR({tu!acrL-U?wF2Y{5KlJ+%vC6^%uCKF%FoL$ErvAD
z(o&0xL4Avo@_YqQom-5@eo$fnTMH*3_JhRZeG`jIQj4th^&t!ekRTqjToOwXgEOmA
z;YKMy%z}x>TO@(pZlRl$32jKGr4}iq6(#1Tf+8<B5fX2pU;&kBr~&01;O~Pl7{r1Y
z4ib;|$uGACHC{oTtzc(JshW{ktdOXXlV7fzlUkOVqmY>bYVUv=X?VQg9N^&yG8=(m
zws<(k8@i^Xr-FO{vIg8xR4B?U&df_!NKHvk1&4S>sshaZ%wllE**DlJvqT{|v7iK0
z8x)rm<tL@;;BkRpa4^DhFbm=Wzu@5b;QX`_YkhqXRi0RsssK`(o1X${3t|s8r^M2f
zpv02YfTGmm<iwoRB50goh{qe6S?lY=gcXq0Ti|gnxP=VzA=s%P0^(elc)V}0leNBn
zN@7W(LVi(7YLP;DW=V#EZ?KatI0W$+?HuGBke^eTm!F%Nm;*9d!B)ZCT3_Ee$XNkN
z!dAf?#SjfhGe8X^Jm9$;rTGEZ3u;h6v_d+2P~`+$>ByPgFU-@~3KVv!xdosul0raH
zW`0p-NhPQ?3vSv3mnNYIf~^N>1J`k|rW0HMo(CXBDW<p{L?|c_)WOe7&EW(G6bb>3
z5W{%Spujw0O$jJUh57*I0Zv;5XmJj)FfX$N?lyEc1eYekwZU9Mf_CTJ6bxV3LYsAH
z9?($3bPXup6qMn8A8;v6AQItC<Kom3XK05D+{6WSt&)?VZDj>;>lxII(t~xg6l@ie
zlR$0)by8q<g8NsQDPYwl6-5=`3I*OpPAW|cselv!u&@Eqpi0LA+V51zNzKEd4Akx}
zf^~x-3{aZEX&$6IoK%_?M99wE#0sC(JSXfbLDqt^E69b=ZZW2vAXV@lGNgM94m$8)
z2@!qWl+0pquOKt8B(<ohw4el1aVdb~7+jkN1bO;8277Cu#4$JvfkrNhQqwa*6&5Ju
zq18%BzCv+oUJ67B$bI1GLmHz1g*~YCrT`9bP*f@)#WV6y1z4r6f`S3MBBa3zuo?wh
z1$Ydit3^Z^L@7uuLJVCs*qx9u3W#!B1&}*~D$o@ohB6@PK*l0PD7tcJ3_{g{TfSHZ
zJHSB&iAID<kjW4+Sho)p^1%U~3Yo<UdHLlEpwSJq;06gHnE(!MP+<bjnvg-Koc!|C
zA_eDQh2qTgyu=)Zl6-}X#IjU{;v5i}1B%wX%)E4n!I^0a;M@syAh@crwFQ;;Zk|EG
zA>cFzvJc#K2m-YSoia;`VU1g`D5z6l0!~E=3ZM}NVv}fQZb43JZfaf$WPHp}PocCp
zRUr{EOp{ic2WifM$7_&A%M?I^!o?Y>#Yny`FUl-QRRCu!g`~=oRFJnrB0y1`mRbby
zE67)#M#1sHsd*`&b`+#`)54aNLEeFA($`lgO4Wt-v9ac+VAl||yp&T6X-0se6U~=K
zdf-?EH+n%0HHFl~<P5ljlTtxh4AOK1X$Ivt1yCCq<RfSfF3-pWje5gfjg)2V4B+tv
zNeYla$xE#$fm=b1Fo75jPKuz$JFK+^4;_WHoJ45)QczHUIv5uE?x`hiIf?1PC5a`a
z#gHg~NxAtry2l4a__=B-*xEum1Bi%#SegtTVF5K7ao7ek%Ne8)WD&#)a7O?X`3O6p
zIT>PZF(_|<j0J_XLRM*Ui9%6oa%yH-YKlT;9=P=xgqoT_Wm|b>Npc2K20|1+$PuBS
zppcwc3?9CS2j?oM$Pia6Nb&;ZEigvOh{$E7tu0Edf)#@Zv~&wE+Q3bec#v0vARd4x
zbx>G>biy&HriF796cmz*QWLWg!Gi2=r%*RH*C2F9<8lMI7=*<HL1(~|GEy0>t&QRi
z{EqW+3=Y8-rqppBTBslbO<!LjKQ9%MvvN|4i$O(BdOkc}QN0Bj#z*!RTpl^Lu_{2y
z;<~!faH&Nq`wB`+kjndv%=8S9Q=r9vYF-L>Bpo!_kegXt44O*=Rpp@C0OD4Zqz9>x
zAXNY;T;T~BT-FDtmJn0^L-G{7CM$uId5L+Ix%oxVq7m+Ua4~|M3SsR6SQ`*prw|%N
z&nyGY8K6!1;O2sZ55Jj+5+)-tFC_;w5`f!0kPO(&?9Als_~PV@RM6~XQG5xg1r?uJ
zTm&5^CeVC_gdFLmQ895v5rJ|DB_$vyORR+u_UuJ$`Gd$un3)^yOf1C?c3Vj(ao{Nr
zcX5N3<>Af&WeALdhGGXH+lHL2aTYG9K0qs3;F8Gk2QOCOvgl<BmZAVj37IVmB3oLZ
z++VAZnp2z#nMnchLCqfu%QXcB1(XC$VbKO@-Gbc)8Xp6-C?E}WY{eU>bx@EQ4{lbY
zmT=JG4HDjv><%p`K~s^6aB&o;!#c@|wtk^LKJYRb;uz4x6R430YQDe}!i_<82uu>v
z=Ywd5xBygWfg3sg!N@ux?HSl;1xN!l*McZzP=rBLgPV97hMLy;`U)i(nZ*jl8Tq9-
YDGGV1WvN998Hoi2sd=Do0b(Qp0CrCeWB>pF

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/spi.h.patch b/pkg/openwsn/patches/spi.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..d151e9689448f8c71e1bea7d7459c6d417dc7b2b
GIT binary patch
literal 1129
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV531F38l&;0(zqRd6gQQZO=6Ff_C>
zFtjo@S1>X#G~v?K)m110X@jcQEzc~#qu0#J)Y!_{0HRk56>x#vVWDGaq5u--QczG%
zNlnYlOI3)E4-W8*_uv8vW#%R4l%}LAC>58aWagFVWhikeDk#H6lkyXbQb2-S3JUuA
zwzz=;)NI@;&}F#5eg(TvS65dT<QS+Kq`EIYznoT11ce+D1_!B$rH-j7Buoj0N<mS6
zNq$LXL29uAy8p5BxwsS+%JMT)6ciK`iVHI1GxIV_G&HS2p_7@GlA5LfiaJlfcu&6&
z*Px)#fRK1!e-~FS1r$xisU^-y8X)b-NhJ!&Nf7<1c`2D`;6R7?037Oc@&U+85LZyg
z7f5jeVuItv%t*(~91<^}&_lzZ(8x(FE{QKuP*BJ$_DL)*(X<9-0eyXi%)FA+qN37*
z5`~P!yp){OqGB#Zh3w4a?D*p3jMS9UoYbQD5=e9u7lC2}6dj1*gjfs?PBcqFT<Td2
I4Mc?H0G;eB!~g&Q

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/stm32f10x_lib.h.patch b/pkg/openwsn/patches/stm32f10x_lib.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..dc01250121977ce0b5c15224190f3f6379bad373
GIT binary patch
literal 3506
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV531F3B}EN;5R5h|kGP(#zls$tYED
zEGSYiGEp!zv@*1`GBHpvGB7mZ($&>fC;}M()u~&aSwNI2W>%)AR;DHpQ?yV47szb}
z3LrtS1%^82<_fyHy1HE23i?`FT-pi>U`dby>R^bG3Jz(RIjIT?3JL*5`B|ySCHlc3
zzQ#swpl}E-NeM_T$}Gr;4@u1}$Vn_oMGB<k{Jb>1445H_r6n2pMG6YO&Mpd$1qC^o
z$%!SI`FRQ<sfoETHD#$q#UQaTV?9$n1DI$^VhPxK0}EZpf}+eET_XcSLzrYzQD$nI
zf`WoiW>QgNQKbUN(#-VIB8cH2m+L{4QYT2Dra+8Ta7ZjENzDU!10nz+6+%2*6#{}>
zgI)bX6x=+6e8U}sTouASJe@rhJcAY7{DTzSLp@y_{hVDD{QZ0)6&yW%gB2V@6as?$
z!#rI){oECtLxV&7eO-fsp(ciVhIlAA`-9~?{oMS6d>unP{rwbzT-_amz@i}@uAV_4
z6I?=_LxL4N{S^FzTwH^|wuN}O`YMF@D+D`+xk3#L@$_}oQ*aDca8w9#4G#4Q(NPEv
z@%3~L@^|%dbq)#g_w#fPRtWZR^zl*f^AAyQa#iqf^>I<~@pN?ZaRr;|=obk!%*8Xv
z)j32*!P5`IQt%H_aQ62Lb`1=5^$YQI^igne^mTN14ORgABgi#4z|}bf<RVAENCjsf
zi2s8;gFXG+p+>p|`TK&y(b?ZG1Qd?`ZVJJn&K`*Hbo6u4_YVTA2@Q5t@O5-?Rd9+#
zgq(uE8%Ppr9+t2Jne6E4=jx*1;Tq)X=?4lkXMaCGS7&h0f}M&Qs?d}KHPR--$j&A?
zHLoPK$WARezo61u!P!3`GRV{2BLtLz4M8EAnOu~gnv<GbQk0*UnOtn657l6!pJ8MN
zF$kKZs6#=F)aTL$7YYh4scD&csR||e3I#=}WvO{33Pq{OrA5V=WvL38dC57Y;Oqt}
zL<nLneJ*VU<;=9al+-kZ_;^Ga;Oy_`7ViO)Oo7;jO%mc9Pmq-<sm0)8i=d5o6@Z<i
zucZ*0mz<xQo0?am?+l?8N-|OvazMULO3leH2l+iUFEJ@6RX-)O7(^=+fJ>~@qQo49
zjMT)G)FK5?F@Y2wV6&CM;ggc8poA#)6H}7)GL%4G#Uh!MU4UCMIWZ59WGWtGlZ)_3
zrX=E%OiIs9F2!waN^T-<$<&IHOx&_*If=y?c%+MS@wh9!ATuAg-b^DrS~JU2(s64o
zC@;b-S(J>&+@caZlEo?b+*@3LC!9($b8)+<v^cS-1h;fK7Qg0Z7K0qBps%Iik(r*M
zkds=Lnxl|bnwJc!go+i?@{1Jw!aSW767y0Nf-8$dGLy3vG!j!%bo28-Il<XC*fSWR
zUQ+>-)FFA(wW1)us3bK-p`@~a!W;@R6y!v>k;(aa#U+V(CFEy(n33@8jxC#46eQ*q
zr-Ega5{rvdi%Q}P5{nXZl@xLllZ)~dGV?%k;385XxFj(zC9x<)0n&Z}mj<vlL`qR6
zs3oG1oS%{k4k3_dl%b_tXs~O%Td0puykl^%YfuQNU1SJWgcghtEAf_L1SG+JR?bWV
z6}Sp$)<O$-Xsb`b0on`-$w*Z|_BqVs#R{dxsVU&(0ZT0E#R}lSNi9h&Dpp9&NKMX$
z)^7?9U<n0<)QW;4D+SLqFhe1;SRpMjr#MwdA+tmwIWZ@v7-m&kVrCA=bZ9bED9^}D
z&QK^y1tq9raBypZf(eX4rE^|lZmL3l8YnUpit|g0l2aiiFeuT2<e_5VLOicDHz~CU
zrW#}|hJlGC3J@3QA-lDts1)MVqSTVoqP${-ynKbS#GKMpxG#%ROUe>+6#Vk@QXyu7
zYB&W2SVSX-qXsA_G!-<Uw7r5xS$<}Urh$SLY8Yr}lxF6YSj3koXlcgByLtM!#>eX@
z#K-%1`nkr(YigpU5m;Q1oiD%%PeDNe<Qg=WKpmn54q6=r5ZBl!z64w~YFdNpu+*Gl
zh{y5z7-Y1j0m$Xbsd*`xX`sA-mKedV0GkL?fY}6qsnN&M&QZ{C)+F3^f^=?N{aipT
MJ5bPqOw#8909b0mk^lez

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/uart_ow.c.patch b/pkg/openwsn/patches/uart_ow.c.patch
new file mode 100644
index 0000000000000000000000000000000000000000..2d61138f24f48e7abbbe27910d7d3e1d5b159b0a
GIT binary patch
literal 4194
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
DgTvk|

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/patches/uart_ow.h.patch b/pkg/openwsn/patches/uart_ow.h.patch
new file mode 100644
index 0000000000000000000000000000000000000000..f26c049a43667b7e4c117f5bf9e93955a000faae
GIT binary patch
literal 2351
zcmdPW(o!fc$xqIX&&)5;%}Gp(_chkfFG$TRFV531O)M&j&o9@@;0(zqRd6gQQZO=6
zFf_C>Ftjo@S1>X#G~v?K)m110X@%<1Ezc|<px?~O)YQt<1fpLH6>x#vW2j?jq5u--
zQc%#>(&AE3h)F8SOifd8F3K-1)-A|MEJ@2R%2h~7P0mRyN-W9D&r?tWxm8IasklHP
zH$SB`CsmINq%X0wBqP5_AtWO|H?deDJh7xCwK6YN!KNI_a!5^0F4jv*Ey_;KNv+gN
zO)0h0QE*F5Dk@DZssy>vNRLZFK}(;DOIJZTGc7MAHBBKtKGZQNB;Ergl#-g3nU{(r
z#HFC1oSB!LQ<{>hpj2Fvl9^Ycm!ZU^h$NbnpIDRv5(Ifq-xfDefSQh51-c9uI6e$@
z3@sIOb#-;Qv@sp6t)L7w7VZyikVCYzxU>~w5>rx2^3#j*OA8d7f&)Mz)gS^%7!=MR
zp=vIWwm}dvL<TrG9V>wng+8^z9F$a%FeD9I>X;b860w4U0yxRIhPnEM#QTT22D$n8
zhwE@DDAX!|!ZSX#EH$qrzQme~OHrYuvLF?d%*ygJQxr6`!15&(@ySUgni`tcI205i
z6o4WVuMf)-i!u|Fa#D*G(31}iKH)$sD9SI%2RWQrGeI5&dr(0E5(1fdnI$0aDJY-_
z7pImuC+6fNB_?MVYaj)MLP>>lk`6>G#P14470yZE@If&kH4o%f&%Bb<qN37*l46h@
zil}y^WEK-tlbn;9SQJ!&*Br2#5HvMt{wXiYEJ<~$EJ@WU&CDyYh%Zq{sw_zj$qxsK
zgIy032Ya?CH8BOOTGJX52@07opD1J`=B4DM78P?TDr9FSXU7*OXQYA(zM}XNNVt?#
z#Ag;4K|G9IMG;&DsDMh%OUX>*ic#>(SIA2(&jFQdi6siDc_|9{X$onXIjP{n#mGd*
z)Cf|#D1ZQU5;iE#z}^QXBJ|V`iC|3)sG^~pz~l4FVV*!s7t~MZ(7+;?*0HMtr)8A%
zjz=9znun@G^B<Y%9x1@Uu}((vhq?z>CV^%Fm?|zsaEn7xA*PlKN`NYVMFnL@?f?MK
Cp2%+i

literal 0
HcmV?d00001

diff --git a/pkg/openwsn/structure_changes.sh b/pkg/openwsn/structure_changes.sh
old mode 100755
new mode 100644
index c2ed48c123..54347b1001
--- a/pkg/openwsn/structure_changes.sh
+++ b/pkg/openwsn/structure_changes.sh
@@ -1,34 +1,69 @@
-#!/usr/bin/zsh
+#!/usr/bin/env sh
 
-printf "Moving openwsn stack ..."
+function _out() {
+    [[ $QUIET != "1" ]] && printf "$@"
+}
+QUIET=0
+
+_out "\n*INFO* restructuring OpenWSN tree\n"
+
+_out "Moving openwsn stack ..."
 # move openwsn stack directory up
 mv openwsn-fw-RB-1.4/firmware/openos/openwsn/ ./
 
 # and all needed hw dependent files too
-mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/spi.c openwsn
-mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/uart.c openwsn/uart_ow.c
-mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/leds.c openwsn
-mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/board.c openwsn/board_ow.c
-mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/board_info.h openwsn
-mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/radiotimer.c openwsn
-mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/eui64.c openwsn
-mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/debugpins.c openwsn
+#
+# telosb disabled for now
+# mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/spi.c openwsn
+# mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/uart.c openwsn/uart_ow.c
+# mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/leds.c openwsn
+# mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/board.c openwsn/board_ow.c
+# mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/board_info.h openwsn
+# mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/radiotimer.c openwsn
+# mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/eui64.c openwsn
+# mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/telosb/debugpins.c openwsn
+# mv openwsn-fw-RB-1.4/firmware/openos/bsp/chips/cc2420/radio.c openwsn
+# mv openwsn-fw-RB-1.4/firmware/openos/bsp/chips/cc2420/cc2420.h openwsn
+
+#
+# common BSP files
+_out "common..."
 mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/board.h openwsn/board_ow.h
 mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/debugpins.h openwsn
 mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/eui64.h openwsn
-mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/leds.h openwsn
+mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/leds.h openwsn/leds_ow.h
 mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/radio.h openwsn
 mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/radiotimer.h openwsn
 mv openwsn-fw-RB-1.4/firmware/openos/bsp/boards/uart.h openwsn/uart_ow.h
 mv openwsn-fw-RB-1.4/firmware/openos/bsp/chips/spi.h openwsn
-mv openwsn-fw-RB-1.4/firmware/openos/bsp/chips/cc2420/radio.c openwsn
-mv openwsn-fw-RB-1.4/firmware/openos/bsp/chips/cc2420/cc2420.h openwsn
 mv openwsn-fw-RB-1.4/firmware/openos/drivers/common/openhdlc.* openwsn
 mv openwsn-fw-RB-1.4/firmware/openos/drivers/common/opentimers.* openwsn
 mv openwsn-fw-RB-1.4/firmware/openos/drivers/common/openserial.{c,h} openwsn
 mv openwsn-fw-RB-1.4/firmware/openos/kernel/openos/scheduler.{c,h} openwsn
-printf "[OK]\n"
-printf  "Removing files not needed ... "
+
+#
+# iot-lab_M3 BSPs
+_out "BSPs..."
+touch openwsn/Systick.{c,h}
+touch openwsn/at86rf231.h
+touch openwsn/board_info.h
+touch openwsn/board_ow.c
+touch openwsn/debugpins.c
+touch openwsn/eui64.c
+touch openwsn/exti.c
+touch openwsn/gpio.{c,h}
+touch openwsn/nvic.{c,h}
+touch openwsn/leds_ow.c
+touch openwsn/radio.c
+touch openwsn/radiotimer.c
+touch openwsn/rcc.{c,h}
+touch openwsn/spi.c
+touch openwsn/stm32f10x_lib.h
+touch openwsn/uart_ow.c
+touch openwsn/isr.c
+_out "[OK]\n"
+
+_out  "Removing files not needed ... "
 # remove all *dox files
 for i in `find ./openwsn -name "*.dox"`; do
 rm -f $i
@@ -36,9 +71,9 @@ done
 
 rm -f openwsn/SConscript
 rm -rf openwsn/02.5-MPLS
-printf "[OK]\n"
+_out "[OK]\n"
 
-printf  "Initialize Makefile structure ..."
+_out  "Initialize Makefile structure ..."
 # create empty Makefiles
 touch openwsn/Makefile
 
@@ -61,20 +96,18 @@ rm -f openwsn/07-App/rxl1/Makefile \
         openwsn/07-App/layerdebug/Makefile \
         openwsn/07-App/imu/Makefile \
         openwsn/07-App/heli/Makefile
-printf "[OK]\n"
-
-mkdir openwsn/07-App/r6tus
-touch openwsn/07-App/r6tus/r6tus.c
-touch openwsn/07-App/r6tus/r6tus.h
+_out "[OK]\n"
 
-printf  "Clean up ..."
+_out  "Clean up ..."
 # clean not need files
 rm -rf openwsn-fw-RB-1.4
-printf "[OK]\n"
+_out "[OK]\n"
 
-printf  "Remove CRLF line endings ... "
+_out  "Remove CRLF line endings ... "
 # deal with crlf line endings
 for i in `find ./openwsn -type f`; do
 perl -pi -e 's/\r\n/\n/g' $i
 done
-printf "[OK]\n"
+_out "[OK]\n"
+
+exit 0
-- 
GitLab