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
name | connector pin | CPU pin |
Vdd | CN7-5 | |
Gnd | CN7-8 | |
UART | CN7-2 | PC11 |
Connection to DISCO_L072CZ_LRWAN1
Jumper for auto-uplink: PA11->PA12 = CN3-14->CN3-15
name | connector pin | CPU pin |
Vdd | CN3-5 | |
Gnd | CN3-6 | |
UART | CN3-21 | PA10 |
LoRaMacString.cpp@3:2f57b7856222, 2018-08-14 (annotated)
- 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?
User | Revision | Line number | New 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 | } |