Zigbee网关 Zstack增加串口功能2-修改应用层APP/ZigbeeGateWay.c
2015-11-11 10:03
585 查看
1.定义串口消息结构体
2.在初始化函数中添加
3.在消息处理函数中添加SPI_INCOMING_ZAPP_DATA消息到来的时候对应的消息处理函数
4.写消息处理函数
这里主要实现的回显功能,并且每收到一组字符串指示灯状态变化一下
测试
成功了
修改应用层之前应该先修改底层驱动,详见
Zigbee网关
Zstack增加串口功能1-修改底层驱动MT/MT_UART.c
http://blog.csdn.net/u010615629/article/details/49777767
typedef struct { osal_event_hdr_t hdr; uint8 data; // } UartRx_t;
2.在初始化函数中添加
MT_UartInit (); // SPIMgr_RegisterTaskID( task_id ); MT_UartRegisterTaskID(ZigbeeGateWay_TaskID);
3.在消息处理函数中添加SPI_INCOMING_ZAPP_DATA消息到来的时候对应的消息处理函数
uint16 ZigbeeGateWay_ProcessEvent( uint8 task_id, uint16 events ) { afIncomingMSGPacket_t *MSGpkt; (void)task_id; // Intentionally unreferenced parameter if ( events & SYS_EVENT_MSG ) { MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( ZigbeeGateWay_TaskID ); while ( MSGpkt ) { switch ( MSGpkt->hdr.event ) { #if defined ( APP_UIP ) case UIP_INCOME: APP_uIP_Message_Process(((uIP_Msg_t *)MSGpkt)->msg,((uIP_Msg_t *)MSGpkt)->length); break; #endif // Received when a key is pressed case KEY_CHANGE: ZigbeeGateWay_HandleKeys(((keyChange_t *)MSGpkt)->state, ((keyChange_t *)MSGpkt)->keys); break; // Received when a uart rx data case SPI_INCOMING_ZAPP_DATA: ZigbeeGateWay_HandleUart(((UartRx_t *)MSGpkt)->hdr.status, &(((UartRx_t *)MSGpkt)->data)); break; // Received when a messages is received (OTA) for this endpoint case AF_INCOMING_MSG_CMD: ZigbeeGateWay_MessageMSGCB( MSGpkt ); break; // Received whenever the device changes state in the network case ZDO_STATE_CHANGE: ZigbeeGateWay_NwkState = (devStates_t)(MSGpkt->hdr.status); HalLedSet(HAL_LED_ALL,HAL_LED_MODE_ON); HalLedBlink( HAL_LED_ALL, 6, 50, 80); if ( //(ZigbeeGateWay_NwkState == DEV_ZB_COORD)|| (ZigbeeGateWay_NwkState == DEV_ROUTER) || (ZigbeeGateWay_NwkState == DEV_END_DEVICE) ) { // Start sending the periodic message in a regular interval. osal_start_timerEx( ZigbeeGateWay_TaskID, ZIGBEEGATEWAY_SEND_PERIODIC_MSG_EVT, ZIGBEEGATEWAY_SEND_PERIODIC_MSG_TIMEOUT ); } else { // Device is no longer in the network } break; default: break; } // Release the memory osal_msg_deallocate( (uint8 *)MSGpkt ); // Next - if one is available MSGpkt = (afIncomingMSGPacket_t *)osal_msg_receive( ZigbeeGateWay_TaskID ); } // return unprocessed events return (events ^ SYS_EVENT_MSG); } // Send a message out - This event is generated by a timer // (setup in ZigbeeGateWay_Init()). if ( events & ZIGBEEGATEWAY_SEND_PERIODIC_MSG_EVT ) { // Send the periodic message ZigbeeGateWay_SendPeriodicMessage(); // Setup to send message again in normal period (+ a little jitter) osal_start_timerEx( ZigbeeGateWay_TaskID, ZIGBEEGATEWAY_SEND_PERIODIC_MSG_EVT, (ZIGBEEGATEWAY_SEND_PERIODIC_MSG_TIMEOUT + (osal_rand() & 0x00FF)) ); // return unprocessed events return (events ^ ZIGBEEGATEWAY_SEND_PERIODIC_MSG_EVT); } #if defined ( APP_UIP ) if ( events & UIP_PROCESS_EVT ) { APP_uIP_Process(); return (events ^ UIP_PROCESS_EVT); } #endif // Discard unknown events return 0; }
4.写消息处理函数
void ZigbeeGateWay_HandleUart(uint8 length, uint8* data) { HalLedSet(HAL_LED_2,HAL_LED_MODE_TOGGLE); HalUARTWrite(HAL_UART_PORT,data,length); }
这里主要实现的回显功能,并且每收到一组字符串指示灯状态变化一下
测试
成功了
修改应用层之前应该先修改底层驱动,详见
Zigbee网关
Zstack增加串口功能1-修改底层驱动MT/MT_UART.c
http://blog.csdn.net/u010615629/article/details/49777767
相关文章推荐
- swift 快速奔跑的兔几 本节的内容是:SceneKit 第一说 创建一个3D胶囊
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十五)
- ios的一些开源资源
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十五)
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十五)
- unity3d热更新解决方案,使用ulua插件开发的框架。
- Android 控件最上层显示方法
- Android中解析XML
- Ceph vs Swift - 架构剖析
- android获取屏幕宽高与获取控件宽高
- Android中ListView分页加载数据
- 关于SharePoint 的Client object model该何时load和execut query的一点自己的看法
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十四)
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十四)
- (NO.00003)iOS游戏简单的机器人投射游戏成形记(十四)
- 17个提升iOS开发效率的必用工具
- 详解Android中AsyncTask的使用
- iOS常用三方库
- angularjs $apply 数据绑定,异步赋值
- 网易云加密--Android安卓移动应用程序加密加壳保护方案防破解防逆向分析防游戏外挂