#include "tt808.h" #include "usart.h" #include "key.h" #include #include #include #include //*整型 int rlt; uint8_t xxtnewlength=0; uint16_t uploadtime=0; //上传时间 uint16_t hccd = 0;//ascii个数(*2) uint8_t xxtfzData[100]; //放入封装后数据 uint8_t tcppacket[100]; //消息数据 uint8_t header[12]; //处理头部 uint8_t index_2c = 0; uint8_t MIPurc[100]; //接收平台数据 uint8_t MIPurc1[100]; //接收平台数据 uint8_t MIPurcXXTCSJ[100];//平台下行透传数据 uint8_t speedBegin=0; uint8_t speedEnd=0; uint8_t speed[10]; //处理头部 double dSpeed=0; double dWd=0; double dJd=0; char cSpeed[10]; char wd[15]; char jd[15]; char MGNSSLOC[100]; //接收定位数据 char MGNSSLOC_time[6]; //接收定位数据 uint32_t Stamp =0; uint8_t GNSSdata[40]={0}; //*结构体 TT808 tt808; extern TipsFlag tipsflag; extern Menu_table menu; extern bool refresh; extern Database db; //*布尔 bool ZDJQflag = false; bool GnssFlag = false; void chuli(uint16_t XXID) { uint16_t XXTSXdata = xxtnewlength; XXTSXdata |= ( xxtnewlength | (TCPJMFSNULL<<10)); // 将长度左移3位后和加密方式进行按位或操作(001 RSA ,000 无加密) header[0] = ((XXID>>8)&0xff); header[1] = (XXID&0xff); //消息ID header[2] = ((XXTSXdata>>8)&0xff); header[3] = (XXTSXdata&0xff); //消息属性 header[4] = 0x00; header[5] = 0x00; header[6] = 0x16; header[7] = 0x00; header[8] = 0x00; header[9] = 0x08; //“手机号” header[10] = ((tt808.LSH>>8)&0xff);; header[11] = (tt808.LSH&0xff);; int index = 0; tcppacket[index++] = TT808FLAG; // Set the headflag 0x7E for (int i = 0; i < 12; i++) { tcppacket[index++] = header[i]; } // Copy message body to packet for (size_t i = 0; i < xxtnewlength; i++) { tcppacket[index++] = xxtfzData[i]; } tcppacket[index++] = xorBytes(&tcppacket[1],12+xxtnewlength);; // Set the checksum tcppacket[index++] = TT808FLAG; // Set the flag at the end // for (int i = 0; i < index; i++) { // printf("%02X ", tcppacket[i]); // 以十六进制格式打印每个元素 // } char TCPvalue[100]; char *ptr = TCPvalue; ptr += sprintf(ptr, "AT+MIPSEND=1,%d,\"",index); for (int i = 0; i < index; i++) { ptr += sprintf(ptr, "%02X", tcppacket[i]); } sprintf(ptr, "\"\r\n");//TCPvalue if(sendCmd_4G(TCPvalue, "+MIPSEND:", 1, 1))//发送 { printf("#发送完成\r\n"); } tt808.LSH+=1;//需做写入处理 } /** * @breaf 消息体封装 * xxt[] 消息数据; xxtlength 消息数据长度; outXxt[] 封装后消息数据; XXID 消息ID */ uint8_t xxtFZ(uint8_t xxt[], uint8_t xxtlength, uint8_t outXxt[],uint16_t XXID) { int index = 0; uint8_t newlength = 0;//加首尾 25/23/crc if(XXID==XXID_zdjq || XXID==XXID_zdxt)//不加头尾(鉴权、心跳) { newlength = xxtlength;//不加首尾 uint8_t newXxt[newlength]; for (int i = 0; i < xxtlength; i++) { newXxt[index++] = xxt[i]; // 将消息头拷贝到报文中 } newlength = index; for(int i =0;i='A' && hex[0]<='F')?(hex[0]^32):hex[0]; char b = (hex[1]>='A' && hex[1]<='F')?(hex[1]^32):hex[1]; if ((a>='0' && a<='9' || a>='a' && a<='f') && (b>='0' && b<='9' || b>='a' && b<='f')){ asc = ((('a'<=a && a<='f')?(a-'a')+10:a-'0')<<4)|(('a'<=b && b<='f')?(b-'a')+10:b-'0'); } return asc; } char *bin2hex(char *hex, const unsigned char *bin, int size) { size_t i; for(i=0; i> 16)&0xFFFF; db.timeStamp[1] = (timestamp)&0xFFFF; } void ReU4Proces(void) { if(GnssFlag) { GnssFlag=false; RTCtime();//同步时间 // 调用函数提取字符串 extractString(MGNSSLOC, cSpeed,7 ,8);//采集 dSpeed = convertToDouble(cSpeed); //转换浮点数 dSpeed*=100; // 调用函数提取字符串 extractString(MGNSSLOC, wd,1 ,2);//采集 dWd = convertToDouble(wd); //转换浮点数 dWd*=10000; // 调用函数提取字符串 extractString(MGNSSLOC, jd,2 ,3);//采集 dJd = convertToDouble(jd); //转换浮点数 dJd*=10000; if(dSpeed !=0 && dWd!=0 &&dJd!=0) //有数据进行更新! { db.speed[0] = (uint16_t)dSpeed; db.WD_u16[0] = ((uint32_t)dWd >> 16) &0xffff; db.WD_u16[1] = ((uint32_t)dWd) &0xffff; // 打印提取到的字符串 db.JD_u16[0] = ((uint32_t)dJd >> 16) &0xffff; db.JD_u16[1] = ((uint32_t)dJd) &0xffff; // printf("提取到的字符串为:%s\n", speed); // printf("Converted double: %.f\n", dSpeed); // printf("Converted double: %04X\n", db.speed[0]); // printf("提取到的字符串为:%s\n", wd); // printf("Converted double: %.f\n", dWd); // printf("Converted double: %04X%04X\n", db.WD_u16[0],db.WD_u16[1]); // printf("提取到的字符串为:%s\n", jd); // printf("Converted double: %.f\n", dJd); // printf("Converted double: %04X%04X\n", db.JD_u16[0],db.JD_u16[1]); if(menu.current == 0xBB) { menu.current = 0; refresh=true; } } else { if(signal) { //signal = false; menu.current = 0xBB; tipsflag = Nosignal; refresh=true; } } //printf("Time: %04X%04X\n", db.timeStamp[0],db.timeStamp[1]); memset(MGNSSLOC,0,100); } }