send GPS uplinks in Cayenne LPP format

Dependencies:   lib_gps lorawan1v1

radio chip selection

Radio chip driver is not included, because two options are available.
If you're using SX1272 or SX1276, then import sx127x driver into your program.
if you're using SX1261 or SX1262, then import sx126x driver into your program.
If you're using NAmote72 or Murata discovery, then you must import only sx127x driver.

See LoRaWAN library page for provisioning onto network: Commissioning.h

Connection To GPS Receiver

This demonstration depends on GPS receiver sending NMEA into one of the UART on your target CPU.
Such as GP-20U7.
Sends uplink in cayenne LPP format.

Connection to NUCLEO form factor

Jumper for auto-uplink: PC6->PC8 = CN10-2->CN10-4

nameconnector pinCPU pin
VddCN7-5
GndCN7-8
UARTCN7-2PC11

Connection to DISCO_L072CZ_LRWAN1

Jumper for auto-uplink: PA11->PA12 = CN3-14->CN3-15

nameconnector pinCPU pin
VddCN3-5
GndCN3-6
UARTCN3-21PA10
Committer:
Wayne Roberts
Date:
Tue Aug 14 09:34:49 2018 -0700
Revision:
3:2f57b7856222
Parent:
0:d467d869e49c
update libraries to latest

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Wayne Roberts 0:d467d869e49c 1 #include "LoRaMac1v1.h"
Wayne Roberts 0:d467d869e49c 2 #include "LoRaMacString.h"
Wayne Roberts 0:d467d869e49c 3
Wayne Roberts 0:d467d869e49c 4 void
Wayne Roberts 0:d467d869e49c 5 Mlme_to_string(Mlme_t mlme, char* dst)
Wayne Roberts 0:d467d869e49c 6 {
Wayne Roberts 0:d467d869e49c 7 const char* ptr = NULL;
Wayne Roberts 0:d467d869e49c 8
Wayne Roberts 0:d467d869e49c 9 switch (mlme) {
Wayne Roberts 0:d467d869e49c 10 case MLME_NONE: ptr = "NONE"; break;
Wayne Roberts 0:d467d869e49c 11 case MLME_LINK_CHECK: ptr = "LINK_CHECK"; break;
Wayne Roberts 0:d467d869e49c 12 case MLME_SWITCH_CLASS: ptr = "SWITCH_CLASS"; break;
Wayne Roberts 0:d467d869e49c 13 case MLME_PING_SLOT_INFO: ptr = "PING_SLOT_INFO"; break;
Wayne Roberts 0:d467d869e49c 14 case MLME_BEACON_TIMING: ptr = "BEACON_TIMING"; break;
Wayne Roberts 0:d467d869e49c 15 case MLME_BEACON_ACQUISITION: ptr = "BEACON_ACQUISITION"; break;
Wayne Roberts 0:d467d869e49c 16 case MLME_TIME_REQ: ptr = "TIME_REQ"; break;
Wayne Roberts 0:d467d869e49c 17 case MLME_BEACON: ptr = "BEACON"; break;
Wayne Roberts 0:d467d869e49c 18 case MLME_TXCW: ptr = "TXCW"; break;
Wayne Roberts 0:d467d869e49c 19 #ifdef LORAWAN_JOIN_EUI
Wayne Roberts 0:d467d869e49c 20 case MLME_JOIN: ptr = "JOIN"; break;
Wayne Roberts 0:d467d869e49c 21 case MLME_REJOIN_0: ptr = "REJOIN_0"; break;
Wayne Roberts 0:d467d869e49c 22 case MLME_REJOIN_1: ptr = "REJOIN_1"; break;
Wayne Roberts 0:d467d869e49c 23 case MLME_REJOIN_2: ptr = "REJOIN_2"; break;
Wayne Roberts 0:d467d869e49c 24 #endif
Wayne Roberts 0:d467d869e49c 25 }
Wayne Roberts 0:d467d869e49c 26
Wayne Roberts 0:d467d869e49c 27 if (ptr != NULL)
Wayne Roberts 0:d467d869e49c 28 strcpy(dst, ptr);
Wayne Roberts 0:d467d869e49c 29 }
Wayne Roberts 0:d467d869e49c 30
Wayne Roberts 0:d467d869e49c 31 void
Wayne Roberts 0:d467d869e49c 32 LoRaMacEventInfoStatus_to_string(LoRaMacEventInfoStatus_t status, char* dst)
Wayne Roberts 0:d467d869e49c 33 {
Wayne Roberts 0:d467d869e49c 34 const char* ptr = NULL;
Wayne Roberts 0:d467d869e49c 35
Wayne Roberts 0:d467d869e49c 36 switch (status) {
Wayne Roberts 0:d467d869e49c 37
Wayne Roberts 0:d467d869e49c 38 case LORAMAC_EVENT_INFO_STATUS_OK: ptr = "OK"; break;
Wayne Roberts 0:d467d869e49c 39 case LORAMAC_EVENT_INFO_STATUS_INCR_FAIL: ptr = "INCR_FAIL"; break;
Wayne Roberts 0:d467d869e49c 40 case LORAMAC_EVENT_INFO_STATUS_MLMEREQ: ptr = "MLMEREQ"; break;
Wayne Roberts 0:d467d869e49c 41 case LORAMAC_EVENT_INFO_STATUS_UNKNOWN_MTYPE: ptr = "UNKNOWN_MTYPE"; break;
Wayne Roberts 0:d467d869e49c 42 case LORAMAC_EVENT_INFO_STATUS_SENDING: ptr = "SENDING"; break;
Wayne Roberts 0:d467d869e49c 43 case LORAMAC_EVENT_INFO_STATUS_MCPSREQ: ptr = "MCPSREQ"; break;
Wayne Roberts 0:d467d869e49c 44 case LORAMAC_EVENT_INFO_STATUS_TX_TIMEOUT: ptr = "TX_TIMEOUT"; break;
Wayne Roberts 0:d467d869e49c 45 case LORAMAC_EVENT_INFO_STATUS_RX2_TIMEOUT: ptr = "RX2_TIMEOUT"; break;
Wayne Roberts 0:d467d869e49c 46 case LORAMAC_EVENT_INFO_STATUS_RX2_ERROR: ptr = "RX2_ERROR"; break;
Wayne Roberts 0:d467d869e49c 47 #ifdef LORAWAN_JOIN_EUI
Wayne Roberts 0:d467d869e49c 48 case LORAMAC_EVENT_INFO_STATUS_JOIN_FAIL: ptr = "JOIN_FAIL"; break;
Wayne Roberts 0:d467d869e49c 49 case LORAMAC_EVENT_INFO_STATUS_JOINNONCE: ptr = "JOINNONCE"; break;
Wayne Roberts 0:d467d869e49c 50 #endif
Wayne Roberts 0:d467d869e49c 51 case LORAMAC_EVENT_INFO_STATUS_DOWNLINK_REPEATED: ptr = "DOWNLINK_REPEATED"; break;
Wayne Roberts 0:d467d869e49c 52 case LORAMAC_EVENT_INFO_STATUS_TX_DR_PAYLOAD_SIZE_ERROR: ptr = "TX_DR_PAYLOAD_SIZE_ERROR"; break;
Wayne Roberts 0:d467d869e49c 53 case LORAMAC_EVENT_INFO_STATUS_DOWNLINK_TOO_MANY_FRAMES_LOSS: ptr = "DOWNLINK_TOO_MANY_FRAMES_LOSS"; break;
Wayne Roberts 0:d467d869e49c 54 case LORAMAC_EVENT_INFO_STATUS_ADDRESS_FAIL: ptr = "ADDRESS_FAIL"; break;
Wayne Roberts 0:d467d869e49c 55 case LORAMAC_EVENT_INFO_STATUS_MIC_FAIL: ptr = "MIC_FAIL"; break;
Wayne Roberts 0:d467d869e49c 56 case LORAMAC_EVENT_INFO_STATUS_MULTICAST_FAIL: ptr = "MULTICAST_FAIL"; break;
Wayne Roberts 0:d467d869e49c 57 case LORAMAC_EVENT_INFO_STATUS_BEACON_LOCKED: ptr = "BEACON_LOCKED"; break;
Wayne Roberts 0:d467d869e49c 58 case LORAMAC_EVENT_INFO_STATUS_BEACON_LOST: ptr = "BEACON_LOST"; break;
Wayne Roberts 0:d467d869e49c 59 case LORAMAC_EVENT_INFO_STATUS_BEACON_NOT_FOUND: ptr = "BEACON_NOT_FOUND"; break;
Wayne Roberts 0:d467d869e49c 60 case LORAMAC_EVENT_INFO_STATUS_NO_APPKEY: ptr = "NO_APPKEY"; break;
Wayne Roberts 0:d467d869e49c 61 case LORAMAC_EVENT_INFO_BAD_RX_DELAY: ptr = "BAD_RX_DELAY"; break;
Wayne Roberts 0:d467d869e49c 62 case LORAMAC_EVENT_INFO_STATUS_CHANNEL_BUSY: ptr = "CHANNEL_BUSY"; break;
Wayne Roberts 0:d467d869e49c 63 }
Wayne Roberts 0:d467d869e49c 64
Wayne Roberts 0:d467d869e49c 65 if (ptr != NULL)
Wayne Roberts 0:d467d869e49c 66 strcpy(dst, ptr);
Wayne Roberts 0:d467d869e49c 67 }
Wayne Roberts 0:d467d869e49c 68
Wayne Roberts 0:d467d869e49c 69 void
Wayne Roberts 0:d467d869e49c 70 LoRaMacStatus_to_string(LoRaMacStatus_t status, char* dst)
Wayne Roberts 0:d467d869e49c 71 {
Wayne Roberts 0:d467d869e49c 72 const char* ptr = NULL;
Wayne Roberts 0:d467d869e49c 73
Wayne Roberts 0:d467d869e49c 74 switch (status) {
Wayne Roberts 0:d467d869e49c 75 case LORAMAC_STATUS_OK: ptr = "OK"; break;
Wayne Roberts 0:d467d869e49c 76 case LORAMAC_STATUS_LSE: ptr = "LSE"; break;
Wayne Roberts 0:d467d869e49c 77 case LORAMAC_STATUS_WAITING_FOR_TXSTART: ptr = "WAIT_TXSTART"; break;
Wayne Roberts 0:d467d869e49c 78 case LORAMAC_STATUS_WAITING_FOR_TXDONE: ptr = "WAIT_TXDONE"; break;
Wayne Roberts 0:d467d869e49c 79 case LORAMAC_STATUS_WAITING_FOR_RX1: ptr = "WAIT_RX1"; break;
Wayne Roberts 0:d467d869e49c 80 case LORAMAC_STATUS_WAITING_FOR_RX2: ptr = "WAIT_RX2"; break;
Wayne Roberts 0:d467d869e49c 81 case LORAMAC_STATUS_BUSY_UPCONF: ptr = "BUSY_UPCONF"; break;
Wayne Roberts 0:d467d869e49c 82 case LORAMAC_STATUS_SERVICE_UNKNOWN: ptr = "SERVICE_UNKNOWN"; break;
Wayne Roberts 0:d467d869e49c 83 case LORAMAC_STATUS_PARAMETER_INVALID: ptr = "PARAMETER_INVALID"; break;
Wayne Roberts 0:d467d869e49c 84 case LORAMAC_STATUS_FREQUENCY_INVALID: ptr = "FREQUENCY_INVALID"; break;
Wayne Roberts 0:d467d869e49c 85 case LORAMAC_STATUS_DATARATE_INVALID: ptr = "DATARATE_INVALID"; break;
Wayne Roberts 0:d467d869e49c 86 case LORAMAC_STATUS_FREQ_AND_DR_INVALID: ptr = "FREQ_AND_DR_INVALID"; break;
Wayne Roberts 0:d467d869e49c 87 #ifdef LORAWAN_JOIN_EUI
Wayne Roberts 0:d467d869e49c 88 case LORAMAC_STATUS_NO_NETWORK_JOINED: ptr = "NO_NETWORK_JOINED"; break;
Wayne Roberts 0:d467d869e49c 89 #endif
Wayne Roberts 0:d467d869e49c 90 case LORAMAC_STATUS_LENGTH_ERROR: ptr = "LENGTH_ERROR"; break;
Wayne Roberts 0:d467d869e49c 91 case LORAMAC_STATUS_MAC_CMD_LENGTH_ERROR: ptr = "MAC_CMD_LENGTH_ERROR"; break;
Wayne Roberts 0:d467d869e49c 92 case LORAMAC_STATUS_DEVICE_OFF: ptr = "DEVICE_OFF"; break;
Wayne Roberts 0:d467d869e49c 93 case LORAMAC_STATUS_EEPROM_FAIL: ptr = "EEPROM_FAIL"; break;
Wayne Roberts 0:d467d869e49c 94 }
Wayne Roberts 0:d467d869e49c 95 if (ptr != NULL)
Wayne Roberts 0:d467d869e49c 96 strcpy(dst, ptr);
Wayne Roberts 0:d467d869e49c 97 }