当前位置:   article > 正文

UP智能家居系统之节点cc2530源码分析(2)_无线传感网cc2530人体感应代码

无线传感网cc2530人体感应代码

数据进入到endpoint后的流向.

以OTA_CMD_GET_NWK_TOPO_REQ 为例.

case AF_INCOMING_MSG_CMD:
  1. case OTA_CMD_GET_NWK_TOPO_REQ:
  2. HalLedBlink( HAL_LED_1, 2, 50, (1000 / 4) );
  3. SampleApp_ProcessGET_NWK_TOPO_REQ();
		/*根据gSensorType 等变量构建发送包.并调用  (如果要采集传感器(非中断型)数据可以在这里调用采集函数)
SampleApp_SendNwkData(0x0000, SAMPLEAPP_OTA_NWK_CLUSTERID, data, len); 发送
  1. AF_DataRequest */
  2. break;


ps:温湿度sht11芯片传感器采集函数,对这个系统的osal还不太熟.下次再写一篇分析这个芯片的linux驱动:

  1. if(gSensorType == (sensor_t)SENSOR_SHT11){
  2. if(GetHumiAndTemp(temp) == 0){
  3. data[17] = temp[0];
  4. data[18] = temp[1];
  5. data[19] = temp[2];
  6. data[20] = temp[3];
  7. }

pss:这个芯片很多人说是i2c接口的.其实它的时序根本不符合i2c规范,它的地址是固定的,它的数据是7位的.所以它根本不能当成i2c设备注册到linux内核,厂家提供的实现驱动中只是模拟它的时序实现读写.



另外,中断型传感器的路由器支持异步发送的:

  1. /* comment add by @wei
  2. * 发生中断则将标志位 置位
  3. */
  4. HAL_ISR_FUNCTION(halP12isr,P1INT_VECTOR){
  5. if(P1IFG & 0x04) //中断
  6. {
  7. gIntFlag = 0x01;
  8. HalUARTWrite ( 0, "\rINT2\r", 6 );
  9. if(gSensorMode==0x01)
  10. osal_set_event(SampleApp_TaskID,SAMPLEAPP_SEND_SENSOR_INT_EVT); //注册中断发送事件
  11. Delay(100);
  12. P1IFG &= ~(0x04);
  13. }
  14. P1IF = 0; //清中断标志
  15. }
注册事件后,事件就会加入任务队列:

  1. uint16 SampleApp_ProcessEvent( uint8 task_id, uint16 events )
  2. {
  3.     afIncomingMSGPacket_t *MSGpkt;
  4.     (void)task_id;  // Intentionally unreferenced parameter
  5.     
  6.     if ( events & SYS_EVENT_MSG )
  7.     {
//.......
  1. if ( events & SAMPLEAPP_SEND_SENSOR_INT_EVT ) //中断类型传感器节点注册中断事件后处理函数
  2. {
  3. SampleApp_Process_SENSOR_INT();
  4. return ( events ^ SAMPLEAPP_SEND_SENSOR_INT_EVT);
  5. }

SampleApp_Process_SENSOR_INT  最终构建并发送了这样一个数据包:

cmd + datalen +nwkaddr +gSensorType +data

1      +1           +2                       +1                    +4


在zigbee网络事件处理中(以下是协调器的处理代码)

  1. case OTA_CMD_RPT_SENSOR_STATUS:
  2. HalLedBlink( HAL_LED_1, 2, 50, (1000 / 4) );
  3. SampleApp_ProcessGET_SENSOR_STATUS_RSP(pkt);
			-->SampleApp_BuildAndSendZToolResponse( NODEINFO_CMD_GET_SENSOR_STATUS_RSP, datalen, (pkt->cmd.Data)+2);
              break;
最终 协调器SampleApp_BuildAndSendZToolResponse
构建了这样一个包通过串口发送回去

/*@wei
sof HI_UINT16(callbackID)  LO_UINT16(callbackID) dataLen  data[n]((pkt->cmd.Data)+2)  FCS
*/
ps:"sof" mean start of frame . fcs是某种校验算法算出来的结果.

//end 中断型传感器的路由器支持异步发送


还有一个实际使用中用得到的命令就是OTA_CMD_SET_SENSOR_STATUS_REQ 了. 原理也差不多不做分析.

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/码创造者/article/detail/902129?site
推荐阅读
相关标签
  

闽ICP备14008679号