mirror of https://github.com/ARMmbed/mbed-os.git
LoRaWAN: Handling re-joining when already Joined
This is a remedy for the issue #7230. While the device is joining, LORAWAN_STATUS_CONNECT_IN_PROGRESS is returned. However, if the device is already joined, we will return LORAWAN_STATUS_ALREADY_CONNECTED.pull/7445/head
parent
69d8c0bac3
commit
51f92b0efd
|
|
@ -155,6 +155,10 @@ lorawan_status_t LoRaWANStack::connect()
|
|||
return LORAWAN_STATUS_NOT_INITIALIZED;
|
||||
}
|
||||
|
||||
if (_loramac.nwk_joined()) {
|
||||
return LORAWAN_STATUS_ALREADY_CONNECTED;
|
||||
}
|
||||
|
||||
lorawan_status_t status = _loramac.prepare_join(NULL, MBED_CONF_LORA_OVER_THE_AIR_ACTIVATION);
|
||||
|
||||
if (LORAWAN_STATUS_OK != status) {
|
||||
|
|
@ -170,6 +174,10 @@ lorawan_status_t LoRaWANStack::connect(const lorawan_connect_t &connect)
|
|||
return LORAWAN_STATUS_NOT_INITIALIZED;
|
||||
}
|
||||
|
||||
if (_loramac.nwk_joined()) {
|
||||
return LORAWAN_STATUS_ALREADY_CONNECTED;
|
||||
}
|
||||
|
||||
if (!(connect.connect_type == LORAWAN_CONNECTION_OTAA)
|
||||
&& !(connect.connect_type == LORAWAN_CONNECTION_ABP)) {
|
||||
return LORAWAN_STATUS_PARAMETER_INVALID;
|
||||
|
|
@ -1170,7 +1178,7 @@ void LoRaWANStack::process_connecting_state(lorawan_status_t &op_status)
|
|||
|
||||
if (_ctrl_flags & CONNECTED_FLAG) {
|
||||
tr_debug("Already connected");
|
||||
op_status = LORAWAN_STATUS_OK;
|
||||
op_status = LORAWAN_STATUS_ALREADY_CONNECTED;
|
||||
return;
|
||||
}
|
||||
|
||||
|
|
|
|||
|
|
@ -814,9 +814,11 @@ lorawan_status_t LoRaMac::send_join_request()
|
|||
status = prepare_frame(&mac_hdr, &fctrl, 0, NULL, 0);
|
||||
|
||||
if (status == LORAWAN_STATUS_OK) {
|
||||
status = schedule_tx();
|
||||
if (schedule_tx() == LORAWAN_STATUS_OK) {
|
||||
status = LORAWAN_STATUS_CONNECT_IN_PROGRESS;
|
||||
}
|
||||
} else {
|
||||
tr_error("Retransmission: error %d", status);
|
||||
tr_error("Couldn't send a JoinRequest: error %d", status);
|
||||
}
|
||||
|
||||
return status;
|
||||
|
|
|
|||
|
|
@ -98,10 +98,11 @@ typedef enum lorawan_status {
|
|||
#if defined(LORAWAN_COMPLIANCE_TEST)
|
||||
LORAWAN_STATUS_COMPLIANCE_TEST_ON = -1019, /**< Compliance test - is on-going */
|
||||
#endif
|
||||
LORAWAN_STATUS_DUTYCYCLE_RESTRICTED = -1020,
|
||||
LORAWAN_STATUS_NO_CHANNEL_FOUND = -1021,
|
||||
LORAWAN_STATUS_NO_FREE_CHANNEL_FOUND = -1022,
|
||||
LORAWAN_STATUS_METADATA_NOT_AVAILABLE = -1023
|
||||
LORAWAN_STATUS_DUTYCYCLE_RESTRICTED = -1020, /**< Transmission will continue after duty cycle backoff*/
|
||||
LORAWAN_STATUS_NO_CHANNEL_FOUND = -1021, /**< None of the channels is enabled at the moment*/
|
||||
LORAWAN_STATUS_NO_FREE_CHANNEL_FOUND = -1022, /**< None of the enabled channels is ready for another TX (duty cycle limited)*/
|
||||
LORAWAN_STATUS_METADATA_NOT_AVAILABLE = -1023, /**< Meta-data after an RX or TX is stale*/
|
||||
LORAWAN_STATUS_ALREADY_CONNECTED = -1024 /**< The device has already joined a network*/
|
||||
} lorawan_status_t;
|
||||
|
||||
/** The lorawan_connect_otaa structure.
|
||||
|
|
|
|||
Loading…
Reference in New Issue