/** * Handle a new Received Message * @param src_addr the source of the message * @param len the length of the message * @param buf the data of the message */ void receive(node_id_t src_addr, Os::TxRadio::size_t len, block_data_t * buf) { debug_payload((uint8_t*) buf, len, src_addr); //check for the air quality sensor if (check_air_quality(src_addr, len, buf)) { debug_->debug("check_air_quality"); return; } #ifdef CORE_COLLECTOR //check if an actuation command if (check_led(src_addr, len, buf)) return; #endif if (!is_gateway()) { //if not a gateway check only for a GatewayBeaconMsg if (check_gateway(src_addr, len, buf)) return; } else { //if a gateway check the message for readings to report //check for a CollectorMsg check_collector(src_addr, len, buf); } }
void main() { u16 i; u8 dir=0,height=0,cmd=0; u8 color=0,light=0; u8 temp; u8 d,h; Timer0Init(); Timer1Init(); usart_init(9600); //SendString("mcu is working!\n"); while(1) { /*获取地址*/ block=P2&0x0f; pole=(P3&0xf0)>>4; /*串口接收处理*/ if(USART_RX_STA==STA_OK) { for(i=0;i<USART_REC_LEN;i++)//返回数据 { SendData(USART_RX_BUF[i]); } if(USART_RX_BUF[0]==0)//群发数据 { cmd = USART_RX_BUF[1]; switch(cmd) { case 1:Display_ALL();break;//同步 case 2:OFF_ALL();break;//复位 case 3:break;//呼吸灯 case 4:color = USART_RX_BUF[2]; light = USART_RX_BUF[3]; LED_ALL_ON(color,light);break;//跑马灯 case 5:check_led();break;//检测 case 6:WriteData(IAP_ADDRESS,480,EEPROM_TEMP);break;//将缓存区数据存入EEPORM case 7:ReadRGB_EEPORM_ByID(IAP_ADDRESS,1);break; case 8:for(i=0;i<ONE_SECTOR;i++) { temp = IAP_ReafByte(IAP_ADDRESS+i); SendData(temp); }break;//读取EEPROM数据 case 9:ET0=0; SendData(block);//返回目标地址 SendData(pole);break; case 10:ET0=1;break; } SendData(cmd);//返回命令字 } else if(USART_RX_BUF[0]>0)//单个目标数据 { if(USART_RX_BUF[0]==block&&USART_RX_BUF[1]==pole)//是否为目标地址 { RGB_DATA.dir = USART_RX_BUF[2];//获取方向值 RGB_DATA.height = USART_RX_BUF[3];//获取高度值 RGB_DATA.rgb[0] = USART_RX_BUF[4];//获取数据值 RGB_DATA.rgb[1] = USART_RX_BUF[5]; RGB_DATA.rgb[2] = USART_RX_BUF[6]; RGB_DATA.id = USART_RX_BUF[7];//获得帧ID // rgb =&USART_RX_BUF[4];//获取数据值 // // SetRGB(dir,height,rgb);//设置数据值 WriteRGB_EEPROMTemp(EEPROM_TEMP,RGB_DATA); // SendData(block);//返回目标地址 // SendData(pole); } } USART_RX_STA=STA0; USART_REC_LEN=0; } for(d=1;d<=4;d++) for(h=1;h<=4;h++) BreathingLight(d,h,1,60); } }