|
推荐
楼主 |
发表于 2016-7-29 17:30:04
|
只看该作者
/*****************************************************
* Function Name : GizWits_ControlDeviceHandle
* Description : Analy P0 Package根据数据有效位标志,进行控制
4.10 WiFi模组控制MCU
WiFi发:
Header(2B)__LEN(2B)__CMD(1B)__sn(1B)__falg(2B)__ActionBit(1B)__attrFlags(1B)__attrValue(6B)__CheckSum(1B)
0xFFFF 0x000D 0x03 0x## 0x0000 0x01 标志位 控制值 0x##
MCU 回通用消息帧:
Header(2B)__LEN(2B)__CMD(1B)__sn(1B)__falg(2B)__CheckSum(1B)
0xFFFF 0x0005 0x04 0x## 0x0000 0x##
Bit0~5ED_ONOFF, LED_Color, R,G,B, Motor_speed
WirteTypeDef_t{
uint8_t Attr_Flags; //信息位 是否有效的标志
uint8_t LED_Cmd;
uint8_t LED_R;
uint8_t LED_G;
uint8_t LED_B;
MOTOR_T Motor;
}
依靠接收的数据帧,存储到WirteTypeDef,再更改设备状态
*****************************************************/
void GizWits_ControlDeviceHandle() //WiFi模组控制MCU
{
//标志位 0位开关 共1个字节
if( (WirteTypeDef.Attr_Flags & (1<<0)) == (1<<0))//低位第0位ONOFF 是否设置标志位7位
{
if((WirteTypeDef.LED_Cmd &(1<<0))== 0)
{
LED_RGB_Control(0,0,0);
LED_OFF(LED1);
ReadTypeDef.LED_Cmd &= ~(1<<0);//存储状态LED_OnOff a&=~(1<<i);//将a的bit i清0
printf("LED OFF \r\n");
}
if((WirteTypeDef.LED_Cmd &(1<<0))== (1<<0))
{
ReadTypeDef.LED_Cmd |= (1<<0);//LED_OnOn a|=1<<i;//将a的bit i置1
LED_ON(LED1);
LED_RGB_Control(254,0,0);//默认打开时,是红色
printf("LED ON \r\n");
}
}
//标志位是否启用定时器
if( (WirteTypeDef.Attr_Flags & (1<<1)) == (1<<1))//低位第1位Time_OnOff
{
if((WirteTypeDef.LED_Cmd & (1<<1))== 0)
{
//LED_RGB_Control(0,0,0);
LED_OFF(LED2);
ReadTypeDef.LED_Cmd &= ~(1<<1);//存储状态LED_OnOff a&=~(1<<i);//将a的bit i清0
printf("Time_OnOff OFF \r\n");
}
if((WirteTypeDef.LED_Cmd & (1<<1)) == (1<<1))
{
ReadTypeDef.LED_Cmd |= (1<<1);//LED_OnOn a|=1<<i;//将a的bit i置1
LED_ON(LED2);
//LED_RGB_Control(254,254,0);//
printf("Time_OnOff ON \r\n");
}
}
//标志位是否启用倒计时
if( (WirteTypeDef.Attr_Flags & (1<<2)) == (1<<2))
{
if((WirteTypeDef.LED_Cmd & (1<<2))== 0)
{
//LED_RGB_Control(0,0,0);
LED_OFF(LED3);
ReadTypeDef.LED_Cmd &= ~(1<<2);//存储状态LED_OnOff a&=~(1<<i);//将a的bit i清0
printf("Count_Down_OnOff OFF \r\n");
TIM_Cmd(TIM4,DISABLE); //失能TIMx外设
time_min = 0;
time_sec = 0;
min_flag = 0;
}
if((WirteTypeDef.LED_Cmd & (1<<2)) == (1<<2))
{
ReadTypeDef.LED_Cmd |= (1<<2);//LED_OnOn a|=1<<i;//将a的bit i置1
LED_ON(LED3);
//LED_RGB_Control(254,254,254);//
printf("Count_Down_OnOff ON \r\n");
CountDown_Minute_time=exchangeBytes(ReadTypeDef.CountDown_Minute);//重新给当前设置的值给倒计时
if(CountDown_Minute_time!=0)
{
TIM_Cmd(TIM4, ENABLE); //使能TIMx外设
}
}
}
//标志位是否重复星期
if( (WirteTypeDef.Attr_Flags & (1<<3)) == (1<<3))
{
ReadTypeDef.Week_Repeat=WirteTypeDef.Week_Repeat;
GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);
}
//标志位定时开机 注:时间以分钟为单位1小时=60分钟=0x3c 存储的是16进制
if( (WirteTypeDef.Attr_Flags & (1<<4)) == (1<<4))
{
printf("Time_On_Minute ON = %d \r\n",exchangeBytes(WirteTypeDef.Time_On_Minute));
if(exchangeBytes(WirteTypeDef.Time_On_Minute)<1441)
{
ReadTypeDef.Time_On_Minute=WirteTypeDef.Time_On_Minute;
CountDown_Time_On_Minute=exchangeBytes(ReadTypeDef.Time_On_Minute);//存储的是高低位改变过的
GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);
}
}
//标志位定时关机
if( (WirteTypeDef.Attr_Flags & (1<<5)) == (1<<5))
{
printf("Time_On_Minute OFF = %d \r\n",exchangeBytes(WirteTypeDef.Time_Off_Minute));
if(exchangeBytes(WirteTypeDef.Time_Off_Minute)<1441)
{
ReadTypeDef.Time_Off_Minute=WirteTypeDef.Time_Off_Minute;
CountDown_Time_Off_Minute=exchangeBytes(ReadTypeDef.Time_Off_Minute);//存储的是高低位改变过的
GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);
}
}
//标志位倒计时
if( (WirteTypeDef.Attr_Flags & (1<<6)) == (1<<6))
{
printf("CountDown_Minute T = %d \r\n",exchangeBytes(WirteTypeDef.CountDown_Minute));
if(exchangeBytes(WirteTypeDef.CountDown_Minute)<1441)
{
ReadTypeDef.CountDown_Minute=WirteTypeDef.CountDown_Minute;
GizWits_DevStatusUpgrade((uint8_t *)&ReadTypeDef, 10*60*1000, 1);
CountDown_Minute_time=exchangeBytes(ReadTypeDef.CountDown_Minute);//当前设置的值给倒计时
if(((ReadTypeDef.LED_Cmd & (1<<2)) == (1<<2))&&(CountDown_Minute_time!=0))
{
time_min = 0;
time_sec = 0;
min_flag = 0;
TIM_Cmd(TIM4, ENABLE); //使能TIMx外设
}
}
}
}
/*****************************************************
* Function Name : GizWits_GatherSensorData();
* Description : Gather Sensor Data
* Input : None
* Output : None
* Return : None
* Attention : None
*****************************************************/
void GizWits_GatherSensorData(void)
{
// ReadTypeDef.Infrared = IR_Handle();
// DHT11_Read_Data(&curTem, &curHum);
// ReadTypeDef.Temperature = (curTem + lastTem) /2;
// ReadTypeDef.Humidity = (curHum + lastHum)/2;
// ReadTypeDef.Temperature = ReadTypeDef.Temperature + 13;//Temperature Data Correction//根据协议,矫正数据
// lastTem = curTem;
// lastHum = curHum;
}
/*****************************************************
* Function Name : KEY_Handle
* Description : Key processing function
* KEY1 短按 : None
* KEY1 长按 : None
* KEY2 短按 : SoftAP方式配置WiFi模组
* KEY2 长按 : AirLink方式配置WiFi模组
* 4.13获取网络时间
__packed typedef struct
{
Pro_HeadPartTypeDef Pro_HeadPart;
uint16_t year;
uint8_t month;
uint8_t day;
uint8_t hour;
uint8_t minute;
uint8_t second;
uint32_t other;
uint8_t Sum;
} Pro_W2D_GetTimeTypeDef;
*****************************************************/
void KEY_Handle(void)
{
uint8_t Key_return =0;
Key_return = ReadKeyValue();
if(Key_return & KEY_UP)
{
if(Key_return & PRESS_KEY1)//短按K1
{
#ifdef PROTOCOL_DEBUG
printf("KEY1 PRESS\r\n");
#endif
GizWits_D2WGetCmd();
}
if(Key_return & PRESS_KEY2)//短按K2
{
#ifdef PROTOCOL_DEBUG
printf("KEY2 PRESS ,Soft AP mode\r\n");
#endif
//Soft AP mode, RGB red
LED_RGB_Control(255, 0, 0);
GizWits_D2WConfigCmd(SoftAp_Mode);
NetConfigureFlag = 1;
}
}
if(Key_return & KEY_LONG)
{
if(Key_return & PRESS_KEY1)//长按K1
{
#ifdef PROTOCOL_DEBUG
printf("KEY1 PRESS LONG ,Wifi Reset\r\n");
#endif
GizWits_D2WResetCmd();//解绑WIFI
}
if(Key_return & PRESS_KEY2)//长按K2
{
//AirLink mode, RGB Green
#ifdef PROTOCOL_DEBUG
printf("KEY2 PRESS LONG ,AirLink mode\r\n");
#endif
LED_RGB_Control(0, 128, 0);
GizWits_D2WConfigCmd(AirLink_Mode);//进入AirLink_Mode模式
NetConfigureFlag = 1;
}
}
}
/*****************************************************
* Function Name : GizWits_WiFiStatueHandle
* Description : Callback function , Judge Wifi statue
* Input : None
* Output : None
* Return : Bit , Attr_Flags
* Attention :
*****************************************************/
void GizWits_WiFiStatueHandle(uint16_t wifiStatue)
{
if(((wifiStatue & Wifi_ConnClouds) == Wifi_ConnClouds) && (NetConfigureFlag == 1))
{
printf("W2M->Wifi_ConnClouds\r\n");
NetConfigureFlag = 0;
LED_RGB_Control(0,0,0);
}
}
/************* (C) COPYRIGHT 2011 STMicroelectronics ****END OF FILE***/
|
|