#include "tt808.h" #include "usart.h" #include #include //BYTE uint8_t //WORD uint16_t //DWORD uint32_t TT808 tt808; TCPCenterD tcpd; TCPClientD tcpc; uint16_t TCPCenterdatelength=0;//数据中心下行长度 void newpacket(uint8_t *head,uint8_t *body,uint8_t outarr[]); void packageData(uint8_t flag, uint8_t *head, uint8_t *body, size_t bodylength, uint8_t *escaped_data, size_t *new_length); void tt808test(uint8_t* Bodyxxt, size_t bodylength, uint8_t XXLSH); // 发送一包内容为0x30 0x7e 0x08 0x7d 0x55的数据包,则经过封装如下:0x7e 0x30 0x7d 0x02 0x08 0x7d 0x01 0x55 0x7e /**消息结构 * 标识位 消息头 消息体 校验码 标识位 * 0x7e 11BYTE MORE 1BYTE 0x7e * */ /**消息头 * * 消息ID(WORD) 消息体属性(WORD) 终端ID(BCD[6]) 消息流水号(WORD) * (0 1) (2 3) (4 5 6 7 8 9) (10 11) */ /**消息体属性 * * 消息体长度 数据加密方式 分包 保留 * (0 1 2 3 4 5 6 7 8 9) (10 11 12) 13 (14 15) */ // 校验码指从消息头开始,同后一字节异或,直到校验码前一个字节,占用一个字节。 void printBinary(uint16_t num) { for (int i = 15; i >= 0; i--) { if (num & (1u << i)) { printf("1"); } else { printf("0"); } } printf("\n"); } typedef struct Node { uint8_t data; struct Node* next; } Node; Node* createNode(uint8_t value) { Node* newNode = (Node*)malloc(sizeof(Node)); newNode->data = value; newNode->next = NULL; return newNode; } void insertAfter(Node* prevNode, uint8_t value) { Node* newNode = createNode(value); newNode->next = prevNode->next; prevNode->next = newNode; } uint8_t escaped_data[100]; // 定义足够大的数组存储转义后的数据 void escape_data(uint8_t* input, int length, uint8_t* escaped_data, size_t* new_length) { *new_length = 0; Node* head = createNode(input[0]); // 创建链表头节点 Node* current = head; escaped_data[(*new_length)++] = input[0]; // 将第一个数据直接存入 for (int i = 1; i < length; i++) { if (input[i] == 0x7E && (i != length - 1)) { escaped_data[(*new_length)++] = 0x7D; escaped_data[(*new_length)++] = 0x02; } else if (input[i] == 0x7D) { escaped_data[(*new_length)++] = 0x7D; escaped_data[(*new_length)++] = 0x01; } else { escaped_data[(*new_length)++] = input[i]; } } // 释放链表内存 current = head; Node* temp; while (current != NULL) { temp = current; current = current->next; free(temp); } } //uint8_t escaped_data[100]; // 假设足够大来存储转义后的数据 size_t new_length = 0; // 数据封装函数 void packageData(uint8_t flag, uint8_t *head, uint8_t *body, size_t bodylength, uint8_t *escaped_data, size_t *new_length) { // Calculate total length uint8_t len = 1 + 12 + bodylength + 1 + 1; // 1 byte for flag + 10 bytes for header + body length + 1 byte for checksum + 1 byte for flag uint8_t checksum = 0; // Initialize checksum // Calculate checksum from message header for (int i = 0; i < 12; i++) { checksum ^= head[i]; } for (int i = 0; i < bodylength; i++) { checksum ^= body[i]; } // Start building the packet uint8_t packet[len]; int index = 0; packet[index++] = flag; // Set the flag // Copy message header to packet for (int i = 0; i < 12; i++) { packet[index++] = head[i]; } // Copy message body to packet for (size_t i = 0; i < bodylength; i++) { packet[index++] = body[i]; } packet[index++] = checksum; // Set the checksum packet[index++] = flag; // Set the flag at the end int packetlength = (sizeof(packet)/sizeof(packet[0])); // 执行转义处理 escape_data(packet, packetlength, escaped_data, new_length); // 输出转义后的数据 // for (int i = 0; i < *new_length; i++) { // printf("%02X ", escaped_data[i]); // } // printf("\n"); // char TCPvalue[128]; // char *ptr = TCPvalue; // ptr += sprintf(ptr, "AT+MIPSEND=1,%d,\"",sizeof(escaped_data)); // for (int i = 0; i < sizeof(escaped_data); i++) { // ptr += sprintf(ptr, "%02X", escaped_data[i]); // } // sprintf(ptr, "\"\r\n");//TCPvalue // if(sendCmd_4G(TCPvalue, "+MIPSEND:", 1, 3))//发送11BYTE MAX1460 // //if(sendCmd_4G("AT+MIPSEND=1,11,\"12345678900\"\r\n", "+MIPSEND:", 1, 3))//发送11BYTE MAX1460 // { // printf("#发送完成\r\n"); // } // memset(cmd_replyArray,0,sizeof(cmd_replyArray)); // memcpy(cmd_replyArray,escaped_data,*new_length); } void reCenter(void); uint16_t xxid =0 ; uint8_t BusinessData[256] = {0}; // 定义业务数据数组 uint8_t TCPCenterCrc=0; /** * @breaf 目前监测 U1485标志位 0x7E 0x2A 0x23 0x7E */ bool U4re =false; bool newmac=false; void TCPCenterDownward(void)//信息处理 { //MIPurc1 /*测试 由485执行*/ //7E 1235 0000 647475303031 0001 252A 1532 64747531 02 00000000000000000402 101000000003 03 01108026 081010164318 23 1234 7E /* xxid = U1recvBuff[1]<<8 | U1recvBuff[2]; if (U1reFlag && U1recvBuff[0] == TT808FLAG && U1recvBuff[14] == TCPHeadBYTE && U1recvBuff[49] == TCPTAILBYTE && U1recvBuff[52] == TT808FLAG && (xxid==XXIDzdy ||xxid==XXIDxfMac1|| xxid==XXIDxfMac2||xxid==XXIDxfMac3||xxid==XXIDxfMac4)) // 业务头尾 下发MAC1 { U1reFlag = 0; TCPCenterdatelength = U1recvBuff[13]+1;//长度+1(7E) //HAL_UART_Transmit_DMA(&huart1, U1recvBuff, 53); //TEST // 将业务数据存入BusinessData数组中 if(U1recvLength-15==TCPCenterdatelength)//消息包长度 { //HAL_UART_Transmit_DMA(&huart1, U1recvBuff, 53); //TEST 问询53B //crc测试暂时不用 //TCPCenterCrc = xorBytes(&U1recvBuff[1],TCPCenterdatelength-1); tcpd.crc = U1recvBuff[TCPCenterdatelength+12];//50 tcpd.Tcrc = U1recvBuff[TCPCenterdatelength+13];//51 // if(tcpd.crc == TCPCenterCrc) // { tcpd.Xxid = (U1recvBuff[1] << 8) | U1recvBuff[2]; tcpd.Xxtsx = (U1recvBuff[3] << 8) | U1recvBuff[4]; for(int i = 0; i < 6; i++){ tcpd.CidNum[i] = U1recvBuff[5 + i]; } tcpd.Xxlsh = (U1recvBuff[11] << 8) | U1recvBuff[12]; tcpd.workcmd = U1recvBuff[15]; tcpd.Cmd = U1recvBuff[16]; tcpd.LockID = (U1recvBuff[17] << 24) | (U1recvBuff[18] << 16) | (U1recvBuff[19] << 8) | U1recvBuff[20]; tcpd.Gate = U1recvBuff[21]; for(int i = 0; i < 8; i++){ tcpd.Bill[i] = U1recvBuff[22 + i]; } tcpd.LineCode = (U1recvBuff[30] << 8) | U1recvBuff[31]; for(int i = 0; i < 6; i++){ tcpd.Key[i] = U1recvBuff[32 + i];//KEY暂存mac号 } tcpd.VaildTime = U1recvBuff[38]; tcpd.standby = (U1recvBuff[39] << 24) | (U1recvBuff[40] << 16) | (U1recvBuff[41] << 8) | U1recvBuff[42]; for(int i = 0; i < 6; i++){ tcpd.Time[i] = U1recvBuff[43 + i]; } U4re=true; newmac=true; // } } } */ /*参考 xxid = MIPurc1[1]<<8 | MIPurc1[2]; if (u4RecvFlag && MIPurc1[0] == TT808FLAG && MIPurc1[14] == TCPHeadBYTE && MIPurc1[49] == TCPTAILBYTE && MIPurc1[52] == TT808FLAG && (xxid==XXIDzdy ||xxid==XXIDxfMac1|| xxid==XXIDxfMac2||xxid==XXIDxfMac3||xxid==XXIDxfMac4)) // 业务头尾 { u4RecvFlag = 0; TCPCenterdatelength = MIPurc1[13]+1;//长度+1(7E) //HAL_UART_Transmit_DMA(&huart1, U1recvBuff, 53); //TEST // 将业务数据存入BusinessData数组中 if(u4length-15==TCPCenterdatelength)//消息包长度 { //HAL_UART_Transmit_DMA(&huart1, U1recvBuff, 53); //TEST 问询53B //crc测试暂时不用 //TCPCenterCrc = xorBytes(&U1recvBuff[1],TCPCenterdatelength-1); tcpd.crc = MIPurc1[TCPCenterdatelength+12];//50 tcpd.Tcrc = MIPurc1[TCPCenterdatelength+13];//51 // if(tcpd.crc == TCPCenterCrc) // { tcpd.Xxid = (MIPurc1[1] << 8) | MIPurc1[2]; tcpd.Xxtsx = (MIPurc1[3] << 8) | MIPurc1[4]; for(int i = 0; i < 6; i++){ tcpd.CidNum[i] = MIPurc1[5 + i]; } tcpd.Xxlsh = (MIPurc1[11] << 8) | MIPurc1[12]; tcpd.workcmd = MIPurc1[15]; tcpd.Cmd = MIPurc1[16];//30 问询 32远程施封 38远程解封 tcpd.LockID = (MIPurc1[17] << 24) | (MIPurc1[18] << 16) | (MIPurc1[19] << 8) | MIPurc1[20]; tcpd.Gate = MIPurc1[21]; for(int i = 0; i < 8; i++){ tcpd.Bill[i] = MIPurc1[22 + i]; } tcpd.LineCode = (MIPurc1[30] << 8) | MIPurc1[31]; for(int i = 0; i < 6; i++){ tcpd.Key[i] = MIPurc1[32 + i]; } tcpd.VaildTime = MIPurc1[38]; tcpd.standby = (MIPurc1[39] << 24) | (MIPurc1[40] << 16) | (MIPurc1[41] << 8) | MIPurc1[42]; for(int i = 0; i < 6; i++){ tcpd.Time[i] = MIPurc1[43 + i]; } tcpc.Gate = 0x00; U4re=true; // } } } */ } bool genghaunmac =true; extern Menu_table menu; void newMacchange(void) { //conn AT+CONN=101000000010\r\n //connected +CONNECTED:0,101000000010 //dis +DISCONN:0,101000000010 //snnum 0010 uint16_t mac = (tcpd.Key[4] << 8) | tcpd.Key[5]; char SNconn[50]; char *ptr = SNconn; ptr += sprintf(ptr, "AT+CONN="); for (int i = 0; i < 6; i++) { ptr += sprintf(ptr, "%02X", tcpd.Key[i]); } sprintf(ptr, "\r\n");//TCPvalue char SNF[50]; char *ptr1 = SNF; ptr1 += sprintf(ptr1, "+CONNECTED:0,"); for (int i = 0; i < 6; i++) { ptr1 += sprintf(ptr1, "%02X", tcpd.Key[i]); } //sprintf(ptr, "\r\n");//TCPvalue char SNname[2]; char *ptr2 = SNname; for (int i = 4; i < 6; i++) { ptr2 += sprintf(ptr2, "%02X", tcpd.Key[i]); } //sprintf(ptr, "\r\n");//TCPvalue char SND[50]; char *ptr3 = SND; ptr3 += sprintf(ptr3, "+DISCONN:0,"); for (int i = 0; i < 6; i++) { ptr3 += sprintf(ptr3, "%02X", tcpd.Key[i]); } if(xxid==0x1234) { //scanMac(); } else if(xxid==0x1235)//M1 { //xxid=0; menu.SN1name=NULL; menu.SN1=NULL; menu.SN1F=NULL; menu.SN1D=NULL; erase_flash(Sn1StatusAddr); erase_flash(Sn1Addr); erase_flash(serialNum1Addr); menu.SN1 = SNconn;//AT+CONN=*********\r\n menu.SN1F = SNF;//+CONNECTED:0,101000000010 menu.SN1name = SNname; menu.SN1D = SND; Write_Information(Sn1Addr, mac); //refresh=true; tcpc.Gate = 0x01; xxid=0; menu.home&=0x0<<3; //scanMac(); genghaunmac=true; } else if(xxid==0x1236)//M2 { menu.SN2name=NULL; menu.SN2=NULL; menu.SN2F=NULL; menu.SN2D=NULL; erase_flash(Sn2StatusAddr); erase_flash(Sn2Addr); erase_flash(serialNum2Addr); menu.SN2 = SNconn;//AT+CONN=*********\r\n menu.SN2F = SNF;//+CONNECTED:0,101000000010 menu.SN2name = SNname; menu.SN2D = SND; Write_Information(Sn2Addr, mac); //refresh=true; tcpc.Gate = 0x01; xxid=0; menu.home&=0x0<<2; genghaunmac=true; //scanMac(); } else if(xxid==0x1237)//M3 { menu.SN3name=NULL; menu.SN3=NULL; menu.SN3F=NULL; menu.SN3D=NULL; erase_flash(Sn3StatusAddr); erase_flash(Sn3Addr); erase_flash(serialNum3Addr); menu.SN3 = SNconn;//AT+CONN=*********\r\n menu.SN3F = SNF;//+CONNECTED:0,101000000010 menu.SN3name = SNname; menu.SN3D = SND; Write_Information(Sn3Addr, mac); //refresh=true; tcpc.Gate = 0x01; xxid=0; menu.home&=0x0<<1; genghaunmac=true; //scanMac(); } else if(xxid==0x1238)//M4 { menu.SN4name=NULL; menu.SN4=NULL; menu.SN4F=NULL; menu.SN4D=NULL; erase_flash(Sn4StatusAddr); erase_flash(Sn4Addr); erase_flash(serialNum4Addr); menu.SN4 = SNconn;//AT+CONN=*********\r\n menu.SN4F = SNF;//+CONNECTED:0,101000000010 menu.SN4name = SNname; menu.SN4D = SND; Write_Information(Sn4Addr, mac); //refresh=true; tcpc.Gate = 0x01; xxid=0; menu.home &= 0x0; genghaunmac=true; //scanMac(); } } uint8_t hext[256]={0}; uint8_t cmd_replyArray[] = {0}; uint32_t DTUID=0x64747531; uint16_t length; void wsj(void); extern Time time; void tcphuifu(void); int tcpdataLength = 0; void wjwd(void); //void replyCenter(void) //{ // U4re=false; // if(tcpd.Cmd==0x30 || tcpd.Cmd==0x32 || tcpd.Cmd==0x38) // { // wsj();//闻讯时间 // HAL_Delay(100); // //wjwd(); // //HAL_Delay(100); // // tcpc.workcmd = tcpd.workcmd;//终端回复 // tcpc.Cmd = tcpd.Cmd; // //64 74 75 31 dtu1 // tcpc.LockID = ((DTUID << 24)&0xff) | ((DTUID << 16)&0xff) | ((DTUID << 8)&0xff) | DTUID; // //tcpc.Gate = 0x00;//待传入 // // /* 载货清单 */ // tcpc.Bill[0] = (JD_dw>>24)&0xff;//待传入 // tcpc.Bill[1] = (JD_dw>>16)&0xff;//待传入 // tcpc.Bill[2] = (JD_dw>>8)&0xff;//待传入 // tcpc.Bill[3] = (JD_dw)&0xff;//待传入 // tcpc.Bill[4] = (WD_dw>>24)&0xff;//待传入 // tcpc.Bill[5] = (WD_dw>>16)&0xff;//待传入 // tcpc.Bill[6] = (WD_dw>>8)&0xff;//待传入 // tcpc.Bill[7] = (WD_dw)&0xff;//待传入 // /* 电压 */ // tcpc.Voltage = 0x00;//待传入 // // if(tcpc.Cmd==0x32)//施封 // { // if(tcpd.VaildTime==0x01)//锁1施封 // { // // } // if(tcpd.VaildTime==0x02)//锁2施封 // { // // } // if(tcpd.VaildTime==0x03)//锁3施封 // { // // } // if(tcpd.VaildTime==0x04)//锁4施封 // { // // } // } // // if(tcpc.Cmd==0x38)//解封 // { // if(tcpd.VaildTime==0x01)//锁1解封 // { // // } // if(tcpd.VaildTime==0x02)//锁2解封 // { // // } // if(tcpd.VaildTime==0x03)//锁3解封 // { // // } // if(tcpd.VaildTime==0x04)//锁4解封 // { // // } // } // /* 锁状态 */ // //tcpc.LockStatus = 0xAA;//待传入 // tcpc.LockStatus = tt808.L1Lockstatus; // /* 电机状态 */ // //tcpc.MotoStatus = 0x00;//待传入 // tcpc.MotoStatus = tt808.L2Lockstatus; // /* 线路编号 */ // tcpc.LineCode = ((uint16_t)tt808.L3Lockstatus << 8) | tt808.L4Lockstatus;//待传入 // //// /* 操作标识码 */ // tcpc.OperationIdNum[0] = 0x00;//待传入 // tcpc.OperationIdNum[1] = 0x00;//待传入 // tcpc.OperationIdNum[2] = 0x00;//待传入 // tcpc.OperationIdNum[3] = 0x00;//待传入 // tcpc.OperationIdNum[4] = 0x00;//待传入 // tcpc.OperationIdNum[5] = 0x00;//待传入 // tcpc.OperationIdNum[6] = 0x00;//待传入 // tcpc.OperationIdNum[7] = 0x00;//待传入 // /* 设备标识码 */ // tcpc.cmdSRC = 0x0F;//dtu设备 // // /* 下发命令时间 */ // tcpc.Time[0] = time.year; // tcpc.Time[1] = time.month; // tcpc.Time[2] = time.day; // tcpc.Time[3] = time.hour; // tcpc.Time[4] = time.minute; // tcpc.Time[5] = time.second; // // // //*** // cmd_replyArray[1]=TCPHeadBYTE; // cmd_replyArray[2]=tcpc.workcmd; // cmd_replyArray[3]=tcpc.Cmd; // cmd_replyArray[4]=(tcpc.LockID>>24)&0xff; // cmd_replyArray[5]=(tcpc.LockID>>16)&0xff; // cmd_replyArray[6]=(tcpc.LockID>>8)&0xff; // cmd_replyArray[7]=(tcpc.LockID)&0xff; // cmd_replyArray[8]=tcpc.Gate; // memcpy(&cmd_replyArray[9],tcpc.Bill,8); // cmd_replyArray[17]=tcpc.Voltage; // cmd_replyArray[18]=tcpc.LockStatus; // cmd_replyArray[19]=tcpc.MotoStatus; // cmd_replyArray[20]=(tcpc.LineCode>>8)&0xff; // cmd_replyArray[21]=(tcpc.LineCode)&0xff; // memcpy(&cmd_replyArray[22],tcpc.OperationIdNum,8); // cmd_replyArray[30]=tcpc.cmdSRC; // memcpy(&cmd_replyArray[31],tcpc.Time,6); // // cmd_replyArray[0]=sizeof(cmd_replyArray)-1; // cmd_replyArray[37]=TCPTAILBYTE; // cmd_replyArray[38]=xorBytes(&cmd_replyArray[1],37);//第2字节开始校验 // // tcpdataLength = sizeof(cmd_replyArray) / sizeof(cmd_replyArray[0]); // // // // tcphuifu(); // } // // //} uint8_t MIPurc[256]; uint8_t MIPurc1[256]; uint8_t MIPurcXXTCSJ[256];//平台下行透传数据 bool MIPurcReFlag = false; uint16_t hccd = 0; char high[]={0}; bool chuliSJ = false; char hex2asc(const char *hex) { char asc = 0; char a = (hex[0]>='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>8)&0xff); // header[1] = (XXIDzdy&0xff); // } // // if(xxid == XXIDxfMac1) // { // //xxid=0; // header[0] = ((XXIDxfMac1>>8)&0xff); // header[1] = (XXIDxfMac1&0xff); // } // if(xxid == XXIDxfMac2) // { // //xxid=0; // header[0] = ((XXIDxfMac2>>8)&0xff); // header[1] = (XXIDxfMac2&0xff); // } // if(xxid == XXIDxfMac3) // { // //xxid=0; // header[0] = ((XXIDxfMac3>>8)&0xff); // header[1] = (XXIDxfMac3&0xff); // } // if(xxid == XXIDxfMac4) // { // //xxid=0; // header[0] = ((XXIDxfMac4>>8)&0xff); // header[1] = (XXIDxfMac4&0xff); // } // // // // header[2] = ((XXTSXdata>>8)&0xff); // header[3] = (XXTSXdata&0xff); // header[4] = 0x64; // header[5] = 0x74; // header[6] = 0x75; // header[7] = 0x30; // header[8] = 0x30; // header[9] = 0x31; // header[10] = ((tt808.LSH>>8)&0xff); // header[11] = (tt808.LSH&0xff); // // // // for (int i = 0; i < 12; i++) { // checksum ^= header[i]; // } // // for (int i = 0; i < tcpdataLength; i++) { // checksum ^= cmd_replyArray[i]; // } // ; // uint8_t len = 1 + 12 + tcpdataLength + 1 + 1; // uint8_t tcppacket[len]; // int index = 0; // tcppacket[index++] = TT808FLAG; // Set the flag // // for (int i = 0; i < 12; i++) { // tcppacket[index++] = header[i]; // } // // Copy message body to packet // for (size_t i = 0; i < tcpdataLength; i++) { // tcppacket[index++] = cmd_replyArray[i]; // } // // uint16_t tcpoutLength = len; // // tcppacket[index++] = checksum; // Set the checksum // tcppacket[index++] = TT808FLAG; // Set the flag at the end // // // char TCPvalue[256]; // char *ptr = TCPvalue; // ptr += sprintf(ptr, "AT+MIPSEND=1,%d,\"",tcpoutLength); // for (int i = 0; i < tcpoutLength; i++) { // ptr += sprintf(ptr, "%02X", tcppacket[i]); // } // sprintf(ptr, "\"\r\n");//TCPvalue // if(sendCmd_4G(TCPvalue, "+MIPSEND:", 1, 1))//发送11BYTE MAX1460 // { // printf("#发送完成\r\n"); // } // // module4G_F=true; // tt808.LSH+=1; // memset(MIPurc1,0,rlt); //} // 7E 0002 0005 0000000000000000 042A002309 03 7E uint8_t xxtnewlength=0; uint8_t xxtfz[100]; uint8_t tcppacket[256]; 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); 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 flag 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++] = xxtfz[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[256]; 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))//发送11BYTE MAX1460 { printf("#发送完成\r\n"); } tt808.LSH+=1; } /*需要传入消息体长度sizeof(xxt)/sizeof(xxt[0]);*/ void tt808FsFunc(uint8_t xxt[], uint8_t xxtlength, uint16_t XXID) { xxtnewlength = xxtFZ(xxt, xxtlength, xxtfz, XXID); chuli(XXID); } uint8_t xxtFZ(uint8_t xxt[], uint8_t xxtlength, uint8_t outXxt[],uint16_t XXID) { int index = 0; uint8_t newlength = xxtlength+3; uint8_t newXxt[newlength]; if(XXID==XXIDzdjq || XXID==XXIDzdxt || XXID==XXIDzddz)//不加头尾 { for (int i = 0; i < xxtlength; i++) { newXxt[index++] = xxt[i]; // 将消息头拷贝到报文中 } newlength = index; for(int i =0;i>24)&0xff; LBSdata[1] = (lbsset.bjbz>>16)&0xff; LBSdata[2] = (lbsset.bjbz>>8)&0xff; LBSdata[3] = lbsset.bjbz&0xff; LBSdata[4] = (lbsset.zt>>24)&0xff; LBSdata[5] = (lbsset.zt>>16)&0xff; LBSdata[6] = (lbsset.zt>>8)&0xff; LBSdata[7] = lbsset.zt&0xff; LBSdata[8] = (WD_dw>>24)&0xff; LBSdata[9] = (WD_dw>>16)&0xff; LBSdata[10] = (WD_dw>>8)&0xff; LBSdata[11] = WD_dw&0xff; LBSdata[12] = (JD_dw>>24)&0xff; LBSdata[13] = (JD_dw>>16)&0xff; LBSdata[14] = (JD_dw>>8)&0xff; LBSdata[15] = JD_dw&0xff; LBSdata[16] = (lbsset.gaocheng>>8)&0xff; LBSdata[17] = lbsset.gaocheng&0xff; LBSdata[18] = (lbsset.sudu>>8)&0xff; LBSdata[19] = lbsset.sudu&0xff; LBSdata[20] = (lbsset.fangxiang>>8)&0xff; LBSdata[21] = lbsset.fangxiang&0xff; LBSdata[22] = time.tt[0]; LBSdata[23] = time.tt[1]; LBSdata[24] = time.tt[2]; LBSdata[25] = time.tt[3]+8; LBSdata[26] = time.tt[4]; LBSdata[27] = time.tt[5]; }