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

📄 simplemacm.nc

📁 Develop Zigbee network real-time Os
💻 NC
字号:
/*  Copyright (C) 2004 Klaus S. Madsen <klaussm@diku.dk>  Copyright (C) 2006 Marcus Chang <marcus@diku.dk>  This program is free software; you can redistribute it and/or modify  it under the terms of the GNU General Public License as published by  the Free Software Foundation; either version 2 of the License, or  (at your option) any later version.  This program is distributed in the hope that it will be useful,  but WITHOUT ANY WARRANTY; without even the implied warranty of  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  GNU General Public License for more details.  You should have received a copy of the GNU General Public License  along with this program; if not, write to the Free Software  Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA*/module SimpleMacM {	provides {		interface SimpleMac;        interface Init;		interface StdControl as SimpleMacControl;	}	uses {		interface HALCC2420;        interface StdControl as HALCC2420Control; 		interface StdOut;	}}implementation {	packet_t receivedPacket;	packet_t * receivedPacketPtr;		const mac_addr_t * shortAddress;/**************************************************************************************************** StdControl**************************************************************************************************/	task void initTask();	/**********************************************************************	 * Init	 *********************************************************************/	command error_t Init.init() 	{		post initTask();		receivedPacketPtr = &receivedPacket;			return SUCCESS;	}	task void initTask()	{		shortAddress = call HALCC2420.getAddress();	}	/**********************************************************************	 * Start/Stop	 *********************************************************************/	command error_t SimpleMacControl.start()	{				return call HALCC2420Control.start();		}		command error_t SimpleMacControl.stop()	{				return call HALCC2420Control.stop();	}/**************************************************************************************************** Transmit related**************************************************************************************************/	/**********************************************************************	 * sendPacket	 *********************************************************************/	uint8_t transmitbuffer[128];	packet_t * sendPacketPtr;		command error_t SimpleMac.sendPacket(packet_t * packet) 	{		uint8_t i, length;		atomic sendPacketPtr = packet;		/* Repack from packet_t to uint8_t array */				length = packet->length;		transmitbuffer[0] = length;				/* use beacon packets to circumvent 802.15.4 addressing */		/* set bit 0-2 low in FCF to indicate beacon packet     */		/* the last 13 bits can be used at leisure              */		transmitbuffer[1] = (packet->fcf & 0x00F8); // set bit 0-2 low to indicate beacon packet		transmitbuffer[2] = (packet->fcf >> 8);				transmitbuffer[3] = packet->data_seq_no;		transmitbuffer[4] = (packet->dest & 0x00FF);		transmitbuffer[5] = (packet->dest >> 8);		transmitbuffer[6] = *shortAddress & 0x00FF; // (transmitPacketPtr->src & 0x00FF);		transmitbuffer[7] = *shortAddress >> 8; // (transmitPacketPtr->src >> 8);		for (i = 8; i < length - 1; i++) 		{			transmitbuffer[i] = packet->data[i - 8];		}				transmitbuffer[length - 1] = 0; // transmitPacketPtr->fcs.rssi;		transmitbuffer[length] = 0; // transmitPacketPtr->fcs.correlation;		return call HALCC2420.sendPacket(transmitbuffer);	}	error_t sendPacketResult;		task void signalSendPacketDone()	{		error_t tmp;				atomic tmp = sendPacketResult;				signal SimpleMac.sendPacketDone(sendPacketPtr, tmp);	}	async event void HALCC2420.sendPacketDone(uint8_t * packet, error_t result)	{		atomic sendPacketResult = result;		post signalSendPacketDone();	}	/**********************************************************************	 * setChannel	 *********************************************************************/	command error_t SimpleMac.setChannel(uint8_t channel) 	{		return call HALCC2420.setChannel(channel);	}			/**********************************************************************	 * setTransmitPower	 *********************************************************************/	command error_t SimpleMac.setTransmitPower(uint8_t power)	{		return call HALCC2420.setTransmitPower(power);	}		/**********************************************************************	 * rxEnable	 *********************************************************************/	command error_t SimpleMac.rxEnable()	{		return call HALCC2420.rxEnable();	}		/**********************************************************************	 * rxDisable	 *********************************************************************/	command error_t SimpleMac.rxDisable()	{		return call HALCC2420.rxDisable();	}/**************************************************************************************************** Receive related**************************************************************************************************/	event uint8_t * HALCC2420.receivedPacket(uint8_t * packet)	{		uint8_t length, i;		uint16_t tmp;		/* Repack from uint8_t array to packet_t */		length = packet[0];			receivedPacketPtr->length = length;		tmp = packet[2];		tmp = (tmp << 8) + packet[1];		receivedPacketPtr->fcf = tmp;		receivedPacketPtr->data_seq_no = packet[3];		tmp = packet[5];		tmp = (tmp << 8) + packet[4];		receivedPacketPtr->dest = tmp;		tmp = packet[7];		tmp = (tmp << 8) + packet[6];		receivedPacketPtr->src = tmp;		for (i = 8; i < length - 1; i++) 		{			receivedPacketPtr->data[i - 8] = packet[i];		}		receivedPacketPtr->fcs.rssi = packet[length - 1];		receivedPacketPtr->fcs.correlation = packet[length];		receivedPacketPtr = signal SimpleMac.receivedPacket(receivedPacketPtr);				return packet;	}/**************************************************************************************************** Adressing**************************************************************************************************/	/**********************************************************************	 * setShortAddress	 *********************************************************************/	command error_t SimpleMac.setAddress(mac_addr_t *addr)	{		return call HALCC2420.setAddress(addr);	}		/**********************************************************************	 * getShortAddress	 *********************************************************************/	command const mac_addr_t * SimpleMac.getAddress()	{		return call HALCC2420.getAddress();	}		/**********************************************************************	 * setPANAddress	 *********************************************************************/	command error_t SimpleMac.setPanAddress(mac_addr_t *addr)	{		return call HALCC2420.setPanAddress(addr);	}		/**********************************************************************	 * getShortAddress	 *********************************************************************/	command const mac_addr_t * SimpleMac.getPanAddress()	{		return call HALCC2420.getPanAddress();	}		/**********************************************************************	 * getExtAddress	 *********************************************************************/	command const ieee_mac_addr_t * SimpleMac.getExtAddress()	{		return call HALCC2420.getExtAddress();	}	/**********************************************************************	 * Hardware Address Filtering	 *********************************************************************/	command error_t SimpleMac.addressFilterEnable()	{		return call HALCC2420.addressFilterEnable();	}		command error_t SimpleMac.addressFilterDisable()	{		return call HALCC2420.addressFilterDisable();	}/*************************************************************************************************** StdOut*************************************************************************************************/		async event void StdOut.get(uint8_t data) {	}}

⌨️ 快捷键说明

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