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.
Dependencies: mbed-rtos mbed Xbus
Fork of MTi-1_example by
xbus/xbusutility.c@61:b9d3e7e5ba0c, 2015-06-12 (annotated)
- 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?
| User | Revision | Line number | New 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 | /*! \} */ |

Xsens MTi 1-series