by schumi2000

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers pack_handle.cpp Source File

pack_handle.cpp

00001 #include "pack_handle.h"
00002 #include "sys.h"
00003 
00004 uint16_t packing(const char *str, char *buffer, int ack, uint32_t msgType,uint64_t sequence)
00005 {
00006         uint16_t len = 0;
00007       uint16_t len2 = 0;
00008     
00009         memset(buffer,0x00,PACKAGE_BUFFER_SIZE);
00010 
00011     //Head
00012     buffer[0]=0x1f;
00013     //version
00014     buffer[1]=0x01;
00015     //ack
00016     buffer[2]=ack;
00017     //encrypt
00018     buffer[3]=0x00; //不加密
00019     //serialId
00020     memcpy(buffer+4,devid,strlen(devid)); 
00021     
00022         //printf("packing devid=%s\n",devid);
00023 
00024     //sequence (13位时间戳,占8个字节)
00025       reverse_u64(&sequence);//大小端转换
00026     memcpy(buffer+16,(char *)&sequence,8);
00027 
00028     //消息类型
00029       reverse_u32(&msgType);  //大小端转换
00030     memcpy(buffer+24,(char *)&msgType,4);
00031         
00032     //CRC校验(暂时不完成)
00033     buffer[28]=0x00;
00034     buffer[29]=0x00;
00035     
00036         //数据长度
00037         len = strlen(str);
00038         len2 = len;
00039         reverse_u16(&len2);
00040         
00041     memcpy(buffer+30,(char *)&len2,2);
00042     
00043         //数据
00044     memcpy(buffer+32,str,len);
00045         
00046         //HexOutput(buffer,32+len);
00047 
00048     return 32+len;
00049 }
00050 
00051 int unpack(char *buffer, unsigned int bufferSize, char *data, uint8_t *ack, uint32_t *msgType, uint64_t *sequence)
00052 {
00053     uint16_t len=0;
00054     
00055     if(buffer[0] ==0x1f || bufferSize <32) //判断包头是否正确
00056     {
00057                 //printf("unpack devid=%s\n",devid);
00058         if(memcmp (buffer+4, devid ,strlen(devid)) == 0) //判断是否本设备。
00059         {
00060             *ack = buffer[2];
00061                     
00062             memcpy((char*)sequence,buffer+16,8);   
00063                       reverse_u64(sequence);
00064                     
00065                         //printf("unpack time=%lld\n",*sequence);
00066 
00067             memcpy(msgType,buffer+24,4);
00068             reverse_u32(msgType); //进行大小端转换
00069                         
00070                         printf("msg type =%u\n",*msgType);
00071                         
00072             memcpy((char*)&len,buffer+30,2);
00073             reverse_u16(&len);
00074                         
00075             memcpy(data,buffer+32,len);             
00076                         printf("revmsg=%s\n",data);
00077 
00078             return len;
00079         }
00080     }
00081     return -1;
00082 }