164 lines
5.2 KiB
C
164 lines
5.2 KiB
C
|
/*
|
|||
|
* wjh_OTAUpgrades.c
|
|||
|
*
|
|||
|
* Created on: 2024<EFBFBD><EFBFBD>7<EFBFBD><EFBFBD>29<EFBFBD><EFBFBD>
|
|||
|
* Author: wu
|
|||
|
*/
|
|||
|
#include "wjh_OTAConfig.h"
|
|||
|
#include "uartctrl.h"
|
|||
|
#include "timer_hard.h"
|
|||
|
|
|||
|
static u8 OTA_DEVICE_TYPE_NAME[][30] = {
|
|||
|
"",
|
|||
|
"handset",//<2F>ֳ<EFBFBD><D6B3>豸
|
|||
|
"cabinet",//<2F><><EFBFBD><EFBFBD><EFBFBD>豸
|
|||
|
"sensor"//<2F><><EFBFBD><EFBFBD><EFBFBD>豸
|
|||
|
};
|
|||
|
|
|||
|
//==============================================================================
|
|||
|
// <20><><EFBFBD>ܣ<EFBFBD>JSONת<4E>巽<EFBFBD><E5B7BD><EFBFBD><EFBFBD>ATָ<54><D6B8>ʹ<EFBFBD>õĸ<C3B5>ʽ
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ҫת<D2AA><D7AA><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
// <20><><EFBFBD>أ<EFBFBD>ת<EFBFBD><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD>(<28><>Ҫ<EFBFBD>ֶ<EFBFBD><D6B6>ͷ<EFBFBD>)
|
|||
|
// =============================================================================
|
|||
|
static u8 *escapeString(const char *input)
|
|||
|
{
|
|||
|
u32 len = strlen(input);
|
|||
|
|
|||
|
u8 *escaped = (char *)malloc(2 * len + 1); // <20><><EFBFBD><EFBFBD><EFBFBD>㹻<EFBFBD>Ŀռ<C4BF><D5BC><EFBFBD><EFBFBD>洢ת<E6B4A2><D7AA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
|
|||
|
|
|||
|
if (escaped == NULL)
|
|||
|
{
|
|||
|
printf("<EFBFBD>ڴ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>\n");
|
|||
|
return NULL;
|
|||
|
}
|
|||
|
|
|||
|
u32 j = 0;
|
|||
|
for (u32 i = 0; i < len; i++)
|
|||
|
{
|
|||
|
if (input[i] == '\"' || input[i] == '\\')
|
|||
|
{
|
|||
|
escaped[j++] = '\\'; // <20><><EFBFBD>ӷ<EFBFBD>б<EFBFBD><D0B1>
|
|||
|
}
|
|||
|
escaped[j++] = input[i];
|
|||
|
}
|
|||
|
escaped[j] = '\0'; // <20><><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
|
|||
|
return escaped;
|
|||
|
}
|
|||
|
|
|||
|
static void timerisr(struct Timer *timer)
|
|||
|
{
|
|||
|
printf("10<EFBFBD>뵽<EFBFBD><EFBFBD>");
|
|||
|
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
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("<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>ȡ<EFBFBD>ɹ<EFBFBD>");
|
|||
|
printf("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
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<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>豸ִ<EFBFBD>гɹ<EFBFBD>!");
|
|||
|
|
|||
|
u8 hashCode[80];
|
|||
|
p = strstr(getMess[i].message,"binHashCode");
|
|||
|
p += 16;
|
|||
|
ws = 0;
|
|||
|
while(*p != '\"'&&*p != '\\'){
|
|||
|
hashCode[ws ++] = *p ++;
|
|||
|
}
|
|||
|
hashCode[ws] = 0;
|
|||
|
wjh_TipChange("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ļ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>");
|
|||
|
OTA_HTTP_GetOTAFile(hashCode);
|
|||
|
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
}
|
|||
|
|
|||
|
// =============================================================================
|
|||
|
// <20><><EFBFBD>ܣ<EFBFBD>OTA<54><41><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>й<EFBFBD>WIFIģ<49><C4A3><EFBFBD>ij<EFBFBD>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WIFI<46><49><EFBFBD>ڵĴ<DAB5><C4B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
// <20><><EFBFBD>أ<EFBFBD>true<75><65><EFBFBD><EFBFBD><EFBFBD>سɹ<D8B3><C9B9><EFBFBD>false<73><65><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD>ܣ<EFBFBD>
|
|||
|
// =============================================================================
|
|||
|
bool_t OTA_Initialize(void){
|
|||
|
|
|||
|
wjh_TipCreate("<EFBFBD><EFBFBD><EFBFBD>ڳ<EFBFBD>ʼ<EFBFBD><EFBFBD>");
|
|||
|
WifiInit("/dev/UART0", CN_UART_BAUD_115200, CN_UART_DATABITS_8, CN_UART_STOPBITS_1, CN_UART_PARITY_NONE);
|
|||
|
wjh_TipChange("<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>WIFI");
|
|||
|
//wifi<66><69><EFBFBD><EFBFBD>
|
|||
|
OTA_WIFI_Connect(OTA_WIFI_NAME_DEFAULT,OTA_WIFI_PWD_DEFAULT);
|
|||
|
wjh_TipChange("WIFI<EFBFBD><EFBFBD><EFBFBD>ӳɹ<EFBFBD>");
|
|||
|
printf("wifi<EFBFBD><EFBFBD><EFBFBD>ӳɹ<EFBFBD>");
|
|||
|
//<2F><><EFBFBD><EFBFBD>̨<EFBFBD><CCA8><EFBFBD><EFBFBD>ע<EFBFBD><D7A2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
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("ע<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
|
|||
|
DJY_EventDelay(500 * 1000);
|
|||
|
}
|
|||
|
printf("ע<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>");
|
|||
|
wjh_TipChange("<EFBFBD>豸ע<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>");
|
|||
|
|
|||
|
u8 clientId[WIFI_MQTT_CLIENT_MAX_LENGTH];
|
|||
|
sprintf(clientId,OTA_MQTT_CLIENTID_DEFAULT,OTA_DEVICE_SN_DEFAULT);
|
|||
|
//MQTT<54>ͻ<EFBFBD><CDBB><EFBFBD>Ϣ<EFBFBD><CFA2><EFBFBD><EFBFBD>
|
|||
|
while(!OTA_MQTT_ClientConfig(clientId,OTA_MQTT_USERNAME_DEFAULT,OTA_MQTT_PWD_DEFAULT)){
|
|||
|
printf("<EFBFBD><EFBFBD>Ϣ<EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
|
|||
|
DJY_EventDelay(500 * 1000);
|
|||
|
}
|
|||
|
wjh_TipChange("MQTT<EFBFBD>ͻ<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ<EFBFBD>ijɹ<EFBFBD>");
|
|||
|
// DJY_EventDelay(2000 * 1000);
|
|||
|
//MQTT<54><54><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
|
|||
|
while(!OTA_MQTT_Connect(OTA_MQTT_ADDRESS_DEFAULT,OTA_MQTT_PORT_DEFAULT,OTA_MQTT_REQUEST_MODE)){
|
|||
|
printf("MQTT<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
|
|||
|
DJY_EventDelay(500 * 1000);
|
|||
|
}
|
|||
|
wjh_TipChange("MQTT<EFBFBD><EFBFBD><EFBFBD>ӳɹ<EFBFBD>");
|
|||
|
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("<EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʧ<EFBFBD><EFBFBD>");
|
|||
|
DJY_EventDelay(500 * 1000);
|
|||
|
}
|
|||
|
wjh_TipChange("MQTT<EFBFBD><EFBFBD><EFBFBD>ijɹ<EFBFBD>");
|
|||
|
DJY_EventDelay(2000 * 1000);
|
|||
|
|
|||
|
printf("mqtt<EFBFBD>ɹ<EFBFBD>");
|
|||
|
wjh_TipChange("OTA<EFBFBD><EFBFBD>ʼ<EFBFBD><EFBFBD><EFBFBD>ɹ<EFBFBD>");
|
|||
|
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);
|
|||
|
}
|
|||
|
|