Esempio n. 1
0
    /**
     * 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);
        }
    }
Esempio n. 2
0
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);
	}
}