Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
ei_packet.h
00001 /* 00002 * Copyright (c) 2013 Digi International Inc., 00003 * All rights not expressly granted are reserved. 00004 * 00005 * This Source Code Form is subject to the terms of the Mozilla Public 00006 * License, v. 2.0. If a copy of the MPL was not distributed with this file, 00007 * You can obtain one at http://mozilla.org/MPL/2.0/. 00008 * 00009 * Digi International Inc. 11001 Bren Road East, Minnetonka, MN 55343 00010 * ======================================================================= 00011 */ 00012 #ifndef _EI_PACKET_H 00013 #define _EI_PACKET_H 00014 00015 #define field_glue(left, right) left ## _ ## right 00016 #define field_name(record, field) field_glue(record,field) 00017 #define field_data(name, data) field_glue(name, data) 00018 00019 #define field_named_data(record, field, data) field_data(field_name(record, field), data) 00020 00021 #define field_allocate(name, type) field_data(name, offset), \ 00022 field_data(name, size) = (sizeof(type)), \ 00023 field_data(name, next) = (field_data(name, offset) + field_data(name, size) - 1) 00024 00025 #define field_define(record, field, type) field_allocate(field_name(record, field), type) 00026 00027 #define field_allocate_array(name, bytes) field_data(name, offset), \ 00028 field_data(name, size) = (bytes), \ 00029 field_data(name, next) = (field_data(name, offset) + field_data(name, size) - 1) 00030 00031 #define field_define_array(record, field, count) field_allocate_array(field_name(record, field), count) 00032 00033 #define record_end(name) field_data(name, bytes) 00034 00035 #define record_bytes(name) field_data(name, bytes) 00036 00037 #if (defined CONNECTOR_HAS_64_BIT_INTEGERS) 00038 #define message_store_be64(record, field, value) \ 00039 do { \ 00040 ASSERT(field_named_data(record, field, size) == sizeof (uint64_t)); \ 00041 StoreBE64(record + field_named_data(record, field, offset), (value)); \ 00042 } while (0) 00043 #endif 00044 00045 #define message_store_be32(record, field, value) \ 00046 do { \ 00047 ASSERT(field_named_data(record, field, size) == sizeof (uint32_t)); \ 00048 StoreBE32(record + field_named_data(record, field, offset), (value)); \ 00049 } while (0) 00050 00051 #define message_store_be16(record, field, value) \ 00052 do { \ 00053 ASSERT(field_named_data(record, field, size) == sizeof (uint16_t)); \ 00054 StoreBE16(record + field_named_data(record, field, offset), (value)); \ 00055 } while (0) 00056 00057 #define message_store_u8(record, field, value) \ 00058 do { \ 00059 ASSERT(field_named_data(record, field, size) == sizeof (uint8_t)); \ 00060 *(record + field_named_data(record, field, offset)) = (value); \ 00061 } while (0) 00062 00063 #define message_store_array(record, field, value, array) \ 00064 do { \ 00065 ASSERT(field_named_data(record, field, size) == array); \ 00066 memcpy((record + field_named_data(record, field, offset)), (value), array); \ 00067 } while (0) 00068 00069 #if (defined CONNECTOR_DEBUG) 00070 #define message_load_be32(record, field) (ASSERT(field_named_data(record, field, size) == sizeof (uint32_t)), LoadBE32(record + field_named_data(record, field, offset))) 00071 #define message_load_be16(record, field) (ASSERT(field_named_data(record, field, size) == sizeof (uint16_t)), LoadBE16(record + field_named_data(record, field, offset))) 00072 #define message_load_u8(record, field) (ASSERT(field_named_data(record, field, size) == sizeof (uint8_t)), *(record + field_named_data(record, field, offset))) 00073 #else 00074 #define message_load_be32(record, field) LoadBE32(record + field_named_data(record, field, offset)) 00075 #define message_load_be16(record, field) LoadBE16(record + field_named_data(record, field, offset)) 00076 #define message_load_u8(record, field) *(record + field_named_data(record, field, offset)) 00077 #endif 00078 00079 #define PACKET_EDP_PROTOCOL_SIZE ((size_t)record_bytes(edp_protocol)) 00080 #define PACKET_EDP_HEADER_SIZE ((size_t)record_bytes(edp_header)) 00081 #define PACKET_EDP_FACILITY_SIZE (PACKET_EDP_PROTOCOL_SIZE + PACKET_EDP_HEADER_SIZE) 00082 00083 /* private definitions */ 00084 enum edp_header { 00085 field_define(edp_header, type, uint16_t), 00086 field_define(edp_header, length, uint16_t), 00087 record_end(edp_header) 00088 }; 00089 00090 enum edp_protocol { 00091 field_define(edp_protocol, sec_coding, uint8_t), 00092 field_define(edp_protocol, payload, uint8_t), 00093 field_define(edp_protocol, facility, uint16_t), 00094 record_end(edp_protocol) 00095 }; 00096 00097 00098 #endif 00099
Generated on Tue Jul 12 2022 19:18:38 by
1.7.2