EEPROM for SX1272

Dependencies:   X_NUCLEO_IKS01A1 driver_mbed_TH02 LoRaWAN-lib-v1_0_1 SX1272Lib mbed

Fork of Canada-SX1272-LoRaWAN-Bootcamp by Uttam Bhat

Committer:
terence304
Date:
Wed Feb 14 01:16:06 2018 +0000
Revision:
9:4c8f32a4044d
Parent:
8:bca4f3d51eaa
Update to support NUCLEO_L073RZ

Who changed what in which revision?

UserRevisionLine numberNew contents of line
ubhat 0:6cc76d70e2a1 1 /*
ubhat 0:6cc76d70e2a1 2 / _____) _ | |
ubhat 0:6cc76d70e2a1 3 ( (____ _____ ____ _| |_ _____ ____| |__
ubhat 0:6cc76d70e2a1 4 \____ \| ___ | (_ _) ___ |/ ___) _ \
ubhat 0:6cc76d70e2a1 5 _____) ) ____| | | || |_| ____( (___| | | |
ubhat 0:6cc76d70e2a1 6 (______/|_____)_|_|_| \__)_____)\____)_| |_|
ubhat 0:6cc76d70e2a1 7 (C)2015 Semtech
ubhat 0:6cc76d70e2a1 8
ubhat 0:6cc76d70e2a1 9 Description: LoRaMac classA device implementation
ubhat 0:6cc76d70e2a1 10
ubhat 0:6cc76d70e2a1 11 License: Revised BSD License, see LICENSE.TXT file include in the project
ubhat 0:6cc76d70e2a1 12
ubhat 0:6cc76d70e2a1 13 Maintainer: Miguel Luis and Gregory Cristian
ubhat 0:6cc76d70e2a1 14 */
ubhat 0:6cc76d70e2a1 15 #include "mbed.h"
ubhat 0:6cc76d70e2a1 16 #include "board.h"
ubhat 0:6cc76d70e2a1 17 #include "radio.h"
ubhat 0:6cc76d70e2a1 18
ubhat 0:6cc76d70e2a1 19 #include "LoRaMac.h"
ubhat 0:6cc76d70e2a1 20 #include "Comissioning.h"
ubhat 0:6cc76d70e2a1 21 #include "SerialDisplay.h"
ubhat 0:6cc76d70e2a1 22 #include "ComplianceTest.h"
ubhat 0:6cc76d70e2a1 23 #include "LoRaDeviceStateProc.h"
ubhat 0:6cc76d70e2a1 24 #include "LoRaEventProc.h"
ubhat 0:6cc76d70e2a1 25 #include "LoRaApp.h"
terence304 8:bca4f3d51eaa 26 #include "eeprom.h"
ubhat 0:6cc76d70e2a1 27
ubhat 0:6cc76d70e2a1 28 /*!
ubhat 0:6cc76d70e2a1 29 * Defines a random delay for application data transmission duty cycle. 1s,
ubhat 0:6cc76d70e2a1 30 * value in [us].
ubhat 0:6cc76d70e2a1 31 */
ubhat 0:6cc76d70e2a1 32
ubhat 0:6cc76d70e2a1 33
ubhat 0:6cc76d70e2a1 34 #if( OVER_THE_AIR_ACTIVATION != 0 )
ubhat 0:6cc76d70e2a1 35
ubhat 0:6cc76d70e2a1 36 uint8_t DevEui[] = LORAWAN_DEVICE_EUI;
ubhat 0:6cc76d70e2a1 37 uint8_t AppEui[] = LORAWAN_APPLICATION_EUI;
ubhat 0:6cc76d70e2a1 38 uint8_t AppKey[] = LORAWAN_APPLICATION_KEY;
ubhat 0:6cc76d70e2a1 39
ubhat 0:6cc76d70e2a1 40 #else
ubhat 0:6cc76d70e2a1 41
ubhat 0:6cc76d70e2a1 42 uint8_t NwkSKey[] = LORAWAN_NWKSKEY;
ubhat 0:6cc76d70e2a1 43 uint8_t AppSKey[] = LORAWAN_APPSKEY;
ubhat 0:6cc76d70e2a1 44
ubhat 0:6cc76d70e2a1 45 /*!
ubhat 0:6cc76d70e2a1 46 * Device address
ubhat 0:6cc76d70e2a1 47 */
ubhat 0:6cc76d70e2a1 48 uint32_t DevAddr = LORAWAN_DEVICE_ADDRESS;
ubhat 0:6cc76d70e2a1 49
ubhat 0:6cc76d70e2a1 50 #endif
ubhat 0:6cc76d70e2a1 51
ubhat 0:6cc76d70e2a1 52 /*!
ubhat 0:6cc76d70e2a1 53 * Application port
ubhat 0:6cc76d70e2a1 54 */
ubhat 0:6cc76d70e2a1 55 uint8_t AppPort = LORAWAN_APP_PORT;
ubhat 0:6cc76d70e2a1 56
ubhat 0:6cc76d70e2a1 57 /*!
ubhat 0:6cc76d70e2a1 58 * User application data size
ubhat 0:6cc76d70e2a1 59 */
ubhat 0:6cc76d70e2a1 60 uint8_t AppDataSize = LORAWAN_APP_DATA_SIZE;
ubhat 0:6cc76d70e2a1 61
ubhat 0:6cc76d70e2a1 62 /*!
ubhat 0:6cc76d70e2a1 63 * User application data
ubhat 0:6cc76d70e2a1 64 */
ubhat 0:6cc76d70e2a1 65 uint8_t AppData[LORAWAN_APP_DATA_MAX_SIZE];
ubhat 0:6cc76d70e2a1 66
ubhat 0:6cc76d70e2a1 67 /*!
ubhat 0:6cc76d70e2a1 68 * Application to handle functions
ubhat 0:6cc76d70e2a1 69 */
ubhat 0:6cc76d70e2a1 70 Application LoRaApp( AppData );
ubhat 0:6cc76d70e2a1 71
ubhat 0:6cc76d70e2a1 72 /*!
ubhat 0:6cc76d70e2a1 73 * Indicates if the node is sending confirmed or unconfirmed messages
ubhat 0:6cc76d70e2a1 74 */
ubhat 0:6cc76d70e2a1 75 uint8_t IsTxConfirmed = LORAWAN_CONFIRMED_MSG_ON;
ubhat 0:6cc76d70e2a1 76
ubhat 0:6cc76d70e2a1 77 /*!
ubhat 0:6cc76d70e2a1 78 * Timer to handle the application data transmission duty cycle
ubhat 0:6cc76d70e2a1 79 */
ubhat 0:6cc76d70e2a1 80 TimerEvent_t TxNextPacketTimer;
ubhat 0:6cc76d70e2a1 81
ubhat 0:6cc76d70e2a1 82 /*!
ubhat 0:6cc76d70e2a1 83 * Indicates if a new transmit interrupt can be set
ubhat 0:6cc76d70e2a1 84 */
ubhat 0:6cc76d70e2a1 85 bool IsTxIntUpdate = false;
ubhat 0:6cc76d70e2a1 86
ubhat 0:6cc76d70e2a1 87 /*!
ubhat 0:6cc76d70e2a1 88 * Indicates if a new packet can be sent
ubhat 0:6cc76d70e2a1 89 */
ubhat 0:6cc76d70e2a1 90 bool NextTx = true;
ubhat 0:6cc76d70e2a1 91
ubhat 0:6cc76d70e2a1 92 /*!
ubhat 0:6cc76d70e2a1 93 * LoRaWAN compliance tests support data
ubhat 0:6cc76d70e2a1 94 */
ubhat 0:6cc76d70e2a1 95 ComplianceTest_s ComplianceTest;
ubhat 0:6cc76d70e2a1 96
ubhat 0:6cc76d70e2a1 97 /*!
ubhat 0:6cc76d70e2a1 98 * Indicates if the MAC layer network join status has changed.
ubhat 0:6cc76d70e2a1 99 */
ubhat 0:6cc76d70e2a1 100 bool IsNetworkJoinedStatusUpdate = false;
ubhat 0:6cc76d70e2a1 101
ubhat 0:6cc76d70e2a1 102 /*!
ubhat 0:6cc76d70e2a1 103 * Indicates if the message sent.
ubhat 0:6cc76d70e2a1 104 */
ubhat 0:6cc76d70e2a1 105 bool IsTxUpdate = false;
ubhat 0:6cc76d70e2a1 106
ubhat 0:6cc76d70e2a1 107 /*!
ubhat 0:6cc76d70e2a1 108 * Indicates if the message received in the RX window.
ubhat 0:6cc76d70e2a1 109 */
ubhat 0:6cc76d70e2a1 110 bool IsRxUpdate = false;
ubhat 0:6cc76d70e2a1 111
ubhat 0:6cc76d70e2a1 112
ubhat 0:6cc76d70e2a1 113 /**
ubhat 0:6cc76d70e2a1 114 * Main application entry point.
ubhat 0:6cc76d70e2a1 115 */
ubhat 0:6cc76d70e2a1 116 int main( void )
ubhat 0:6cc76d70e2a1 117 {
ubhat 0:6cc76d70e2a1 118
ubhat 0:6cc76d70e2a1 119 // Initialize board peripherals
ubhat 0:6cc76d70e2a1 120 BoardInit( );
ubhat 0:6cc76d70e2a1 121
ubhat 0:6cc76d70e2a1 122 // Initialize Device state
ubhat 0:6cc76d70e2a1 123 DeviceState = DEVICE_STATE_INIT;
ubhat 0:6cc76d70e2a1 124
terence304 8:bca4f3d51eaa 125 // EEPROM
terence304 8:bca4f3d51eaa 126 uint8_t buffer[8] = {'S', 'E', 'M', 'T', 'E', 'C', 'H', 0};
terence304 8:bca4f3d51eaa 127 uint8_t buffer2[8];
terence304 8:bca4f3d51eaa 128
terence304 8:bca4f3d51eaa 129 EepromMcuWriteBuffer(0, buffer, 8);
terence304 8:bca4f3d51eaa 130 EepromMcuReadBuffer(0, buffer2, 8);
terence304 8:bca4f3d51eaa 131
terence304 8:bca4f3d51eaa 132 for (int i = 0; i < 8; ++i) {
terence304 8:bca4f3d51eaa 133 printf("data: %c\r\n", buffer2[i]);
terence304 8:bca4f3d51eaa 134 }
terence304 8:bca4f3d51eaa 135
ubhat 0:6cc76d70e2a1 136 while( 1 )
ubhat 0:6cc76d70e2a1 137 {
ubhat 0:6cc76d70e2a1 138 if( IsNetworkJoinedStatusUpdate == true )
ubhat 0:6cc76d70e2a1 139 {
ubhat 0:6cc76d70e2a1 140 IsNetworkJoinedStatusUpdate = false;
ubhat 0:6cc76d70e2a1 141
ubhat 0:6cc76d70e2a1 142 DeviceJoinUpdate( );
ubhat 0:6cc76d70e2a1 143 }
ubhat 0:6cc76d70e2a1 144
ubhat 0:6cc76d70e2a1 145 if( IsTxUpdate == true )
ubhat 0:6cc76d70e2a1 146 {
ubhat 0:6cc76d70e2a1 147 // If downlink received then update Serial Terminal and execute Rx event
ubhat 0:6cc76d70e2a1 148 IsTxUpdate = false;
ubhat 0:6cc76d70e2a1 149
ubhat 0:6cc76d70e2a1 150 // Update serial terminal
ubhat 0:6cc76d70e2a1 151 SerialDisplayTxUpdate( );
ubhat 0:6cc76d70e2a1 152 }
ubhat 0:6cc76d70e2a1 153
ubhat 0:6cc76d70e2a1 154 if( IsTxIntUpdate == true )
ubhat 0:6cc76d70e2a1 155 {
ubhat 0:6cc76d70e2a1 156 IsTxIntUpdate = false;
ubhat 0:6cc76d70e2a1 157
ubhat 0:6cc76d70e2a1 158 // Initialize next Tx Interrupt
ubhat 0:6cc76d70e2a1 159 InitNextTxInterrupt( AppPort );
ubhat 0:6cc76d70e2a1 160 }
ubhat 0:6cc76d70e2a1 161
ubhat 0:6cc76d70e2a1 162 if( IsRxUpdate == true )
ubhat 0:6cc76d70e2a1 163 {
ubhat 0:6cc76d70e2a1 164 // If downlink received then update Serial Terminal and execute Rx event
ubhat 0:6cc76d70e2a1 165 IsRxUpdate = false;
ubhat 0:6cc76d70e2a1 166 RxEvent( );
ubhat 0:6cc76d70e2a1 167 SerialDisplayRxUpdate( );
ubhat 0:6cc76d70e2a1 168 }
ubhat 0:6cc76d70e2a1 169
ubhat 0:6cc76d70e2a1 170 switch( DeviceState )
ubhat 0:6cc76d70e2a1 171 {
ubhat 0:6cc76d70e2a1 172 case DEVICE_STATE_INIT:
ubhat 0:6cc76d70e2a1 173 {
ubhat 0:6cc76d70e2a1 174 // Initialize MAC, MAC services, Primitives
ubhat 0:6cc76d70e2a1 175 DeviceInit( );
ubhat 0:6cc76d70e2a1 176
ubhat 0:6cc76d70e2a1 177 // Change Device state
ubhat 0:6cc76d70e2a1 178 DeviceState = DEVICE_STATE_JOIN;
ubhat 0:6cc76d70e2a1 179 break;
ubhat 0:6cc76d70e2a1 180 }
ubhat 0:6cc76d70e2a1 181 case DEVICE_STATE_JOIN:
ubhat 0:6cc76d70e2a1 182 {
ubhat 0:6cc76d70e2a1 183 #if( OVER_THE_AIR_ACTIVATION != 0 ) // OTA
ubhat 0:6cc76d70e2a1 184
ubhat 0:6cc76d70e2a1 185 // Generate DevEUI if not defined by User
ubhat 0:6cc76d70e2a1 186 BoardGetDevEUI( DevEui );
ubhat 1:428dbf097fe6 187
ubhat 1:428dbf097fe6 188 Led = 1;
ubhat 0:6cc76d70e2a1 189
ubhat 0:6cc76d70e2a1 190 // Join N/w server
ubhat 0:6cc76d70e2a1 191 DeviceJoin( );
ubhat 0:6cc76d70e2a1 192
ubhat 0:6cc76d70e2a1 193 // Show on serial terminal
ubhat 0:6cc76d70e2a1 194 SerialDisplayJoinUpdate( );
ubhat 0:6cc76d70e2a1 195
ubhat 0:6cc76d70e2a1 196 // Execute Join event
ubhat 0:6cc76d70e2a1 197 JoinEvent( );
ubhat 0:6cc76d70e2a1 198
ubhat 0:6cc76d70e2a1 199 DeviceState = DEVICE_STATE_SLEEP;
ubhat 0:6cc76d70e2a1 200
ubhat 0:6cc76d70e2a1 201 #else // ABP
ubhat 0:6cc76d70e2a1 202 DeviceJoin( );
ubhat 0:6cc76d70e2a1 203
ubhat 0:6cc76d70e2a1 204 DeviceState = DEVICE_STATE_SEND;
ubhat 0:6cc76d70e2a1 205 #endif
ubhat 0:6cc76d70e2a1 206 IsNetworkJoinedStatusUpdate = true;
ubhat 0:6cc76d70e2a1 207 break;
ubhat 0:6cc76d70e2a1 208 }
ubhat 0:6cc76d70e2a1 209 case DEVICE_STATE_SEND:
ubhat 1:428dbf097fe6 210 {
ubhat 1:428dbf097fe6 211 Led = 0;
ubhat 1:428dbf097fe6 212
ubhat 0:6cc76d70e2a1 213 if( NextTx == true )
ubhat 0:6cc76d70e2a1 214 {
ubhat 0:6cc76d70e2a1 215 // Prepare payload frame based on application port
ubhat 0:6cc76d70e2a1 216 PrepareTxFrame( AppPort );
ubhat 0:6cc76d70e2a1 217
ubhat 0:6cc76d70e2a1 218 // Send payload over the air
ubhat 0:6cc76d70e2a1 219 NextTx = SendFrame( );
ubhat 0:6cc76d70e2a1 220
ubhat 0:6cc76d70e2a1 221 // Execute transmit event
ubhat 0:6cc76d70e2a1 222 TxEvent( );
ubhat 0:6cc76d70e2a1 223 }
ubhat 0:6cc76d70e2a1 224
ubhat 0:6cc76d70e2a1 225 if( NextTx == false )
ubhat 0:6cc76d70e2a1 226 {
ubhat 0:6cc76d70e2a1 227 IsTxUpdate = true;
ubhat 0:6cc76d70e2a1 228 }
ubhat 0:6cc76d70e2a1 229
ubhat 0:6cc76d70e2a1 230 DeviceState = DEVICE_STATE_SLEEP;
ubhat 0:6cc76d70e2a1 231 break;
ubhat 0:6cc76d70e2a1 232 }
ubhat 0:6cc76d70e2a1 233 case DEVICE_STATE_SLEEP:
ubhat 0:6cc76d70e2a1 234 {
ubhat 0:6cc76d70e2a1 235 // Wake up through events
ubhat 0:6cc76d70e2a1 236 break;
ubhat 0:6cc76d70e2a1 237 }
ubhat 0:6cc76d70e2a1 238 default:
ubhat 0:6cc76d70e2a1 239 {
ubhat 0:6cc76d70e2a1 240 DeviceState = DEVICE_STATE_INIT;
ubhat 0:6cc76d70e2a1 241 break;
ubhat 0:6cc76d70e2a1 242 }
ubhat 0:6cc76d70e2a1 243 }
ubhat 0:6cc76d70e2a1 244 }
ubhat 0:6cc76d70e2a1 245 }