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

Committer:
Issus
Date:
Mon Jul 25 16:18:48 2016 +0000
Revision:
0:f9cf4a19bb84
Child:
1:8ecba4bfc183
Initial Commit

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