Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
MinimouseSrc/MacLayer.h@1:eda561b01daf, 2017-12-18 (annotated)
- Committer:
- fholin
- Date:
- Mon Dec 18 16:31:11 2017 +0000
- Revision:
- 1:eda561b01daf
- Parent:
- 0:2325d1d28df3
inline with github repository : ; https://github.com/LoRaWanMiniMouse/Mini-Mouse.git
Who changed what in which revision?
User | Revision | Line number | New 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 | |
fholin | 0:2325d1d28df3 | 28 | |
fholin | 0:2325d1d28df3 | 29 | |
fholin | 0:2325d1d28df3 | 30 | class LoraWanContainer { |
fholin | 0:2325d1d28df3 | 31 | public: |
fholin | 0:2325d1d28df3 | 32 | LoraWanContainer( PinName interrupt ); |
fholin | 0:2325d1d28df3 | 33 | ~LoraWanContainer( ); |
fholin | 0:2325d1d28df3 | 34 | void BuildTxLoraFrame ( void ); |
fholin | 0:2325d1d28df3 | 35 | void BuildJoinLoraFrame ( void ); |
fholin | 0:2325d1d28df3 | 36 | void EncryptTxFrame ( void ); |
fholin | 0:2325d1d28df3 | 37 | void ConfigureRadioAndSend( void ); |
fholin | 0:2325d1d28df3 | 38 | void ConfigureRadioForRx1 ( void ); |
fholin | 0:2325d1d28df3 | 39 | void ConfigureRadioForRx2 ( void ); |
fholin | 0:2325d1d28df3 | 40 | void ConfigureTimerForRx ( int type ); |
fholin | 0:2325d1d28df3 | 41 | void UpdateMacLayer ( void ); |
fholin | 0:2325d1d28df3 | 42 | void UpdateJoinProcedure ( void ); |
fholin | 0:2325d1d28df3 | 43 | uint8_t IsFrameToSend; |
fholin | 1:eda561b01daf | 44 | eRxPacketType DecodeRxFrame ( void ); |
fholin | 1:eda561b01daf | 45 | eStatusLoRaWan ParseManagementPacket ( void ); |
fholin | 0:2325d1d28df3 | 46 | /* LoraWan Context */ |
fholin | 0:2325d1d28df3 | 47 | /* Only 16 ch mask => ChMaskCntl not used */ |
fholin | 0:2325d1d28df3 | 48 | /* Duty cycle is not managed */ |
fholin | 0:2325d1d28df3 | 49 | |
fholin | 0:2325d1d28df3 | 50 | /*******************************************/ |
fholin | 0:2325d1d28df3 | 51 | /* Update by Link ADR command */ |
fholin | 0:2325d1d28df3 | 52 | /*******************************************/ |
fholin | 0:2325d1d28df3 | 53 | uint8_t MacTxSf; |
fholin | 0:2325d1d28df3 | 54 | uint8_t MacTxPower; |
fholin | 0:2325d1d28df3 | 55 | uint16_t MacChMask; |
fholin | 0:2325d1d28df3 | 56 | uint8_t MacNbRepUnconfirmedTx; |
fholin | 0:2325d1d28df3 | 57 | /********************************************/ |
fholin | 0:2325d1d28df3 | 58 | /* Update by TxParamaSetupRequest */ |
fholin | 0:2325d1d28df3 | 59 | /********************************************/ |
fholin | 0:2325d1d28df3 | 60 | uint32_t MacRx2Frequency ; |
fholin | 0:2325d1d28df3 | 61 | uint8_t MacRx2Sf; |
fholin | 0:2325d1d28df3 | 62 | uint8_t MacRx1SfOffset; |
fholin | 0:2325d1d28df3 | 63 | /********************************************/ |
fholin | 0:2325d1d28df3 | 64 | /* Update by NewChannelReq command */ |
fholin | 0:2325d1d28df3 | 65 | /********************************************/ |
fholin | 0:2325d1d28df3 | 66 | uint32_t MacTxFrequency[16]; |
fholin | 0:2325d1d28df3 | 67 | uint32_t MacMinMaxSFChannel[16]; |
fholin | 0:2325d1d28df3 | 68 | uint8_t NbOfActiveChannel; |
fholin | 0:2325d1d28df3 | 69 | /********************************************/ |
fholin | 0:2325d1d28df3 | 70 | /* Update by RXTimingSetupReq command */ |
fholin | 0:2325d1d28df3 | 71 | /********************************************/ |
fholin | 0:2325d1d28df3 | 72 | int MacRx1Delay; |
fholin | 0:2325d1d28df3 | 73 | /********************************************/ |
fholin | 0:2325d1d28df3 | 74 | /* Other Data To store */ |
fholin | 0:2325d1d28df3 | 75 | /********************************************/ |
fholin | 0:2325d1d28df3 | 76 | uint16_t FcntUp; |
fholin | 0:2325d1d28df3 | 77 | uint32_t FcntDwn; // Wrapping 16 to 32 bits is managed in AcceptFcntDwn Method |
fholin | 0:2325d1d28df3 | 78 | uint32_t DevAddr; |
fholin | 0:2325d1d28df3 | 79 | uint8_t nwkSKey[16]; |
fholin | 0:2325d1d28df3 | 80 | uint8_t appSKey[16]; |
fholin | 0:2325d1d28df3 | 81 | |
fholin | 0:2325d1d28df3 | 82 | /*******************************************/ |
fholin | 0:2325d1d28df3 | 83 | /* what about keys: AppEUI:Nwskey:AppSkey */ |
fholin | 0:2325d1d28df3 | 84 | /*******************************************/ |
fholin | 0:2325d1d28df3 | 85 | |
fholin | 0:2325d1d28df3 | 86 | /* LoRaWan Mac Data for uplink*/ |
fholin | 0:2325d1d28df3 | 87 | uint8_t fPort; |
fholin | 0:2325d1d28df3 | 88 | uint8_t MType; |
fholin | 0:2325d1d28df3 | 89 | uint8_t MajorBits; |
fholin | 0:2325d1d28df3 | 90 | uint8_t Fctrl; |
fholin | 0:2325d1d28df3 | 91 | uint8_t AckBitForTx; |
fholin | 0:2325d1d28df3 | 92 | uint8_t UserPayloadSize; |
fholin | 0:2325d1d28df3 | 93 | uint8_t MacPayloadSize; |
fholin | 0:2325d1d28df3 | 94 | |
fholin | 0:2325d1d28df3 | 95 | |
fholin | 0:2325d1d28df3 | 96 | |
fholin | 0:2325d1d28df3 | 97 | /* LoRaWan Mac Data for downlink*/ |
fholin | 0:2325d1d28df3 | 98 | uint8_t fRxPort; |
fholin | 0:2325d1d28df3 | 99 | uint8_t MtypeRx; |
fholin | 0:2325d1d28df3 | 100 | uint8_t MajorRx; |
fholin | 0:2325d1d28df3 | 101 | uint8_t FctrlRx; |
fholin | 0:2325d1d28df3 | 102 | uint8_t FoptsLength; |
fholin | 0:2325d1d28df3 | 103 | uint8_t Fopts[16]; |
fholin | 0:2325d1d28df3 | 104 | uint8_t FportRx; |
fholin | 0:2325d1d28df3 | 105 | uint8_t MacRxPayloadSize; //@note Have to by replace by a fifo objet to manage class c |
fholin | 0:2325d1d28df3 | 106 | uint8_t MacRxPayload[255]; //@note Have to by replace by a fifo objet to manage class c |
fholin | 0:2325d1d28df3 | 107 | uint8_t AvailableRxPacketForUser ; |
fholin | 0:2325d1d28df3 | 108 | |
fholin | 0:2325d1d28df3 | 109 | /* LoRaWan Mac Data for join */ |
fholin | 0:2325d1d28df3 | 110 | uint16_t DevNonce; |
fholin | 0:2325d1d28df3 | 111 | uint8_t JoinedStatus; |
fholin | 0:2325d1d28df3 | 112 | |
fholin | 0:2325d1d28df3 | 113 | /* LoRaWan Mac Data for nwk Ans */ |
fholin | 1:eda561b01daf | 114 | uint8_t MacNwkPayload[255]; //@note resize this buffer |
fholin | 1:eda561b01daf | 115 | uint8_t MacNwkPayloadSize; |
fholin | 1:eda561b01daf | 116 | |
fholin | 0:2325d1d28df3 | 117 | uint8_t MacNwkAns[255]; //@note reuse user payload data or at least reduce size or use opt byte |
fholin | 0:2325d1d28df3 | 118 | uint8_t MacNwkAnsSize; |
fholin | 0:2325d1d28df3 | 119 | |
fholin | 0:2325d1d28df3 | 120 | /* LoraWan Config */ |
fholin | 0:2325d1d28df3 | 121 | uint8_t AdrModeSelect; |
fholin | 0:2325d1d28df3 | 122 | |
fholin | 0:2325d1d28df3 | 123 | |
fholin | 0:2325d1d28df3 | 124 | /* Objet RadioContainer*/ |
fholin | 0:2325d1d28df3 | 125 | RadioContainer Phy; |
fholin | 0:2325d1d28df3 | 126 | |
fholin | 0:2325d1d28df3 | 127 | /* Timer */ |
fholin | 0:2325d1d28df3 | 128 | Timeout TimerLora ; |
fholin | 0:2325d1d28df3 | 129 | void IsrTimerRx( void ); |
fholin | 0:2325d1d28df3 | 130 | int StateTimer; |
fholin | 0:2325d1d28df3 | 131 | |
fholin | 0:2325d1d28df3 | 132 | /* Flash */ |
fholin | 0:2325d1d28df3 | 133 | void LoadFromFlash ( void ); |
fholin | 0:2325d1d28df3 | 134 | |
fholin | 0:2325d1d28df3 | 135 | private : |
fholin | 0:2325d1d28df3 | 136 | void SetMacHeader ( void ); |
fholin | 0:2325d1d28df3 | 137 | void SetFrameHeader ( void );// no opts |
fholin | 0:2325d1d28df3 | 138 | void GiveNextSf ( void ); |
fholin | 0:2325d1d28df3 | 139 | uint8_t GiveNextChannel ( void ); |
fholin | 0:2325d1d28df3 | 140 | int ExtractRxMhdr ( void ); |
fholin | 0:2325d1d28df3 | 141 | int CheckRxPayloadLength ( void ); |
fholin | 0:2325d1d28df3 | 142 | int ExtractRxFhdr ( uint16_t *FcntDwnTemp ) ; |
fholin | 0:2325d1d28df3 | 143 | int AcceptFcntDwn ( uint16_t FcntDwnTmp ) ; |
fholin | 0:2325d1d28df3 | 144 | void SetAlarm ( uint32_t alarmInMs ); |
fholin | 0:2325d1d28df3 | 145 | void LinkCheckParser ( void ); |
fholin | 0:2325d1d28df3 | 146 | void LinkADRParser ( void ); |
fholin | 0:2325d1d28df3 | 147 | void DutyCycleParser ( void ); |
fholin | 0:2325d1d28df3 | 148 | void RXParamSetupParser ( void ); |
fholin | 0:2325d1d28df3 | 149 | void DevStatusParser ( void ); |
fholin | 0:2325d1d28df3 | 150 | void NewChannelParser ( void ); |
fholin | 0:2325d1d28df3 | 151 | void RXTimingSetupParser ( void ); |
fholin | 0:2325d1d28df3 | 152 | uint8_t isValidRx1SfOffset ( uint8_t ); |
fholin | 0:2325d1d28df3 | 153 | uint8_t isValidMacRx2Sf ( uint8_t ); |
fholin | 0:2325d1d28df3 | 154 | uint8_t isValidMacRx2Frequency ( uint32_t ); |
fholin | 0:2325d1d28df3 | 155 | uint8_t isValidDataRate ( uint8_t ); |
fholin | 0:2325d1d28df3 | 156 | uint8_t isValidTxPower ( uint8_t ); |
fholin | 0:2325d1d28df3 | 157 | uint8_t isValidChannelMask ( uint16_t ); |
fholin | 0:2325d1d28df3 | 158 | uint8_t isValidNbRep ( uint8_t ) ; |
fholin | 0:2325d1d28df3 | 159 | void SaveInFlash ( void ); |
fholin | 0:2325d1d28df3 | 160 | 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 | 161 | sBackUpFlash BackUpFlash; |
fholin | 0:2325d1d28df3 | 162 | }; |
fholin | 0:2325d1d28df3 | 163 | |
fholin | 0:2325d1d28df3 | 164 | |
fholin | 0:2325d1d28df3 | 165 | #endif |