|
@@ -37,11 +37,15 @@ extern TipsFlag tipsflag;
|
|
|
extern Menu_table menu;
|
|
|
extern bool refresh;
|
|
|
//*布尔
|
|
|
-bool ZDJQflag = false;
|
|
|
+bool authFlag = false;
|
|
|
bool GnssFlag = false;
|
|
|
+bool Offline = false;
|
|
|
+bool Retrans = 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
|
|
|
+*/
|
|
|
uint8_t Messagetemp_length=0;
|
|
|
uint8_t MessageHandleData[100]; //放入封装后数据
|
|
|
uint8_t tcppacket[100]; //消息数据
|
|
@@ -80,12 +84,12 @@ void MessageHandle(uint16_t MessageID)
|
|
|
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");
|
|
|
char TCPvalue[100];
|
|
|
char *ptr = TCPvalue;
|
|
|
ptr += sprintf(ptr, "AT+MIPSEND=1,%d,\"",index);
|
|
@@ -100,7 +104,13 @@ void MessageHandle(uint16_t MessageID)
|
|
|
|
|
|
tt808.LSH+=1;//需做写入处理
|
|
|
}
|
|
|
-
|
|
|
+uint16_t swapBytes16(uint16_t value) {
|
|
|
+ return (value >> 8) | (value << 8);
|
|
|
+}
|
|
|
+uint32_t swapBytes32(uint32_t value) {
|
|
|
+ return ((value & 0xFF) << 24) | ((value & 0xFF00) << 8) |
|
|
|
+ ((value >> 8) & 0xFF00) | ((value >> 24) & 0xFF);
|
|
|
+}
|
|
|
/**
|
|
|
* @breaf 消息体封装
|
|
|
* Message[] 消息数据; length 消息数据长度; outMessage[] 封装后消息数据; MessageID 消息ID
|
|
@@ -129,19 +139,19 @@ uint8_t Message_bodydata(uint8_t *Message, uint8_t length, uint8_t outMessage[],
|
|
|
else if(MessageID==MessageID_location)//终端地址0200 有附加信息
|
|
|
{
|
|
|
|
|
|
- temp_length = length+6;//不加首尾
|
|
|
+ temp_length = length;//不加首尾
|
|
|
+ //状态标志/纬度/经度/速度
|
|
|
+
|
|
|
+ dblocptr->location.statusFlag = swapBytes32(dblocptr->location.statusFlag);
|
|
|
+ dblocptr->location.latitude = swapBytes32(dblocptr->location.latitude);
|
|
|
+ dblocptr->location.longitude = swapBytes32(dblocptr->location.longitude);
|
|
|
+ dblocptr->location.speed = swapBytes16(dblocptr->location.speed);
|
|
|
+
|
|
|
uint8_t temp_Message[temp_length];
|
|
|
|
|
|
for (int i = 0; i < length; i++) {
|
|
|
temp_Message[index++] = Message[i]; // 将消息头拷贝到报文中
|
|
|
}
|
|
|
- //*begin
|
|
|
- temp_Message[index++] = 0x30;//信号强度关键字
|
|
|
- temp_Message[index++] = 0x01;//信号强度数据长度
|
|
|
- temp_Message[index++] = dblocptr->location.CSQ;//信号强度值
|
|
|
- temp_Message[index++] = 0x31;//信号强度关键字
|
|
|
- temp_Message[index++] = 0x01;//信号强度数据长度
|
|
|
- temp_Message[index++] = dblocptr->location.satellitesNum;//卫星数量
|
|
|
|
|
|
for(int i =0;i<temp_length;i++)
|
|
|
{
|
|
@@ -184,6 +194,7 @@ void tt808FsFunc(uint8_t* Message, uint8_t length, uint16_t MessageID)
|
|
|
|
|
|
}
|
|
|
|
|
|
+
|
|
|
void printBytes(uint8_t *data, size_t length) {
|
|
|
for (size_t i = 0; i < length; i++) {
|
|
|
printf("%02x ", data[i]);
|
|
@@ -302,12 +313,9 @@ void hexArrayToBcd(uint8_t* array, size_t length, uint8_t* out) {
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-//MgnssFlag = true;
|
|
|
void ReMIPURC(void)
|
|
|
{
|
|
|
- //4D 49 50 55 52 43
|
|
|
- if(U4_4GrecvBuff[1]==0x4D && U4_4GrecvBuff[2]==0x49 && U4_4GrecvBuff[3]==0x50 \
|
|
|
- && U4_4GrecvBuff[4]==0x55 && U4_4GrecvBuff[5]==0x52 && U4_4GrecvBuff[6]==0x43 && U4_4GrecvBuff[10] != 0x64) //监测平台回复+MIPURC:
|
|
|
+ if(strncmp((char*)U4_4GrecvBuff, "+MIPURC", strlen("+MIPURC"))==0) //监测平台回复+MIPURC:
|
|
|
{
|
|
|
uint8_t high_byte = (U4_4GrecvBuff[18]&0x0f) *10;
|
|
|
uint8_t low_byte = U4_4GrecvBuff[19]&0x0f;
|
|
@@ -324,110 +332,81 @@ void ReMIPURC(void)
|
|
|
memset(MIPurc1,0,100);
|
|
|
|
|
|
}
|
|
|
- //64 69 73 63 6f 6e 6e 22 2c 31 2c 31 "disconn"
|
|
|
- else if(U4_4GrecvBuff[10]== 0x64 && U4_4GrecvBuff[11]== 0x69 && U4_4GrecvBuff[12]== 0x73 && U4_4GrecvBuff[13]== 0x63 && U4_4GrecvBuff[14]== 0x6f \
|
|
|
- && U4_4GrecvBuff[15]== 0x6e && U4_4GrecvBuff[16]== 0x6e && U4_4GrecvBuff[17]== 0x22 \
|
|
|
- && U4_4GrecvBuff[18]== 0x2c && U4_4GrecvBuff[19]== 0x31 && U4_4GrecvBuff[20]== 0x2c && U4_4GrecvBuff[21]== 0x31)
|
|
|
+ else if(strncmp((char*)U4_4GrecvBuff, "+MGNSSURC: \"state\",1", strlen("+MGNSSURC: \"state\",1"))==0)
|
|
|
+ {
|
|
|
+ printf("#MGNSS设置成功\r\n");
|
|
|
+
|
|
|
+ memset(U4_4GrecvBuff,0,strlen("+MGNSSURC: \"state\",1"));
|
|
|
+ }
|
|
|
+
|
|
|
+ else if(strncmp((char*)U4_4GrecvBuff, "+MGNSSURC: \"state\",0", strlen("+MGNSSURC: \"state\",0"))==0)//断开平台
|
|
|
{
|
|
|
- ML307AReset();
|
|
|
+ printf("#主动取消GNSS\r\n");
|
|
|
+ memset(U4_4GrecvBuff,0,strlen("+MGNSSURC: \"state\",0"));
|
|
|
+ }
|
|
|
+
|
|
|
+ else if(strncmp((char*)U4_4GrecvBuff, "+MIPURC: \"disconn\"", strlen("+MIPURC: \"disconn\""))==0)//"disconn" 平台断连
|
|
|
+ {
|
|
|
+ Offline=true;
|
|
|
+ printf("与平台断开连接\r\n");
|
|
|
+ ML307AReset();//与平台断开连接 offline
|
|
|
memset(U4_4GrecvBuff,0,BUFFER_SIZE);
|
|
|
}
|
|
|
+ //*连接成功 Offline=false;
|
|
|
+
|
|
|
+ else if(strncmp((char*)U4_4GrecvBuff, "+MIPOPEN: 1,0", strlen("+MIPOPEN: 1,0"))==0)//连接平台
|
|
|
+ {
|
|
|
+ Offline=false;
|
|
|
+ module4G_F = true;
|
|
|
+ menu.current = 0xBB;
|
|
|
+ tipsflag = Back;
|
|
|
+ refresh=true;
|
|
|
+ memset(U4_4GrecvBuff,0,BUFFER_SIZE);
|
|
|
+ }
|
|
|
+
|
|
|
|
|
|
- //时间 纬度(北纬) 经度(东经) 水平精度因子 海拔高度 定位类型(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
|
|
|
- else if((U4_4GrecvBuff[2]==0x47 || (U4_4GrecvBuff[0]==0x4F && U4_4GrecvBuff[1]==0x4B)) && MgnssFlag) //监测平台回复+MGNSSLOC OK4f4b
|
|
|
+ else if(((strncmp((char*)U4_4GrecvBuff, "+MGNSSLOC", strlen("+MGNSSLOC"))==0) || (strncmp((char*)U4_4GrecvBuff, "OK", strlen("OK"))==0)) && MgnssFlag) //监测平台回复+MGNSSLOC OK4f4b
|
|
|
{
|
|
|
|
|
|
memcpy(MGNSSLOC,&U4_4GrecvBuff[11],75);
|
|
|
-
|
|
|
GnssFlag=true;
|
|
|
-
|
|
|
memset(U4_4GrecvBuff,0,BUFFER_SIZE);
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
- else if(U5_BTrecvBuff[0]==0x66 && U5_BTrecvBuff[1]==0x00 && U5_BTrecvBuff[2]==0x02 && U5_BTrecvBuff[3]==0x01)//解封接收
|
|
|
- {
|
|
|
- if(U5_BTrecvBuff[4]==0x01)
|
|
|
- {//接收完成
|
|
|
- tipsflag = FinshOK;
|
|
|
- HAL_Delay(1000);
|
|
|
- if(preworkUp==3)
|
|
|
- {
|
|
|
- SET_MENU_STATUS(4,1,0,3);
|
|
|
- }
|
|
|
- else if(preworkUp==2)
|
|
|
- {
|
|
|
- SET_MENU_STATUS(5,1,0,3);
|
|
|
- }
|
|
|
- else if(preworkUp==1)
|
|
|
- {
|
|
|
- SET_MENU_STATUS(6,1,0,3);
|
|
|
- }
|
|
|
- else if(preworkUp==0)
|
|
|
- {
|
|
|
- SET_MENU_STATUS(7,1,0,3);
|
|
|
- }
|
|
|
- //USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
|
|
|
- }
|
|
|
- else if(U5_BTrecvBuff[4]==0x02)
|
|
|
- {//流水号异常
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
- else if(U5_BTrecvBuff[0]==0x66 && U5_BTrecvBuff[1]==0x00 && U5_BTrecvBuff[2]==0x03 && U5_BTrecvBuff[3]==0x01)//解封接收
|
|
|
+ else if((strncmp((char*)U4_4GrecvBuff, "+CPIN: SIM REMOVED", strlen("+CPIN: SIM REMOVED"))==0) || (strncmp((char*)U4_4GrecvBuff, "+CME ERROR: 10", strlen("+CME ERROR: 10"))==0) )//无SIM
|
|
|
{
|
|
|
- if(U5_BTrecvBuff[4]==0x01)
|
|
|
- {//接收完成
|
|
|
- tipsflag = FinshOK;
|
|
|
- HAL_Delay(1000);
|
|
|
- if(preworkUp==3)
|
|
|
- {
|
|
|
- SET_MENU_STATUS(4,1,0,3);
|
|
|
- }
|
|
|
- else if(preworkUp==2)
|
|
|
- {
|
|
|
- SET_MENU_STATUS(5,1,0,3);
|
|
|
- }
|
|
|
- else if(preworkUp==1)
|
|
|
- {
|
|
|
- SET_MENU_STATUS(6,1,0,3);
|
|
|
- }
|
|
|
- else if(preworkUp==0)
|
|
|
- {
|
|
|
- SET_MENU_STATUS(7,1,0,3);
|
|
|
- }
|
|
|
- //USART_SendString(&huart5, "AT+DISCONN=0\r\n");//断开连接
|
|
|
- }
|
|
|
- else if(U5_BTrecvBuff[4]==0x02)
|
|
|
- {//流水号异常
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
- else if(U5_BTrecvBuff[0]==0x2B && U5_BTrecvBuff[1]==0x43 && U5_BTrecvBuff[2]==0x50 && U5_BTrecvBuff[3]==0x49 && U5_BTrecvBuff[4]==0x4E && \
|
|
|
- U5_BTrecvBuff[5]==0x3A && U5_BTrecvBuff[6]==0x20 && U5_BTrecvBuff[7]==0x53 && U5_BTrecvBuff[8]==0x49 && U5_BTrecvBuff[9]==0x4D && U5_BTrecvBuff[10]==0x20 && U5_BTrecvBuff[11]==0x52)//+CPIN: SIM R
|
|
|
- {
|
|
|
- reset4Gmodule = true;
|
|
|
+ //TODO
|
|
|
+ printf("SIM卡缺失\r\n");
|
|
|
+ Offline=true;
|
|
|
+ signal = false;
|
|
|
+ menu.current = 0xBB;
|
|
|
+ tipsflag = NoSIM;
|
|
|
+ refresh=true;
|
|
|
+ memset(U4_4GrecvBuff,0,BUFFER_SIZE);
|
|
|
}
|
|
|
- else if(U4_4GrecvBuff[1]== 0x4D && U4_4GrecvBuff[2]== 0x47 && U4_4GrecvBuff[3]== 0x4E && U4_4GrecvBuff[4]== 0x53 && U4_4GrecvBuff[5]== 0x53 \
|
|
|
- && U4_4GrecvBuff[6]== 0x55 && U4_4GrecvBuff[7]== 0x52 && U4_4GrecvBuff[8]== 0x43 \
|
|
|
- && U4_4GrecvBuff[9]== 0x3A && U4_4GrecvBuff[10]== 0x20 && U4_4GrecvBuff[11]== 0x22 && U4_4GrecvBuff[12]== 0x73 \
|
|
|
- && U4_4GrecvBuff[19]== 0x31 )
|
|
|
+
|
|
|
+ else if((strncmp((char*)U4_4GrecvBuff, "+MIPCALL: 1,0", strlen("+MIPCALL: 1,0"))==0) || (strncmp((char*)U4_4GrecvBuff, "+CME ERROR: 550", strlen("+CME ERROR: 550"))==0))//意外断开平台连接!!!!//TCP未知错误
|
|
|
{
|
|
|
- MgnssFlag = true;
|
|
|
+ //TODO
|
|
|
+ Offline=true;
|
|
|
+ printf("#与平台断开连接\r\n");
|
|
|
+ ML307AReset();//与平台断开连接 offline
|
|
|
+ memset(U4_4GrecvBuff,0,BUFFER_SIZE);
|
|
|
+
|
|
|
}
|
|
|
+// else if(strncmp((char*)U4_4GrecvBuff+1, "CSQ", strlen("CSQ")))//CSQ 信号
|
|
|
+// {
|
|
|
+// memcpy(CSQ,U4_4GrecvBuff,U4_4GrecvLength);
|
|
|
+// dblocptr->location.CSQ = (uint8_t)(CSQ[6]&0xf*10)+(CSQ[7]&0xf);
|
|
|
+// memset(CSQ,0,12);
|
|
|
+// memset(U4_4GrecvBuff,0,BUFFER_SIZE);
|
|
|
+// }
|
|
|
else if(U4_4GrecvBuff[1]== 0x43 && U4_4GrecvBuff[2]== 0x53 && U4_4GrecvBuff[3]== 0x51)//CSQ 信号
|
|
|
{
|
|
|
memcpy(CSQ,U4_4GrecvBuff,U4_4GrecvLength);
|
|
|
- tt808.CSQ = (CSQ[6]&0xf*10)+(CSQ[7]&0xf);
|
|
|
+ dblocptr->location.CSQ = (uint8_t)(CSQ[6]&0xf*10)+(CSQ[7]&0xf);
|
|
|
memset(CSQ,0,12);
|
|
|
memset(U4_4GrecvBuff,0,BUFFER_SIZE);
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
void MIPURCHandle(void)
|
|
@@ -447,7 +426,7 @@ void MIPURCHandle(void)
|
|
|
if(YESorNO==YES)
|
|
|
{
|
|
|
printf("@鉴权应答yes\r\n");
|
|
|
- ZDJQflag = true;
|
|
|
+ authFlag = true;
|
|
|
}
|
|
|
else if(YESorNO==NO)
|
|
|
{
|
|
@@ -475,22 +454,17 @@ void MIPURCHandle(void)
|
|
|
uint8_t tcsjLen = MIPurc[13];
|
|
|
memcpy(MIPurcXXTCSJ,&MIPurc[13],xxtcLen);
|
|
|
printf("@得到透传数据,%d\r\n",tcsjLen);
|
|
|
-
|
|
|
-
|
|
|
memset(MIPurc,0,rlt);//rlt下发长度
|
|
|
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
|
|
|
- else if(ZDJQflag)
|
|
|
+ else if(authFlag)
|
|
|
{
|
|
|
- ZDJQflag = false;
|
|
|
+ authFlag = false;
|
|
|
HAL_Delay(500);
|
|
|
uint8_t test[] = {0x05}; //test心跳
|
|
|
tt808FsFunc(test,1,MessageID_heartbeat); //test心跳
|
|
|
- uploadtime = HAL_GetTick();//获取首次发送状态信息基准时间
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -535,8 +509,13 @@ void ReU4Proces(void)
|
|
|
dblocptr->location.longitude = convertGPS(dlongitude);
|
|
|
|
|
|
|
|
|
+ printf("%d\r\n",dblocptr->location.latitude);
|
|
|
+ printf("%d\r\n",dblocptr->location.longitude);
|
|
|
+ printf("%08X\r\n",dblocptr->location.latitude);
|
|
|
+ printf("%08X\r\n",dblocptr->location.longitude);
|
|
|
+
|
|
|
extractString(MGNSSLOC, csatellitesNum,10 ,11);//采集卫星个数
|
|
|
- tt808.satellitesNum = convertToDouble(csatellitesNum); //转换浮点数
|
|
|
+ dblocptr->location.satellitesNum = convertToDouble(csatellitesNum); //转换浮点数
|
|
|
//printf("%d",tt808.satellitesNum);
|
|
|
|
|
|
|
|
@@ -576,8 +555,33 @@ void ReU4Proces(void)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
+int countregular = 0;
|
|
|
+void Regular_reporting_Loc(void)
|
|
|
+{
|
|
|
+ countregular+=1;
|
|
|
+ dblocptr->location.alarmFlag=0x00000000;
|
|
|
+ dblocptr->location.statusFlag=0x00000002;
|
|
|
+ dblocptr->location.height=0x0000;
|
|
|
+ dblocptr->location.direction=0x0000;
|
|
|
+ dblocptr->location.signalCmd=0x30;
|
|
|
+ dblocptr->location.signalCmd_len=0x01;
|
|
|
+ dblocptr->location.atellitesCmd=0x31;
|
|
|
+ dblocptr->location.atellitesCmd_len=0x01;
|
|
|
+
|
|
|
+ if(Offline)//掉线状态10s入库定位记录
|
|
|
+ {
|
|
|
+ Database_Push(0);
|
|
|
+ }
|
|
|
+ else if(Retrans)//重传 7e0704002701820200777700060001000022000000000000000301cd8b7007278acd00000000000023051918174830011e310103b77e
|
|
|
+ {
|
|
|
+
|
|
|
+ }
|
|
|
+ else if(countregular==3 && !Offline)//在线状态10s更新状态,30s上传
|
|
|
+ {
|
|
|
+ countregular=0;
|
|
|
+ tt808FsFunc((uint8_t*)&(dblocptr->location.alarmFlag), 34, MessageID_location);
|
|
|
+ }
|
|
|
+
|
|
|
+}
|
|
|
|
|
|
|