|
@@ -127,9 +127,9 @@ void MessageHandle(uint16_t MessageID)
|
|
|
tcppacket[index++] = xorBytes(&tcppacket[1],12+Messagetemp_length);; // Set the checksum
|
|
|
tcppacket[index++] = TT808FLAG; // Set the flag at the end
|
|
|
|
|
|
- for (int i = 0; i < index; i++) {
|
|
|
- printf("%02X ", tcppacket[i]); // 以十六进制格式打印每个元素
|
|
|
- }
|
|
|
+// for (int i = 0; i < index; i++) {
|
|
|
+// printf("%02X ", tcppacket[i]); // 以十六进制格式打印每个元素
|
|
|
+// }
|
|
|
printf("\r\n");
|
|
|
|
|
|
|
|
@@ -496,6 +496,172 @@ MacSet *macsetptr = &macset;
|
|
|
char Newip[30];
|
|
|
extern bool wdiFlag;
|
|
|
|
|
|
+char MqttReBuff[200];
|
|
|
+char MqttWorkBuff[200];
|
|
|
+char Mqtttotal_len[10];
|
|
|
+char payload_len[10];
|
|
|
+uint8_t Mqtttotal_lenu8=0;
|
|
|
+uint8_t payload_lenu8=0;
|
|
|
+
|
|
|
+void Process_str_collections(void) {
|
|
|
+ // 循环遍历从0到macCount-1的每个索引
|
|
|
+ for (int i = 0; i < macset.macCount; i++) {
|
|
|
+ AtPRocess(
|
|
|
+ lockinfo.SNname[i],
|
|
|
+ macset.SNCONN[i],
|
|
|
+ macset.SNED[i],
|
|
|
+ macset.SNDIS[i]
|
|
|
+ );
|
|
|
+ }
|
|
|
+}
|
|
|
+void MqttRe(void)
|
|
|
+{
|
|
|
+ if(strncmp((const char *)U4_4GrecvBuff, "+MQTTURC: \"publish\"", strlen("+MQTTURC: \"publish\""))==0)//接收到发布信息
|
|
|
+ {
|
|
|
+ memcpy(MqttReBuff,&U4_4GrecvBuff[2],U4_4GrecvLength-2);//全部copy
|
|
|
+ //printf("@接收到Mqtt消息%s\r\n",MqttReBuff);
|
|
|
+ extractString(MqttReBuff, Mqtttotal_len,4 ,5);//采集<total_len>
|
|
|
+ extractString(MqttReBuff, payload_len,5 ,6);//采集<payload_len>
|
|
|
+ Mqtttotal_lenu8 = atoi(Mqtttotal_len);
|
|
|
+ payload_lenu8 = atoi(payload_len);
|
|
|
+
|
|
|
+
|
|
|
+ //printf("%d,%d\r\n",Mqtttotal_lenu8,payload_lenu8);
|
|
|
+ if(Mqtttotal_lenu8==payload_lenu8)
|
|
|
+ {
|
|
|
+ memcpy(MqttWorkBuff, &MqttReBuff[U4_4GrecvLength - payload_lenu8-4], payload_lenu8);
|
|
|
+ printf("%s\r\n",MqttWorkBuff);
|
|
|
+
|
|
|
+ }
|
|
|
+ //*处理摘取字段
|
|
|
+ if(strncmp((const char*)&MqttWorkBuff, "DTU+FLASH=deleteloc", strlen("DTU+FLASH=deleteloc"))==0)
|
|
|
+ {
|
|
|
+ dblocptr->headinfo.loc_pushIndex=0;
|
|
|
+ dblocptr->headinfo.loc_pullIndex=0;
|
|
|
+ Flash_WriteBytes((uint16_t*)&(dblocptr->headinfo),LocDbHeadStart,4);//更新刻度
|
|
|
+ printf("更新刻度成功\r\n");
|
|
|
+ }
|
|
|
+ else if(strncmp((char*)MqttWorkBuff, "DTU+JT808_IMEI=", strlen("DTU+JT808_IMEI="))==0)//修改IME号
|
|
|
+ {
|
|
|
+ memcpy(DTUurc1,MqttWorkBuff+15,12);
|
|
|
+ const char *hex = (const char *)DTUurc1; // 将 uint8_t * 转换为 const char *
|
|
|
+ int size = strlen(hex) / 2; // 计算二进制数据的长度
|
|
|
+ unsigned char *bin = (unsigned char *)malloc(size); // 分配足够的内存用于存储二进制数据
|
|
|
+ rlt = hex2bin(bin, hex); // 调用hex2bin函数进行转换
|
|
|
+ memcpy(DTUurc, bin, rlt); // 将 bin 中的 rlt 个字节复制到 MIPurc1 中 接收到的数据放入MIPurc1中
|
|
|
+ free(bin); // 释放内存
|
|
|
+
|
|
|
+ reIME = true;
|
|
|
+ HAL_Delay(500);
|
|
|
+ }
|
|
|
+ else if(strncmp((char*)MqttWorkBuff, "DTU+JT808_SERVER=", strlen("DTU+JT808_SERVER="))==0)
|
|
|
+ {
|
|
|
+ memcpy(input_strings,MqttWorkBuff+17,20);
|
|
|
+
|
|
|
+ extractStringPoint(input_strings,reIp0,0,1);
|
|
|
+ extractStringPoint(input_strings,reIp1,1,2);
|
|
|
+ extractStringPoint(input_strings,reIp2,2,3);
|
|
|
+ extractStringPoint(input_strings,reIp3,3,4);
|
|
|
+ extractStringPoint(input_strings,reIpP,4,5);
|
|
|
+
|
|
|
+ ipaddr.IP0 = atoi(reIp0);
|
|
|
+ ipaddr.IP1 = atoi(reIp1);
|
|
|
+ ipaddr.IP2 = atoi(reIp2);
|
|
|
+ ipaddr.IP3 = atoi(reIp3);
|
|
|
+ ipaddr.IPp = atoi(reIpP);
|
|
|
+ //printf("%d.%d.%d.%d:%d",ipaddr.IP0,ipaddr.IP1,ipaddr.IP2,ipaddr.IP3,ipaddr.IPp);
|
|
|
+ HAL_StatusTypeDef writeSta = Flash_WriteBytes((uint16_t*)&(ipaddr.IP0),ReIPAddr,5);
|
|
|
+ if(writeSta == HAL_OK)
|
|
|
+ {
|
|
|
+ char *ptr = Newip;
|
|
|
+ ptr += sprintf(ptr, "%d.", ipaddr.IP0);
|
|
|
+ ptr += sprintf(ptr, "%d.", ipaddr.IP1);
|
|
|
+ ptr += sprintf(ptr, "%d.", ipaddr.IP2);
|
|
|
+ ptr += sprintf(ptr, "%d", ipaddr.IP3);
|
|
|
+ printf("更换IP成功\r\n");
|
|
|
+ }
|
|
|
+ //ptr += sprintf(ptr, ":%d", ipaddr.IPp);
|
|
|
+ //printf("%s\r\n",Newip);
|
|
|
+ HAL_Delay(500);
|
|
|
+ printf("即将重启\r\n");
|
|
|
+ wdiFlag = true;
|
|
|
+ }
|
|
|
+ else if(strncmp((char*)MqttWorkBuff, "DTU+VER=?", strlen("DTU+VER=?"))==0)
|
|
|
+ {
|
|
|
+ printf("%s\r\n",version);
|
|
|
+ }
|
|
|
+
|
|
|
+ HAL_StatusTypeDef WriteSta;
|
|
|
+ //*PDA需求 485写入MAC号
|
|
|
+ if(strncmp((char*)MqttWorkBuff, "DTU+ADDMAC", strlen("DTU+ADDMAC"))==0)
|
|
|
+ {
|
|
|
+ macset.macCount=0;
|
|
|
+ workedLock=0;
|
|
|
+ memset(devices,0,8);
|
|
|
+ erase_flash(MacDbBodyAddr);
|
|
|
+ if(payload_lenu8>12){
|
|
|
+ memcpy(macset.MACtemp[0],MqttWorkBuff+11,12);
|
|
|
+ processPdadata(macset.MACtemp[0],macset.mactemp[0],macset.mac[0]);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac[0],MacDbBodyAddr,3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(payload_lenu8>25){
|
|
|
+ memcpy(macset.MACtemp[1],MqttWorkBuff+24,12);
|
|
|
+ processPdadata(macset.MACtemp[1],macset.mactemp[1],macset.mac[1]);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac[1],MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(payload_lenu8>38){
|
|
|
+ memcpy(macset.MACtemp[2],MqttWorkBuff+37,12);
|
|
|
+ processPdadata(macset.MACtemp[2],macset.mactemp[2],macset.mac[2]);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac[2],MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(payload_lenu8>51){
|
|
|
+ memcpy(macset.MACtemp[3],MqttWorkBuff+50,12);
|
|
|
+ processPdadata(macset.MACtemp[3],macset.mactemp[3],macset.mac[3]);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac[3],MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(payload_lenu8>64){
|
|
|
+ memcpy(macset.MACtemp[4],MqttWorkBuff+63,12);
|
|
|
+ processPdadata(macset.MACtemp[4],macset.mactemp[4],macset.mac[4]);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac[4],MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(payload_lenu8>77){
|
|
|
+ memcpy(macset.MACtemp[5],MqttWorkBuff+76,12);
|
|
|
+ processPdadata(macset.MACtemp[5],macset.mactemp[5],macset.mac[5]);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac[5],MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(payload_lenu8>90){
|
|
|
+ memcpy(macset.MACtemp[6],MqttWorkBuff+89,12);
|
|
|
+ processPdadata(macset.MACtemp[6],macset.mactemp[6],macset.mac[6]);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac[6],MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(payload_lenu8>103){
|
|
|
+ memcpy(macset.MACtemp[7],MqttWorkBuff+102,12);
|
|
|
+ processPdadata(macset.MACtemp[7],macset.mactemp[7],macset.mac[7]);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac[7],MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+
|
|
|
+
|
|
|
+ for(int i = 0; i < macset.macCount; i++) {
|
|
|
+ memset(lockinfo.SNname[i], 0, 13);
|
|
|
+ }
|
|
|
+ if(WriteSta == HAL_OK)
|
|
|
+ {
|
|
|
+ printf("更新MAC存储完成共->%d\r\n",macset.macCount);
|
|
|
+ }
|
|
|
+ WriteSta = Flash_WriteBytes(&macsetptr->macCount,MacDbHeadAddr,1);
|
|
|
+ if(WriteSta == HAL_OK)
|
|
|
+ {
|
|
|
+ printf("更新存储刻度完成\r\n");
|
|
|
+ }
|
|
|
+ ReadSNname();//更新
|
|
|
+ Process_str_collections();//处理连接字符串
|
|
|
+ }
|
|
|
+
|
|
|
+ memset(U4_4GrecvBuff,0,BUFFER_SIZE);
|
|
|
+ memset(MqttReBuff,0,U4_4GrecvLength);
|
|
|
+ memset(MqttWorkBuff,0,payload_lenu8);
|
|
|
+ }
|
|
|
+}
|
|
|
//*485测试命令
|
|
|
void Test485Re(void)
|
|
|
{
|
|
@@ -590,22 +756,11 @@ void AtPRocess(char *value, char conn[],char connected[],char disconn[]) {
|
|
|
snprintf(conn, strlen(value) + 12, "AT+CONN=%s\r\n", value);
|
|
|
snprintf(connected, strlen(value) + 14, "+CONNECTED:0,%s", value);
|
|
|
snprintf(disconn, strlen(value) + 12, "+DISCONN:0,%s", value);
|
|
|
- printf("%s\r\n", conn);
|
|
|
- printf("%s\r\n", connected);
|
|
|
- printf("%s\r\n", disconn);
|
|
|
+// printf("%s\r\n", conn);
|
|
|
+// printf("%s\r\n", connected);
|
|
|
+// printf("%s\r\n", disconn);
|
|
|
}
|
|
|
|
|
|
-void Process_str_collections() {
|
|
|
- // 循环遍历从0到macCount-1的每个索引
|
|
|
- for (int i = 0; i < macset.macCount; i++) {
|
|
|
- AtPRocess(
|
|
|
- lockinfo.SNname[i],
|
|
|
- macset.SNCONN[i],
|
|
|
- macset.SNED[i],
|
|
|
- macset.SNDIS[i]
|
|
|
- );
|
|
|
- }
|
|
|
-}
|
|
|
|
|
|
void processPdadata(char MACtemp[], uint8_t mactemp[],uint16_t mac[])
|
|
|
{
|
|
@@ -852,6 +1007,8 @@ void MIPURCHandle(void)
|
|
|
{
|
|
|
printf("@心跳应答yes\r\n");
|
|
|
printf("@TCP连接成功!!\r\n");
|
|
|
+ menu.current=0;
|
|
|
+ refresh=true;
|
|
|
}
|
|
|
else if(YESorNO==NO)
|
|
|
{
|
|
@@ -890,17 +1047,18 @@ void MIPURCHandle(void)
|
|
|
{
|
|
|
if(YESorNO==YES)
|
|
|
{
|
|
|
- printf("@锁信息上传应答yes\r\n");
|
|
|
+ printf("@锁信息上传应答yes\r\n");
|
|
|
+ if(sendCmd_BT("AT+DISCONN=0\r\n","ERROR",1,2))
|
|
|
+ {
|
|
|
+ printf("已断开连接\r\n");
|
|
|
+ }
|
|
|
}
|
|
|
else if(YESorNO==NO)
|
|
|
{
|
|
|
printf("@锁信息上传应答no\r\n");
|
|
|
}
|
|
|
|
|
|
- if(sendCmd_BT("AT+DISCONN=0\r\n","ERROR",1,1))
|
|
|
- {
|
|
|
- printf("已断开连接\r\n");
|
|
|
- }
|
|
|
+
|
|
|
memset(MIPurc,0,rlt);//rlt下发长度
|
|
|
}
|
|
|
}
|