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

Committer:
Issus
Date:
Mon Jul 25 22:18:30 2016 +0000
Revision:
6:b0445108f82f
Parent:
5:ae864b96eb5f
Added new methods to get data from the module

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