wayne roberts / Mbed OS LoRaWAN_singlechannel_gateway

Dependencies:   SX127x sx12xx_hal

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?

UserRevisionLine numberNew 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);