Skip to content

Commit

Permalink
Merge pull request #8982 from aabadie/pr/pkg/semtech_loramac_mcps_fail
Browse files Browse the repository at this point in the history
pkg/semtech_loramac: handle non OK mcps confirm messages
  • Loading branch information
jia200x committed May 8, 2018
2 parents 736c757 + 7e2f5cf commit 157238b
Show file tree
Hide file tree
Showing 3 changed files with 31 additions and 4 deletions.
29 changes: 25 additions & 4 deletions pkg/semtech-loramac/contrib/semtech_loramac.c
Expand Up @@ -171,6 +171,11 @@ static void mcps_confirm(McpsConfirm_t *confirm)
break;
}
}
else {
msg_t msg;
msg.type = MSG_TYPE_LORAMAC_TX_CNF_FAILED;
msg_send(&msg, semtech_loramac_pid);
}
}

/* MCPS-Indication event function */
Expand Down Expand Up @@ -555,6 +560,14 @@ void *_semtech_loramac_event_loop(void *arg)
mac->state = SEMTECH_LORAMAC_STATE_IDLE;
break;
}
case MSG_TYPE_LORAMAC_TX_CNF_FAILED:
DEBUG("[semtech-loramac] loramac TX failed\n");
msg_t msg_ret;
msg_ret.type = MSG_TYPE_LORAMAC_TX_CNF_FAILED;
msg_send(&msg_ret, mac->caller_pid);
/* switch back to idle state now*/
mac->state = SEMTECH_LORAMAC_STATE_IDLE;
break;
case MSG_TYPE_LORAMAC_RX:
{
msg_t msg_ret;
Expand Down Expand Up @@ -678,10 +691,18 @@ uint8_t semtech_loramac_recv(semtech_loramac_t *mac)
/* Wait until the mac receive some information */
msg_t msg;
msg_receive(&msg);
uint8_t ret = SEMTECH_LORAMAC_TX_DONE;
if (msg.type == MSG_TYPE_LORAMAC_RX) {
ret = SEMTECH_LORAMAC_DATA_RECEIVED;
}
uint8_t ret;
switch (msg.type) {
case MSG_TYPE_LORAMAC_RX:
ret = SEMTECH_LORAMAC_DATA_RECEIVED;
break;
case MSG_TYPE_LORAMAC_TX_CNF_FAILED:
ret = SEMTECH_LORAMAC_TX_CNF_FAILED;
break;
default:
ret = SEMTECH_LORAMAC_TX_DONE;
break;
}

DEBUG("[semtech-loramac] MAC reply received: %d\n", ret);

Expand Down
2 changes: 2 additions & 0 deletions pkg/semtech-loramac/include/semtech_loramac.h
Expand Up @@ -45,6 +45,7 @@ extern "C" {
#define MSG_TYPE_LORAMAC_TX_DONE (0x3462) /**< MAC TX completes */
#define MSG_TYPE_LORAMAC_RX (0x3463) /**< Some data received */
#define MSG_TYPE_LORAMAC_LINK_CHECK (0x3464) /**< Link check info received */
#define MSG_TYPE_LORAMAC_TX_CNF_FAILED (0x3465) /**< MAC TX confirmed failed */
/** @} */

/**
Expand All @@ -61,6 +62,7 @@ enum {
SEMTECH_LORAMAC_NOT_JOINED, /**< MAC is not joined */
SEMTECH_LORAMAC_TX_SCHEDULED, /**< TX data scheduled */
SEMTECH_LORAMAC_TX_DONE, /**< Transmission completed */
SEMTECH_LORAMAC_TX_CNF_FAILED, /**< Confirmable transmission failed */
SEMTECH_LORAMAC_DATA_RECEIVED, /**< Data received */
SEMTECH_LORAMAC_BUSY /**< Internal MAC is busy */
};
Expand Down
4 changes: 4 additions & 0 deletions tests/pkg_semtech-loramac/main.c
Expand Up @@ -411,6 +411,10 @@ static int _cmd_loramac(int argc, char **argv)
(char *)loramac.rx_data.payload, loramac.rx_data.port);
break;

case SEMTECH_LORAMAC_TX_CNF_FAILED:
puts("Confirmable TX failed");
break;

case SEMTECH_LORAMAC_TX_DONE:
puts("TX complete, no data received");
break;
Expand Down

0 comments on commit 157238b

Please sign in to comment.