fholin fholin / Mbed 2 deprecated MiniMousetest

Dependencies:   mbed

Committer:
fholin
Date:
Fri Dec 15 13:15:04 2017 +0000
Revision:
0:2325d1d28df3
Child:
1:eda561b01daf
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
fholin 0:2325d1d28df3 1 /*
fholin 0:2325d1d28df3 2
fholin 0:2325d1d28df3 3 __ __ _ _
fholin 0:2325d1d28df3 4 | \/ ( _) ( _)
fholin 0:2325d1d28df3 5 | \ / |_ _ __ _ _ __ ___ ___ _ _ ___ ___
fholin 0:2325d1d28df3 6 | |\/| | | '_ \| | '_ ` _ \ / _ \| | | / __|/ _ \
fholin 0:2325d1d28df3 7 | | | | | | | | | | | | | | ( _) | |_| \__ \ __/
fholin 0:2325d1d28df3 8 |_| |_|_|_| |_|_|_| |_| |_|\___/ \__,_|___/\___|
fholin 0:2325d1d28df3 9
fholin 0:2325d1d28df3 10
fholin 0:2325d1d28df3 11 Description : LoraWan Mac Layer objets.
fholin 0:2325d1d28df3 12
fholin 0:2325d1d28df3 13
fholin 0:2325d1d28df3 14 License : Revised BSD License, see LICENSE.TXT file include in the project
fholin 0:2325d1d28df3 15
fholin 0:2325d1d28df3 16 Maintainer : Fabien Holin ( SEMTECH)
fholin 0:2325d1d28df3 17 */
fholin 0:2325d1d28df3 18 #include "mbed.h"
fholin 0:2325d1d28df3 19 #include "Define.h"
fholin 0:2325d1d28df3 20 #include "PhyLayer.h"
fholin 0:2325d1d28df3 21 #include "sx1276-hal.h"
fholin 0:2325d1d28df3 22 #include "LoraMacDataStoreInFlash.h"
fholin 0:2325d1d28df3 23 #ifndef MAC_LAYER_H
fholin 0:2325d1d28df3 24 #define MAC_LAYER_H
fholin 0:2325d1d28df3 25
fholin 0:2325d1d28df3 26 #define LORA_MAC_SYNCWORD 0x34
fholin 0:2325d1d28df3 27 static uint8_t LoRaMacNwkSKey[] =
fholin 0:2325d1d28df3 28 { 0x94, 0x02, 0x9E, 0xAB, 0xE9, 0x0C, 0xE3, 0xCF, 0x51, 0xA2, 0x31, 0x7F, 0x03, 0x27, 0xEF, 0xA6 };
fholin 0:2325d1d28df3 29
fholin 0:2325d1d28df3 30 /*!
fholin 0:2325d1d28df3 31 * AES encryption/decryption cipher application session key
fholin 0:2325d1d28df3 32 */
fholin 0:2325d1d28df3 33 static uint8_t LoRaMacAppSKey[] =
fholin 0:2325d1d28df3 34 { 0xBB, 0xEB, 0xEB, 0x4D, 0x5C, 0xAF, 0x95, 0x5D, 0x33, 0xD1, 0xC0, 0xC4, 0x41, 0x55, 0xB5, 0xA1 };
fholin 0:2325d1d28df3 35
fholin 0:2325d1d28df3 36
fholin 0:2325d1d28df3 37 static uint8_t LoRaMacAppKey[] =
fholin 0:2325d1d28df3 38 { 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11, 0x11};
fholin 0:2325d1d28df3 39 static uint8_t AppEui[] =
fholin 0:2325d1d28df3 40 { 0x70, 0xB3, 0xD5, 0x7E, 0xF0, 0x00, 0x36, 0x12 };
fholin 0:2325d1d28df3 41
fholin 0:2325d1d28df3 42
fholin 0:2325d1d28df3 43 static uint8_t DevEui[] =
fholin 0:2325d1d28df3 44 { 0x33, 0x22, 0x22, 0x22, 0x22, 0x22, 0x22, 0x33 };
fholin 0:2325d1d28df3 45
fholin 0:2325d1d28df3 46 //@note find the right place of the keys
fholin 0:2325d1d28df3 47
fholin 0:2325d1d28df3 48
fholin 0:2325d1d28df3 49 class LoraWanContainer {
fholin 0:2325d1d28df3 50 public:
fholin 0:2325d1d28df3 51 LoraWanContainer( PinName interrupt );
fholin 0:2325d1d28df3 52 ~LoraWanContainer( );
fholin 0:2325d1d28df3 53 void BuildTxLoraFrame ( void );
fholin 0:2325d1d28df3 54 void BuildJoinLoraFrame ( void );
fholin 0:2325d1d28df3 55 void EncryptTxFrame ( void );
fholin 0:2325d1d28df3 56 void ConfigureRadioAndSend( void );
fholin 0:2325d1d28df3 57 void ConfigureRadioForRx1 ( void );
fholin 0:2325d1d28df3 58 void ConfigureRadioForRx2 ( void );
fholin 0:2325d1d28df3 59 void ConfigureTimerForRx ( int type );
fholin 0:2325d1d28df3 60 int DecodeRxFrame ( void );
fholin 0:2325d1d28df3 61 void UpdateMacLayer ( void );
fholin 0:2325d1d28df3 62 void ParseManagementPacket( void );
fholin 0:2325d1d28df3 63 void UpdateJoinProcedure ( void );
fholin 0:2325d1d28df3 64 uint8_t IsFrameToSend;
fholin 0:2325d1d28df3 65 /* LoraWan Context */
fholin 0:2325d1d28df3 66 /* Only 16 ch mask => ChMaskCntl not used */
fholin 0:2325d1d28df3 67 /* Duty cycle is not managed */
fholin 0:2325d1d28df3 68
fholin 0:2325d1d28df3 69 /*******************************************/
fholin 0:2325d1d28df3 70 /* Update by Link ADR command */
fholin 0:2325d1d28df3 71 /*******************************************/
fholin 0:2325d1d28df3 72 uint8_t MacTxSf;
fholin 0:2325d1d28df3 73 uint8_t MacTxPower;
fholin 0:2325d1d28df3 74 uint16_t MacChMask;
fholin 0:2325d1d28df3 75 uint8_t MacNbRepUnconfirmedTx;
fholin 0:2325d1d28df3 76 /********************************************/
fholin 0:2325d1d28df3 77 /* Update by TxParamaSetupRequest */
fholin 0:2325d1d28df3 78 /********************************************/
fholin 0:2325d1d28df3 79 uint32_t MacRx2Frequency ;
fholin 0:2325d1d28df3 80 uint8_t MacRx2Sf;
fholin 0:2325d1d28df3 81 uint8_t MacRx1SfOffset;
fholin 0:2325d1d28df3 82 /********************************************/
fholin 0:2325d1d28df3 83 /* Update by NewChannelReq command */
fholin 0:2325d1d28df3 84 /********************************************/
fholin 0:2325d1d28df3 85 uint32_t MacTxFrequency[16];
fholin 0:2325d1d28df3 86 uint32_t MacMinMaxSFChannel[16];
fholin 0:2325d1d28df3 87 uint8_t NbOfActiveChannel;
fholin 0:2325d1d28df3 88 /********************************************/
fholin 0:2325d1d28df3 89 /* Update by RXTimingSetupReq command */
fholin 0:2325d1d28df3 90 /********************************************/
fholin 0:2325d1d28df3 91 int MacRx1Delay;
fholin 0:2325d1d28df3 92 /********************************************/
fholin 0:2325d1d28df3 93 /* Other Data To store */
fholin 0:2325d1d28df3 94 /********************************************/
fholin 0:2325d1d28df3 95 uint16_t FcntUp;
fholin 0:2325d1d28df3 96 uint32_t FcntDwn; // Wrapping 16 to 32 bits is managed in AcceptFcntDwn Method
fholin 0:2325d1d28df3 97 uint32_t DevAddr;
fholin 0:2325d1d28df3 98 uint8_t nwkSKey[16];
fholin 0:2325d1d28df3 99 uint8_t appSKey[16];
fholin 0:2325d1d28df3 100
fholin 0:2325d1d28df3 101 /*******************************************/
fholin 0:2325d1d28df3 102 /* what about keys: AppEUI:Nwskey:AppSkey */
fholin 0:2325d1d28df3 103 /*******************************************/
fholin 0:2325d1d28df3 104
fholin 0:2325d1d28df3 105 /* LoRaWan Mac Data for uplink*/
fholin 0:2325d1d28df3 106 uint8_t fPort;
fholin 0:2325d1d28df3 107 uint8_t MType;
fholin 0:2325d1d28df3 108 uint8_t MajorBits;
fholin 0:2325d1d28df3 109 uint8_t Fctrl;
fholin 0:2325d1d28df3 110 uint8_t AckBitForTx;
fholin 0:2325d1d28df3 111 uint8_t UserPayloadSize;
fholin 0:2325d1d28df3 112 uint8_t MacPayloadSize;
fholin 0:2325d1d28df3 113
fholin 0:2325d1d28df3 114
fholin 0:2325d1d28df3 115
fholin 0:2325d1d28df3 116 /* LoRaWan Mac Data for downlink*/
fholin 0:2325d1d28df3 117 uint8_t fRxPort;
fholin 0:2325d1d28df3 118 uint8_t MtypeRx;
fholin 0:2325d1d28df3 119 uint8_t MajorRx;
fholin 0:2325d1d28df3 120 uint8_t FctrlRx;
fholin 0:2325d1d28df3 121 uint8_t FoptsLength;
fholin 0:2325d1d28df3 122 uint8_t Fopts[16];
fholin 0:2325d1d28df3 123 uint8_t FportRx;
fholin 0:2325d1d28df3 124 uint8_t MacRxPayloadSize; //@note Have to by replace by a fifo objet to manage class c
fholin 0:2325d1d28df3 125 uint8_t MacRxPayload[255]; //@note Have to by replace by a fifo objet to manage class c
fholin 0:2325d1d28df3 126 uint8_t AvailableRxPacketForUser ;
fholin 0:2325d1d28df3 127
fholin 0:2325d1d28df3 128 /* LoRaWan Mac Data for join */
fholin 0:2325d1d28df3 129 uint16_t DevNonce;
fholin 0:2325d1d28df3 130 uint8_t JoinedStatus;
fholin 0:2325d1d28df3 131
fholin 0:2325d1d28df3 132 /* LoRaWan Mac Data for nwk Ans */
fholin 0:2325d1d28df3 133 uint8_t MacNwkAns[255]; //@note reuse user payload data or at least reduce size or use opt byte
fholin 0:2325d1d28df3 134 uint8_t MacNwkAnsSize;
fholin 0:2325d1d28df3 135
fholin 0:2325d1d28df3 136 /* LoraWan Config */
fholin 0:2325d1d28df3 137 uint8_t AdrModeSelect;
fholin 0:2325d1d28df3 138
fholin 0:2325d1d28df3 139
fholin 0:2325d1d28df3 140 /* Objet RadioContainer*/
fholin 0:2325d1d28df3 141 RadioContainer Phy;
fholin 0:2325d1d28df3 142
fholin 0:2325d1d28df3 143 /* Timer */
fholin 0:2325d1d28df3 144 Timeout TimerLora ;
fholin 0:2325d1d28df3 145 void IsrTimerRx( void );
fholin 0:2325d1d28df3 146 int StateTimer;
fholin 0:2325d1d28df3 147
fholin 0:2325d1d28df3 148 /* Flash */
fholin 0:2325d1d28df3 149 void LoadFromFlash ( void );
fholin 0:2325d1d28df3 150
fholin 0:2325d1d28df3 151 private :
fholin 0:2325d1d28df3 152 void SetMacHeader ( void );
fholin 0:2325d1d28df3 153 void SetFrameHeader ( void );// no opts
fholin 0:2325d1d28df3 154 void GiveNextSf ( void );
fholin 0:2325d1d28df3 155 uint8_t GiveNextChannel ( void );
fholin 0:2325d1d28df3 156 int ExtractRxMhdr ( void );
fholin 0:2325d1d28df3 157 int CheckRxPayloadLength ( void );
fholin 0:2325d1d28df3 158 int ExtractRxFhdr ( uint16_t *FcntDwnTemp ) ;
fholin 0:2325d1d28df3 159 int AcceptFcntDwn ( uint16_t FcntDwnTmp ) ;
fholin 0:2325d1d28df3 160 void SetAlarm ( uint32_t alarmInMs );
fholin 0:2325d1d28df3 161 void LinkCheckParser ( void );
fholin 0:2325d1d28df3 162 void LinkADRParser ( void );
fholin 0:2325d1d28df3 163 void DutyCycleParser ( void );
fholin 0:2325d1d28df3 164 void RXParamSetupParser ( void );
fholin 0:2325d1d28df3 165 void DevStatusParser ( void );
fholin 0:2325d1d28df3 166 void NewChannelParser ( void );
fholin 0:2325d1d28df3 167 void RXTimingSetupParser ( void );
fholin 0:2325d1d28df3 168 uint8_t isValidRx1SfOffset ( uint8_t );
fholin 0:2325d1d28df3 169 uint8_t isValidMacRx2Sf ( uint8_t );
fholin 0:2325d1d28df3 170 uint8_t isValidMacRx2Frequency ( uint32_t );
fholin 0:2325d1d28df3 171 uint8_t isValidDataRate ( uint8_t );
fholin 0:2325d1d28df3 172 uint8_t isValidTxPower ( uint8_t );
fholin 0:2325d1d28df3 173 uint8_t isValidChannelMask ( uint16_t );
fholin 0:2325d1d28df3 174 uint8_t isValidNbRep ( uint8_t ) ;
fholin 0:2325d1d28df3 175 void SaveInFlash ( void );
fholin 0:2325d1d28df3 176 uint8_t crypto_verifyMICandDecrypt ( uint8_t *frame_header, const uint8_t *encrypted_payload ,uint32_t micIn, uint8_t keySet, uint8_t *decrypted_payload, uint8_t PayloadSize);
fholin 0:2325d1d28df3 177 sBackUpFlash BackUpFlash;
fholin 0:2325d1d28df3 178 };
fholin 0:2325d1d28df3 179
fholin 0:2325d1d28df3 180
fholin 0:2325d1d28df3 181 #endif