/* * wjh_OTAUpgrades.c * * Created on: 2024年7月29日 * Author: wu */ #include "wjh_OTAConfig.h" #include "uartctrl.h" #include "timer_hard.h" static u8 OTA_DEVICE_TYPE_NAME[][30] = { "", "handset",//手持设备 "cabinet",//柜体设备 "sensor"//传感设备 }; static void timerisr(struct Timer *timer) { printf("10秒到了"); //发送数据 struct W0802WifiMqttSendMessageInfo messageInfo; u8 topicName[WIFI_MQTT_TOPIC_MAX_LENGTH]; sprintf(topicName,OTA_MQTT_SEND_INFO_TOPIC,OTA_DEVICE_SN_DEFAULT); // u8 message[WIFI_MQTT_MESSAGE_MAX_LENGTH]; // gbkTOutf8(message,OTA_DEVICE_SN_DEFAULT); messageInfo.topicName = topicName; messageInfo.qos = 1; messageInfo.message = OTA_DEVICE_SN_DEFAULT; messageInfo.keepState = WIFI_MQTT_KEEP_MESSAGE_CLOSE; WifiMqttSendLongMessage(&messageInfo,1000,4); u32 num = 0; struct W0802WifiMqttMessage getMess[5]; WifiMqttGetMessage(&num,&getMess,5,1000); if(num != 0){ wjh_TipCreate("消息获取成功"); printf("进行请求"); for(u32 i = 0;i < num;i ++){ printf("%s",getMess[i].topicName); u8 responseTopic[80]; sprintf(responseTopic,OTA_MQTT_RECEIVE_COMMAND_TOPIC,OTA_DEVICE_TYPE_NAME[OTA_DEVICE_TYPE_DEFAULT],OTA_DEVICE_SN_DEFAULT); if(strcmp(getMess[i].topicName,responseTopic) == 0){ u8 idString[80]; u8 *p = strstr(getMess[i].message,"id"); p += 5; u32 ws = 0; while(*p != '\"'){ idString[ws ++] = *p ++; } idString[ws] = 0; OTA_MQTT_DeviceResponse(idString,"0TA升级设备执行成功!"); u8 hashCode[80]; p = strstr(getMess[i].message,"binHashCode"); p += 16; ws = 0; while(*p != '\"'&&*p != '\\'){ hashCode[ws ++] = *p ++; } hashCode[ws] = 0; wjh_TipChange("准备进行文件请求"); OTA_HTTP_GetOTAFile(hashCode); } } } } // ============================================================================= // 功能:OTA升级的有关WIFI模块的初始化,包括WIFI串口的串口配置 // 参数:无 // 返回:true:下载成功;false:下载失败; // ============================================================================= bool_t OTA_Initialize(void){ wjh_TipCreate("窗口初始化"); WifiInit("/dev/UART0", CN_UART_BAUD_115200, CN_UART_DATABITS_8, CN_UART_STOPBITS_1, CN_UART_PARITY_NONE); wjh_TipChange("正在连接WIFI"); //wifi连接 OTA_WIFI_Connect(OTA_WIFI_NAME_DEFAULT,OTA_WIFI_PWD_DEFAULT); wjh_TipChange("WIFI连接成功"); printf("wifi连接成功"); //向后台发送注册数据 struct OTA_DEVICE_REGISTER requestInfo; requestInfo.deviceName = OTA_DEVICE_NAME_DEFAULT; requestInfo.deviceType = OTA_DEVICE_TYPE_DEFAULT; requestInfo.SN = OTA_DEVICE_SN_DEFAULT; requestInfo.runningStatus = 1; while(!OTA_HTTP_DeviceRegister(requestInfo)){ printf("注册失败"); DJY_EventDelay(500 * 1000); } printf("注册成功"); wjh_TipChange("设备注册成功"); u8 clientId[WIFI_MQTT_CLIENT_MAX_LENGTH]; sprintf(clientId,OTA_MQTT_CLIENTID_DEFAULT,OTA_DEVICE_SN_DEFAULT); //MQTT客户信息配置 while(!OTA_MQTT_ClientConfig(clientId,OTA_MQTT_USERNAME_DEFAULT,OTA_MQTT_PWD_DEFAULT)){ printf("信息修改失败"); DJY_EventDelay(500 * 1000); } wjh_TipChange("MQTT客户端信息修改成功"); // DJY_EventDelay(2000 * 1000); //MQTT主机连接 while(!OTA_MQTT_Connect(OTA_MQTT_ADDRESS_DEFAULT,OTA_MQTT_PORT_DEFAULT,OTA_MQTT_REQUEST_MODE)){ printf("MQTT连接失败"); DJY_EventDelay(500 * 1000); } wjh_TipChange("MQTT连接成功"); DJY_EventDelay(2000 * 1000); u8 topicName1[WIFI_MQTT_TOPIC_MAX_LENGTH]; sprintf(topicName1,OTA_MQTT_RECEIVE_COMMAND_TOPIC,OTA_DEVICE_TYPE_NAME[OTA_DEVICE_TYPE_DEFAULT],OTA_DEVICE_SN_DEFAULT); while(!WifiMqttSubscribe(topicName1,WIFI_MQTT_QOS_1,1000)){ printf("订阅失败"); DJY_EventDelay(500 * 1000); } wjh_TipChange("MQTT订阅成功"); DJY_EventDelay(2000 * 1000); printf("mqtt成功"); wjh_TipChange("OTA初始化成功"); DJY_EventDelay(2000 * 1000); wjh_TipDelete(); struct Timer *timer; timer = Timer_Create("Timer1",OTA_WIFI_POLL_TIME,timerisr); Timer_Ctrl(timer,EN_TIMER_STARTCOUNT,0); }