⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 radiocounttodiagp.nc

📁 tinyos2.0版本驱动
💻 NC
字号:
/* * Copyright (c) 2007, Vanderbilt University * All rights reserved. * * Permission to use, copy, modify, and distribute this software and its * documentation for any purpose, without fee, and without written agreement is * hereby granted, provided that the above copyright notice, the following * two paragraphs and the author appear in all copies of this software. *  * IN NO EVENT SHALL THE VANDERBILT UNIVERSITY BE LIABLE TO ANY PARTY FOR * DIRECT, INDIRECT, SPECIAL, INCIDENTAL, OR CONSEQUENTIAL DAMAGES ARISING OUT * OF THE USE OF THIS SOFTWARE AND ITS DOCUMENTATION, EVEN IF THE VANDERBILT * UNIVERSITY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. *  * THE VANDERBILT UNIVERSITY SPECIFICALLY DISCLAIMS ANY WARRANTIES, * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY * AND FITNESS FOR A PARTICULAR PURPOSE.  THE SOFTWARE PROVIDED HEREUNDER IS * ON AN "AS IS" BASIS, AND THE VANDERBILT UNIVERSITY HAS NO OBLIGATION TO * PROVIDE MAINTENANCE, SUPPORT, UPDATES, ENHANCEMENTS, OR MODIFICATIONS. * * Author: Miklos Maroti */module RadioCountToDiagP{	uses	{		interface Boot;		interface DiagMsg;		interface Timer<TMilli> as SendTimer;		interface Timer<TMilli> as ReportTimer;		interface Receive;		interface AMSend;		interface PacketAcknowledgements;		interface AMPacket;		interface Packet;		interface SplitControl as SerialControl;		interface SplitControl as RadioControl;		interface ActiveMessageAddress;		interface LowPowerListening;	}}#ifndef SEND_PERIOD#define SEND_PERIOD 10#endif#ifndef SLEEP_INTERVAL#define SLEEP_INTERVAL	50#endifimplementation{	task void radioPowerUp()	{		if( call RadioControl.start() != SUCCESS )			post radioPowerUp();	}	event void RadioControl.startDone(error_t error)	{		if( error != SUCCESS )			post radioPowerUp();		else		{#ifdef LOW_POWER_LISTENING			call LowPowerListening.setLocalSleepInterval(SLEEP_INTERVAL);#endif					call SendTimer.startPeriodic(SEND_PERIOD);			call ReportTimer.startPeriodic(1000);		}	}	event void RadioControl.stopDone(error_t error)	{	}		task void serialPowerUp()	{		if( call SerialControl.start() != SUCCESS )			post serialPowerUp();	}	event void SerialControl.startDone(error_t error)	{		if( error != SUCCESS )			post serialPowerUp();		else			post radioPowerUp();	}	event void SerialControl.stopDone(error_t error)	{	}	event void Boot.booted()	{		post serialPowerUp();	}	async event void ActiveMessageAddress.changed()	{	}	uint32_t sendCount;	uint32_t sendDoneSuccess;	uint32_t sendDoneError;	uint32_t ackedCount;	uint32_t ackedError;	uint32_t receiveCount;	uint32_t receiveMissed;	event void ReportTimer.fired()	{		if( call DiagMsg.record() )		{			call DiagMsg.uint16(sendCount);			call DiagMsg.uint16(sendDoneSuccess);			call DiagMsg.uint16(sendDoneError);			call DiagMsg.uint16(ackedCount);			call DiagMsg.uint16(ackedError);			call DiagMsg.uint16(receiveCount);			call DiagMsg.uint16(receiveMissed);			call DiagMsg.send();		}	}	message_t txMsg;	typedef struct ping_t	{		uint8_t seqNo;		uint8_t stuff[27];	} ping_t;	event void SendTimer.fired()	{		uint16_t addr;		call Packet.clear(&txMsg);		call PacketAcknowledgements.requestAck(&txMsg);#ifdef LOW_POWER_LISTENING		call LowPowerListening.setRxSleepInterval(&txMsg, SLEEP_INTERVAL);#endif		addr = call ActiveMessageAddress.amAddress();		if( addr == 2 )			addr = 3;		else if( addr == 3 )			addr = 2;		else			addr = AM_BROADCAST_ADDR;		if( call AMSend.send(addr, &txMsg, sizeof(ping_t)) == SUCCESS )			++sendCount;	}	event void AMSend.sendDone(message_t* msg, error_t error)	{		if( error == SUCCESS )		{			ping_t* ping = (ping_t*)txMsg.data;			++(ping->seqNo);			++sendDoneSuccess;			if( call PacketAcknowledgements.wasAcked(&txMsg) )				++ackedCount;			else				++ackedError;		}		else			++sendDoneError;	}	uint8_t rxSeqNo;	event message_t* Receive.receive(message_t* msg, void* payload, uint8_t len)	{		ping_t* ping = (ping_t*)(msg->data);		++receiveCount;		receiveMissed += (uint8_t)(ping->seqNo - rxSeqNo - 1);		rxSeqNo = ping->seqNo;		return msg;	}}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -