|
@@ -50,6 +50,9 @@ bool Offline = false;
|
|
|
bool Retrans = false;
|
|
|
bool Online = false;
|
|
|
bool reIME = false;
|
|
|
+
|
|
|
+
|
|
|
+bool reAuth = false;//回复权限
|
|
|
/**
|
|
|
时间 纬度(北纬) 经度(东经) 水平精度因子 海拔高度 定位类型(1无,2 2d,3 3d) 运动角度 水平运动速度(KM/h) 水平运动速度(Knots) 日月年 卫星数量 差分定位标识(1单点,2差分)
|
|
|
eg.+MGNSSLOC: 015032.301,3014.8605N,12001.9250E,1.8, 17.6, 3, 0.00, 3.6, 1.9, 080424, 12, 1
|
|
@@ -160,7 +163,7 @@ uint8_t Message_bodydata(uint8_t *Message, uint8_t length, uint8_t outMessage[],
|
|
|
int index = 0;
|
|
|
uint8_t temp_length = 0;//加首尾 25/23/crc
|
|
|
|
|
|
- if(MessageID==MessageID_authentication || MessageID==MessageID_heartbeat)//不加头尾(鉴权、心跳)
|
|
|
+ if(MessageID==MessageID_authentication || MessageID==MessageID_heartbeat || MessageID==MessageID_Getauth)//不加头尾(鉴权、心跳、获取权限)
|
|
|
{
|
|
|
temp_length = length;//不加首尾
|
|
|
uint8_t temp_Message[temp_length];
|
|
@@ -215,6 +218,7 @@ uint8_t Message_bodydata(uint8_t *Message, uint8_t length, uint8_t outMessage[],
|
|
|
outMessage[i]=temp_Message[i];
|
|
|
}
|
|
|
}
|
|
|
+
|
|
|
else//加首尾
|
|
|
{
|
|
|
temp_length = length+3;//加首尾 25/23/crc
|
|
@@ -243,7 +247,6 @@ void tt808FsFunc(uint8_t* Message, uint8_t length, uint16_t MessageID)
|
|
|
HAL_Delay(200);
|
|
|
Messagetemp_length = Message_bodydata(Message, length, MessageHandleData, MessageID);
|
|
|
MessageHandle(MessageID);
|
|
|
-
|
|
|
}
|
|
|
|
|
|
|
|
@@ -552,45 +555,147 @@ void Test485Re(void)
|
|
|
REPdaMode();//PDA 485 MQTT
|
|
|
}
|
|
|
|
|
|
-void AtPRocess(char *value, char *conn,char *connected,char *disconn) {
|
|
|
- sprintf(conn, "AT+CONN=%s\r\n", value);
|
|
|
- sprintf(connected, "+CONNECTED:0,%s", value);
|
|
|
- sprintf(disconn, "+DISCONN:0,%s", value);
|
|
|
+void AtPRocess(char *value, char conn[],char connected[],char disconn[]) {
|
|
|
+
|
|
|
+ // 使用snprintf代替sprintf以确保不会发生缓冲区溢出
|
|
|
+ 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);
|
|
|
+}
|
|
|
+
|
|
|
+void Process_str_collections()
|
|
|
+{
|
|
|
+ if(macset.macCount==1){
|
|
|
+ AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);}
|
|
|
+ else if(macset.macCount==2){
|
|
|
+ AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
|
|
|
+ AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);}
|
|
|
+ else if(macset.macCount==3){
|
|
|
+ AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
|
|
|
+ AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);
|
|
|
+ AtPRocess(lockinfo.SN3name,macset.SN3CONN, macset.SN3ED, macset.SN3DIS);}
|
|
|
+ else if(macset.macCount==4){
|
|
|
+ AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
|
|
|
+ AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);
|
|
|
+ AtPRocess(lockinfo.SN3name,macset.SN3CONN, macset.SN3ED, macset.SN3DIS);
|
|
|
+ AtPRocess(lockinfo.SN4name,macset.SN4CONN, macset.SN4ED, macset.SN4DIS);}
|
|
|
+ else if(macset.macCount==5){
|
|
|
+ AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
|
|
|
+ AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);
|
|
|
+ AtPRocess(lockinfo.SN3name,macset.SN3CONN, macset.SN3ED, macset.SN3DIS);
|
|
|
+ AtPRocess(lockinfo.SN4name,macset.SN4CONN, macset.SN4ED, macset.SN4DIS);
|
|
|
+ AtPRocess(lockinfo.SN5name,macset.SN5CONN, macset.SN5ED, macset.SN5DIS);}
|
|
|
+ else if(macset.macCount==6){
|
|
|
+ AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
|
|
|
+ AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);
|
|
|
+ AtPRocess(lockinfo.SN3name,macset.SN3CONN, macset.SN3ED, macset.SN3DIS);
|
|
|
+ AtPRocess(lockinfo.SN4name,macset.SN4CONN, macset.SN4ED, macset.SN4DIS);
|
|
|
+ AtPRocess(lockinfo.SN5name,macset.SN5CONN, macset.SN5ED, macset.SN5DIS);
|
|
|
+ AtPRocess(lockinfo.SN6name,macset.SN6CONN, macset.SN6ED, macset.SN6DIS);}
|
|
|
+ else if(macset.macCount==7){
|
|
|
+ AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
|
|
|
+ AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);
|
|
|
+ AtPRocess(lockinfo.SN3name,macset.SN3CONN, macset.SN3ED, macset.SN3DIS);
|
|
|
+ AtPRocess(lockinfo.SN4name,macset.SN4CONN, macset.SN4ED, macset.SN4DIS);
|
|
|
+ AtPRocess(lockinfo.SN5name,macset.SN5CONN, macset.SN5ED, macset.SN5DIS);
|
|
|
+ AtPRocess(lockinfo.SN6name,macset.SN6CONN, macset.SN6ED, macset.SN6DIS);
|
|
|
+ AtPRocess(lockinfo.SN7name,macset.SN7CONN, macset.SN7ED, macset.SN7DIS);}
|
|
|
+ else if(macset.macCount==8){
|
|
|
+ AtPRocess(lockinfo.SN1name,macset.SN1CONN, macset.SN1ED, macset.SN1DIS);
|
|
|
+ AtPRocess(lockinfo.SN2name,macset.SN2CONN, macset.SN2ED, macset.SN2DIS);
|
|
|
+ AtPRocess(lockinfo.SN3name,macset.SN3CONN, macset.SN3ED, macset.SN3DIS);
|
|
|
+ AtPRocess(lockinfo.SN4name,macset.SN4CONN, macset.SN4ED, macset.SN4DIS);
|
|
|
+ AtPRocess(lockinfo.SN5name,macset.SN5CONN, macset.SN5ED, macset.SN5DIS);
|
|
|
+ AtPRocess(lockinfo.SN6name,macset.SN6CONN, macset.SN6ED, macset.SN6DIS);
|
|
|
+ AtPRocess(lockinfo.SN7name,macset.SN7CONN, macset.SN7ED, macset.SN7DIS);
|
|
|
+ AtPRocess(lockinfo.SN8name,macset.SN8CONN, macset.SN8ED, macset.SN8DIS);}
|
|
|
+}
|
|
|
+void processPdadata(char MACtemp[], uint8_t mactemp[],uint16_t mac[])
|
|
|
+{
|
|
|
|
|
|
- printf("%s\r\n",conn);
|
|
|
- printf("%s\r\n",connected);
|
|
|
- printf("%s\r\n",disconn);
|
|
|
+ const char *hex = (const char *)MACtemp; // 将 uint8_t * 转换为 const char *
|
|
|
+ int size = strlen(hex) / 2; // 计算二进制数据的长度
|
|
|
+ unsigned char *bin = (unsigned char *)malloc(size); // 分配足够的内存用于存储二进制数据
|
|
|
+ rlt = hex2bin(bin, hex); // 调用hex2bin函数进行转换
|
|
|
+ memcpy(mactemp, bin, rlt); // 将 bin 中的 rlt 个字节复制到 MIPurc1 中 接收到的数据放入MIPurc1中
|
|
|
+ free(bin); // 释放内存
|
|
|
+ mac[0] = mactemp[0]<<8|mactemp[1];
|
|
|
+ mac[1] = mactemp[2]<<8|mactemp[3];
|
|
|
+ mac[2] = mactemp[4]<<8|mactemp[5];
|
|
|
}
|
|
|
|
|
|
void REPdaMode(void)
|
|
|
{
|
|
|
+ HAL_StatusTypeDef WriteSta;
|
|
|
//*PDA需求 485写入MAC号
|
|
|
if(strncmp((char*)U1_485recvBuff, "DTU+ADDMAC", strlen("DTU+ADDMAC"))==0)
|
|
|
{
|
|
|
- memcpy(macset.MACtemp,U1_485recvBuff+11,12);
|
|
|
- const char *hex = (const char *)macset.MACtemp; // 将 uint8_t * 转换为 const char *
|
|
|
- int size = strlen(hex) / 2; // 计算二进制数据的长度
|
|
|
- unsigned char *bin = (unsigned char *)malloc(size); // 分配足够的内存用于存储二进制数据
|
|
|
- rlt = hex2bin(bin, hex); // 调用hex2bin函数进行转换
|
|
|
- memcpy(macset.mactemp, bin, rlt); // 将 bin 中的 rlt 个字节复制到 MIPurc1 中 接收到的数据放入MIPurc1中
|
|
|
- free(bin); // 释放内存
|
|
|
-
|
|
|
- macset.mac[0] = macset.mactemp[0]<<8|macset.mactemp[1];
|
|
|
- macset.mac[1] = macset.mactemp[2]<<8|macset.mactemp[3];
|
|
|
- macset.mac[2] = macset.mactemp[4]<<8|macset.mactemp[5];
|
|
|
- HAL_StatusTypeDef WriteSta;
|
|
|
-
|
|
|
- WriteSta= Flash_WriteBytes(macsetptr->mac,MacDbBodyAddr + (macset.macCount*6),3);
|
|
|
- macset.macCount += 1;
|
|
|
+ macset.macCount=0;
|
|
|
+ memset(lockinfo.SN1name, 0, sizeof(lockinfo.SN1name));
|
|
|
+ memset(lockinfo.SN2name, 0, sizeof(lockinfo.SN2name));
|
|
|
+ memset(lockinfo.SN3name, 0, sizeof(lockinfo.SN3name));
|
|
|
+ memset(lockinfo.SN4name, 0, sizeof(lockinfo.SN4name));
|
|
|
+ memset(lockinfo.SN5name, 0, sizeof(lockinfo.SN5name));
|
|
|
+ memset(lockinfo.SN6name, 0, sizeof(lockinfo.SN6name));
|
|
|
+ memset(lockinfo.SN7name, 0, sizeof(lockinfo.SN7name));
|
|
|
+ memset(lockinfo.SN8name, 0, sizeof(lockinfo.SN8name));
|
|
|
+ erase_flash(MacDbBodyAddr);
|
|
|
+ if(U1_485recvLength>12)
|
|
|
+ {
|
|
|
+ memcpy(macset.MACtemp1,U1_485recvBuff+11,12);
|
|
|
+ processPdadata(macset.MACtemp1,macset.mactemp1,macset.mac1);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac1,MacDbBodyAddr,3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(U1_485recvLength>25){
|
|
|
+ memcpy(macset.MACtemp2,U1_485recvBuff+24,12);
|
|
|
+ processPdadata(macset.MACtemp2,macset.mactemp2,macset.mac2);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac2,MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(U1_485recvLength>38){
|
|
|
+ memcpy(macset.MACtemp3,U1_485recvBuff+37,12);
|
|
|
+ processPdadata(macset.MACtemp3,macset.mactemp3,macset.mac3);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac3,MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(U1_485recvLength>51){
|
|
|
+ memcpy(macset.MACtemp4,U1_485recvBuff+50,12);
|
|
|
+ processPdadata(macset.MACtemp4,macset.mactemp4,macset.mac4);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac4,MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(U1_485recvLength>64){
|
|
|
+ memcpy(macset.MACtemp5,U1_485recvBuff+63,12);
|
|
|
+ processPdadata(macset.MACtemp5,macset.mactemp5,macset.mac5);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac5,MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(U1_485recvLength>77){
|
|
|
+ memcpy(macset.MACtemp6,U1_485recvBuff+76,12);
|
|
|
+ processPdadata(macset.MACtemp6,macset.mactemp6,macset.mac6);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac6,MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(U1_485recvLength>90){
|
|
|
+ memcpy(macset.MACtemp7,U1_485recvBuff+89,12);
|
|
|
+ processPdadata(macset.MACtemp7,macset.mactemp7,macset.mac7);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac7,MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+ if(U1_485recvLength>103){
|
|
|
+ memcpy(macset.MACtemp8,U1_485recvBuff+102,12);
|
|
|
+ processPdadata(macset.MACtemp8,macset.mactemp8,macset.mac8);
|
|
|
+ WriteSta= Flash_WriteBytes(macsetptr->mac8,MacDbBodyAddr+(macset.macCount*6),3);
|
|
|
+ if(WriteSta== HAL_OK) macset.macCount += 1;}
|
|
|
+
|
|
|
if(WriteSta == HAL_OK)
|
|
|
{
|
|
|
- printf("更新MAC存储完成\r\n");
|
|
|
+ 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(U1_485recvBuff,0,BUFFER_SIZE);
|
|
|
}
|
|
|
}
|
|
@@ -598,8 +703,6 @@ void ReBTcall(void)
|
|
|
{
|
|
|
if(strncmp((char*)autoRe, "+CONNECTED:0,", strlen("+CONNECTED:0,"))==0)
|
|
|
{
|
|
|
- TIPS_MACRO(ConnOK);//连接成功
|
|
|
- printf("设备已连接\r\n");
|
|
|
memset(autoRe,0,BUFFER_SIZE);
|
|
|
}
|
|
|
|
|
@@ -610,7 +713,6 @@ void ReMIPURC(void)//DTU
|
|
|
//*设备上线,发送成功
|
|
|
if(strncmp((char*)U4_4GrecvBuff, "+MIPOPEN: 1,0", strlen("+MIPOPEN: 1,0"))==0)//连接平台
|
|
|
{
|
|
|
-
|
|
|
memset(U4_4GrecvBuff,0,BUFFER_SIZE);
|
|
|
}
|
|
|
///*定位信息(MGNSS)
|
|
@@ -770,6 +872,20 @@ void MIPURCHandle(void)
|
|
|
}
|
|
|
memset(MIPurc,0,rlt);//rlt下发长度
|
|
|
}
|
|
|
+ else if(xxRE == MessageID_Getauth)//获取权限
|
|
|
+ {
|
|
|
+ if(YESorNO==YES)
|
|
|
+ {
|
|
|
+ printf("@权限应答yes\r\n");
|
|
|
+ reAuth=true;
|
|
|
+ }
|
|
|
+ else if(YESorNO==NO)
|
|
|
+ {
|
|
|
+ printf("@权限应答no\r\n");
|
|
|
+ reAuth=false;
|
|
|
+ }
|
|
|
+ memset(MIPurc,0,rlt);//rlt下发长度
|
|
|
+ }
|
|
|
}
|
|
|
else if(PTXXID == XXID_ptxxtc) //收到平台消息透传 8900
|
|
|
{
|