From ceb24f656e6af5e24e36008b5a2f8b386db857a8 Mon Sep 17 00:00:00 2001 From: Billy Kozak Date: Mon, 20 Jul 2015 10:28:24 -0600 Subject: [PATCH] Improved style of read_frame - moved variable declaration to top of function in accordance with the Contiki style guide - made function flatter, reduced nesting to improve readability --- cpu/cc26xx/dev/cc26xx-rf.c | 54 ++++++++++++++++++++++---------------- 1 file changed, 32 insertions(+), 22 deletions(-) diff --git a/cpu/cc26xx/dev/cc26xx-rf.c b/cpu/cc26xx/dev/cc26xx-rf.c index b26771a8a..efeee8450 100644 --- a/cpu/cc26xx/dev/cc26xx-rf.c +++ b/cpu/cc26xx/dev/cc26xx-rf.c @@ -1328,35 +1328,45 @@ send(const void *payload, unsigned short payload_len) return transmit(payload_len); } /*---------------------------------------------------------------------------*/ +static void +release_data_entry(void) +{ + /* Clear the length byte */ + rx_read_entry[8] = 0; + /* Set status to 0 "Pending" in element */ + GET_FIELD_V(rx_read_entry, dataEntry, status) = DATA_ENTRY_STATUS_PENDING; + rx_read_entry = GET_FIELD_V(rx_read_entry, dataEntry, pNextEntry); +} +/*---------------------------------------------------------------------------*/ static int read_frame(void *buf, unsigned short buf_len) { + int8_t rssi; int len = 0; + uint8_t status = GET_FIELD_V(rx_read_entry, dataEntry, status); - if(GET_FIELD_V(rx_read_entry, dataEntry, status) == DATA_ENTRY_STATUS_FINISHED) { - - if(rx_read_entry[8] > 0) { - memcpy(buf, (char *)&rx_read_entry[9], buf_len); - - /* Remove the footer */ - len = MIN(buf_len, rx_read_entry[8] - 4); - - int rssi = (int8_t)rx_read_entry[9 + len + 2]; - - packetbuf_set_attr(PACKETBUF_ATTR_RSSI, rssi); - RIMESTATS_ADD(llrx); - - /* Clear the length byte */ - rx_read_entry[8] = 0; - } - - /* Set status to 0 "Pending" in element */ - GET_FIELD_V(rx_read_entry, dataEntry, status) = DATA_ENTRY_STATUS_PENDING; - - /* Move read entry pointer to next entry */ - rx_read_entry = GET_FIELD_V(rx_read_entry, dataEntry, pNextEntry); + if(status != DATA_ENTRY_STATUS_FINISHED) { + /* No available data */ + return 0; } + if(!rx_read_entry[8]) { + release_data_entry(); + return 0; + } + + memcpy(buf, (char *)&rx_read_entry[9], buf_len); + + /* Remove the footer */ + len = MIN(buf_len, rx_read_entry[8] - 4); + + rssi = (int8_t)rx_read_entry[9 + len + 2]; + + packetbuf_set_attr(PACKETBUF_ATTR_RSSI, rssi); + RIMESTATS_ADD(llrx); + + release_data_entry(); + return len; } /*---------------------------------------------------------------------------*/