The official Mbed 2 C/C++ SDK provides the software platform and libraries to build your applications.

Dependents:   hello SerialTestv11 SerialTestv12 Sierpinski ... more

mbed 2

This is the mbed 2 library. If you'd like to learn about Mbed OS please see the mbed-os docs.

Committer:
AnnaBridge
Date:
Wed Feb 20 20:53:29 2019 +0000
Revision:
172:65be27845400
Parent:
171:3a7713b1edbc
mbed library release version 165

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 171:3a7713b1edbc 1 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 2 /*!
AnnaBridge 171:3a7713b1edbc 3 * \file bstream.h
AnnaBridge 171:3a7713b1edbc 4 *
AnnaBridge 171:3a7713b1edbc 5 * \brief Byte stream to integer conversion macros.
AnnaBridge 171:3a7713b1edbc 6 *
AnnaBridge 171:3a7713b1edbc 7 * $Date: 2015-10-25 12:07:49 -0700 (Sun, 25 Oct 2015) $
AnnaBridge 171:3a7713b1edbc 8 * $Revision: 4298 $
AnnaBridge 171:3a7713b1edbc 9 *
AnnaBridge 171:3a7713b1edbc 10 * Copyright (c) 2009 Wicentric, Inc., all rights reserved.
AnnaBridge 171:3a7713b1edbc 11 * Wicentric confidential and proprietary.
AnnaBridge 171:3a7713b1edbc 12 *
AnnaBridge 171:3a7713b1edbc 13 * IMPORTANT. Your use of this file is governed by a Software License Agreement
AnnaBridge 171:3a7713b1edbc 14 * ("Agreement") that must be accepted in order to download or otherwise receive a
AnnaBridge 171:3a7713b1edbc 15 * copy of this file. You may not use or copy this file for any purpose other than
AnnaBridge 171:3a7713b1edbc 16 * as described in the Agreement. If you do not agree to all of the terms of the
AnnaBridge 171:3a7713b1edbc 17 * Agreement do not use this file and delete all copies in your possession or control;
AnnaBridge 171:3a7713b1edbc 18 * if you do not have a copy of the Agreement, you must contact Wicentric, Inc. prior
AnnaBridge 171:3a7713b1edbc 19 * to any use, copying or further distribution of this software.
AnnaBridge 171:3a7713b1edbc 20 */
AnnaBridge 171:3a7713b1edbc 21 /*************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 22 #ifndef BSTREAM_H
AnnaBridge 171:3a7713b1edbc 23 #define BSTREAM_H
AnnaBridge 171:3a7713b1edbc 24
AnnaBridge 171:3a7713b1edbc 25 #include "bda.h"
AnnaBridge 171:3a7713b1edbc 26
AnnaBridge 171:3a7713b1edbc 27 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 28 extern "C" {
AnnaBridge 171:3a7713b1edbc 29 #endif
AnnaBridge 171:3a7713b1edbc 30
AnnaBridge 171:3a7713b1edbc 31 /**************************************************************************************************
AnnaBridge 171:3a7713b1edbc 32 Macros
AnnaBridge 171:3a7713b1edbc 33 **************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 34
AnnaBridge 171:3a7713b1edbc 35 /*!
AnnaBridge 171:3a7713b1edbc 36 * Macros for converting a little endian byte buffer to integers.
AnnaBridge 171:3a7713b1edbc 37 */
AnnaBridge 171:3a7713b1edbc 38 #define BYTES_TO_UINT16(n, p) {n = ((uint16_t)(p)[0] + ((uint16_t)(p)[1] << 8));}
AnnaBridge 171:3a7713b1edbc 39
AnnaBridge 171:3a7713b1edbc 40 #define BYTES_TO_UINT24(n, p) {n = ((uint16_t)(p)[0] + ((uint16_t)(p)[1] << 8) + \
AnnaBridge 171:3a7713b1edbc 41 ((uint16_t)(p)[2] << 16));}
AnnaBridge 171:3a7713b1edbc 42
AnnaBridge 171:3a7713b1edbc 43 #define BYTES_TO_UINT32(n, p) {n = ((uint32_t)(p)[0] + ((uint32_t)(p)[1] << 8) + \
AnnaBridge 171:3a7713b1edbc 44 ((uint32_t)(p)[2] << 16) + ((uint32_t)(p)[3] << 24));}
AnnaBridge 171:3a7713b1edbc 45
AnnaBridge 171:3a7713b1edbc 46 #define BYTES_TO_UINT40(n, p) {n = ((uint64_t)(p)[0] + ((uint64_t)(p)[1] << 8) + \
AnnaBridge 171:3a7713b1edbc 47 ((uint64_t)(p)[2] << 16) + ((uint64_t)(p)[3] << 24) + \
AnnaBridge 171:3a7713b1edbc 48 ((uint64_t)(p)[4] << 32));}
AnnaBridge 171:3a7713b1edbc 49
AnnaBridge 171:3a7713b1edbc 50 #define BYTES_TO_UINT64(n, p) {n = ((uint64_t)(p)[0] + ((uint64_t)(p)[1] << 8) + \
AnnaBridge 171:3a7713b1edbc 51 ((uint64_t)(p)[2] << 16) + ((uint64_t)(p)[3] << 24) + \
AnnaBridge 171:3a7713b1edbc 52 ((uint64_t)(p)[4] << 32) + ((uint64_t)(p)[5] << 40) + \
AnnaBridge 171:3a7713b1edbc 53 ((uint64_t)(p)[6] << 48) + ((uint64_t)(p)[7] << 56));}
AnnaBridge 171:3a7713b1edbc 54
AnnaBridge 171:3a7713b1edbc 55 /*!
AnnaBridge 171:3a7713b1edbc 56 * Macros for converting little endian integers to array of bytes
AnnaBridge 171:3a7713b1edbc 57 */
AnnaBridge 171:3a7713b1edbc 58 #define UINT16_TO_BYTES(n) ((uint8_t) (n)), ((uint8_t)((n) >> 8))
AnnaBridge 171:3a7713b1edbc 59
AnnaBridge 171:3a7713b1edbc 60 /*!
AnnaBridge 171:3a7713b1edbc 61 * Macros for converting little endian integers to single bytes
AnnaBridge 171:3a7713b1edbc 62 */
AnnaBridge 171:3a7713b1edbc 63 #define UINT16_TO_BYTE0(n) ((uint8_t) (n))
AnnaBridge 171:3a7713b1edbc 64 #define UINT16_TO_BYTE1(n) ((uint8_t) ((n) >> 8))
AnnaBridge 171:3a7713b1edbc 65
AnnaBridge 171:3a7713b1edbc 66 #define UINT32_TO_BYTE0(n) ((uint8_t) (n))
AnnaBridge 171:3a7713b1edbc 67 #define UINT32_TO_BYTE1(n) ((uint8_t) ((n) >> 8))
AnnaBridge 171:3a7713b1edbc 68 #define UINT32_TO_BYTE2(n) ((uint8_t) ((n) >> 16))
AnnaBridge 171:3a7713b1edbc 69 #define UINT32_TO_BYTE3(n) ((uint8_t) ((n) >> 24))
AnnaBridge 171:3a7713b1edbc 70
AnnaBridge 171:3a7713b1edbc 71 /*!
AnnaBridge 171:3a7713b1edbc 72 * Macros for converting a little endian byte stream to integers, with increment.
AnnaBridge 171:3a7713b1edbc 73 */
AnnaBridge 171:3a7713b1edbc 74 #define BSTREAM_TO_INT8(n, p) {n = (int8_t)(*(p)++);}
AnnaBridge 171:3a7713b1edbc 75 #define BSTREAM_TO_UINT8(n, p) {n = (uint8_t)(*(p)++);}
AnnaBridge 171:3a7713b1edbc 76 #define BSTREAM_TO_UINT16(n, p) {BYTES_TO_UINT16(n, p); p += 2;}
AnnaBridge 171:3a7713b1edbc 77 #define BSTREAM_TO_UINT24(n, p) {BYTES_TO_UINT24(n, p); p += 3;}
AnnaBridge 171:3a7713b1edbc 78 #define BSTREAM_TO_UINT32(n, p) {BYTES_TO_UINT32(n, p); p += 4;}
AnnaBridge 171:3a7713b1edbc 79 #define BSTREAM_TO_UINT40(n, p) {BYTES_TO_UINT40(n, p); p += 5;}
AnnaBridge 171:3a7713b1edbc 80 #define BSTREAM_TO_UINT64(n, p) {n = BstreamToUint64(p); p += 8;}
AnnaBridge 171:3a7713b1edbc 81 #define BSTREAM_TO_BDA(bda, p) {BdaCpy(bda, p); p += BDA_ADDR_LEN;}
AnnaBridge 171:3a7713b1edbc 82 #define BSTREAM_TO_BDA64(bda, p) {bda = BstreamToBda64(p); p += BDA_ADDR_LEN;}
AnnaBridge 171:3a7713b1edbc 83
AnnaBridge 171:3a7713b1edbc 84 /*!
AnnaBridge 171:3a7713b1edbc 85 * Macros for converting integers to a little endian byte stream, with increment.
AnnaBridge 171:3a7713b1edbc 86 */
AnnaBridge 171:3a7713b1edbc 87 #define UINT8_TO_BSTREAM(p, n) {*(p)++ = (uint8_t)(n);}
AnnaBridge 171:3a7713b1edbc 88 #define UINT16_TO_BSTREAM(p, n) {*(p)++ = (uint8_t)(n); *(p)++ = (uint8_t)((n) >> 8);}
AnnaBridge 171:3a7713b1edbc 89 #define UINT24_TO_BSTREAM(p, n) {*(p)++ = (uint8_t)(n); *(p)++ = (uint8_t)((n) >> 8); \
AnnaBridge 171:3a7713b1edbc 90 *(p)++ = (uint8_t)((n) >> 16);}
AnnaBridge 171:3a7713b1edbc 91 #define UINT32_TO_BSTREAM(p, n) {*(p)++ = (uint8_t)(n); *(p)++ = (uint8_t)((n) >> 8); \
AnnaBridge 171:3a7713b1edbc 92 *(p)++ = (uint8_t)((n) >> 16); *(p)++ = (uint8_t)((n) >> 24);}
AnnaBridge 171:3a7713b1edbc 93 #define UINT40_TO_BSTREAM(p, n) {*(p)++ = (uint8_t)(n); *(p)++ = (uint8_t)((n) >> 8); \
AnnaBridge 171:3a7713b1edbc 94 *(p)++ = (uint8_t)((n) >> 16); *(p)++ = (uint8_t)((n) >> 24); \
AnnaBridge 171:3a7713b1edbc 95 *(p)++ = (uint8_t)((n) >> 32);}
AnnaBridge 171:3a7713b1edbc 96 #define UINT64_TO_BSTREAM(p, n) {Uint64ToBstream(p, n); p += sizeof(uint64_t);}
AnnaBridge 171:3a7713b1edbc 97 #define BDA_TO_BSTREAM(p, bda) {BdaCpy(p, bda); p += BDA_ADDR_LEN;}
AnnaBridge 171:3a7713b1edbc 98 #define BDA64_TO_BSTREAM(p, bda) {Bda64ToBstream(p, bda); p += BDA_ADDR_LEN;}
AnnaBridge 171:3a7713b1edbc 99
AnnaBridge 171:3a7713b1edbc 100 /*!
AnnaBridge 171:3a7713b1edbc 101 * Macros for converting integers to a little endian byte stream, without increment.
AnnaBridge 171:3a7713b1edbc 102 */
AnnaBridge 171:3a7713b1edbc 103 #define UINT16_TO_BUF(p, n) {(p)[0] = (uint8_t)(n); (p)[1] = (uint8_t)((n) >> 8);}
AnnaBridge 171:3a7713b1edbc 104 #define UINT32_TO_BUF(p, n) {(p)[0] = (uint8_t)(n); (p)[1] = (uint8_t)((n) >> 8); \
AnnaBridge 171:3a7713b1edbc 105 (p)[2] = (uint8_t)((n) >> 16); (p)[3] = (uint8_t)((n) >> 24);}
AnnaBridge 171:3a7713b1edbc 106
AnnaBridge 171:3a7713b1edbc 107 /*!
AnnaBridge 171:3a7713b1edbc 108 * Macros for comparing a little endian byte buffer to integers.
AnnaBridge 171:3a7713b1edbc 109 */
AnnaBridge 171:3a7713b1edbc 110 #define BYTES_UINT16_CMP(p, n) ((p)[1] == UINT16_TO_BYTE1(n) && (p)[0] == UINT16_TO_BYTE0(n))
AnnaBridge 171:3a7713b1edbc 111
AnnaBridge 171:3a7713b1edbc 112 /*!
AnnaBridge 171:3a7713b1edbc 113 * Macros for IEEE FLOAT type: exponent = byte 3, mantissa = bytes 2-0
AnnaBridge 171:3a7713b1edbc 114 */
AnnaBridge 171:3a7713b1edbc 115 #define FLT_TO_UINT32(m, e) ((m) | ((int32_t)(e) << 24))
AnnaBridge 171:3a7713b1edbc 116 #define UINT32_TO_FLT(m, e, n) {m = UINT32_TO_FLT_M(n); e = UINT32_TO_FLT_E(n);}
AnnaBridge 171:3a7713b1edbc 117 #define UINT32_TO_FLT_M(n) ((((n) & 0x00FFFFFF) >= 0x00800000) ? \
AnnaBridge 171:3a7713b1edbc 118 ((int32_t)(((n) | 0xFF000000))) : ((int32_t)((n) & 0x00FFFFFF)))
AnnaBridge 171:3a7713b1edbc 119 #define UINT32_TO_FLT_E(n) ((int8_t)(n >> 24))
AnnaBridge 171:3a7713b1edbc 120 /*!
AnnaBridge 171:3a7713b1edbc 121 * Macros for IEEE SFLOAT type: exponent = bits 15-12, mantissa = bits 11-0
AnnaBridge 171:3a7713b1edbc 122 */
AnnaBridge 171:3a7713b1edbc 123 #define SFLT_TO_UINT16(m, e) ((m) | ((int16_t)(e) << 12))
AnnaBridge 171:3a7713b1edbc 124 #define UINT16_TO_SFLT(m, e, n) {m = UINT16_TO_SFLT_M(n); e = UINT16_TO_SFLT_E(n);}
AnnaBridge 171:3a7713b1edbc 125 #define UINT16_TO_SFLT_M(n) ((((n) & 0x0FFF) >= 0x0800) ? \
AnnaBridge 171:3a7713b1edbc 126 ((int16_t)(((n) | 0xF000))) : ((int16_t)((n) & 0x0FFF)))
AnnaBridge 171:3a7713b1edbc 127 #define UINT16_TO_SFLT_E(n) (((n >> 12) >= 0x0008) ? \
AnnaBridge 171:3a7713b1edbc 128 ((int8_t)(((n >> 12) | 0xF0))) : ((int8_t)(n >> 12)))
AnnaBridge 171:3a7713b1edbc 129
AnnaBridge 171:3a7713b1edbc 130 /**************************************************************************************************
AnnaBridge 171:3a7713b1edbc 131 Function Declarations
AnnaBridge 171:3a7713b1edbc 132 **************************************************************************************************/
AnnaBridge 171:3a7713b1edbc 133
AnnaBridge 171:3a7713b1edbc 134 uint64_t BstreamToBda64(const uint8_t *p);
AnnaBridge 171:3a7713b1edbc 135 uint64_t BstreamToUint64(const uint8_t *p);
AnnaBridge 171:3a7713b1edbc 136 void Bda64ToBstream(uint8_t *p, uint64_t bda);
AnnaBridge 171:3a7713b1edbc 137 void Uint64ToBstream(uint8_t *p, uint64_t n);
AnnaBridge 171:3a7713b1edbc 138
AnnaBridge 171:3a7713b1edbc 139 #ifdef __cplusplus
AnnaBridge 171:3a7713b1edbc 140 };
AnnaBridge 171:3a7713b1edbc 141 #endif
AnnaBridge 171:3a7713b1edbc 142
AnnaBridge 171:3a7713b1edbc 143 #endif /* BSTREAM_H */