by schumi2000
pack_handle.cpp
- Committer:
- schumi2000
- Date:
- 2016-08-17
- Revision:
- 0:32964091adbf
File content as of revision 0:32964091adbf:
#include "pack_handle.h" #include "sys.h" uint16_t packing(const char *str, char *buffer, int ack, uint32_t msgType,uint64_t sequence) { uint16_t len = 0; uint16_t len2 = 0; memset(buffer,0x00,PACKAGE_BUFFER_SIZE); //Head buffer[0]=0x1f; //version buffer[1]=0x01; //ack buffer[2]=ack; //encrypt buffer[3]=0x00; //不加密 //serialId memcpy(buffer+4,devid,strlen(devid)); //printf("packing devid=%s\n",devid); //sequence (13位时间戳,占8个字节) reverse_u64(&sequence);//大小端转换 memcpy(buffer+16,(char *)&sequence,8); //消息类型 reverse_u32(&msgType); //大小端转换 memcpy(buffer+24,(char *)&msgType,4); //CRC校验(暂时不完成) buffer[28]=0x00; buffer[29]=0x00; //数据长度 len = strlen(str); len2 = len; reverse_u16(&len2); memcpy(buffer+30,(char *)&len2,2); //数据 memcpy(buffer+32,str,len); //HexOutput(buffer,32+len); return 32+len; } int unpack(char *buffer, unsigned int bufferSize, char *data, uint8_t *ack, uint32_t *msgType, uint64_t *sequence) { uint16_t len=0; if(buffer[0] ==0x1f || bufferSize <32) //判断包头是否正确 { //printf("unpack devid=%s\n",devid); if(memcmp (buffer+4, devid ,strlen(devid)) == 0) //判断是否本设备。 { *ack = buffer[2]; memcpy((char*)sequence,buffer+16,8); reverse_u64(sequence); //printf("unpack time=%lld\n",*sequence); memcpy(msgType,buffer+24,4); reverse_u32(msgType); //进行大小端转换 printf("msg type =%u\n",*msgType); memcpy((char*)&len,buffer+30,2); reverse_u16(&len); memcpy(data,buffer+32,len); printf("revmsg=%s\n",data); return len; } } return -1; }