热度 21
2013-7-31 21:00
3720 次阅读|
6 个评论
之前的帖子提供了简单点对多点通信协议的快速入门函数库的库文件和例程,本帖开放其源代码。 本帖附件中包含了一套自组织网络通信协议栈,基于密西西比州立大学的Robert Reese教授(http://www.ece.msstate.edu/~reese/)的MSSTATE LRWPAN协议栈代码修改,除了移植到CC2530外,简化了用户接口,修改了部分消息处理机制。 附件中除了包含库文件和示范例程外,包含了协议栈的源代码。 使用本源代码,请遵守常见的开源Copyright协议。 本库文件可能有BUG和考虑不周的地方,在节点数目多、传输数据量大时有可能会死机,仅适合学习使用。 要快速建立能自行组网的应用,请参考LibTestApp下的示例。其中Coordinator是网关的工程目录,RFD是终端的工程目录。 对于网关,主要代码为: int main( void ) { short ret; init(); // while (1) { ret = modRfStackFormNetwork(); // 创建网络 if (ret == 0) { modSetLedState(0,1); break; } } while(1) { modRfStackDoService(); // 循环执行协议栈 //应用代码 } //应用层处理函数 } void init() { modMcuInit(); modLedInit(); //init RF stack modRfStackSetRxCallback(myRxCallback ); // 协议栈初始化 modRfStackInit(); } int8 myRxCallback(uint16 vSrcShortAddr, uint16 vDestShortAddr, uint8 vSize, uint8* vPacket, int16 vRssi){ //收到消息后的应用处理代码 modSetLedState(1,2); return 0; } 对于终端,主要代码为: int main( void ) { int8 ret; uint16 iMyAddr=0, iParentAddr=0, iPktSeqNum=0; init(); //init send buffer unsigned char mPacket ="123456"; // while (1) { ret = modRfStackJoinNetwork(); // 加入网络 if (ret == 0) { modSetLedState(0,1); break; } } iMyAddr=modRfStackGetMyShortAddress(); iParentAddr=modRfStackGetParentShortAddress(); mPacket =iMyAddr8; mPacket =iMyAddr0x0FF; mPacket =iParentAddr8; mPacket =iParentAddr0x0FF; while(1) { //应用代码 modDelay(1000); mPacket =iPktSeqNum8; mPacket =iPktSeqNum0x0FF; iPktSeqNum++; modRfStackSendPkt(0,6,mPacket); //发送消息 modRfStackDoService(); //循环执行协议栈 modSetLedState(1,2); } } void init() { modMcuInit(); modLedInit(); //init RF stack modRfStackSetRxCallback(myRxCallback ); // 协议栈初始化 modRfStackInit(); } int8 myRxCallback(uint16 vSrcShortAddr, uint16 vDestShortAddr, uint8 vSize, uint8* vPacket, int16 vRssi){ //收到消息的处理 modSetLedState(1,2); return 0; } 可见,实现十分简单。便于开发者关注应用部分,快速进行开发实现。