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

Committer:
Issus
Date:
Mon Jul 25 18:01:26 2016 +0000
Revision:
4:2ac0b9a7f43a
Parent:
1:8ecba4bfc183
Child:
5:ae864b96eb5f
Added method for setting RF data rate

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 4:2ac0b9a7f43a 79 #define LSR_MODULE_SET_RF_DATA_RATE_MSG_TYPE 0x19
Issus 0:f9cf4a19bb84 80 #define LSR_MODULE_SEND_SIMPLE_SHORT_RF_DATA_PACKET_MSG_TYPE 0x20
Issus 0:f9cf4a19bb84 81 #define LSR_MODULE_SEND_ADVANCED_SHORT_RF_DATA_PACKET_MSG_TYPE 0x22
Issus 0:f9cf4a19bb84 82 #define LSR_MODULE_SEND_SIMPLE_LONG_RF_DATA_PACKET_MSG_TYPE 0x24
Issus 0:f9cf4a19bb84 83 #define LSR_MODULE_SEND_ADVANCED_LONG_RF_DATA_PACKET_MSG_TYPE 0x26
Issus 0:f9cf4a19bb84 84 #define LSR_MODULE_SEND_SIMPLE_REPEATED_RF_DATA_PACKET_MSG_TYPE 0x2A
Issus 0:f9cf4a19bb84 85 #define LSR_MODULE_CHANNEL_ENERGY_SCAN_MSG_TYPE 0x44
Issus 0:f9cf4a19bb84 86
Issus 1:8ecba4bfc183 87
Issus 0:f9cf4a19bb84 88 /**
Issus 0:f9cf4a19bb84 89 * LSR Module Settings Definitions.
Issus 0:f9cf4a19bb84 90 *
Issus 0:f9cf4a19bb84 91 */
Issus 0:f9cf4a19bb84 92 #define LSR_MODULE_TX_POWER_LEVEL_MIN 0
Issus 0:f9cf4a19bb84 93 #define LSR_MODULE_SECURITY_OVERHEAD 14
Issus 0:f9cf4a19bb84 94 #define LSR_MODULE_MIN_SERIAL_RX_MSG_LENGTH 5
Issus 0:f9cf4a19bb84 95 #define LSR_MODULE_MAX_SERIAL_RX_MSG_LENGTH 131
Issus 0:f9cf4a19bb84 96
Issus 0:f9cf4a19bb84 97 #ifdef PROFLEX01
Issus 0:f9cf4a19bb84 98 #define LSR_MODULE_RF_CHANNEL_MIN 11
Issus 0:f9cf4a19bb84 99 #define LSR_MODULE_RF_CHANNEL_MAX 25
Issus 0:f9cf4a19bb84 100 #define LSR_MODULE_TX_POWER_LEVEL_MAX 19
Issus 0:f9cf4a19bb84 101 #define LSR_MODULE_SIMPLE_SHORT_RF_DATA_LENGTH 98
Issus 0:f9cf4a19bb84 102 #define LSR_MODULE_ADVANCED_SHORT_RF_DATA_LENGTH 98
Issus 0:f9cf4a19bb84 103 #define LSR_MODULE_SIMPLE_LONG_RF_DATA_LENGTH 98
Issus 0:f9cf4a19bb84 104 #define LSR_MODULE_ADVANCED_LONG_RF_DATA_LENGTH 98
Issus 0:f9cf4a19bb84 105 #define LSR_MODULE_MAX_SERIAL_TX_MSG_LENGTH 115
Issus 0:f9cf4a19bb84 106 #elif defined SIFLEX02
Issus 0:f9cf4a19bb84 107 #define LSR_MODULE_RF_CHANNEL_MIN 1
Issus 0:f9cf4a19bb84 108 #define LSR_MODULE_RF_CHANNEL_MAX 10
Issus 0:f9cf4a19bb84 109 #define LSR_MODULE_TX_POWER_LEVEL_MAX 21
Issus 0:f9cf4a19bb84 110 #define LSR_MODULE_SIMPLE_SHORT_RF_DATA_LENGTH 112
Issus 0:f9cf4a19bb84 111 #define LSR_MODULE_ADVANCED_SHORT_RF_DATA_LENGTH 110
Issus 0:f9cf4a19bb84 112 #define LSR_MODULE_SIMPLE_LONG_RF_DATA_LENGTH 100
Issus 0:f9cf4a19bb84 113 #define LSR_MODULE_ADVANCED_LONG_RF_DATA_LENGTH 98
Issus 0:f9cf4a19bb84 114 #define LSR_MODULE_MAX_SERIAL_TX_MSG_LENGTH 121
Issus 0:f9cf4a19bb84 115 #else
Issus 0:f9cf4a19bb84 116 #error "Incorrect module type"
Issus 0:f9cf4a19bb84 117 #endif
Issus 0:f9cf4a19bb84 118
Issus 0:f9cf4a19bb84 119 /**
Issus 0:f9cf4a19bb84 120 * Receiver ConfigurationBitmask Definitions.
Issus 0:f9cf4a19bb84 121 *
Issus 0:f9cf4a19bb84 122 */
Issus 0:f9cf4a19bb84 123 #define LSR_MODULE_RX_CONFIG_ALLOW_BROADCAST_ADDRESS_BITMASK 0x01
Issus 0:f9cf4a19bb84 124 #define LSR_MODULE_RX_CONFIG_ALLOW_BROADCAST_PAN_BITMASK 0x02
Issus 0:f9cf4a19bb84 125 #define LSR_MODULE_RX_CONFIG_PROMISCUOUS_MODE_BITMASK 0x04
Issus 0:f9cf4a19bb84 126 #define LSR_MODULE_RX_CONFIG_ALLOW_SECURED_PACKETS_MODE_BITMASK 0x08
Issus 0:f9cf4a19bb84 127 #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 128
Issus 0:f9cf4a19bb84 129 /**
Issus 0:f9cf4a19bb84 130 * Transmit Options Bitmask Definitions.
Issus 0:f9cf4a19bb84 131 *
Issus 0:f9cf4a19bb84 132 */
Issus 0:f9cf4a19bb84 133 #define LSR_MODULE_TX_OPTIONS_RETRIES_ACKS_BITMASK 0x01
Issus 0:f9cf4a19bb84 134 #define LSR_MODULE_TX_OPTIONS_USE_SECURITY_BITMASK 0x02
Issus 0:f9cf4a19bb84 135 #define LSR_MODULE_TX_OPTIONS_MAX (LSR_MODULE_TX_OPTIONS_RETRIES_ACKS_BITMASK + LSR_MODULE_TX_OPTIONS_USE_SECURITY_BITMASK)
Issus 0:f9cf4a19bb84 136
Issus 0:f9cf4a19bb84 137 /**
Issus 0:f9cf4a19bb84 138 * Host UART Data Rate Definitions.
Issus 0:f9cf4a19bb84 139 *
Issus 0:f9cf4a19bb84 140 */
Issus 0:f9cf4a19bb84 141 #define LSR_MODULE_HOST_DATA_RATE_1200 0
Issus 0:f9cf4a19bb84 142 #define LSR_MODULE_HOST_DATA_RATE_2400 1
Issus 0:f9cf4a19bb84 143 #define LSR_MODULE_HOST_DATA_RATE_4800 2
Issus 0:f9cf4a19bb84 144 #define LSR_MODULE_HOST_DATA_RATE_9600 3
Issus 0:f9cf4a19bb84 145 #define LSR_MODULE_HOST_DATA_RATE_19200 4
Issus 0:f9cf4a19bb84 146 #define LSR_MODULE_HOST_DATA_RATE_38400 5
Issus 0:f9cf4a19bb84 147 #define LSR_MODULE_HOST_DATA_RATE_57600 6
Issus 0:f9cf4a19bb84 148 #define LSR_MODULE_HOST_DATA_RATE_115200 7
Issus 1:8ecba4bfc183 149 #define LSR_MODULE_HOST_DATA_RATE_230400 8
Issus 1:8ecba4bfc183 150 #define LSR_MODULE_HOST_DATA_RATE_460800 9
Issus 1:8ecba4bfc183 151 #define LSR_MODULE_HOST_DATA_RATE_921600 10
Issus 1:8ecba4bfc183 152 #define LSR_MODULE_HOST_DATA_RATE_MAX LSR_MODULE_HOST_DATA_RATE_921600
Issus 0:f9cf4a19bb84 153 #define LSR_MODULE_10MS_UART_TIMEOUT 239
Issus 0:f9cf4a19bb84 154
Issus 0:f9cf4a19bb84 155 /**
Issus 4:2ac0b9a7f43a 156 * RF Data Rate Definitions.
Issus 4:2ac0b9a7f43a 157 *
Issus 4:2ac0b9a7f43a 158 */
Issus 4:2ac0b9a7f43a 159 #define LSR_MODULE_RF_DATA_RATE_BPSK_40KBPS 0
Issus 4:2ac0b9a7f43a 160 #define LSR_MODULE_RF_DATA_RATE_OQPSK_SIN_250KBPS 1
Issus 4:2ac0b9a7f43a 161 #define LSR_MODULE_RF_DATA_RATE_OQPSK_SIN_1MBPS 2
Issus 4:2ac0b9a7f43a 162 #define LSR_MODULE_RF_DATA_RATE_MAX LSP_MODULE_RF_DATA_RATE_OQPSK_SIN_1MBPS
Issus 4:2ac0b9a7f43a 163
Issus 4:2ac0b9a7f43a 164 /**
Issus 0:f9cf4a19bb84 165 * Channel Energy Scan Duration Definitions.
Issus 0:f9cf4a19bb84 166 *
Issus 0:f9cf4a19bb84 167 */
Issus 0:f9cf4a19bb84 168 #define LSR_MODULE_SCAN_DURATION_MAX 14
Issus 0:f9cf4a19bb84 169
Issus 0:f9cf4a19bb84 170 /**
Issus 0:f9cf4a19bb84 171 * Type Defintions.
Issus 0:f9cf4a19bb84 172 *
Issus 0:f9cf4a19bb84 173 */
Issus 0:f9cf4a19bb84 174 typedef unsigned int word_t;
Issus 0:f9cf4a19bb84 175
Issus 0:f9cf4a19bb84 176 /**
Issus 0:f9cf4a19bb84 177 * Word structure.
Issus 0:f9cf4a19bb84 178 *
Issus 0:f9cf4a19bb84 179 */
Issus 0:f9cf4a19bb84 180 typedef struct _words
Issus 0:f9cf4a19bb84 181 {
Issus 0:f9cf4a19bb84 182 uint8_t lb; ///< Low byte.
Issus 0:f9cf4a19bb84 183 uint8_t hb; ///< High byte.
Issus 0:f9cf4a19bb84 184 } Words_t;
Issus 0:f9cf4a19bb84 185
Issus 0:f9cf4a19bb84 186 /**
Issus 0:f9cf4a19bb84 187 * Word union.
Issus 0:f9cf4a19bb84 188 *
Issus 0:f9cf4a19bb84 189 */
Issus 0:f9cf4a19bb84 190 typedef union _wordu
Issus 0:f9cf4a19bb84 191 {
Issus 0:f9cf4a19bb84 192 word_t w; ///< Word.
Issus 0:f9cf4a19bb84 193 uint16_t u16; ///< Unsigned 16.
Issus 0:f9cf4a19bb84 194 Words_t ws; ///< Word structure.
Issus 0:f9cf4a19bb84 195 } Wordu_t;
Issus 0:f9cf4a19bb84 196
Issus 0:f9cf4a19bb84 197 /**
Issus 0:f9cf4a19bb84 198 * Word structure.
Issus 0:f9cf4a19bb84 199 *
Issus 0:f9cf4a19bb84 200 */
Issus 0:f9cf4a19bb84 201 typedef struct _dwords
Issus 0:f9cf4a19bb84 202 {
Issus 0:f9cf4a19bb84 203 uint8_t lb; ///< Low byte.
Issus 0:f9cf4a19bb84 204 uint8_t mlb; ///< Middle low byte.
Issus 0:f9cf4a19bb84 205 uint8_t mhb; ///< Middle high byte.
Issus 0:f9cf4a19bb84 206 uint8_t hb; ///< High byte.
Issus 0:f9cf4a19bb84 207 } DWords_t;
Issus 0:f9cf4a19bb84 208
Issus 0:f9cf4a19bb84 209 /**
Issus 0:f9cf4a19bb84 210 * Double word union.
Issus 0:f9cf4a19bb84 211 *
Issus 0:f9cf4a19bb84 212 */
Issus 0:f9cf4a19bb84 213 typedef union _dwordu
Issus 0:f9cf4a19bb84 214 {
Issus 0:f9cf4a19bb84 215 uint32_t u32; ///< Unsigned 32.
Issus 0:f9cf4a19bb84 216 DWords_t dws; ///< Double word structure.
Issus 0:f9cf4a19bb84 217 } DWordu_t;
Issus 0:f9cf4a19bb84 218
Issus 0:f9cf4a19bb84 219
Issus 0:f9cf4a19bb84 220 class LsrModule : Serial
Issus 0:f9cf4a19bb84 221 {
Issus 0:f9cf4a19bb84 222 public:
Issus 0:f9cf4a19bb84 223 uint8_t* pu8RxBuffer; ///< Pointer to private UART receive buffer.
Issus 0:f9cf4a19bb84 224 uint8_t u8RxMsgLength; ///< Length of private UART receive buffer.
Issus 0:f9cf4a19bb84 225 //Functions:
Issus 0:f9cf4a19bb84 226 LsrModule(PinName tx, PinName rx, int baudRate = 19200);
Issus 0:f9cf4a19bb84 227 ~LsrModule();
Issus 0:f9cf4a19bb84 228 bool SubscribeRxMsgCallback(uint8_t u8RxMsgType, void (*callback)(void));
Issus 0:f9cf4a19bb84 229 bool UnsubscribeRxMsgCallback(uint8_t u8RxMsgType);
Issus 0:f9cf4a19bb84 230 void RunHostRxStateMachine(void);
Issus 0:f9cf4a19bb84 231 // Tx Messages:
Issus 0:f9cf4a19bb84 232 // 0x01
Issus 0:f9cf4a19bb84 233 void QueryVersionMsg(void);
Issus 0:f9cf4a19bb84 234 // 0x0C
Issus 0:f9cf4a19bb84 235 void SetSecurityTransmitFrameCounterMsg(uint32_t* pu32FrameCounter);
Issus 0:f9cf4a19bb84 236 // 0x0D
Issus 0:f9cf4a19bb84 237 void QuerySecurityTransmitFrameCounterMsg(void);
Issus 0:f9cf4a19bb84 238 // 0x10
Issus 0:f9cf4a19bb84 239 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 240 // 0x11
Issus 0:f9cf4a19bb84 241 void QueryBasicRfSettingsMsg(void);
Issus 0:f9cf4a19bb84 242 // 0x12
Issus 0:f9cf4a19bb84 243 void SaveSettingsToNVMemoryMsg(void);
Issus 0:f9cf4a19bb84 244 // 0x13
Issus 0:f9cf4a19bb84 245 void ResetRequestMsg(void);
Issus 0:f9cf4a19bb84 246 // 0x14
Issus 0:f9cf4a19bb84 247 void QuerySupplyVoltageMsg(void);
Issus 0:f9cf4a19bb84 248 // 0x15
Issus 0:f9cf4a19bb84 249 void QueryStatisticsMsg(void);
Issus 0:f9cf4a19bb84 250 // 0x16
Issus 0:f9cf4a19bb84 251 void ClearStatisticsMsg(void);
Issus 0:f9cf4a19bb84 252 // 0x18
Issus 0:f9cf4a19bb84 253 void SetHostDataRateMsg(uint8_t u8HostDataRate);
Issus 4:2ac0b9a7f43a 254 // 0x18
Issus 4:2ac0b9a7f43a 255 void SetRfDataRateMsg(uint8_t u8RfDataRate);
Issus 0:f9cf4a19bb84 256 // 0x20
Issus 0:f9cf4a19bb84 257 void SendSimpleShortAddrRfDataPacketMsg(uint8_t* pu8Data, uint8_t u8DataLength, uint16_t u16DestAddress, uint8_t u8TxOptions, uint8_t u8PacketId);
Issus 0:f9cf4a19bb84 258 // 0x22
Issus 0:f9cf4a19bb84 259 void SendAdvancedShortAddrRfDataPacketMsg(uint8_t* pu8Data, uint8_t u8DataLength, uint16_t u16DestPanId, uint16_t u16DestAddress, uint8_t u8TxOptions, uint8_t u8PacketId);
Issus 0:f9cf4a19bb84 260 // 0x24
Issus 0:f9cf4a19bb84 261 void SendSimpleLongAddrRfDataPacketMsg(uint8_t* pu8Data, uint8_t u8DataLength, uint8_t* pu8DestAddress, uint8_t u8TxOptions, uint8_t u8PacketId);
Issus 0:f9cf4a19bb84 262 // 0x26
Issus 0:f9cf4a19bb84 263 void SendAdvancedLongAddrRfDataPacketMsg(uint8_t* pu8Data, uint8_t u8DataLength, uint16_t u16DestPanId, uint8_t* pu8DestAddress, uint8_t u8TxOptions, uint8_t u8PacketId);
Issus 0:f9cf4a19bb84 264 // 0x44
Issus 0:f9cf4a19bb84 265 void ChannelEnergyScanMsg(uint16_t u16ChannelMask, uint8_t u8ScanDuration);
Issus 0:f9cf4a19bb84 266
Issus 0:f9cf4a19bb84 267
Issus 0:f9cf4a19bb84 268 private:
Issus 0:f9cf4a19bb84 269 // Variables
Issus 0:f9cf4a19bb84 270 uint8_t u8RxReadByte;
Issus 0:f9cf4a19bb84 271 uint8_t u8ForLoopCounter;
Issus 0:f9cf4a19bb84 272 uint8_t u8UartRxBufferIndex;
Issus 0:f9cf4a19bb84 273 uint8_t u8UartTxBufferIndex;
Issus 0:f9cf4a19bb84 274 uint8_t u8TxMsgChecksum;///< Transmit message checksum.
Issus 0:f9cf4a19bb84 275 uint8_t au8UartRxBuffer[LSR_MODULE_MAX_SERIAL_RX_MSG_LENGTH];///< Receive buffer for UART communication from module.
Issus 0:f9cf4a19bb84 276 uint8_t au8UartTxBuffer[LSR_MODULE_MAX_SERIAL_TX_MSG_LENGTH];///< Transmit buffer for UART communication to module.
Issus 0:f9cf4a19bb84 277 bool bUartMethodFlag;
Issus 0:f9cf4a19bb84 278
Issus 0:f9cf4a19bb84 279
Issus 0:f9cf4a19bb84 280 // Function Pointers
Issus 0:f9cf4a19bb84 281 void (LsrModule::*ptrHostState)(void);///< Runs uart UART receive state machine.
Issus 0:f9cf4a19bb84 282 void (LsrModule::*ptrHostProcessCallbackState)(uint8_t*);///< Used to process received UART messages.
Issus 0:f9cf4a19bb84 283
Issus 0:f9cf4a19bb84 284
Issus 0:f9cf4a19bb84 285 // Functions
Issus 0:f9cf4a19bb84 286 void AddSerialMsgHeader(uint8_t u8MsgType, uint8_t u8MsgLength);
Issus 0:f9cf4a19bb84 287 void AddSerialByteToMsgBuffer(uint8_t u8Data);
Issus 0:f9cf4a19bb84 288 void AddSerialMsgTrailer(void);
Issus 0:f9cf4a19bb84 289 void WriteSerialMsg(void);
Issus 0:f9cf4a19bb84 290 void HostProcessCallbackMsgStart (uint8_t* pu8MsgBuffer, uint8_t u8Length);
Issus 0:f9cf4a19bb84 291 // Rx Message Callbacks
Issus 0:f9cf4a19bb84 292
Issus 0:f9cf4a19bb84 293
Issus 0:f9cf4a19bb84 294 // Rx functions
Issus 0:f9cf4a19bb84 295 bool ValidMsgLengthAndType(uint8_t u8MsgType, uint8_t u8MsgLength);
Issus 0:f9cf4a19bb84 296 bool ValidRxChecksum(uint8_t* pu8MsgBuffer, uint8_t u8MsgLength);
Issus 0:f9cf4a19bb84 297 void SerialFlush(void);
Issus 0:f9cf4a19bb84 298 bool SerialAvailable(void);
Issus 0:f9cf4a19bb84 299 uint8_t SerialRead(void);
Issus 0:f9cf4a19bb84 300
Issus 0:f9cf4a19bb84 301
Issus 0:f9cf4a19bb84 302 // Rx State Machine States
Issus 0:f9cf4a19bb84 303 void SerialRxCleanupRestart(void);
Issus 0:f9cf4a19bb84 304 void HostRxWaitForMsgStartByteState(void);
Issus 0:f9cf4a19bb84 305 void HostRxGetMsgLengthState(void);
Issus 0:f9cf4a19bb84 306 void HostRxGetMsgTypeState(void);
Issus 0:f9cf4a19bb84 307 void HostRxWaitToGetRestOfMsgState(void);
Issus 0:f9cf4a19bb84 308 void HostRxValidateMsgState(void);
Issus 0:f9cf4a19bb84 309 void HostRxGoodMsgState(void);
Issus 0:f9cf4a19bb84 310 };
Issus 0:f9cf4a19bb84 311
Issus 0:f9cf4a19bb84 312 #endif