Xsens / Mbed 2 deprecated MTi-1_example

Dependencies:   mbed-rtos mbed Xbus

Fork of MTi-1_example by Alex Young

Committer:
Alex Young
Date:
Fri Jun 12 13:23:26 2015 +0200
Revision:
61:b9d3e7e5ba0c
Parent:
47:c4610a65dade
Change to Apache license

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Alex Young 18:2073072bad51 1 /*!
Alex Young 18:2073072bad51 2 * \file
Alex Young 61:b9d3e7e5ba0c 3 * \copyright Copyright (C) Xsens Technologies B.V., 2015.
Alex Young 61:b9d3e7e5ba0c 4 *
Alex Young 61:b9d3e7e5ba0c 5 * Licensed under the Apache License, Version 2.0 (the "License"); you may not
Alex Young 61:b9d3e7e5ba0c 6 * use this file except in compliance with the License. You may obtain a copy
Alex Young 61:b9d3e7e5ba0c 7 * of the License at
Alex Young 18:2073072bad51 8 *
Alex Young 61:b9d3e7e5ba0c 9 * http://www.apache.org/licenses/LICENSE-2.0
Alex Young 18:2073072bad51 10 *
Alex Young 61:b9d3e7e5ba0c 11 * Unless required by applicable law or agreed to in writing, software
Alex Young 61:b9d3e7e5ba0c 12 * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
Alex Young 61:b9d3e7e5ba0c 13 * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
Alex Young 61:b9d3e7e5ba0c 14 * License for the specific language governing permissions and limitations
Alex Young 61:b9d3e7e5ba0c 15 * under the License.
Alex Young 18:2073072bad51 16 */
Alex Young 18:2073072bad51 17
Alex Young 18:2073072bad51 18 #include "xbusutility.h"
Alex Young 18:2073072bad51 19
Alex Young 45:67203918bec9 20 /*!
Alex Young 45:67203918bec9 21 * \name Xbus message reading utility functions.
Alex Young 45:67203918bec9 22 * Xbus messages use big-endian representations for multibyte data.
Alex Young 45:67203918bec9 23 * These functions help in reading data from an Xbus message and converting
Alex Young 45:67203918bec9 24 * it to a native type.
Alex Young 45:67203918bec9 25 *
Alex Young 45:67203918bec9 26 * The functions are intended to scan over a message as follows:
Alex Young 47:c4610a65dade 27 * \code
Alex Young 45:67203918bec9 28 * void readValues(XbusMessage const* message)
Alex Young 45:67203918bec9 29 * {
Alex Young 45:67203918bec9 30 * uint16_t v1;
Alex Young 45:67203918bec9 31 * uint8_t v2;
Alex Young 45:67203918bec9 32 * uint32_t v3;
Alex Young 45:67203918bec9 33 * uint8_t* dptr = message->data;
Alex Young 45:67203918bec9 34 * dptr = XbusUtility_readU16(&v1, dptr);
Alex Young 45:67203918bec9 35 * dptr = XbusUtility_readU8(&v2, dptr);
Alex Young 45:67203918bec9 36 * dptr = XbusUtility_readU32(&v3, dptr);
Alex Young 45:67203918bec9 37 * }
Alex Young 45:67203918bec9 38 * \endcode
Alex Young 45:67203918bec9 39 * \{
Alex Young 45:67203918bec9 40 */
Alex Young 45:67203918bec9 41 /*!
Alex Young 45:67203918bec9 42 * \brief Read a uint8_t value from an Xbus message.
Alex Young 45:67203918bec9 43 */
Alex Young 18:2073072bad51 44 uint8_t const* XbusUtility_readU8(uint8_t* out, uint8_t const* in)
Alex Young 18:2073072bad51 45 {
Alex Young 18:2073072bad51 46 *out = *in;
Alex Young 18:2073072bad51 47 return ++in;
Alex Young 18:2073072bad51 48 }
Alex Young 18:2073072bad51 49
Alex Young 45:67203918bec9 50 /*! \brief Read a uint16_t value from an Xbus message. */
Alex Young 18:2073072bad51 51 uint8_t const* XbusUtility_readU16(uint16_t* out, uint8_t const* in)
Alex Young 18:2073072bad51 52 {
Alex Young 18:2073072bad51 53 *out = (in[0] << 8) | in[1];
Alex Young 18:2073072bad51 54 return in + sizeof(uint16_t);
Alex Young 18:2073072bad51 55 }
Alex Young 18:2073072bad51 56
Alex Young 45:67203918bec9 57 /*! \brief Read a uint32_t value from an Xbus message. */
Alex Young 18:2073072bad51 58 uint8_t const* XbusUtility_readU32(uint32_t* out, uint8_t const* in)
Alex Young 18:2073072bad51 59 {
Alex Young 18:2073072bad51 60 *out = (in[0] << 24) | (in[1] << 16) | (in[2] << 8) | in[3];
Alex Young 18:2073072bad51 61 return in + sizeof(uint32_t);
Alex Young 18:2073072bad51 62 }
Alex Young 45:67203918bec9 63 /*! \} */
Alex Young 27:eebe5fc884e3 64
Alex Young 45:67203918bec9 65 /*!
Alex Young 47:c4610a65dade 66 * \name Xbus message writing utility functions.
Alex Young 45:67203918bec9 67 * These functions aid in writing native values to big-endian xbus message
Alex Young 45:67203918bec9 68 * payloads. See corresponding reading functions for further details.
Alex Young 45:67203918bec9 69 * \{
Alex Young 45:67203918bec9 70 */
Alex Young 45:67203918bec9 71 /*! \brief Write a uint8_t value to an Xbus message. */
Alex Young 27:eebe5fc884e3 72 uint8_t* XbusUtility_writeU8(uint8_t* out, uint8_t in)
Alex Young 27:eebe5fc884e3 73 {
Alex Young 27:eebe5fc884e3 74 *out++ = in;
Alex Young 27:eebe5fc884e3 75 return out;
Alex Young 27:eebe5fc884e3 76 }
Alex Young 27:eebe5fc884e3 77
Alex Young 45:67203918bec9 78 /*! \brief Write a uint16_t value to an Xbus message. */
Alex Young 27:eebe5fc884e3 79 uint8_t* XbusUtility_writeU16(uint8_t* out, uint16_t in)
Alex Young 27:eebe5fc884e3 80 {
Alex Young 27:eebe5fc884e3 81 *out++ = (in >> 8) & 0xFF;
Alex Young 27:eebe5fc884e3 82 *out++ = in & 0xFF;
Alex Young 27:eebe5fc884e3 83 return out;
Alex Young 27:eebe5fc884e3 84 }
Alex Young 27:eebe5fc884e3 85
Alex Young 45:67203918bec9 86 /*! \brief Write a uint32_t value to an Xbus message. */
Alex Young 27:eebe5fc884e3 87 uint8_t* XbusUtility_writeU32(uint8_t* out, uint32_t in)
Alex Young 27:eebe5fc884e3 88 {
Alex Young 27:eebe5fc884e3 89 *out++ = (in >> 24) & 0xFF;
Alex Young 27:eebe5fc884e3 90 *out++ = (in >> 16) & 0xFF;
Alex Young 27:eebe5fc884e3 91 *out++ = (in >> 8) & 0xFF;
Alex Young 27:eebe5fc884e3 92 *out++ = in & 0xFF;
Alex Young 27:eebe5fc884e3 93 return out;
Alex Young 27:eebe5fc884e3 94 }
Alex Young 45:67203918bec9 95 /*! \} */