📄 packet.h
字号:
// ----------------------------------------------------------------------------// Copyright 2006-2007, Martin D. Flynn// All rights reserved// ----------------------------------------------------------------------------//// Licensed under the Apache License, Version 2.0 (the "License");// you may not use this file except in compliance with the License.// You may obtain a copy of the License at// // http://www.apache.org/licenses/LICENSE-2.0// // Unless required by applicable law or agreed to in writing, software// distributed under the License is distributed on an "AS IS" BASIS,// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.// See the License for the specific language governing permissions and// limitations under the License.//// ----------------------------------------------------------------------------#ifndef _PACKET_H#define _PACKET_H#ifdef __cplusplusextern "C" {#endif//#include "custom/defaults.h" // PACKET_MAX_FIELD_COUNT// PACKET_MAX_PAYLOAD_LENGTH#include "tools/stdtypes.h"#include "tools/bintools.h"#include "tools/gpstools.h"// ----------------------------------------------------------------------------//// General Binary packet format:// 0:1 - Packet header (currently 0xE0 in this implementation)// 1:1 - Packet type (see Client/Server packet types below)// 2:1 - Payload length (0 to 255 bytes)// 3:X - Payload data//// General ASCII packet format:// 0:1 - Start of ASCII packet character (ASCII "$")// 1:2 - ASCII Packet header (ASCII "E0")// 3:2 - ASCII Packet type (see Client/Server packet types below)// 5:1 - ASCII Payload encoding type// "=" for Base64 encoded payload (preferred)// ":" for HEX encoded payload// "," for CSV encoded payload// 6:X - ASCII payload according to encoding type// X:3 - Optional ASCII XOR checksum (in the format "*HH")// X:1 - ASCII "\r" terminator//// ----------------------------------------------------------------------------typedef UInt8 PacketType_t;// ----------------------------------------------------------------------------#define PACKET_ASCII_ENCODING_CHAR '$' // 0x24#define PACKET_ASCII_ENCODING_EOL '\r' // '\n' // '\r'#define PACKET_HEADER_BASIC ((UInt8)0xE0) // header#define PACKET_HEADER_CLIENT_BASIC ((UInt8)0xE0) // header#define PACKET_HEADER_SERVER_BASIC ((UInt8)0xE0) // header#define PACKET_HEADER_LENGTH 3#define CLIENT_HEADER_TYPE(H,T) (ClientPacketType_t)(((H) << 8) | ((T) & 0xFF))#define CLIENT_PACKET_HEADER(HT) (UInt8)(((HT) >> 8) & 0xFF) // PACKET_HEADER_CLIENT_BASIC#define CLIENT_PACKET_TYPE(HT) (UInt8)((HT) & 0xFF)#define SERVER_HEADER_TYPE(H,T) (((H) << 8) | ((T) & 0xFF))#define SERVER_PACKET_HEADER(HT) (UInt8)(((HT) >> 8) & 0xFF) // PACKET_HEADER_SERVER_BASIC#define SERVER_PACKET_TYPE(HT) (UInt8)((HT) & 0xFF)// ----------------------------------------------------------------------------// Client originated packets#define PKT_CLIENT_HEADER ((UInt16)PACKET_HEADER_CLIENT_BASIC << 8)enum ClientPacketType_enum { /* dialog packets */ PKT_CLIENT_EOB_DONE = PKT_CLIENT_HEADER|0x00, // End of block/transmission, "no more to say" // Payload: // 0:2 - Fletcher checksum (optional) PKT_CLIENT_EOB_MORE = PKT_CLIENT_HEADER|0x01, // End of block/transmission, "I have more to say" // Payload: // 0:2 - Fletcher checksum (optional) /* identification packets */ PKT_CLIENT_UNIQUE_ID = PKT_CLIENT_HEADER|0x11, // Unique identifier // Payload: // 0:X - Unique ID [4 to 20 bytes] PKT_CLIENT_ACCOUNT_ID = PKT_CLIENT_HEADER|0x12, // Account identifier // Payload: // 0:X - Case insensitive ASCII account ID PKT_CLIENT_DEVICE_ID = PKT_CLIENT_HEADER|0x13, // Device identifier // Payload: // 0:X - Case insensitive ASCII device ID /* standard fixed format event packets */ PKT_CLIENT_FIXED_FMT_STD = PKT_CLIENT_HEADER|0x30, // Standard GPS // Payload: // 0:2 - Status code // 2:4 - Timestamp (POSIX 'epoch' time) // 6:3 - Latitude (see 'gpstools.c' for encoding/decoding algorithm) // 9:3 - Longitude (see 'gpstools.c' for encoding/decoding algorithm) // 12:1 - Speed (kph) // 13:1 - Heading (Degrees * 255/360) // 14:2 - Altitude (meters) // 16:3 - Distance (kilometers) // 19:1 - Sequence (0..255) PKT_CLIENT_FIXED_FMT_HIGH = PKT_CLIENT_HEADER|0x31, // High Resolution GPS // Payload: // 0:2 - Status code // 2:4 - Timestamp (POSIX 'epoch' time) // 6:4 - Latitude (see 'gpstools.c' for encoding/decoding algorithm) // 10:4 - Longitude (see 'gpstools.c' for encoding/decoding algorithm) // 14:2 - Speed (kph * 10) // 16:2 - Heading (Degrees * 10) // 18:3 - Altitude (meters * 10) // 21:3 - Distance (kilometers * 10) // 24:1 - Sequence (0..255) PKT_CLIENT_FIXED_FORMAT_F = PKT_CLIENT_HEADER|0x3F, // (last fixed format) // Payload: // (Not defined) /* DMT service provider formats */ PKT_CLIENT_DMTSP_FORMAT_0 = PKT_CLIENT_HEADER|0x50, // Service provider format #0 PKT_CLIENT_DMTSP_FORMAT_1 = PKT_CLIENT_HEADER|0x51, // Service provider format #1 PKT_CLIENT_DMTSP_FORMAT_2 = PKT_CLIENT_HEADER|0x52, // Service provider format #2 PKT_CLIENT_DMTSP_FORMAT_3 = PKT_CLIENT_HEADER|0x53, // Service provider format #3 PKT_CLIENT_DMTSP_FORMAT_4 = PKT_CLIENT_HEADER|0x54, // Service provider format #4 PKT_CLIENT_DMTSP_FORMAT_5 = PKT_CLIENT_HEADER|0x55, // Service provider format #5 PKT_CLIENT_DMTSP_FORMAT_6 = PKT_CLIENT_HEADER|0x56, // Service provider format #6 PKT_CLIENT_DMTSP_FORMAT_7 = PKT_CLIENT_HEADER|0x57, // Service provider format #7 PKT_CLIENT_DMTSP_FORMAT_8 = PKT_CLIENT_HEADER|0x58, // Service provider format #8 PKT_CLIENT_DMTSP_FORMAT_9 = PKT_CLIENT_HEADER|0x59, // Service provider format #9 PKT_CLIENT_DMTSP_FORMAT_A = PKT_CLIENT_HEADER|0x5A, // Service provider format #A PKT_CLIENT_DMTSP_FORMAT_B = PKT_CLIENT_HEADER|0x5B, // Service provider format #B PKT_CLIENT_DMTSP_FORMAT_C = PKT_CLIENT_HEADER|0x5C, // Service provider format #C PKT_CLIENT_DMTSP_FORMAT_D = PKT_CLIENT_HEADER|0x5D, // Service provider format #D PKT_CLIENT_DMTSP_FORMAT_E = PKT_CLIENT_HEADER|0x5E, // Service provider format #E PKT_CLIENT_DMTSP_FORMAT_F = PKT_CLIENT_HEADER|0x5F, // Service provider format #F // Payload: // (Not defined) /* custom format event packets */ PKT_CLIENT_CUSTOM_FORMAT_0 = PKT_CLIENT_HEADER|0x70, // Custom format #0 PKT_CLIENT_CUSTOM_FORMAT_1 = PKT_CLIENT_HEADER|0x71, // Custom format #1 PKT_CLIENT_CUSTOM_FORMAT_2 = PKT_CLIENT_HEADER|0x72, // Custom format #2 PKT_CLIENT_CUSTOM_FORMAT_3 = PKT_CLIENT_HEADER|0x73, // Custom format #3 PKT_CLIENT_CUSTOM_FORMAT_4 = PKT_CLIENT_HEADER|0x74, // Custom format #4 PKT_CLIENT_CUSTOM_FORMAT_5 = PKT_CLIENT_HEADER|0x75, // Custom format #5 PKT_CLIENT_CUSTOM_FORMAT_6 = PKT_CLIENT_HEADER|0x76, // Custom format #6 PKT_CLIENT_CUSTOM_FORMAT_7 = PKT_CLIENT_HEADER|0x77, // Custom format #7 PKT_CLIENT_CUSTOM_FORMAT_8 = PKT_CLIENT_HEADER|0x78, // Custom format #8 PKT_CLIENT_CUSTOM_FORMAT_9 = PKT_CLIENT_HEADER|0x79, // Custom format #9 PKT_CLIENT_CUSTOM_FORMAT_A = PKT_CLIENT_HEADER|0x7A, // Custom format #A PKT_CLIENT_CUSTOM_FORMAT_B = PKT_CLIENT_HEADER|0x7B, // Custom format #B PKT_CLIENT_CUSTOM_FORMAT_C = PKT_CLIENT_HEADER|0x7C, // Custom format #C PKT_CLIENT_CUSTOM_FORMAT_D = PKT_CLIENT_HEADER|0x7D, // Custom format #D PKT_CLIENT_CUSTOM_FORMAT_E = PKT_CLIENT_HEADER|0x7E, // Custom format #E PKT_CLIENT_CUSTOM_FORMAT_F = PKT_CLIENT_HEADER|0x7F, // Custom format #F // Payload: // (Not defined) /* Property packet */ PKT_CLIENT_PROPERTY_VALUE = PKT_CLIENT_HEADER|0xB0, // Property value // Payload: // 0:2 - Property ID // 2:X - Property value /* Custom format packet */ PKT_CLIENT_FORMAT_DEF_24 = PKT_CLIENT_HEADER|0xCF, // Custom format definition (24 bit field def) // Payload: // 0:1 - Custom packet type (0x70..0x7F) // 1:1 - Number of fields // 2:3 - Field definition (bitmask) // 23:1 HiRes [0x800000] // 16:7 Type [0x7F0000] // 8:8 Index [0x00FF00] // 0:8 Length [0x0000FF]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -