From c8b720e13dac50511c5b7def4286bff973ea20bb Mon Sep 17 00:00:00 2001 From: janhauer Date: Wed, 10 Jun 2009 09:23:45 +0000 Subject: [PATCH] New app testing indirect transmissions in nonbeacon-enabled mode, written by Jasper Buesch --- .../TestIndirectData/README.txt | 50 ++++++ .../TestIndirectData/app_profile.h | 46 ++++++ .../TestIndirectData/coordinator/Makefile | 3 + .../coordinator/TestIndirectDataCoordAppC.nc | 58 +++++++ .../coordinator/TestIndirectDataCoordC.nc | 151 ++++++++++++++++++ .../TestIndirectData/device/Makefile | 3 + .../device/TestIndirectDataDeviceAppC.nc | 54 +++++++ .../device/TestIndirectDataDeviceC.nc | 107 +++++++++++++ 8 files changed, 472 insertions(+) create mode 100644 apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/README.txt create mode 100644 apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/app_profile.h create mode 100644 apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/coordinator/Makefile create mode 100644 apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/coordinator/TestIndirectDataCoordAppC.nc create mode 100644 apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/coordinator/TestIndirectDataCoordC.nc create mode 100644 apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/device/Makefile create mode 100644 apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/device/TestIndirectDataDeviceAppC.nc create mode 100644 apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/device/TestIndirectDataDeviceC.nc diff --git a/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/README.txt b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/README.txt new file mode 100644 index 00000000..ab726cb3 --- /dev/null +++ b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/README.txt @@ -0,0 +1,50 @@ +README for TestIndirectData +Author/Contact: tinyos-help@millennium.berkeley.edu + +Description: + +In this application one node takes the role of a PAN coordinator in a +nonbeacon-enabled 802.15.4 PAN; it switches its radio to receive mode and +creates a packet which is addressed to the predefined address of the device. +This packet is marked as indirect transmissions, therefore queued and sent only +after explicit poll of the device. After a successful transmission another +packet is created after a definite time. + +A second node acts as the device; it switches to the pre-defined channel and +polls the coordinator in predefined intervals for outstanding indirect +transmissions. + +A few basic parameters of this example can be adjusted through the +'app_profile.h' file. + +Leds: On the coordinator the second LED (Telos: green) flashes whenever a +packet for an indirect transmission is created and queued. When this packet +has not been polled by the device within the transaction time, the packet is +discarded which is displayed by the first led (Telos: red). On the device the +third LED (Telos: blue) flashes when after a poll of the coordinator an +indirect transmission arrives. + + +Tools: NONE + +Usage: + +1. Install the coordinator: + + $ cd coordinator; make install + +2. Install one (or more) devices: + + $ cd device; make install + +You can change some of the configuration parameters in app_profile.h + +Known bugs/limitations: + +- Many TinyOS 2 platforms do not have a clock that satisfies the + precision/accuracy requirements of the IEEE 802.15.4 standard (e.g. + 62.500 Hz, +-40 ppm in the 2.4 GHz band); in this case the MAC timing + is not standard compliant + +$Id$o + diff --git a/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/app_profile.h b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/app_profile.h new file mode 100644 index 00000000..a3083327 --- /dev/null +++ b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/app_profile.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2009, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jasper Buesch + * ======================================================================== + */ + +#ifndef __APP_PROFILE_H +#define __APP_PROFILE_H + +enum { + RADIO_CHANNEL = 26, + PAN_ID = 0x4927, + COORDINATOR_ADDRESS = 0x6287, + DEVICE_ADDRESS = 0x6288 +}; + +#endif diff --git a/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/coordinator/Makefile b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/coordinator/Makefile new file mode 100644 index 00000000..ebe71b30 --- /dev/null +++ b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/coordinator/Makefile @@ -0,0 +1,3 @@ +COMPONENT=TestIndirectDataCoordAppC +CFLAGS += -I$(shell pwd)/.. +include ../../../Makefile.include diff --git a/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/coordinator/TestIndirectDataCoordAppC.nc b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/coordinator/TestIndirectDataCoordAppC.nc new file mode 100644 index 00000000..d5fac24b --- /dev/null +++ b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/coordinator/TestIndirectDataCoordAppC.nc @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2009, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jasper Buesch + * ======================================================================== + */ + +configuration TestIndirectDataCoordAppC +{ +} implementation { + components MainC, LedsC, Ieee802154NonBeaconEnabledC as MAC; + components TestIndirectDataCoordC as App; + components new Timer62500C() as Timer1; + components new Timer62500C() as Timer2; + components new Timer62500C() as Timer3; + + MainC.Boot <- App; + App.MCPS_DATA -> MAC; + App.Frame -> MAC; + App.Packet -> MAC; + App.DataTimer -> Timer1; + App.Led1Timer -> Timer2; + App.Led0Timer -> Timer3; + + App.Leds -> LedsC; + App.MLME_RESET -> MAC; + App.MLME_SET -> MAC; + App.MLME_GET -> MAC; + App.MLME_START -> MAC; +} diff --git a/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/coordinator/TestIndirectDataCoordC.nc b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/coordinator/TestIndirectDataCoordC.nc new file mode 100644 index 00000000..1997631d --- /dev/null +++ b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/coordinator/TestIndirectDataCoordC.nc @@ -0,0 +1,151 @@ +/* + * Copyright (c) 2009, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jasper Buesch + * ======================================================================== + */ + +#include "TKN154.h" +#include "app_profile.h" +module TestIndirectDataCoordC +{ + uses { + interface Boot; + interface MLME_RESET; + interface MLME_START; + interface MLME_SET; + interface MLME_GET; + interface MCPS_DATA; + interface IEEE154Frame as Frame; + interface Leds; + interface Packet; + interface Timer as DataTimer; + interface Timer as Led1Timer; + interface Timer as Led0Timer; + } +} implementation { + + message_t frame; + uint8_t *payloadRegion; + uint8_t m_payloadLen; + + char payload[] = "TestIndirect, Coordinator talking now!"; + + void sendIndirectData(); + + event void Boot.booted() { + m_payloadLen = strlen(payload); + payloadRegion = call Packet.getPayload(&frame, m_payloadLen); + if (m_payloadLen <= call Packet.maxPayloadLength()){ + memcpy(payloadRegion, payload, m_payloadLen); + call MLME_RESET.request(TRUE); + } + } + + event void MLME_RESET.confirm(ieee154_status_t status) + { + if (status != IEEE154_SUCCESS) + return; + call MLME_SET.macShortAddress(COORDINATOR_ADDRESS); + call MLME_SET.macAssociationPermit(FALSE); + call MLME_SET.macRxOnWhenIdle(TRUE); + call MLME_START.request( + PAN_ID, // PANId + RADIO_CHANNEL, // LogicalChannel + 0, // ChannelPage, + 0, // StartTime, + 15, // BeaconOrder + 15, // SuperframeOrder + TRUE, // PANCoordinator + FALSE, // BatteryLifeExtension + FALSE, // CoordRealignment + NULL, // no realignment security + NULL // no beacon security + ); + } + + void sendIndirectData(){ + ieee154_address_t deviceAddress; + deviceAddress.shortAddress = DEVICE_ADDRESS; + call Frame.setAddressingFields( + &frame, + ADDR_MODE_SHORT_ADDRESS, // SrcAddrMode, + ADDR_MODE_SHORT_ADDRESS, // DstAddrMode, + PAN_ID, // DstPANId, + &deviceAddress, // DstAddr, + NULL // security + ); + call MCPS_DATA.request( + &frame, // frame, + strlen(payload), // payloadLength, + 0, // msduHandle, + TX_OPTIONS_INDIRECT | TX_OPTIONS_ACK // TxOptions, + ); + call Leds.led1On(); + call Led1Timer.startOneShot(12500U); + } + + event void MLME_START.confirm(ieee154_status_t status) { + sendIndirectData(); + } + + event void DataTimer.fired(){ + sendIndirectData(); + } + + event void Led1Timer.fired(){ + call Leds.led1Off(); + } + + event void MCPS_DATA.confirm( + message_t *msg, + uint8_t msduHandle, + ieee154_status_t status, + uint32_t Timestamp + ) + { + if(status == IEEE154_TRANSACTION_EXPIRED){ + call Leds.led0On(); + call Led0Timer.startOneShot(125000U); + sendIndirectData(); + }else if(status == SUCCESS){ + call DataTimer.startOneShot(125000U); + } + } + + event void Led0Timer.fired(){ + call Leds.led0Off(); + } + + event message_t* MCPS_DATA.indication ( message_t* frame__ ){ + return frame__; + } +} diff --git a/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/device/Makefile b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/device/Makefile new file mode 100644 index 00000000..7ca4abd3 --- /dev/null +++ b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/device/Makefile @@ -0,0 +1,3 @@ +COMPONENT=TestIndirectDataDeviceAppC +CFLAGS += -I$(shell pwd)/.. +include ../../../Makefile.include diff --git a/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/device/TestIndirectDataDeviceAppC.nc b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/device/TestIndirectDataDeviceAppC.nc new file mode 100644 index 00000000..ce3e780a --- /dev/null +++ b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/device/TestIndirectDataDeviceAppC.nc @@ -0,0 +1,54 @@ +/* + * Copyright (c) 2009, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jasper Buesch + * ======================================================================== + */ + +configuration TestIndirectDataDeviceAppC +{ +} implementation { + components MainC, LedsC, Ieee802154NonBeaconEnabledC as MAC, + new Timer62500C() as Timer1, + new Timer62500C() as Timer2; + components TestIndirectDataDeviceC as App; + + MainC.Boot <- App; + App.MCPS_DATA -> MAC; + App.Leds -> LedsC; + App.MLME_RESET -> MAC; + App.MLME_SET -> MAC; + App.MLME_GET -> MAC; + App.PollTimer -> Timer1; + App.Led2Timer -> Timer2; + App.MLME_POLL -> MAC; + +} diff --git a/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/device/TestIndirectDataDeviceC.nc b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/device/TestIndirectDataDeviceC.nc new file mode 100644 index 00000000..9224c66a --- /dev/null +++ b/apps/tests/tkn154/nonbeacon-enabled/TestIndirectData/device/TestIndirectDataDeviceC.nc @@ -0,0 +1,107 @@ +/* + * Copyright (c) 2009, Technische Universitaet Berlin + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * - Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * - Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * - Neither the name of the Technische Universitaet Berlin nor the names + * of its contributors may be used to endorse or promote products derived + * from this software without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT + * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, + * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED + * TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, + * OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY + * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE + * USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + * + * - Revision ------------------------------------------------------------- + * $Revision$ + * $Date$ + * @author: Jasper Buesch + * ======================================================================== + */ + +#include "TKN154.h" +#include "app_profile.h" +module TestIndirectDataDeviceC +{ + uses { + interface Boot; + interface MCPS_DATA; + interface MLME_RESET; + interface MLME_SET; + interface MLME_GET; + interface MLME_POLL; + interface Leds; + interface Timer as PollTimer; + interface Timer as Led2Timer; + } +} implementation { + + void startApp(); + + event void Boot.booted() { + call MLME_RESET.request(TRUE); + } + + event void MLME_RESET.confirm(ieee154_status_t status) + { + if (status == IEEE154_SUCCESS) + startApp(); + } + + void startApp() + { + call MLME_SET.macAutoRequest(FALSE); + call MLME_SET.macPANId(PAN_ID); + call MLME_SET.macCoordShortAddress(COORDINATOR_ADDRESS); + call MLME_SET.macShortAddress(DEVICE_ADDRESS); + call PollTimer.startPeriodic(62500U); + } + + event void PollTimer.fired(){ + // check the coordinator for outstanding transmissions + ieee154_address_t coordAdr; + coordAdr.shortAddress = COORDINATOR_ADDRESS; + call MLME_POLL.request ( + ADDR_MODE_SHORT_ADDRESS, + PAN_ID, + coordAdr, + NULL + ); + } + + event void MLME_POLL.confirm ( + ieee154_status_t status + ){} + + event void MCPS_DATA.confirm( + message_t *msg, + uint8_t msduHandle, + ieee154_status_t status, + uint32_t Timestamp + ){} + + event message_t* MCPS_DATA.indication ( message_t* frame__ ){ + call Leds.led2On(); + call Led2Timer.startOneShot(12500U); + return frame__; + } + + event void Led2Timer.fired(){ + call Leds.led2Off(); + } + +} -- 2.39.2