Library for using the LSR SiFlex/ProFlex RF modules with mbed.

Committer:
Issus
Date:
Mon Jul 25 16:27:51 2016 +0000
Revision:
1:8ecba4bfc183
Parent:
0:f9cf4a19bb84
Child:
4:2ac0b9a7f43a
Added additional host data rates

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Issus 0:f9cf4a19bb84 1 /**
Issus 0:f9cf4a19bb84 2 * @file LsrModule.h
Issus 0:f9cf4a19bb84 3 * @author LS Research LLC
Issus 0:f9cf4a19bb84 4 * @version 1.0
Issus 0:f9cf4a19bb84 5 *
Issus 0:f9cf4a19bb84 6 * @section LICENSE
Issus 0:f9cf4a19bb84 7 *
Issus 0:f9cf4a19bb84 8 * This program is free software; you can redistribute it and/or
Issus 0:f9cf4a19bb84 9 * modify it under the terms of the GNU General Public License as
Issus 0:f9cf4a19bb84 10 * published by the Free Software Foundation; either version 2 of
Issus 0:f9cf4a19bb84 11 * the License, or (at your option) any later version.
Issus 0:f9cf4a19bb84 12 *
Issus 0:f9cf4a19bb84 13 * This program is distributed in the hope that it will be useful, but
Issus 0:f9cf4a19bb84 14 * WITHOUT ANY WARRANTY; without even the implied warranty of
Issus 0:f9cf4a19bb84 15 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
Issus 0:f9cf4a19bb84 16 * General Public License for more details at
Issus 0:f9cf4a19bb84 17 * http://www.gnu.org/copyleft/gpl.html
Issus 0:f9cf4a19bb84 18 *
Issus 0:f9cf4a19bb84 19 * @section DESCRIPTION
Issus 0:f9cf4a19bb84 20 *
Issus 0:f9cf4a19bb84 21 * UART communication API for LS Research's ProFLEX01 and SiFLEX02 ModFLEX Shields.
Issus 0:f9cf4a19bb84 22 */
Issus 0:f9cf4a19bb84 23
Issus 0:f9cf4a19bb84 24 /**
Issus 0:f9cf4a19bb84 25 * Modified by Mark Harris at SAIT.ca
Issus 0:f9cf4a19bb84 26 * Improved functionality for mbed
Issus 0:f9cf4a19bb84 27 */
Issus 0:f9cf4a19bb84 28
Issus 0:f9cf4a19bb84 29 #ifndef LsrModule_h
Issus 0:f9cf4a19bb84 30 #define LsrModule_h
Issus 0:f9cf4a19bb84 31
Issus 0:f9cf4a19bb84 32 #include <inttypes.h>
Issus 0:f9cf4a19bb84 33 #include "mbed.h"
Issus 0:f9cf4a19bb84 34
Issus 0:f9cf4a19bb84 35 #ifndef NULL
Issus 0:f9cf4a19bb84 36 #define NULL 0
Issus 0:f9cf4a19bb84 37 #endif
Issus 0:f9cf4a19bb84 38
Issus 0:f9cf4a19bb84 39 #define SIFLEX02 ///< Use with a SiFLEX02 ModFLEX Shield (900MHz)
Issus 0:f9cf4a19bb84 40 //#define PROFLEX01 ///< Use with a ProFLEX01 ModFLEX Shield (2.4GHz)
Issus 0:f9cf4a19bb84 41
Issus 0:f9cf4a19bb84 42 /**
Issus 0:f9cf4a19bb84 43 * Message Index Defintions.
Issus 0:f9cf4a19bb84 44 *
Issus 0:f9cf4a19bb84 45 */
Issus 0:f9cf4a19bb84 46 #define LSR_MODULE_MSG_START_BYTE_INDEX 0
Issus 0:f9cf4a19bb84 47 #define LSR_MODULE_MSG_LENGTH_BYTE_INDEX 1
Issus 0:f9cf4a19bb84 48 #define LSR_MODULE_MSG_TYPE_BYTE_INDEX 2
Issus 0:f9cf4a19bb84 49
Issus 0:f9cf4a19bb84 50 /**
Issus 0:f9cf4a19bb84 51 * Message Byte Types.
Issus 0:f9cf4a19bb84 52 *
Issus 0:f9cf4a19bb84 53 */
Issus 0:f9cf4a19bb84 54 #define LSR_MODULE_SERIAL_MSG_START_BYTE 0x01
Issus 0:f9cf4a19bb84 55 #define LSR_MODULE_SERIAL_MSG_END_BYTE 0x04
Issus 0:f9cf4a19bb84 56
Issus 0:f9cf4a19bb84 57 /**
Issus 0:f9cf4a19bb84 58 * Rx Message Type Limits.
Issus 0:f9cf4a19bb84 59 *
Issus 0:f9cf4a19bb84 60 */
Issus 0:f9cf4a19bb84 61 #define LSR_MODULE_MIN_SERIAL_RX_MSG_TYPE 0x81
Issus 0:f9cf4a19bb84 62 #define LSR_MODULE_MAX_SERIAL_RX_MSG_TYPE 0xC5
Issus 0:f9cf4a19bb84 63
Issus 0:f9cf4a19bb84 64 /**
Issus 0:f9cf4a19bb84 65 * LSR Module Host TX Message Definitions.
Issus 0:f9cf4a19bb84 66 *
Issus 0:f9cf4a19bb84 67 */
Issus 0:f9cf4a19bb84 68 #define LSR_MODULE_QUERY_VERSION_MSG_TYPE 0x01
Issus 0:f9cf4a19bb84 69 #define LSR_MODULE_SET_SECURITY_TX_FRAME_COUNTER_MSG_TYPE 0x0C
Issus 0:f9cf4a19bb84 70 #define LSR_MODULE_QUERY_SECURITY_TX_FRAME_COUNTER_MSG_TYPE 0x0D
Issus 0:f9cf4a19bb84 71 #define LSR_MODULE_SET_BASIC_RF_SETTINGS_MSG_TYPE 0x10
Issus 0:f9cf4a19bb84 72 #define LSR_MODULE_QUERY_BASIC_RF_SETTINGS_MSG_TYPE 0x11
Issus 0:f9cf4a19bb84 73 #define LSR_MODULE_SAVE_SETTINGS_TO_NV_MEMORY_MSG_TYPE 0x12
Issus 0:f9cf4a19bb84 74 #define LSR_MODULE_RESET_REQUEST_MSG_TYPE 0x13
Issus 0:f9cf4a19bb84 75 #define LSR_MODULE_QUERY_SUPPLY_VOLTAGE_MSG_TYPE 0x14
Issus 0:f9cf4a19bb84 76 #define LSR_MODULE_QUERY_STATISTICS_MSG_TYPE 0x15
Issus 0:f9cf4a19bb84 77 #define LSR_MODULE_CLEAR_STATISTICS_MSG_TYPE 0x16
Issus 0:f9cf4a19bb84 78 #define LSR_MODULE_SET_HOST_DATA_RATE_MSG_TYPE 0x18
Issus 0:f9cf4a19bb84 79 #define LSR_MODULE_SEND_SIMPLE_SHORT_RF_DATA_PACKET_MSG_TYPE 0x20
Issus 0:f9cf4a19bb84 80 #define LSR_MODULE_SEND_ADVANCED_SHORT_RF_DATA_PACKET_MSG_TYPE 0x22
Issus 0:f9cf4a19bb84 81 #define LSR_MODULE_SEND_SIMPLE_LONG_RF_DATA_PACKET_MSG_TYPE 0x24
Issus 0:f9cf4a19bb84 82 #define LSR_MODULE_SEND_ADVANCED_LONG_RF_DATA_PACKET_MSG_TYPE 0x26
Issus 0:f9cf4a19bb84 83 #define LSR_MODULE_SEND_SIMPLE_REPEATED_RF_DATA_PACKET_MSG_TYPE 0x2A
Issus 0:f9cf4a19bb84 84 #define LSR_MODULE_CHANNEL_ENERGY_SCAN_MSG_TYPE 0x44
Issus 0:f9cf4a19bb84 85
Issus 1:8ecba4bfc183 86
Issus 0:f9cf4a19bb84 87 /**
Issus 0:f9cf4a19bb84 88 * LSR Module Settings Definitions.
Issus 0:f9cf4a19bb84 89 *
Issus 0:f9cf4a19bb84 90 */
Issus 0:f9cf4a19bb84 91 #define LSR_MODULE_TX_POWER_LEVEL_MIN 0
Issus 0:f9cf4a19bb84 92 #define LSR_MODULE_SECURITY_OVERHEAD 14
Issus 0:f9cf4a19bb84 93 #define LSR_MODULE_MIN_SERIAL_RX_MSG_LENGTH 5
Issus 0:f9cf4a19bb84 94 #define LSR_MODULE_MAX_SERIAL_RX_MSG_LENGTH 131
Issus 0:f9cf4a19bb84 95
Issus 0:f9cf4a19bb84 96 #ifdef PROFLEX01
Issus 0:f9cf4a19bb84 97 #define LSR_MODULE_RF_CHANNEL_MIN 11
Issus 0:f9cf4a19bb84 98 #define LSR_MODULE_RF_CHANNEL_MAX 25
Issus 0:f9cf4a19bb84 99 #define LSR_MODULE_TX_POWER_LEVEL_MAX 19
Issus 0:f9cf4a19bb84 100 #define LSR_MODULE_SIMPLE_SHORT_RF_DATA_LENGTH 98
Issus 0:f9cf4a19bb84 101 #define LSR_MODULE_ADVANCED_SHORT_RF_DATA_LENGTH 98
Issus 0:f9cf4a19bb84 102 #define LSR_MODULE_SIMPLE_LONG_RF_DATA_LENGTH 98
Issus 0:f9cf4a19bb84 103 #define LSR_MODULE_ADVANCED_LONG_RF_DATA_LENGTH 98
Issus 0:f9cf4a19bb84 104 #define LSR_MODULE_MAX_SERIAL_TX_MSG_LENGTH 115
Issus 0:f9cf4a19bb84 105 #elif defined SIFLEX02
Issus 0:f9cf4a19bb84 106 #define LSR_MODULE_RF_CHANNEL_MIN 1
Issus 0:f9cf4a19bb84 107 #define LSR_MODULE_RF_CHANNEL_MAX 10
Issus 0:f9cf4a19bb84 108 #define LSR_MODULE_TX_POWER_LEVEL_MAX 21
Issus 0:f9cf4a19bb84 109 #define LSR_MODULE_SIMPLE_SHORT_RF_DATA_LENGTH 112
Issus 0:f9cf4a19bb84 110 #define LSR_MODULE_ADVANCED_SHORT_RF_DATA_LENGTH 110
Issus 0:f9cf4a19bb84 111 #define LSR_MODULE_SIMPLE_LONG_RF_DATA_LENGTH 100
Issus 0:f9cf4a19bb84 112 #define LSR_MODULE_ADVANCED_LONG_RF_DATA_LENGTH 98
Issus 0:f9cf4a19bb84 113 #define LSR_MODULE_MAX_SERIAL_TX_MSG_LENGTH 121
Issus 0:f9cf4a19bb84 114 #else
Issus 0:f9cf4a19bb84 115 #error "Incorrect module type"
Issus 0:f9cf4a19bb84 116 #endif
Issus 0:f9cf4a19bb84 117
Issus 0:f9cf4a19bb84 118 /**
Issus 0:f9cf4a19bb84 119 * Receiver ConfigurationBitmask Definitions.
Issus 0:f9cf4a19bb84 120 *
Issus 0:f9cf4a19bb84 121 */
Issus 0:f9cf4a19bb84 122 #define LSR_MODULE_RX_CONFIG_ALLOW_BROADCAST_ADDRESS_BITMASK 0x01
Issus 0:f9cf4a19bb84 123 #define LSR_MODULE_RX_CONFIG_ALLOW_BROADCAST_PAN_BITMASK 0x02
Issus 0:f9cf4a19bb84 124 #define LSR_MODULE_RX_CONFIG_PROMISCUOUS_MODE_BITMASK 0x04
Issus 0:f9cf4a19bb84 125 #define LSR_MODULE_RX_CONFIG_ALLOW_SECURED_PACKETS_MODE_BITMASK 0x08
Issus 0:f9cf4a19bb84 126 #define LSR_MODULE_RX_CONFIG_MAX (LSR_MODULE_RX_CONFIG_ALLOW_BROADCAST_ADDRESS_BITMASK + LSR_MODULE_RX_CONFIG_ALLOW_BROADCAST_PAN_BITMASK + LSR_MODULE_RX_CONFIG_PROMISCUOUS_MODE_BITMASK + LSR_MODULE_RX_CONFIG_ALLOW_SECURED_PACKETS_MODE_BITMASK)
Issus 0:f9cf4a19bb84 127
Issus 0:f9cf4a19bb84 128 /**
Issus 0:f9cf4a19bb84 129 * Transmit Options Bitmask Definitions.
Issus 0:f9cf4a19bb84 130 *
Issus 0:f9cf4a19bb84 131 */
Issus 0:f9cf4a19bb84 132 #define LSR_MODULE_TX_OPTIONS_RETRIES_ACKS_BITMASK 0x01
Issus 0:f9cf4a19bb84 133 #define LSR_MODULE_TX_OPTIONS_USE_SECURITY_BITMASK 0x02
Issus 0:f9cf4a19bb84 134 #define LSR_MODULE_TX_OPTIONS_MAX (LSR_MODULE_TX_OPTIONS_RETRIES_ACKS_BITMASK + LSR_MODULE_TX_OPTIONS_USE_SECURITY_BITMASK)
Issus 0:f9cf4a19bb84 135
Issus 0:f9cf4a19bb84 136 /**
Issus 0:f9cf4a19bb84 137 * Host UART Data Rate Definitions.
Issus 0:f9cf4a19bb84 138 *
Issus 0:f9cf4a19bb84 139 */
Issus 0:f9cf4a19bb84 140 #define LSR_MODULE_HOST_DATA_RATE_1200 0
Issus 0:f9cf4a19bb84 141 #define LSR_MODULE_HOST_DATA_RATE_2400 1
Issus 0:f9cf4a19bb84 142 #define LSR_MODULE_HOST_DATA_RATE_4800 2
Issus 0:f9cf4a19bb84 143 #define LSR_MODULE_HOST_DATA_RATE_9600 3
Issus 0:f9cf4a19bb84 144 #define LSR_MODULE_HOST_DATA_RATE_19200 4
Issus 0:f9cf4a19bb84 145 #define LSR_MODULE_HOST_DATA_RATE_38400 5
Issus 0:f9cf4a19bb84 146 #define LSR_MODULE_HOST_DATA_RATE_57600 6
Issus 0:f9cf4a19bb84 147 #define LSR_MODULE_HOST_DATA_RATE_115200 7
Issus 1:8ecba4bfc183 148 #define LSR_MODULE_HOST_DATA_RATE_230400 8
Issus 1:8ecba4bfc183 149 #define LSR_MODULE_HOST_DATA_RATE_460800 9
Issus 1:8ecba4bfc183 150 #define LSR_MODULE_HOST_DATA_RATE_921600 10
Issus 1:8ecba4bfc183 151 #define LSR_MODULE_HOST_DATA_RATE_MAX LSR_MODULE_HOST_DATA_RATE_921600
Issus 0:f9cf4a19bb84 152 #define LSR_MODULE_10MS_UART_TIMEOUT 239
Issus 0:f9cf4a19bb84 153
Issus 0:f9cf4a19bb84 154 /**
Issus 0:f9cf4a19bb84 155 * Channel Energy Scan Duration Definitions.
Issus 0:f9cf4a19bb84 156 *
Issus 0:f9cf4a19bb84 157 */
Issus 0:f9cf4a19bb84 158 #define LSR_MODULE_SCAN_DURATION_MAX 14
Issus 0:f9cf4a19bb84 159
Issus 0:f9cf4a19bb84 160 /**
Issus 0:f9cf4a19bb84 161 * Type Defintions.
Issus 0:f9cf4a19bb84 162 *
Issus 0:f9cf4a19bb84 163 */
Issus 0:f9cf4a19bb84 164 typedef unsigned int word_t;
Issus 0:f9cf4a19bb84 165
Issus 0:f9cf4a19bb84 166 /**
Issus 0:f9cf4a19bb84 167 * Word structure.
Issus 0:f9cf4a19bb84 168 *
Issus 0:f9cf4a19bb84 169 */
Issus 0:f9cf4a19bb84 170 typedef struct _words
Issus 0:f9cf4a19bb84 171 {
Issus 0:f9cf4a19bb84 172 uint8_t lb; ///< Low byte.
Issus 0:f9cf4a19bb84 173 uint8_t hb; ///< High byte.
Issus 0:f9cf4a19bb84 174 } Words_t;
Issus 0:f9cf4a19bb84 175
Issus 0:f9cf4a19bb84 176 /**
Issus 0:f9cf4a19bb84 177 * Word union.
Issus 0:f9cf4a19bb84 178 *
Issus 0:f9cf4a19bb84 179 */
Issus 0:f9cf4a19bb84 180 typedef union _wordu
Issus 0:f9cf4a19bb84 181 {
Issus 0:f9cf4a19bb84 182 word_t w; ///< Word.
Issus 0:f9cf4a19bb84 183 uint16_t u16; ///< Unsigned 16.
Issus 0:f9cf4a19bb84 184 Words_t ws; ///< Word structure.
Issus 0:f9cf4a19bb84 185 } Wordu_t;
Issus 0:f9cf4a19bb84 186
Issus 0:f9cf4a19bb84 187 /**
Issus 0:f9cf4a19bb84 188 * Word structure.
Issus 0:f9cf4a19bb84 189 *
Issus 0:f9cf4a19bb84 190 */
Issus 0:f9cf4a19bb84 191 typedef struct _dwords
Issus 0:f9cf4a19bb84 192 {
Issus 0:f9cf4a19bb84 193 uint8_t lb; ///< Low byte.
Issus 0:f9cf4a19bb84 194 uint8_t mlb; ///< Middle low byte.
Issus 0:f9cf4a19bb84 195 uint8_t mhb; ///< Middle high byte.
Issus 0:f9cf4a19bb84 196 uint8_t hb; ///< High byte.
Issus 0:f9cf4a19bb84 197 } DWords_t;
Issus 0:f9cf4a19bb84 198
Issus 0:f9cf4a19bb84 199 /**
Issus 0:f9cf4a19bb84 200 * Double word union.
Issus 0:f9cf4a19bb84 201 *
Issus 0:f9cf4a19bb84 202 */
Issus 0:f9cf4a19bb84 203 typedef union _dwordu
Issus 0:f9cf4a19bb84 204 {
Issus 0:f9cf4a19bb84 205 uint32_t u32; ///< Unsigned 32.
Issus 0:f9cf4a19bb84 206 DWords_t dws; ///< Double word structure.
Issus 0:f9cf4a19bb84 207 } DWordu_t;
Issus 0:f9cf4a19bb84 208
Issus 0:f9cf4a19bb84 209
Issus 0:f9cf4a19bb84 210 class LsrModule : Serial
Issus 0:f9cf4a19bb84 211 {
Issus 0:f9cf4a19bb84 212 public:
Issus 0:f9cf4a19bb84 213 uint8_t* pu8RxBuffer; ///< Pointer to private UART receive buffer.
Issus 0:f9cf4a19bb84 214 uint8_t u8RxMsgLength; ///< Length of private UART receive buffer.
Issus 0:f9cf4a19bb84 215 //Functions:
Issus 0:f9cf4a19bb84 216 LsrModule(PinName tx, PinName rx, int baudRate = 19200);
Issus 0:f9cf4a19bb84 217 ~LsrModule();
Issus 0:f9cf4a19bb84 218 bool SubscribeRxMsgCallback(uint8_t u8RxMsgType, void (*callback)(void));
Issus 0:f9cf4a19bb84 219 bool UnsubscribeRxMsgCallback(uint8_t u8RxMsgType);
Issus 0:f9cf4a19bb84 220 void RunHostRxStateMachine(void);
Issus 0:f9cf4a19bb84 221 // Tx Messages:
Issus 0:f9cf4a19bb84 222 // 0x01
Issus 0:f9cf4a19bb84 223 void QueryVersionMsg(void);
Issus 0:f9cf4a19bb84 224 // 0x0C
Issus 0:f9cf4a19bb84 225 void SetSecurityTransmitFrameCounterMsg(uint32_t* pu32FrameCounter);
Issus 0:f9cf4a19bb84 226 // 0x0D
Issus 0:f9cf4a19bb84 227 void QuerySecurityTransmitFrameCounterMsg(void);
Issus 0:f9cf4a19bb84 228 // 0x10
Issus 0:f9cf4a19bb84 229 void SetBasicRfSettingsMsg(uint16_t u16PanId, uint16_t u16AddrShort, uint8_t* pu8AddrLong, uint8_t u8RfChannel, uint8_t u8TxPowerLevel, uint8_t u8ReceiverConfig, uint8_t* pu8SecurityKey);
Issus 0:f9cf4a19bb84 230 // 0x11
Issus 0:f9cf4a19bb84 231 void QueryBasicRfSettingsMsg(void);
Issus 0:f9cf4a19bb84 232 // 0x12
Issus 0:f9cf4a19bb84 233 void SaveSettingsToNVMemoryMsg(void);
Issus 0:f9cf4a19bb84 234 // 0x13
Issus 0:f9cf4a19bb84 235 void ResetRequestMsg(void);
Issus 0:f9cf4a19bb84 236 // 0x14
Issus 0:f9cf4a19bb84 237 void QuerySupplyVoltageMsg(void);
Issus 0:f9cf4a19bb84 238 // 0x15
Issus 0:f9cf4a19bb84 239 void QueryStatisticsMsg(void);
Issus 0:f9cf4a19bb84 240 // 0x16
Issus 0:f9cf4a19bb84 241 void ClearStatisticsMsg(void);
Issus 0:f9cf4a19bb84 242 // 0x18
Issus 0:f9cf4a19bb84 243 void SetHostDataRateMsg(uint8_t u8HostDataRate);
Issus 0:f9cf4a19bb84 244 // 0x20
Issus 0:f9cf4a19bb84 245 void SendSimpleShortAddrRfDataPacketMsg(uint8_t* pu8Data, uint8_t u8DataLength, uint16_t u16DestAddress, uint8_t u8TxOptions, uint8_t u8PacketId);
Issus 0:f9cf4a19bb84 246 // 0x22
Issus 0:f9cf4a19bb84 247 void SendAdvancedShortAddrRfDataPacketMsg(uint8_t* pu8Data, uint8_t u8DataLength, uint16_t u16DestPanId, uint16_t u16DestAddress, uint8_t u8TxOptions, uint8_t u8PacketId);
Issus 0:f9cf4a19bb84 248 // 0x24
Issus 0:f9cf4a19bb84 249 void SendSimpleLongAddrRfDataPacketMsg(uint8_t* pu8Data, uint8_t u8DataLength, uint8_t* pu8DestAddress, uint8_t u8TxOptions, uint8_t u8PacketId);
Issus 0:f9cf4a19bb84 250 // 0x26
Issus 0:f9cf4a19bb84 251 void SendAdvancedLongAddrRfDataPacketMsg(uint8_t* pu8Data, uint8_t u8DataLength, uint16_t u16DestPanId, uint8_t* pu8DestAddress, uint8_t u8TxOptions, uint8_t u8PacketId);
Issus 0:f9cf4a19bb84 252 // 0x44
Issus 0:f9cf4a19bb84 253 void ChannelEnergyScanMsg(uint16_t u16ChannelMask, uint8_t u8ScanDuration);
Issus 0:f9cf4a19bb84 254
Issus 0:f9cf4a19bb84 255
Issus 0:f9cf4a19bb84 256 private:
Issus 0:f9cf4a19bb84 257 // Variables
Issus 0:f9cf4a19bb84 258 uint8_t u8RxReadByte;
Issus 0:f9cf4a19bb84 259 uint8_t u8ForLoopCounter;
Issus 0:f9cf4a19bb84 260 uint8_t u8UartRxBufferIndex;
Issus 0:f9cf4a19bb84 261 uint8_t u8UartTxBufferIndex;
Issus 0:f9cf4a19bb84 262 uint8_t u8TxMsgChecksum;///< Transmit message checksum.
Issus 0:f9cf4a19bb84 263 uint8_t au8UartRxBuffer[LSR_MODULE_MAX_SERIAL_RX_MSG_LENGTH];///< Receive buffer for UART communication from module.
Issus 0:f9cf4a19bb84 264 uint8_t au8UartTxBuffer[LSR_MODULE_MAX_SERIAL_TX_MSG_LENGTH];///< Transmit buffer for UART communication to module.
Issus 0:f9cf4a19bb84 265 bool bUartMethodFlag;
Issus 0:f9cf4a19bb84 266
Issus 0:f9cf4a19bb84 267
Issus 0:f9cf4a19bb84 268 // Function Pointers
Issus 0:f9cf4a19bb84 269 void (LsrModule::*ptrHostState)(void);///< Runs uart UART receive state machine.
Issus 0:f9cf4a19bb84 270 void (LsrModule::*ptrHostProcessCallbackState)(uint8_t*);///< Used to process received UART messages.
Issus 0:f9cf4a19bb84 271
Issus 0:f9cf4a19bb84 272
Issus 0:f9cf4a19bb84 273 // Functions
Issus 0:f9cf4a19bb84 274 void AddSerialMsgHeader(uint8_t u8MsgType, uint8_t u8MsgLength);
Issus 0:f9cf4a19bb84 275 void AddSerialByteToMsgBuffer(uint8_t u8Data);
Issus 0:f9cf4a19bb84 276 void AddSerialMsgTrailer(void);
Issus 0:f9cf4a19bb84 277 void WriteSerialMsg(void);
Issus 0:f9cf4a19bb84 278 void HostProcessCallbackMsgStart (uint8_t* pu8MsgBuffer, uint8_t u8Length);
Issus 0:f9cf4a19bb84 279 // Rx Message Callbacks
Issus 0:f9cf4a19bb84 280
Issus 0:f9cf4a19bb84 281
Issus 0:f9cf4a19bb84 282 // Rx functions
Issus 0:f9cf4a19bb84 283 bool ValidMsgLengthAndType(uint8_t u8MsgType, uint8_t u8MsgLength);
Issus 0:f9cf4a19bb84 284 bool ValidRxChecksum(uint8_t* pu8MsgBuffer, uint8_t u8MsgLength);
Issus 0:f9cf4a19bb84 285 void SerialFlush(void);
Issus 0:f9cf4a19bb84 286 bool SerialAvailable(void);
Issus 0:f9cf4a19bb84 287 uint8_t SerialRead(void);
Issus 0:f9cf4a19bb84 288
Issus 0:f9cf4a19bb84 289
Issus 0:f9cf4a19bb84 290 // Rx State Machine States
Issus 0:f9cf4a19bb84 291 void SerialRxCleanupRestart(void);
Issus 0:f9cf4a19bb84 292 void HostRxWaitForMsgStartByteState(void);
Issus 0:f9cf4a19bb84 293 void HostRxGetMsgLengthState(void);
Issus 0:f9cf4a19bb84 294 void HostRxGetMsgTypeState(void);
Issus 0:f9cf4a19bb84 295 void HostRxWaitToGetRestOfMsgState(void);
Issus 0:f9cf4a19bb84 296 void HostRxValidateMsgState(void);
Issus 0:f9cf4a19bb84 297 void HostRxGoodMsgState(void);
Issus 0:f9cf4a19bb84 298 };
Issus 0:f9cf4a19bb84 299
Issus 0:f9cf4a19bb84 300 #endif