Fix the logic that detects whether a command is a Radio OP

This commit is contained in:
George Oikonomou 2015-11-01 20:48:28 +00:00
parent 946b72a58d
commit 1ee40ef021
2 changed files with 11 additions and 4 deletions

View file

@ -129,11 +129,19 @@ rf_core_send_cmd(uint32_t cmd, uint32_t *status)
bool interrupts_disabled; bool interrupts_disabled;
bool is_radio_op = false; bool is_radio_op = false;
/* If cmd is 4-byte aligned, then it's a radio OP. Clear the status field */ /*
* If cmd is 4-byte aligned, then it's either a radio OP or an immediate
* command. Clear the status field if it's a radio OP
*/
if((cmd & 0x03) == 0) { if((cmd & 0x03) == 0) {
uint32_t cmd_type;
cmd_type = ((rfc_command_t *)cmd)->commandNo & RF_CORE_COMMAND_TYPE_MASK;
if(cmd_type == RF_CORE_COMMAND_TYPE_IEEE_FG_RADIO_OP ||
cmd_type == RF_CORE_COMMAND_TYPE_RADIO_OP) {
is_radio_op = true; is_radio_op = true;
((rfc_radioOp_t *)cmd)->status = RF_CORE_RADIO_OP_STATUS_IDLE; ((rfc_radioOp_t *)cmd)->status = RF_CORE_RADIO_OP_STATUS_IDLE;
} }
}
/* /*
* Make sure ContikiMAC doesn't turn us off from within an interrupt while * Make sure ContikiMAC doesn't turn us off from within an interrupt while

View file

@ -218,7 +218,6 @@ typedef struct rf_core_primary_mode_s {
/*---------------------------------------------------------------------------*/ /*---------------------------------------------------------------------------*/
/* Command Types */ /* Command Types */
#define RF_CORE_COMMAND_TYPE_MASK 0x0C00 #define RF_CORE_COMMAND_TYPE_MASK 0x0C00
#define RF_CORE_COMMAND_TYPE_IMMEDIATE 0x0000
#define RF_CORE_COMMAND_TYPE_RADIO_OP 0x0800 #define RF_CORE_COMMAND_TYPE_RADIO_OP 0x0800
#define RF_CORE_COMMAND_TYPE_IEEE_BG_RADIO_OP 0x0800 #define RF_CORE_COMMAND_TYPE_IEEE_BG_RADIO_OP 0x0800
#define RF_CORE_COMMAND_TYPE_IEEE_FG_RADIO_OP 0x0C00 #define RF_CORE_COMMAND_TYPE_IEEE_FG_RADIO_OP 0x0C00