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.
IotMeterMsgCodec.cpp@0:5c46cb3be899, 2015-05-22 (annotated)
- Committer:
- RobMeades
- Date:
- Fri May 22 11:41:38 2015 +0000
- Revision:
- 0:5c46cb3be899
Initial commit of CIoT message protocol, used for water meter demo demonstrations, to mbed cloud.
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
RobMeades | 0:5c46cb3be899 | 1 | /* C027N/water-meter interface for Water Meter Demo |
RobMeades | 0:5c46cb3be899 | 2 | * |
RobMeades | 0:5c46cb3be899 | 3 | * Copyright (C) u-blox Melbourn Ltd |
RobMeades | 0:5c46cb3be899 | 4 | * u-blox Melbourn Ltd, Melbourn, UK |
RobMeades | 0:5c46cb3be899 | 5 | * |
RobMeades | 0:5c46cb3be899 | 6 | * All rights reserved. |
RobMeades | 0:5c46cb3be899 | 7 | * |
RobMeades | 0:5c46cb3be899 | 8 | * This source file is the sole property of u-blox Melbourn Ltd. |
RobMeades | 0:5c46cb3be899 | 9 | * Reproduction or utilization of this source in whole or part is |
RobMeades | 0:5c46cb3be899 | 10 | * forbidden without the written consent of u-blox Melbourn Ltd. |
RobMeades | 0:5c46cb3be899 | 11 | */ |
RobMeades | 0:5c46cb3be899 | 12 | |
RobMeades | 0:5c46cb3be899 | 13 | /** |
RobMeades | 0:5c46cb3be899 | 14 | * @file iot_meter_msg_handler.cpp |
RobMeades | 0:5c46cb3be899 | 15 | * This file implements the API to the C027N/water-meter device |
RobMeades | 0:5c46cb3be899 | 16 | * for the MWC demo 2015. |
RobMeades | 0:5c46cb3be899 | 17 | */ |
RobMeades | 0:5c46cb3be899 | 18 | |
RobMeades | 0:5c46cb3be899 | 19 | #include <stdint.h> |
RobMeades | 0:5c46cb3be899 | 20 | #include <stdio.h> |
RobMeades | 0:5c46cb3be899 | 21 | #include <stdarg.h> // for va_... |
RobMeades | 0:5c46cb3be899 | 22 | #include <string.h> // for memcpy() |
RobMeades | 0:5c46cb3be899 | 23 | #include <IotMeterApi.hpp> |
RobMeades | 0:5c46cb3be899 | 24 | |
RobMeades | 0:5c46cb3be899 | 25 | #ifdef DEBUG |
RobMeades | 0:5c46cb3be899 | 26 | #define MESSAGE_CODEC_LOGMSG(...) MessageCodec::logMsg(__VA_ARGS__) |
RobMeades | 0:5c46cb3be899 | 27 | #else |
RobMeades | 0:5c46cb3be899 | 28 | #define MESSAGE_CODEC_LOGMSG(...) |
RobMeades | 0:5c46cb3be899 | 29 | #endif |
RobMeades | 0:5c46cb3be899 | 30 | |
RobMeades | 0:5c46cb3be899 | 31 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 32 | // GENERAL COMPILE-TIME CONSTANTS |
RobMeades | 0:5c46cb3be899 | 33 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 34 | |
RobMeades | 0:5c46cb3be899 | 35 | /// The max size of a debug message (including terminator) |
RobMeades | 0:5c46cb3be899 | 36 | #define MAX_DEBUG_MESSAGE_LEN 128 |
RobMeades | 0:5c46cb3be899 | 37 | |
RobMeades | 0:5c46cb3be899 | 38 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 39 | // PRIVATE VARIABLES |
RobMeades | 0:5c46cb3be899 | 40 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 41 | |
RobMeades | 0:5c46cb3be899 | 42 | void (*MessageCodec::mp_guiPrintToConsole) (const char*) = NULL; |
RobMeades | 0:5c46cb3be899 | 43 | |
RobMeades | 0:5c46cb3be899 | 44 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 45 | // ON-AIR MESSAGE IDs |
RobMeades | 0:5c46cb3be899 | 46 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 47 | |
RobMeades | 0:5c46cb3be899 | 48 | /// The message IDs in the downlink direction (i.e. to the |
RobMeades | 0:5c46cb3be899 | 49 | // C027/water-meter device). Note that 'over the air' these |
RobMeades | 0:5c46cb3be899 | 50 | // are cast into an uint8_t. |
RobMeades | 0:5c46cb3be899 | 51 | typedef enum MsgIdDlTag_t |
RobMeades | 0:5c46cb3be899 | 52 | { |
RobMeades | 0:5c46cb3be899 | 53 | REBOOT_REQ_DL_MSG, //!< Reboot the C027N/water-meter |
RobMeades | 0:5c46cb3be899 | 54 | //! device. |
RobMeades | 0:5c46cb3be899 | 55 | SERIAL_NUMBER_GET_REQ_DL_MSG, //!< Get the serial number of the |
RobMeades | 0:5c46cb3be899 | 56 | //! water-meter. |
RobMeades | 0:5c46cb3be899 | 57 | READING_INTERVAL_SET_REQ_DL_MSG, //!< Set the rate at which readings |
RobMeades | 0:5c46cb3be899 | 58 | //! are returned by the C027N/water-meter |
RobMeades | 0:5c46cb3be899 | 59 | //! device. |
RobMeades | 0:5c46cb3be899 | 60 | READING_INTERVAL_GET_REQ_DL_MSG, //!< Get the rate at which readings |
RobMeades | 0:5c46cb3be899 | 61 | //! are returned by the C027N/water-meter |
RobMeades | 0:5c46cb3be899 | 62 | //! device. |
RobMeades | 0:5c46cb3be899 | 63 | GPIO_SET_REQ_DL_MSG, //!< Set the state of a GPIO on the |
RobMeades | 0:5c46cb3be899 | 64 | //! C027N board. |
RobMeades | 0:5c46cb3be899 | 65 | GPIO_GET_REQ_DL_MSG, //!< Get the state of a GPIO on the |
RobMeades | 0:5c46cb3be899 | 66 | //! C027N board. |
RobMeades | 0:5c46cb3be899 | 67 | LED_SET_REQ_DL_MSG, //!< Set the steady state of the red |
RobMeades | 0:5c46cb3be899 | 68 | //! LED on the C027 board. |
RobMeades | 0:5c46cb3be899 | 69 | LED_GET_REQ_DL_MSG, //!< Get the steady state of the red |
RobMeades | 0:5c46cb3be899 | 70 | //! LED on the C027 board. |
RobMeades | 0:5c46cb3be899 | 71 | FLASH_SET_REQ_DL_MSG, //!< Set the LED on the C027/water-meter |
RobMeades | 0:5c46cb3be899 | 72 | //! device to flash when a reading is |
RobMeades | 0:5c46cb3be899 | 73 | //! being sent (or not). |
RobMeades | 0:5c46cb3be899 | 74 | FLASH_GET_REQ_DL_MSG, //!< Get whether the LED on the C027/ |
RobMeades | 0:5c46cb3be899 | 75 | //! flashes when a mesage is |
RobMeades | 0:5c46cb3be899 | 76 | //! being sent/received (or not). |
RobMeades | 0:5c46cb3be899 | 77 | MAX_NUM_DL_MSGS //!< The maximum number of downlink |
RobMeades | 0:5c46cb3be899 | 78 | //! messages. |
RobMeades | 0:5c46cb3be899 | 79 | } MsgIdDl_t; |
RobMeades | 0:5c46cb3be899 | 80 | |
RobMeades | 0:5c46cb3be899 | 81 | /// The message IDs in the uplink direction (i.e. from the |
RobMeades | 0:5c46cb3be899 | 82 | // C027N/water-meter device). Note that 'over the air' these are |
RobMeades | 0:5c46cb3be899 | 83 | // cast into an uint8_t. |
RobMeades | 0:5c46cb3be899 | 84 | typedef enum MsgIdUlTag_t |
RobMeades | 0:5c46cb3be899 | 85 | { |
RobMeades | 0:5c46cb3be899 | 86 | INIT_IND_UL_MSG, //!< Power on of the C027N/water meter |
RobMeades | 0:5c46cb3be899 | 87 | //! device has completed. |
RobMeades | 0:5c46cb3be899 | 88 | SERIAL_NUMBER_IND_UL_MSG, //!< The serial number of the water meter. |
RobMeades | 0:5c46cb3be899 | 89 | VOLUME_IND_UL_MSG, //!< The current water meter reading. |
RobMeades | 0:5c46cb3be899 | 90 | RSSI_IND_UL_MSG, //!< The current RSSI reading from the |
RobMeades | 0:5c46cb3be899 | 91 | //! radio module. |
RobMeades | 0:5c46cb3be899 | 92 | SERIAL_NUMBER_GET_CNF_UL_MSG, //!< The serial number of the water-meter. |
RobMeades | 0:5c46cb3be899 | 93 | READING_INTERVAL_SET_CNF_UL_MSG, //!< The rate at which readings are |
RobMeades | 0:5c46cb3be899 | 94 | //! returned by the C027/water-meter device. |
RobMeades | 0:5c46cb3be899 | 95 | READING_INTERVAL_GET_CNF_UL_MSG, //!< The rate at which readings are |
RobMeades | 0:5c46cb3be899 | 96 | //! returned by the C027/water-meter device. |
RobMeades | 0:5c46cb3be899 | 97 | GPIO_SET_CNF_UL_MSG, //!< The state of a GPIO on the C027 board. |
RobMeades | 0:5c46cb3be899 | 98 | GPIO_GET_CNF_UL_MSG, //!< The state of a GPIO on the C027 board. |
RobMeades | 0:5c46cb3be899 | 99 | LED_SET_CNF_UL_MSG, //!< The steady state of the red LED on |
RobMeades | 0:5c46cb3be899 | 100 | //! the C027/water-meter device. |
RobMeades | 0:5c46cb3be899 | 101 | LED_GET_CNF_UL_MSG, //!< The steady state of the red LED on |
RobMeades | 0:5c46cb3be899 | 102 | //! the C027/water-meter device. |
RobMeades | 0:5c46cb3be899 | 103 | FLASH_SET_CNF_UL_MSG, //!< Whether the LED on the C027/water |
RobMeades | 0:5c46cb3be899 | 104 | //! meter device is set to flash when a |
RobMeades | 0:5c46cb3be899 | 105 | //! message is being sent/received (or not). |
RobMeades | 0:5c46cb3be899 | 106 | FLASH_GET_CNF_UL_MSG, //!< Whether the LED on the C027/water |
RobMeades | 0:5c46cb3be899 | 107 | //! meter device is set to flash when a |
RobMeades | 0:5c46cb3be899 | 108 | //! message is being sent/received (or not). |
RobMeades | 0:5c46cb3be899 | 109 | MAX_NUM_UL_MSGS //!< The maximum number of uplink messages. |
RobMeades | 0:5c46cb3be899 | 110 | } MsgIdUl_t; |
RobMeades | 0:5c46cb3be899 | 111 | |
RobMeades | 0:5c46cb3be899 | 112 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 113 | // GENERIC PRIVATE FUNCTIONS |
RobMeades | 0:5c46cb3be899 | 114 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 115 | |
RobMeades | 0:5c46cb3be899 | 116 | /// Encode a boolean value, noting that this is contained |
RobMeades | 0:5c46cb3be899 | 117 | // in a 32 bytes coded value. |
RobMeades | 0:5c46cb3be899 | 118 | uint32_t MessageCodec::encodeBool (char * pBuffer, bool value) |
RobMeades | 0:5c46cb3be899 | 119 | { |
RobMeades | 0:5c46cb3be899 | 120 | uint32_t numBytesEncoded = 4; |
RobMeades | 0:5c46cb3be899 | 121 | |
RobMeades | 0:5c46cb3be899 | 122 | memset (pBuffer, 0, 4); |
RobMeades | 0:5c46cb3be899 | 123 | pBuffer[3] = value; |
RobMeades | 0:5c46cb3be899 | 124 | |
RobMeades | 0:5c46cb3be899 | 125 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 126 | } |
RobMeades | 0:5c46cb3be899 | 127 | |
RobMeades | 0:5c46cb3be899 | 128 | /// Decode a boolean value, noting that this is contained |
RobMeades | 0:5c46cb3be899 | 129 | // in a 32 bytes coded value. |
RobMeades | 0:5c46cb3be899 | 130 | bool MessageCodec::decodeBool (const char ** ppBuffer) |
RobMeades | 0:5c46cb3be899 | 131 | { |
RobMeades | 0:5c46cb3be899 | 132 | uint32_t value = 0; |
RobMeades | 0:5c46cb3be899 | 133 | bool boolValue = false; |
RobMeades | 0:5c46cb3be899 | 134 | |
RobMeades | 0:5c46cb3be899 | 135 | value += ((**ppBuffer) & 0xFF) << 24; |
RobMeades | 0:5c46cb3be899 | 136 | (*ppBuffer)++; |
RobMeades | 0:5c46cb3be899 | 137 | value += ((**ppBuffer) & 0xFF) << 16; |
RobMeades | 0:5c46cb3be899 | 138 | (*ppBuffer)++; |
RobMeades | 0:5c46cb3be899 | 139 | value += ((**ppBuffer) & 0xFF) << 8; |
RobMeades | 0:5c46cb3be899 | 140 | (*ppBuffer)++; |
RobMeades | 0:5c46cb3be899 | 141 | value += ((**ppBuffer) & 0xFF) ; |
RobMeades | 0:5c46cb3be899 | 142 | (*ppBuffer)++; |
RobMeades | 0:5c46cb3be899 | 143 | |
RobMeades | 0:5c46cb3be899 | 144 | if (value) |
RobMeades | 0:5c46cb3be899 | 145 | { |
RobMeades | 0:5c46cb3be899 | 146 | boolValue = true; |
RobMeades | 0:5c46cb3be899 | 147 | } |
RobMeades | 0:5c46cb3be899 | 148 | |
RobMeades | 0:5c46cb3be899 | 149 | return boolValue; |
RobMeades | 0:5c46cb3be899 | 150 | } |
RobMeades | 0:5c46cb3be899 | 151 | |
RobMeades | 0:5c46cb3be899 | 152 | /// Encode an int32 |
RobMeades | 0:5c46cb3be899 | 153 | uint32_t MessageCodec::encodeUint32 (char * pBuffer, uint32_t value) |
RobMeades | 0:5c46cb3be899 | 154 | { |
RobMeades | 0:5c46cb3be899 | 155 | uint32_t numBytesEncoded = 4; |
RobMeades | 0:5c46cb3be899 | 156 | |
RobMeades | 0:5c46cb3be899 | 157 | pBuffer[0] = 0xff & (value >> 24); |
RobMeades | 0:5c46cb3be899 | 158 | pBuffer[1] = 0xff & (value >> 16); |
RobMeades | 0:5c46cb3be899 | 159 | pBuffer[2] = 0xff & (value >> 8); |
RobMeades | 0:5c46cb3be899 | 160 | pBuffer[3] = 0xff & value; |
RobMeades | 0:5c46cb3be899 | 161 | |
RobMeades | 0:5c46cb3be899 | 162 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 163 | } |
RobMeades | 0:5c46cb3be899 | 164 | |
RobMeades | 0:5c46cb3be899 | 165 | /// Decode an int32 |
RobMeades | 0:5c46cb3be899 | 166 | uint32_t MessageCodec::decodeUint32 (const char ** ppBuffer) |
RobMeades | 0:5c46cb3be899 | 167 | { |
RobMeades | 0:5c46cb3be899 | 168 | uint32_t value = 0; |
RobMeades | 0:5c46cb3be899 | 169 | |
RobMeades | 0:5c46cb3be899 | 170 | value += ((**ppBuffer) & 0xFF) << 24; |
RobMeades | 0:5c46cb3be899 | 171 | (*ppBuffer)++; |
RobMeades | 0:5c46cb3be899 | 172 | value += ((**ppBuffer) & 0xFF) << 16; |
RobMeades | 0:5c46cb3be899 | 173 | (*ppBuffer)++; |
RobMeades | 0:5c46cb3be899 | 174 | value += ((**ppBuffer) & 0xFF) << 8; |
RobMeades | 0:5c46cb3be899 | 175 | (*ppBuffer)++; |
RobMeades | 0:5c46cb3be899 | 176 | value += ((**ppBuffer) & 0xFF); |
RobMeades | 0:5c46cb3be899 | 177 | (*ppBuffer)++; |
RobMeades | 0:5c46cb3be899 | 178 | |
RobMeades | 0:5c46cb3be899 | 179 | return value; |
RobMeades | 0:5c46cb3be899 | 180 | } |
RobMeades | 0:5c46cb3be899 | 181 | |
RobMeades | 0:5c46cb3be899 | 182 | /// Encode GpioState |
RobMeades | 0:5c46cb3be899 | 183 | uint32_t MessageCodec::encodeGpioState (char * pBuffer, GpioState_t *pGpioState) |
RobMeades | 0:5c46cb3be899 | 184 | |
RobMeades | 0:5c46cb3be899 | 185 | { |
RobMeades | 0:5c46cb3be899 | 186 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 187 | |
RobMeades | 0:5c46cb3be899 | 188 | pBuffer[numBytesEncoded] = 0; |
RobMeades | 0:5c46cb3be899 | 189 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 190 | pBuffer[numBytesEncoded] = pGpioState->gpio; |
RobMeades | 0:5c46cb3be899 | 191 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 192 | pBuffer[numBytesEncoded] = pGpioState->inputNotOutput; |
RobMeades | 0:5c46cb3be899 | 193 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 194 | pBuffer[numBytesEncoded] = pGpioState->onNotOff; |
RobMeades | 0:5c46cb3be899 | 195 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 196 | |
RobMeades | 0:5c46cb3be899 | 197 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 198 | } |
RobMeades | 0:5c46cb3be899 | 199 | |
RobMeades | 0:5c46cb3be899 | 200 | |
RobMeades | 0:5c46cb3be899 | 201 | // Decode GpioState |
RobMeades | 0:5c46cb3be899 | 202 | void MessageCodec::decodeGpioState (GpioState_t * pGpioState, const char ** ppBuffer) |
RobMeades | 0:5c46cb3be899 | 203 | { |
RobMeades | 0:5c46cb3be899 | 204 | // Ignore the first byte as it's empty |
RobMeades | 0:5c46cb3be899 | 205 | (*ppBuffer)++; |
RobMeades | 0:5c46cb3be899 | 206 | pGpioState->gpio = (uint8_t) ((**ppBuffer) & 0xFF); |
RobMeades | 0:5c46cb3be899 | 207 | (*ppBuffer)++; |
RobMeades | 0:5c46cb3be899 | 208 | pGpioState->inputNotOutput = (bool) ((**ppBuffer) & 0xFF); |
RobMeades | 0:5c46cb3be899 | 209 | (*ppBuffer)++; |
RobMeades | 0:5c46cb3be899 | 210 | pGpioState->onNotOff = (bool) ((**ppBuffer) & 0xFF); |
RobMeades | 0:5c46cb3be899 | 211 | (*ppBuffer)++; |
RobMeades | 0:5c46cb3be899 | 212 | } |
RobMeades | 0:5c46cb3be899 | 213 | |
RobMeades | 0:5c46cb3be899 | 214 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 215 | // MESSAGE ENCODING FUNCTIONS |
RobMeades | 0:5c46cb3be899 | 216 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 217 | |
RobMeades | 0:5c46cb3be899 | 218 | uint32_t MessageCodec::encodeInitIndUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 219 | InitIndUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 220 | { |
RobMeades | 0:5c46cb3be899 | 221 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 222 | |
RobMeades | 0:5c46cb3be899 | 223 | MESSAGE_CODEC_LOGMSG ("Encoding InitIndUlMsg, ID 0x%.2x, ", INIT_IND_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 224 | pBuffer[numBytesEncoded] = INIT_IND_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 225 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 226 | numBytesEncoded += encodeUint32 (&(pBuffer[numBytesEncoded]), (uint32_t) pMsg->wakeUpCode); |
RobMeades | 0:5c46cb3be899 | 227 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 228 | |
RobMeades | 0:5c46cb3be899 | 229 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 230 | } |
RobMeades | 0:5c46cb3be899 | 231 | |
RobMeades | 0:5c46cb3be899 | 232 | uint32_t MessageCodec::encodeRebootReqDlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 233 | RebootReqDlMsg_t *pMsg) |
RobMeades | 0:5c46cb3be899 | 234 | { |
RobMeades | 0:5c46cb3be899 | 235 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 236 | |
RobMeades | 0:5c46cb3be899 | 237 | pBuffer[numBytesEncoded] = REBOOT_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 238 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 239 | numBytesEncoded += encodeBool (&(pBuffer[numBytesEncoded]), pMsg->devModeOnNotOff); |
RobMeades | 0:5c46cb3be899 | 240 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 241 | |
RobMeades | 0:5c46cb3be899 | 242 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 243 | } |
RobMeades | 0:5c46cb3be899 | 244 | |
RobMeades | 0:5c46cb3be899 | 245 | uint32_t MessageCodec::encodeSerialNumberIndUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 246 | SerialNumberIndUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 247 | { |
RobMeades | 0:5c46cb3be899 | 248 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 249 | |
RobMeades | 0:5c46cb3be899 | 250 | MESSAGE_CODEC_LOGMSG ("Encoding SerialNumberIndUlMsg, ID 0x%.2x, ", SERIAL_NUMBER_IND_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 251 | pBuffer[numBytesEncoded] = SERIAL_NUMBER_IND_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 252 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 253 | numBytesEncoded += encodeUint32 (&(pBuffer[numBytesEncoded]), pMsg->serialNumber); |
RobMeades | 0:5c46cb3be899 | 254 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 255 | |
RobMeades | 0:5c46cb3be899 | 256 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 257 | } |
RobMeades | 0:5c46cb3be899 | 258 | |
RobMeades | 0:5c46cb3be899 | 259 | uint32_t MessageCodec::encodeVolumeIndUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 260 | VolumeIndUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 261 | { |
RobMeades | 0:5c46cb3be899 | 262 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 263 | |
RobMeades | 0:5c46cb3be899 | 264 | MESSAGE_CODEC_LOGMSG ("Encoding VolumeIndUlMsg, ID 0x%.2x, ", VOLUME_IND_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 265 | pBuffer[numBytesEncoded] = VOLUME_IND_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 266 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 267 | numBytesEncoded += encodeUint32 (&(pBuffer[numBytesEncoded]), pMsg->volumeLitres); |
RobMeades | 0:5c46cb3be899 | 268 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 269 | |
RobMeades | 0:5c46cb3be899 | 270 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 271 | } |
RobMeades | 0:5c46cb3be899 | 272 | |
RobMeades | 0:5c46cb3be899 | 273 | uint32_t MessageCodec::encodeRssiIndUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 274 | RssiIndUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 275 | { |
RobMeades | 0:5c46cb3be899 | 276 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 277 | |
RobMeades | 0:5c46cb3be899 | 278 | MESSAGE_CODEC_LOGMSG ("Encoding RssiIndUlMsg, ID 0x%.2x, ", RSSI_IND_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 279 | pBuffer[numBytesEncoded] = RSSI_IND_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 280 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 281 | numBytesEncoded += encodeUint32 (&(pBuffer[numBytesEncoded]), pMsg->rssi); |
RobMeades | 0:5c46cb3be899 | 282 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 283 | |
RobMeades | 0:5c46cb3be899 | 284 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 285 | } |
RobMeades | 0:5c46cb3be899 | 286 | |
RobMeades | 0:5c46cb3be899 | 287 | uint32_t MessageCodec::encodeSerialNumberGetReqDlMsg (char * pBuffer) |
RobMeades | 0:5c46cb3be899 | 288 | { |
RobMeades | 0:5c46cb3be899 | 289 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 290 | |
RobMeades | 0:5c46cb3be899 | 291 | MESSAGE_CODEC_LOGMSG ("Encoding SerialNumberGetReqDlMsg, ID 0x%.2x, ", SERIAL_NUMBER_GET_REQ_DL_MSG); |
RobMeades | 0:5c46cb3be899 | 292 | pBuffer[numBytesEncoded] = SERIAL_NUMBER_GET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 293 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 294 | numBytesEncoded += encodeBool (&(pBuffer[numBytesEncoded]), 0); // Encode packing as all |
RobMeades | 0:5c46cb3be899 | 295 | // messages must have a body |
RobMeades | 0:5c46cb3be899 | 296 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 297 | |
RobMeades | 0:5c46cb3be899 | 298 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 299 | } |
RobMeades | 0:5c46cb3be899 | 300 | |
RobMeades | 0:5c46cb3be899 | 301 | uint32_t MessageCodec::encodeSerialNumberGetCnfUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 302 | SerialNumberGetCnfUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 303 | { |
RobMeades | 0:5c46cb3be899 | 304 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 305 | |
RobMeades | 0:5c46cb3be899 | 306 | MESSAGE_CODEC_LOGMSG ("Encoding SerialNumberGetCnfUlMsg, ID 0x%.2x, ", SERIAL_NUMBER_GET_CNF_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 307 | pBuffer[numBytesEncoded] = SERIAL_NUMBER_GET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 308 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 309 | numBytesEncoded += encodeUint32 (&(pBuffer[numBytesEncoded]), pMsg->serialNumber); |
RobMeades | 0:5c46cb3be899 | 310 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 311 | |
RobMeades | 0:5c46cb3be899 | 312 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 313 | } |
RobMeades | 0:5c46cb3be899 | 314 | |
RobMeades | 0:5c46cb3be899 | 315 | uint32_t MessageCodec::encodeReadingIntervalSetReqDlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 316 | ReadingIntervalSetReqDlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 317 | { |
RobMeades | 0:5c46cb3be899 | 318 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 319 | |
RobMeades | 0:5c46cb3be899 | 320 | MESSAGE_CODEC_LOGMSG ("Encoding ReadingIntervalSetReqDlMsg, ID 0x%.2x, ", READING_INTERVAL_SET_REQ_DL_MSG); |
RobMeades | 0:5c46cb3be899 | 321 | pBuffer[numBytesEncoded] = READING_INTERVAL_SET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 322 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 323 | numBytesEncoded += encodeUint32 (&(pBuffer[numBytesEncoded]), pMsg->readingIntervalSeconds); |
RobMeades | 0:5c46cb3be899 | 324 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 325 | |
RobMeades | 0:5c46cb3be899 | 326 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 327 | } |
RobMeades | 0:5c46cb3be899 | 328 | |
RobMeades | 0:5c46cb3be899 | 329 | uint32_t MessageCodec::encodeReadingIntervalSetCnfUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 330 | ReadingIntervalSetCnfUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 331 | { |
RobMeades | 0:5c46cb3be899 | 332 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 333 | |
RobMeades | 0:5c46cb3be899 | 334 | MESSAGE_CODEC_LOGMSG ("Encoding ReadingIntervalSetCnfUlMsg, ID 0x%.2x, ", READING_INTERVAL_SET_CNF_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 335 | pBuffer[numBytesEncoded] = READING_INTERVAL_SET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 336 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 337 | numBytesEncoded += encodeUint32 (&(pBuffer[numBytesEncoded]), pMsg->readingIntervalSeconds); |
RobMeades | 0:5c46cb3be899 | 338 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 339 | |
RobMeades | 0:5c46cb3be899 | 340 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 341 | } |
RobMeades | 0:5c46cb3be899 | 342 | |
RobMeades | 0:5c46cb3be899 | 343 | uint32_t MessageCodec::encodeReadingIntervalGetReqDlMsg (char * pBuffer) |
RobMeades | 0:5c46cb3be899 | 344 | { |
RobMeades | 0:5c46cb3be899 | 345 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 346 | |
RobMeades | 0:5c46cb3be899 | 347 | MESSAGE_CODEC_LOGMSG ("Encoding ReadingIntervalGetReqDlMsg, ID 0x%.2x, ", READING_INTERVAL_GET_REQ_DL_MSG); |
RobMeades | 0:5c46cb3be899 | 348 | pBuffer[numBytesEncoded] = READING_INTERVAL_GET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 349 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 350 | numBytesEncoded += encodeBool (&(pBuffer[numBytesEncoded]), 0); // Encode packing as all |
RobMeades | 0:5c46cb3be899 | 351 | // messages must have a body |
RobMeades | 0:5c46cb3be899 | 352 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 353 | |
RobMeades | 0:5c46cb3be899 | 354 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 355 | } |
RobMeades | 0:5c46cb3be899 | 356 | |
RobMeades | 0:5c46cb3be899 | 357 | uint32_t MessageCodec::encodeReadingIntervalGetCnfUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 358 | ReadingIntervalGetCnfUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 359 | { |
RobMeades | 0:5c46cb3be899 | 360 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 361 | |
RobMeades | 0:5c46cb3be899 | 362 | MESSAGE_CODEC_LOGMSG ("Encoding ReadingIntervalGetCnfUlMsg, ID 0x%.2x, ", READING_INTERVAL_GET_CNF_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 363 | pBuffer[numBytesEncoded] = READING_INTERVAL_GET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 364 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 365 | numBytesEncoded += encodeUint32 (&(pBuffer[numBytesEncoded]), pMsg->readingIntervalSeconds); |
RobMeades | 0:5c46cb3be899 | 366 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 367 | |
RobMeades | 0:5c46cb3be899 | 368 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 369 | } |
RobMeades | 0:5c46cb3be899 | 370 | |
RobMeades | 0:5c46cb3be899 | 371 | uint32_t MessageCodec::encodeGpioSetReqDlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 372 | GpioSetReqDlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 373 | { |
RobMeades | 0:5c46cb3be899 | 374 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 375 | |
RobMeades | 0:5c46cb3be899 | 376 | MESSAGE_CODEC_LOGMSG ("Encoding GpioSetReqDlMsg, ID 0x%.2x, ", GPIO_SET_REQ_DL_MSG); |
RobMeades | 0:5c46cb3be899 | 377 | pBuffer[numBytesEncoded] = GPIO_SET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 378 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 379 | numBytesEncoded += encodeGpioState (&(pBuffer[numBytesEncoded]), &(pMsg->gpioState)); |
RobMeades | 0:5c46cb3be899 | 380 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 381 | |
RobMeades | 0:5c46cb3be899 | 382 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 383 | } |
RobMeades | 0:5c46cb3be899 | 384 | |
RobMeades | 0:5c46cb3be899 | 385 | uint32_t MessageCodec::encodeGpioSetCnfUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 386 | GpioSetCnfUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 387 | { |
RobMeades | 0:5c46cb3be899 | 388 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 389 | |
RobMeades | 0:5c46cb3be899 | 390 | MESSAGE_CODEC_LOGMSG ("Encoding GpioSetCnfUlMsg, ID 0x%.2x, ", GPIO_SET_CNF_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 391 | pBuffer[numBytesEncoded] = GPIO_SET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 392 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 393 | numBytesEncoded += encodeGpioState (&(pBuffer[numBytesEncoded]), &(pMsg->gpioState)); |
RobMeades | 0:5c46cb3be899 | 394 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 395 | |
RobMeades | 0:5c46cb3be899 | 396 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 397 | } |
RobMeades | 0:5c46cb3be899 | 398 | |
RobMeades | 0:5c46cb3be899 | 399 | uint32_t MessageCodec::encodeGpioGetReqDlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 400 | GpioGetReqDlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 401 | { |
RobMeades | 0:5c46cb3be899 | 402 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 403 | |
RobMeades | 0:5c46cb3be899 | 404 | MESSAGE_CODEC_LOGMSG ("Encoding GpioGetReqDlMsg, ID 0x%.2x, ", LED_GET_REQ_DL_MSG); |
RobMeades | 0:5c46cb3be899 | 405 | pBuffer[numBytesEncoded] = GPIO_GET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 406 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 407 | numBytesEncoded += encodeUint32 (&(pBuffer[numBytesEncoded]), (uint32_t) pMsg->gpio); |
RobMeades | 0:5c46cb3be899 | 408 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 409 | |
RobMeades | 0:5c46cb3be899 | 410 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 411 | } |
RobMeades | 0:5c46cb3be899 | 412 | |
RobMeades | 0:5c46cb3be899 | 413 | uint32_t MessageCodec::encodeGpioGetCnfUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 414 | GpioGetCnfUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 415 | { |
RobMeades | 0:5c46cb3be899 | 416 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 417 | |
RobMeades | 0:5c46cb3be899 | 418 | MESSAGE_CODEC_LOGMSG ("Encoding GpioGetCnfUlMsg, ID 0x%.2x, ", LED_GET_CNF_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 419 | pBuffer[numBytesEncoded] = GPIO_GET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 420 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 421 | numBytesEncoded += encodeGpioState (&(pBuffer[numBytesEncoded]), &(pMsg->gpioState)); |
RobMeades | 0:5c46cb3be899 | 422 | |
RobMeades | 0:5c46cb3be899 | 423 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 424 | } |
RobMeades | 0:5c46cb3be899 | 425 | |
RobMeades | 0:5c46cb3be899 | 426 | uint32_t MessageCodec::encodeLedSetReqDlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 427 | LedSetReqDlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 428 | { |
RobMeades | 0:5c46cb3be899 | 429 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 430 | |
RobMeades | 0:5c46cb3be899 | 431 | MESSAGE_CODEC_LOGMSG ("Encoding LedSetReqDlMsg, ID 0x%.2x, ", LED_SET_REQ_DL_MSG); |
RobMeades | 0:5c46cb3be899 | 432 | pBuffer[numBytesEncoded] = LED_SET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 433 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 434 | numBytesEncoded += encodeBool (&(pBuffer[numBytesEncoded]), pMsg->onNotOff); |
RobMeades | 0:5c46cb3be899 | 435 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 436 | |
RobMeades | 0:5c46cb3be899 | 437 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 438 | } |
RobMeades | 0:5c46cb3be899 | 439 | |
RobMeades | 0:5c46cb3be899 | 440 | uint32_t MessageCodec::encodeLedSetCnfUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 441 | LedSetCnfUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 442 | { |
RobMeades | 0:5c46cb3be899 | 443 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 444 | |
RobMeades | 0:5c46cb3be899 | 445 | MESSAGE_CODEC_LOGMSG ("Encoding LedSetCnfUlMsg, ID 0x%.2x, ", LED_SET_CNF_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 446 | pBuffer[numBytesEncoded] = LED_SET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 447 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 448 | numBytesEncoded += encodeBool (&(pBuffer[numBytesEncoded]), pMsg->onNotOff); |
RobMeades | 0:5c46cb3be899 | 449 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 450 | |
RobMeades | 0:5c46cb3be899 | 451 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 452 | } |
RobMeades | 0:5c46cb3be899 | 453 | |
RobMeades | 0:5c46cb3be899 | 454 | uint32_t MessageCodec::encodeLedGetReqDlMsg (char * pBuffer) |
RobMeades | 0:5c46cb3be899 | 455 | { |
RobMeades | 0:5c46cb3be899 | 456 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 457 | |
RobMeades | 0:5c46cb3be899 | 458 | MESSAGE_CODEC_LOGMSG ("Encoding LedGetReqDlMsg, ID 0x%.2x, ", LED_GET_REQ_DL_MSG); |
RobMeades | 0:5c46cb3be899 | 459 | pBuffer[numBytesEncoded] = LED_GET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 460 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 461 | numBytesEncoded += encodeBool (&(pBuffer[numBytesEncoded]), 0); // Encode packing as all |
RobMeades | 0:5c46cb3be899 | 462 | // messages must have a body |
RobMeades | 0:5c46cb3be899 | 463 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 464 | |
RobMeades | 0:5c46cb3be899 | 465 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 466 | } |
RobMeades | 0:5c46cb3be899 | 467 | |
RobMeades | 0:5c46cb3be899 | 468 | uint32_t MessageCodec::encodeLedGetCnfUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 469 | LedGetCnfUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 470 | { |
RobMeades | 0:5c46cb3be899 | 471 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 472 | |
RobMeades | 0:5c46cb3be899 | 473 | MESSAGE_CODEC_LOGMSG ("Encoding LedGetCnfUlMsg, ID 0x%.2x, ", LED_GET_CNF_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 474 | pBuffer[numBytesEncoded] = LED_GET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 475 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 476 | numBytesEncoded += encodeBool (&(pBuffer[numBytesEncoded]), pMsg->onNotOff); |
RobMeades | 0:5c46cb3be899 | 477 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 478 | |
RobMeades | 0:5c46cb3be899 | 479 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 480 | } |
RobMeades | 0:5c46cb3be899 | 481 | |
RobMeades | 0:5c46cb3be899 | 482 | uint32_t MessageCodec::encodeFlashSetReqDlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 483 | FlashSetReqDlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 484 | { |
RobMeades | 0:5c46cb3be899 | 485 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 486 | |
RobMeades | 0:5c46cb3be899 | 487 | MESSAGE_CODEC_LOGMSG ("Encoding FlashSetReqDlMsg, ID 0x%.2x, ", FLASH_SET_REQ_DL_MSG); |
RobMeades | 0:5c46cb3be899 | 488 | pBuffer[numBytesEncoded] = FLASH_SET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 489 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 490 | numBytesEncoded += encodeBool (&(pBuffer[numBytesEncoded]), pMsg->onNotOff); |
RobMeades | 0:5c46cb3be899 | 491 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 492 | |
RobMeades | 0:5c46cb3be899 | 493 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 494 | } |
RobMeades | 0:5c46cb3be899 | 495 | |
RobMeades | 0:5c46cb3be899 | 496 | uint32_t MessageCodec::encodeFlashSetCnfUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 497 | FlashSetCnfUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 498 | { |
RobMeades | 0:5c46cb3be899 | 499 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 500 | |
RobMeades | 0:5c46cb3be899 | 501 | MESSAGE_CODEC_LOGMSG ("Encoding FlashSetCnfUlMs, ID 0x%.2x, ", FLASH_SET_CNF_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 502 | pBuffer[numBytesEncoded] = FLASH_SET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 503 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 504 | numBytesEncoded += encodeBool (&(pBuffer[numBytesEncoded]), pMsg->onNotOff); |
RobMeades | 0:5c46cb3be899 | 505 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 506 | |
RobMeades | 0:5c46cb3be899 | 507 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 508 | } |
RobMeades | 0:5c46cb3be899 | 509 | |
RobMeades | 0:5c46cb3be899 | 510 | uint32_t MessageCodec::encodeFlashGetReqDlMsg (char * pBuffer) |
RobMeades | 0:5c46cb3be899 | 511 | { |
RobMeades | 0:5c46cb3be899 | 512 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 513 | |
RobMeades | 0:5c46cb3be899 | 514 | MESSAGE_CODEC_LOGMSG ("Encoding FlashGetReqDlMsg, ID 0x%.2x, ", FLASH_GET_REQ_DL_MSG); |
RobMeades | 0:5c46cb3be899 | 515 | pBuffer[numBytesEncoded] = FLASH_GET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 516 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 517 | numBytesEncoded += encodeBool (&(pBuffer[numBytesEncoded]), 0); // Encode packing as all |
RobMeades | 0:5c46cb3be899 | 518 | // messages must have a body |
RobMeades | 0:5c46cb3be899 | 519 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 520 | |
RobMeades | 0:5c46cb3be899 | 521 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 522 | } |
RobMeades | 0:5c46cb3be899 | 523 | |
RobMeades | 0:5c46cb3be899 | 524 | uint32_t MessageCodec::encodeFlashGetCnfUlMsg (char * pBuffer, |
RobMeades | 0:5c46cb3be899 | 525 | FlashGetCnfUlMsg_t * pMsg) |
RobMeades | 0:5c46cb3be899 | 526 | { |
RobMeades | 0:5c46cb3be899 | 527 | uint32_t numBytesEncoded = 0; |
RobMeades | 0:5c46cb3be899 | 528 | |
RobMeades | 0:5c46cb3be899 | 529 | MESSAGE_CODEC_LOGMSG ("Encoding FlashGetCnfUlMs, ID 0x%.2x, ", FLASH_GET_CNF_UL_MSG); |
RobMeades | 0:5c46cb3be899 | 530 | pBuffer[numBytesEncoded] = FLASH_GET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 531 | numBytesEncoded++; |
RobMeades | 0:5c46cb3be899 | 532 | numBytesEncoded += encodeBool (&(pBuffer[numBytesEncoded]), pMsg->onNotOff); |
RobMeades | 0:5c46cb3be899 | 533 | MESSAGE_CODEC_LOGMSG ("%d bytes encoded.\n", numBytesEncoded); |
RobMeades | 0:5c46cb3be899 | 534 | |
RobMeades | 0:5c46cb3be899 | 535 | return numBytesEncoded; |
RobMeades | 0:5c46cb3be899 | 536 | } |
RobMeades | 0:5c46cb3be899 | 537 | |
RobMeades | 0:5c46cb3be899 | 538 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 539 | // MESSAGE DECODING FUNCTIONS |
RobMeades | 0:5c46cb3be899 | 540 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 541 | MessageCodec::DecodeResult_t MessageCodec::decodeDlMsg (const char ** ppInBuffer, |
RobMeades | 0:5c46cb3be899 | 542 | uint32_t sizeInBuffer, |
RobMeades | 0:5c46cb3be899 | 543 | DlMsgUnion_t * pOutBuffer) |
RobMeades | 0:5c46cb3be899 | 544 | { |
RobMeades | 0:5c46cb3be899 | 545 | MsgIdDl_t msgId; |
RobMeades | 0:5c46cb3be899 | 546 | DecodeResult_t decodeResult = DECODE_RESULT_FAILURE; |
RobMeades | 0:5c46cb3be899 | 547 | |
RobMeades | 0:5c46cb3be899 | 548 | if (sizeInBuffer < MAX_MESSAGE_SIZE) |
RobMeades | 0:5c46cb3be899 | 549 | { |
RobMeades | 0:5c46cb3be899 | 550 | decodeResult = DECODE_RESULT_INPUT_TOO_SHORT; |
RobMeades | 0:5c46cb3be899 | 551 | } |
RobMeades | 0:5c46cb3be899 | 552 | else |
RobMeades | 0:5c46cb3be899 | 553 | { |
RobMeades | 0:5c46cb3be899 | 554 | decodeResult = DECODE_RESULT_UNKNOWN_MSG_ID; |
RobMeades | 0:5c46cb3be899 | 555 | // First byte should be a valid DL message ID |
RobMeades | 0:5c46cb3be899 | 556 | msgId = (MsgIdDl_t) **ppInBuffer; |
RobMeades | 0:5c46cb3be899 | 557 | (*ppInBuffer)++; |
RobMeades | 0:5c46cb3be899 | 558 | if (msgId < MAX_NUM_DL_MSGS) |
RobMeades | 0:5c46cb3be899 | 559 | { |
RobMeades | 0:5c46cb3be899 | 560 | switch (msgId) |
RobMeades | 0:5c46cb3be899 | 561 | { |
RobMeades | 0:5c46cb3be899 | 562 | case REBOOT_REQ_DL_MSG: |
RobMeades | 0:5c46cb3be899 | 563 | decodeResult = DECODE_RESULT_REBOOT_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 564 | pOutBuffer->rebootReqDlMsg.devModeOnNotOff = decodeBool (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 565 | break; |
RobMeades | 0:5c46cb3be899 | 566 | case SERIAL_NUMBER_GET_REQ_DL_MSG: |
RobMeades | 0:5c46cb3be899 | 567 | decodeResult = DECODE_RESULT_SERIAL_NUMBER_GET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 568 | decodeUint32 (ppInBuffer); // Must decode the rest of the dummy message; |
RobMeades | 0:5c46cb3be899 | 569 | break; |
RobMeades | 0:5c46cb3be899 | 570 | case READING_INTERVAL_SET_REQ_DL_MSG: |
RobMeades | 0:5c46cb3be899 | 571 | decodeResult = DECODE_RESULT_READING_INTERVAL_SET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 572 | pOutBuffer->readingIntervalSetReqDlMsg.readingIntervalSeconds = decodeUint32 (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 573 | break; |
RobMeades | 0:5c46cb3be899 | 574 | case READING_INTERVAL_GET_REQ_DL_MSG: |
RobMeades | 0:5c46cb3be899 | 575 | decodeResult = DECODE_RESULT_READING_INTERVAL_GET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 576 | decodeUint32 (ppInBuffer); // Must decode the rest of the dummy message; |
RobMeades | 0:5c46cb3be899 | 577 | break; |
RobMeades | 0:5c46cb3be899 | 578 | case GPIO_SET_REQ_DL_MSG: |
RobMeades | 0:5c46cb3be899 | 579 | decodeResult = DECODE_RESULT_GPIO_SET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 580 | decodeGpioState (&(pOutBuffer->gpioSetReqDlMsg.gpioState), ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 581 | break; |
RobMeades | 0:5c46cb3be899 | 582 | case GPIO_GET_REQ_DL_MSG: |
RobMeades | 0:5c46cb3be899 | 583 | decodeResult = DECODE_RESULT_GPIO_GET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 584 | pOutBuffer->gpioGetReqDlMsg.gpio = (uint8_t) decodeUint32 (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 585 | break; |
RobMeades | 0:5c46cb3be899 | 586 | case LED_SET_REQ_DL_MSG: |
RobMeades | 0:5c46cb3be899 | 587 | decodeResult = DECODE_RESULT_LED_SET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 588 | pOutBuffer->ledSetReqDlMsg.onNotOff = decodeBool (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 589 | break; |
RobMeades | 0:5c46cb3be899 | 590 | case LED_GET_REQ_DL_MSG: |
RobMeades | 0:5c46cb3be899 | 591 | decodeResult = DECODE_RESULT_LED_GET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 592 | decodeUint32 (ppInBuffer); // Must decode the rest of the dummy message; |
RobMeades | 0:5c46cb3be899 | 593 | break; |
RobMeades | 0:5c46cb3be899 | 594 | case FLASH_SET_REQ_DL_MSG: |
RobMeades | 0:5c46cb3be899 | 595 | decodeResult = DECODE_RESULT_FLASH_SET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 596 | pOutBuffer->flashSetReqDlMsg.onNotOff = decodeBool (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 597 | break; |
RobMeades | 0:5c46cb3be899 | 598 | case FLASH_GET_REQ_DL_MSG: |
RobMeades | 0:5c46cb3be899 | 599 | decodeResult = DECODE_RESULT_FLASH_GET_REQ_DL_MSG; |
RobMeades | 0:5c46cb3be899 | 600 | decodeUint32 (ppInBuffer); // Must decode the rest of the dummy message; |
RobMeades | 0:5c46cb3be899 | 601 | break; |
RobMeades | 0:5c46cb3be899 | 602 | default: |
RobMeades | 0:5c46cb3be899 | 603 | // The decodeResult will be left as Unknown message |
RobMeades | 0:5c46cb3be899 | 604 | break; |
RobMeades | 0:5c46cb3be899 | 605 | } |
RobMeades | 0:5c46cb3be899 | 606 | } |
RobMeades | 0:5c46cb3be899 | 607 | } |
RobMeades | 0:5c46cb3be899 | 608 | |
RobMeades | 0:5c46cb3be899 | 609 | return decodeResult; |
RobMeades | 0:5c46cb3be899 | 610 | } |
RobMeades | 0:5c46cb3be899 | 611 | |
RobMeades | 0:5c46cb3be899 | 612 | MessageCodec::DecodeResult_t MessageCodec::decodeUlMsg (const char ** ppInBuffer, |
RobMeades | 0:5c46cb3be899 | 613 | uint32_t sizeInBuffer, |
RobMeades | 0:5c46cb3be899 | 614 | UlMsgUnion_t * pOutBuffer) |
RobMeades | 0:5c46cb3be899 | 615 | { |
RobMeades | 0:5c46cb3be899 | 616 | MsgIdUl_t msgId; |
RobMeades | 0:5c46cb3be899 | 617 | DecodeResult_t decodeResult = DECODE_RESULT_FAILURE; |
RobMeades | 0:5c46cb3be899 | 618 | |
RobMeades | 0:5c46cb3be899 | 619 | if (sizeInBuffer < MAX_MESSAGE_SIZE) |
RobMeades | 0:5c46cb3be899 | 620 | { |
RobMeades | 0:5c46cb3be899 | 621 | decodeResult = DECODE_RESULT_INPUT_TOO_SHORT; |
RobMeades | 0:5c46cb3be899 | 622 | } |
RobMeades | 0:5c46cb3be899 | 623 | else |
RobMeades | 0:5c46cb3be899 | 624 | { |
RobMeades | 0:5c46cb3be899 | 625 | decodeResult = DECODE_RESULT_UNKNOWN_MSG_ID; |
RobMeades | 0:5c46cb3be899 | 626 | // First byte should be a valid UL message ID |
RobMeades | 0:5c46cb3be899 | 627 | msgId = (MsgIdUl_t) **ppInBuffer; |
RobMeades | 0:5c46cb3be899 | 628 | (*ppInBuffer)++; |
RobMeades | 0:5c46cb3be899 | 629 | if (msgId < MAX_NUM_UL_MSGS) |
RobMeades | 0:5c46cb3be899 | 630 | { |
RobMeades | 0:5c46cb3be899 | 631 | switch (msgId) |
RobMeades | 0:5c46cb3be899 | 632 | { |
RobMeades | 0:5c46cb3be899 | 633 | case INIT_IND_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 634 | decodeResult = DECODE_RESULT_INIT_IND_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 635 | pOutBuffer->initIndUlMsg.wakeUpCode = (WakeUpCode_t) decodeUint32 (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 636 | break; |
RobMeades | 0:5c46cb3be899 | 637 | case SERIAL_NUMBER_IND_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 638 | decodeResult = DECODE_RESULT_SERIAL_NUMBER_IND_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 639 | pOutBuffer->serialNumberIndUlMsg.serialNumber = decodeUint32 (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 640 | break; |
RobMeades | 0:5c46cb3be899 | 641 | case VOLUME_IND_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 642 | decodeResult = DECODE_RESULT_VOLUME_IND_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 643 | pOutBuffer->volumeIndUlMsg.volumeLitres = decodeUint32 (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 644 | break; |
RobMeades | 0:5c46cb3be899 | 645 | case RSSI_IND_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 646 | decodeResult = DECODE_RESULT_RSSI_IND_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 647 | pOutBuffer->rssiIndUlMsg.rssi = decodeUint32 (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 648 | break; |
RobMeades | 0:5c46cb3be899 | 649 | case SERIAL_NUMBER_GET_CNF_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 650 | decodeResult = DECODE_RESULT_SERIAL_NUMBER_GET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 651 | pOutBuffer->serialNumberCnfUlMsg.serialNumber = decodeUint32 (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 652 | break; |
RobMeades | 0:5c46cb3be899 | 653 | case READING_INTERVAL_SET_CNF_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 654 | decodeResult = DECODE_RESULT_READING_INTERVAL_SET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 655 | pOutBuffer->readingIntervalSetCnfUlMsg.readingIntervalSeconds = decodeUint32 (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 656 | break; |
RobMeades | 0:5c46cb3be899 | 657 | case READING_INTERVAL_GET_CNF_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 658 | decodeResult = DECODE_RESULT_READING_INTERVAL_GET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 659 | pOutBuffer->readingIntervalGetCnfUlMsg.readingIntervalSeconds = decodeUint32 (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 660 | break; |
RobMeades | 0:5c46cb3be899 | 661 | case GPIO_SET_CNF_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 662 | decodeResult = DECODE_RESULT_GPIO_SET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 663 | pOutBuffer->gpioSetCnfUlMsg = decodeUint32 (ppInBuffer); // Decode as an int32 for later unpacking |
RobMeades | 0:5c46cb3be899 | 664 | break; |
RobMeades | 0:5c46cb3be899 | 665 | case GPIO_GET_CNF_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 666 | decodeResult = DECODE_RESULT_GPIO_GET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 667 | pOutBuffer->gpioGetCnfUlMsg = decodeUint32 (ppInBuffer); // Decode as an int32 for later unpacking |
RobMeades | 0:5c46cb3be899 | 668 | break; |
RobMeades | 0:5c46cb3be899 | 669 | case LED_SET_CNF_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 670 | decodeResult = DECODE_RESULT_LED_SET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 671 | pOutBuffer->ledSetCnfUlMsg.onNotOff = decodeBool (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 672 | break; |
RobMeades | 0:5c46cb3be899 | 673 | case LED_GET_CNF_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 674 | decodeResult = DECODE_RESULT_LED_GET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 675 | pOutBuffer->ledGetCnfUlMsg.onNotOff = decodeBool (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 676 | break; |
RobMeades | 0:5c46cb3be899 | 677 | case FLASH_SET_CNF_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 678 | decodeResult = DECODE_RESULT_FLASH_SET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 679 | pOutBuffer->flashSetCnfUlMsg.onNotOff = decodeBool (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 680 | break; |
RobMeades | 0:5c46cb3be899 | 681 | case FLASH_GET_CNF_UL_MSG: |
RobMeades | 0:5c46cb3be899 | 682 | decodeResult = DECODE_RESULT_FLASH_GET_CNF_UL_MSG; |
RobMeades | 0:5c46cb3be899 | 683 | pOutBuffer->flashGetCnfUlMsg.onNotOff = decodeBool (ppInBuffer); |
RobMeades | 0:5c46cb3be899 | 684 | break; |
RobMeades | 0:5c46cb3be899 | 685 | default: |
RobMeades | 0:5c46cb3be899 | 686 | // The decodeResult will be left as Unknown message |
RobMeades | 0:5c46cb3be899 | 687 | break; |
RobMeades | 0:5c46cb3be899 | 688 | } |
RobMeades | 0:5c46cb3be899 | 689 | } |
RobMeades | 0:5c46cb3be899 | 690 | } |
RobMeades | 0:5c46cb3be899 | 691 | |
RobMeades | 0:5c46cb3be899 | 692 | return decodeResult; |
RobMeades | 0:5c46cb3be899 | 693 | } |
RobMeades | 0:5c46cb3be899 | 694 | |
RobMeades | 0:5c46cb3be899 | 695 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 696 | // MISC FUNCTIONS |
RobMeades | 0:5c46cb3be899 | 697 | // ---------------------------------------------------------------- |
RobMeades | 0:5c46cb3be899 | 698 | |
RobMeades | 0:5c46cb3be899 | 699 | // Log debug messages |
RobMeades | 0:5c46cb3be899 | 700 | void MessageCodec::logMsg (const char * pFormat, ...) |
RobMeades | 0:5c46cb3be899 | 701 | { |
RobMeades | 0:5c46cb3be899 | 702 | char buffer[MAX_DEBUG_MESSAGE_LEN]; |
RobMeades | 0:5c46cb3be899 | 703 | |
RobMeades | 0:5c46cb3be899 | 704 | va_list args; |
RobMeades | 0:5c46cb3be899 | 705 | va_start (args, pFormat); |
RobMeades | 0:5c46cb3be899 | 706 | vsnprintf (buffer, sizeof (buffer), pFormat, args); |
RobMeades | 0:5c46cb3be899 | 707 | va_end (args); |
RobMeades | 0:5c46cb3be899 | 708 | #ifdef WIN32 |
RobMeades | 0:5c46cb3be899 | 709 | if (MessageCodec::mp_guiPrintToConsole) |
RobMeades | 0:5c46cb3be899 | 710 | { |
RobMeades | 0:5c46cb3be899 | 711 | (*MessageCodec::mp_guiPrintToConsole) (buffer); |
RobMeades | 0:5c46cb3be899 | 712 | } |
RobMeades | 0:5c46cb3be899 | 713 | #else |
RobMeades | 0:5c46cb3be899 | 714 | // Must be on ARM |
RobMeades | 0:5c46cb3be899 | 715 | printf (buffer); |
RobMeades | 0:5c46cb3be899 | 716 | #endif |
RobMeades | 0:5c46cb3be899 | 717 | } |
RobMeades | 0:5c46cb3be899 | 718 | |
RobMeades | 0:5c46cb3be899 | 719 | void MessageCodec::initDll (void (*guiPrintToConsole) (const char *)) |
RobMeades | 0:5c46cb3be899 | 720 | { |
RobMeades | 0:5c46cb3be899 | 721 | #ifdef WIN32 |
RobMeades | 0:5c46cb3be899 | 722 | mp_guiPrintToConsole = guiPrintToConsole; |
RobMeades | 0:5c46cb3be899 | 723 | // This is the signal to the GUI that we're done with initialisation |
RobMeades | 0:5c46cb3be899 | 724 | logMsg ("MessageCodec::ready.\n"); |
RobMeades | 0:5c46cb3be899 | 725 | #endif |
RobMeades | 0:5c46cb3be899 | 726 | } |
RobMeades | 0:5c46cb3be899 | 727 | |
RobMeades | 0:5c46cb3be899 | 728 | // End Of File |