大致的流畅: 1、按键处理 2、串口信息处理 3、如果接收到WiFi模组控制MCU的命令,则更新MCU状态,并立即上报MCU状态 4、每隔1s,采集一次MCU状态
具体来说明第2条,串口信息处理: u8 GizWits_MessageHandle(u8 * Message_Buf,u8 Length_buf) 这里如果收到的是4.10,WiFi控制MCU的命令,则把命令的数据内容传给Message_Buf 进来之后,抓取一包数据。 当WiFi的应答非法,或没收到WiFi应答时,启动重发机制。但这里是Bug。具体见代码 抓取数据包成功, 判断校验位,校验失败直接扔掉数据帧。 判断收到WiFi模组的Ack信息,是不是正确的Ack 下面是重头戏了,根据收到的命令码进行对应的操作: 其他的略过,只说接收到4.8和4.10时的情况。
//4.8 WiFi读取MCU. Cmd=0x03//4.10 WiFi控制MCU. Cmd=0x03 case Pro_W2D_P0_Cmd: //就是这里 { switch(UART_HandleStruct.Message_Buf[sizeof(Pro_HeadPartTypeDef)]) //标准报头后紧跟一个action(1B) { //4.10 WiFi控制MCU. Cmd=0x03 ActionBit=0x01 case P0_W2D_Control_Devce_Action: { Pro_W2D_CommonCmdHandle(); //回复通用协议帧 //储存ActionBit之后的信息到Message_Buf,最终传给WriteTypeDef来更改MCU设备状态 memcpy(Message_Buf, UART_HandleStruct.Message_Buf+sizeof(Pro_HeadPartP0CmdTypeDef), Length_buf); p0Flag = 1; //main()里,依靠此标志,和WriteTypeDef来控制更改设备状态 break; } //4.8 WiFi读取MCU. Cmd=0x03 ActionBit=0x02 case P0_W2D_ReadDevStatus_Action: Pro_W2D_ReadDevStatusHandle(); break; default: break; } } break;
|