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.
Dependencies: SX127x sx12xx_hal
lorawan.h@0:2ff18de8d48b, 2017-05-18 (annotated)
- Committer:
- dudmuck
- Date:
- Thu May 18 16:46:30 2017 -0700
- Revision:
- 0:2ff18de8d48b
- Child:
- 1:107435401168
initial commit
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| dudmuck | 0:2ff18de8d48b | 1 | #include "sx127x_lora.h" |
| dudmuck | 0:2ff18de8d48b | 2 | #include "tim.h" |
| dudmuck | 0:2ff18de8d48b | 3 | |
| dudmuck | 0:2ff18de8d48b | 4 | /*! |
| dudmuck | 0:2ff18de8d48b | 5 | * LoRaMac datarates definition |
| dudmuck | 0:2ff18de8d48b | 6 | */ |
| dudmuck | 0:2ff18de8d48b | 7 | //#define DR_0 0 // SF10 - BW125 | |
| dudmuck | 0:2ff18de8d48b | 8 | //#define DR_1 1 // SF9 - BW125 | |
| dudmuck | 0:2ff18de8d48b | 9 | //#define DR_2 2 // SF8 - BW125 +-> Up link |
| dudmuck | 0:2ff18de8d48b | 10 | //#define DR_3 3 // SF7 - BW125 | |
| dudmuck | 0:2ff18de8d48b | 11 | //#define DR_4 4 // SF8 - BW500 | |
| dudmuck | 0:2ff18de8d48b | 12 | //#define DR_5 5 // RFU |
| dudmuck | 0:2ff18de8d48b | 13 | //#define DR_6 6 // RFU |
| dudmuck | 0:2ff18de8d48b | 14 | //#define DR_7 7 // RFU |
| dudmuck | 0:2ff18de8d48b | 15 | #define DR_8 8 // SF12 - BW500 | |
| dudmuck | 0:2ff18de8d48b | 16 | #define DR_9 9 // SF11 - BW500 | |
| dudmuck | 0:2ff18de8d48b | 17 | #define DR_10 10 // SF10 - BW500 | |
| dudmuck | 0:2ff18de8d48b | 18 | #define DR_11 11 // SF9 - BW500 | |
| dudmuck | 0:2ff18de8d48b | 19 | #define DR_12 12 // SF8 - BW500 +-> Down link |
| dudmuck | 0:2ff18de8d48b | 20 | #define DR_13 13 // SF7 - BW500 | |
| dudmuck | 0:2ff18de8d48b | 21 | #define DR_14 14 // RFU | |
| dudmuck | 0:2ff18de8d48b | 22 | #define DR_15 15 // RFU | |
| dudmuck | 0:2ff18de8d48b | 23 | |
| dudmuck | 0:2ff18de8d48b | 24 | //#define LORAMAC_DEFAULT_DATARATE DR_8 // sf12 |
| dudmuck | 0:2ff18de8d48b | 25 | //#define LORAMAC_DEFAULT_DATARATE DR_9 // sf11 |
| dudmuck | 0:2ff18de8d48b | 26 | //#define LORAMAC_DEFAULT_DATARATE DR_10 // sf10 |
| dudmuck | 0:2ff18de8d48b | 27 | //#define LORAMAC_DEFAULT_DATARATE DR_11 // sf9 |
| dudmuck | 0:2ff18de8d48b | 28 | //#define LORAMAC_DEFAULT_DATARATE DR_12 // sf8 |
| dudmuck | 0:2ff18de8d48b | 29 | #define LORAMAC_DEFAULT_DATARATE DR_13 // sf7 |
| dudmuck | 0:2ff18de8d48b | 30 | |
| dudmuck | 0:2ff18de8d48b | 31 | #define DEVADDR_NONE 0xffffffff |
| dudmuck | 0:2ff18de8d48b | 32 | |
| dudmuck | 0:2ff18de8d48b | 33 | /*! |
| dudmuck | 0:2ff18de8d48b | 34 | * Sync word for Private LoRa networks |
| dudmuck | 0:2ff18de8d48b | 35 | */ |
| dudmuck | 0:2ff18de8d48b | 36 | #define LORA_MAC_PRIVATE_SYNCWORD 0x12 |
| dudmuck | 0:2ff18de8d48b | 37 | |
| dudmuck | 0:2ff18de8d48b | 38 | /*! |
| dudmuck | 0:2ff18de8d48b | 39 | * Sync word for Public LoRa networks |
| dudmuck | 0:2ff18de8d48b | 40 | */ |
| dudmuck | 0:2ff18de8d48b | 41 | #define LORA_MAC_PUBLIC_SYNCWORD 0x34 |
| dudmuck | 0:2ff18de8d48b | 42 | |
| dudmuck | 0:2ff18de8d48b | 43 | #define BEACON_PERIOD_ms (BEACON_INTERVAL_SECONDS * 1000) |
| dudmuck | 0:2ff18de8d48b | 44 | #define BEACON_GUARD_ms 1000 |
| dudmuck | 0:2ff18de8d48b | 45 | #define BEACON_SIZE 6 |
| dudmuck | 0:2ff18de8d48b | 46 | |
| dudmuck | 0:2ff18de8d48b | 47 | #define LORA_EUI_LENGTH 8 |
| dudmuck | 0:2ff18de8d48b | 48 | #define LORA_CYPHERKEYBYTES 16 |
| dudmuck | 0:2ff18de8d48b | 49 | |
| dudmuck | 0:2ff18de8d48b | 50 | extern SX127x radio; |
| dudmuck | 0:2ff18de8d48b | 51 | extern SX127x_lora lora; |
| dudmuck | 0:2ff18de8d48b | 52 | extern Timer timer; |
| dudmuck | 0:2ff18de8d48b | 53 | extern EventQueue queue; |
| dudmuck | 0:2ff18de8d48b | 54 | |
| dudmuck | 0:2ff18de8d48b | 55 | #define MAC_CMD_QUEUE_SIZE 6 |
| dudmuck | 0:2ff18de8d48b | 56 | #define MAC_CMD_SIZE 8 |
| dudmuck | 0:2ff18de8d48b | 57 | typedef struct { |
| dudmuck | 0:2ff18de8d48b | 58 | uint8_t dev_eui[LORA_EUI_LENGTH]; |
| dudmuck | 0:2ff18de8d48b | 59 | uint8_t app_eui[LORA_EUI_LENGTH]; |
| dudmuck | 0:2ff18de8d48b | 60 | uint8_t app_key[LORA_CYPHERKEYBYTES]; |
| dudmuck | 0:2ff18de8d48b | 61 | |
| dudmuck | 0:2ff18de8d48b | 62 | uint8_t app_session_key[LORA_CYPHERKEYBYTES]; |
| dudmuck | 0:2ff18de8d48b | 63 | uint8_t network_session_key[LORA_CYPHERKEYBYTES]; |
| dudmuck | 0:2ff18de8d48b | 64 | uint32_t dev_addr; |
| dudmuck | 0:2ff18de8d48b | 65 | |
| dudmuck | 0:2ff18de8d48b | 66 | uint16_t tx_slot_offset; |
| dudmuck | 0:2ff18de8d48b | 67 | |
| dudmuck | 0:2ff18de8d48b | 68 | uint8_t macCmd_queue[MAC_CMD_QUEUE_SIZE][MAC_CMD_SIZE]; |
| dudmuck | 0:2ff18de8d48b | 69 | uint8_t macCmd_queue_in_idx, macCmd_queue_out_idx; |
| dudmuck | 0:2ff18de8d48b | 70 | |
| dudmuck | 0:2ff18de8d48b | 71 | uint8_t user_downlink_length; |
| dudmuck | 0:2ff18de8d48b | 72 | uint16_t FCntDown; |
| dudmuck | 0:2ff18de8d48b | 73 | } ota_mote_t; |
| dudmuck | 0:2ff18de8d48b | 74 | #define N_MOTES 4 |
| dudmuck | 0:2ff18de8d48b | 75 | extern ota_mote_t motes[N_MOTES]; /* from Comissioning.h */ |
| dudmuck | 0:2ff18de8d48b | 76 | |
| dudmuck | 0:2ff18de8d48b | 77 | |
| dudmuck | 0:2ff18de8d48b | 78 | class LoRaWan { |
| dudmuck | 0:2ff18de8d48b | 79 | private: |
| dudmuck | 0:2ff18de8d48b | 80 | static void SendJoinComplete(uint16_t deviceNonce, uint8_t firstReceiveWindowDataRateoffset, ota_mote_t* mote); |
| dudmuck | 0:2ff18de8d48b | 81 | static void parse_mac_command(ota_mote_t* mote, uint8_t* rx_cmd_buf, uint8_t rx_cmd_buf_len); |
| dudmuck | 0:2ff18de8d48b | 82 | static void parse_uplink(ota_mote_t* mote); |
| dudmuck | 0:2ff18de8d48b | 83 | static void parse_join_req(ota_mote_t* mote); |
| dudmuck | 0:2ff18de8d48b | 84 | static void classA_downlink(ota_mote_t* mote); |
| dudmuck | 0:2ff18de8d48b | 85 | public: |
| dudmuck | 0:2ff18de8d48b | 86 | static int parse_receive(void); |
| dudmuck | 0:2ff18de8d48b | 87 | static void init(void); |
| dudmuck | 0:2ff18de8d48b | 88 | |
| dudmuck | 0:2ff18de8d48b | 89 | static volatile uint16_t rx_slot; |
| dudmuck | 0:2ff18de8d48b | 90 | static uint8_t user_downlink[]; |
| dudmuck | 0:2ff18de8d48b | 91 | static const uint8_t Datarates[]; |
| dudmuck | 0:2ff18de8d48b | 92 | static volatile uint32_t rx_ms; |
| dudmuck | 0:2ff18de8d48b | 93 | static bool do_downlink; |
| dudmuck | 0:2ff18de8d48b | 94 | }; |
| dudmuck | 0:2ff18de8d48b | 95 | |
| dudmuck | 0:2ff18de8d48b | 96 | |
| dudmuck | 0:2ff18de8d48b | 97 | // from main.cpp: |
| dudmuck | 0:2ff18de8d48b | 98 | void send_downlink(void); |