diff --git a/drivers/cc2420/cc2420_rx.c b/drivers/cc2420/cc2420_rx.c index b3e8fc2973..d8172956bd 100644 --- a/drivers/cc2420/cc2420_rx.c +++ b/drivers/cc2420/cc2420_rx.c @@ -29,8 +29,8 @@ void cc2420_rx_handler(void) cc2420_read_fifo(&cc2420_rx_buffer[rx_buffer_next].length, 1); /* read packet without rssi, crc and lqi */ - uint8_t buf[cc2420_rx_buffer[rx_buffer_next].length-2]; - cc2420_read_fifo(buf, cc2420_rx_buffer[rx_buffer_next].length-2); + uint8_t buf[cc2420_rx_buffer[rx_buffer_next].length - 2]; + cc2420_read_fifo(buf, cc2420_rx_buffer[rx_buffer_next].length - 2); /* read rssi, lqi and crc */ cc2420_read_fifo(rssi_crc_lqi, 2); @@ -40,17 +40,20 @@ void cc2420_rx_handler(void) cc2420_rx_buffer[rx_buffer_next].lqi = (uint8_t)(rssi_crc_lqi[1] & 0x7F); cc2420_rx_buffer[rx_buffer_next].crc = (uint8_t)((rssi_crc_lqi[1] & 0x80) >> 7); - if(cc2420_rx_buffer[rx_buffer_next].crc == 0) { + if (cc2420_rx_buffer[rx_buffer_next].crc == 0) { DEBUG("Got packet with invalid crc.\n"); return; } + ieee802154_frame_read(buf, &cc2420_rx_buffer[rx_buffer_next].frame, cc2420_rx_buffer[rx_buffer_next].length); - if(cc2420_rx_buffer[rx_buffer_next].frame.fcf.frame_type != 2) { + + if (cc2420_rx_buffer[rx_buffer_next].frame.fcf.frame_type != 2) { #ifdef DEBUG ieee802154_frame_print_fcf_frame(&cc2420_rx_buffer[rx_buffer_next].frame); #endif + /* notify transceiver thread if any */ if (transceiver_pid) { msg_t m; @@ -59,11 +62,13 @@ void cc2420_rx_handler(void) msg_send_int(&m, transceiver_pid); } } + #ifdef DEBUG else { DEBUG("GOT ACK for SEQ %u\n", cc2420_rx_buffer[rx_buffer_next].frame.seq_nr); ieee802154_frame_print_fcf_frame(&cc2420_rx_buffer[rx_buffer_next].frame); } + #endif /* shift to next buffer element */ diff --git a/drivers/cc2420/cc2420_tx.c b/drivers/cc2420/cc2420_tx.c index c3e42982b5..ce1c088d3c 100644 --- a/drivers/cc2420/cc2420_tx.c +++ b/drivers/cc2420/cc2420_tx.c @@ -29,14 +29,15 @@ int16_t cc2420_send(cc2420_packet_t *packet) /* Set missing frame information */ packet->frame.fcf.frame_ver = 0; - if(packet->frame.src_pan_id == packet->frame.dest_pan_id) { + + if (packet->frame.src_pan_id == packet->frame.dest_pan_id) { packet->frame.fcf.panid_comp = 1; } else { packet->frame.fcf.panid_comp = 0; } - if(packet->frame.fcf.src_addr_m == 2) { + if (packet->frame.fcf.src_addr_m == 2) { packet->frame.src_addr[0] = (uint8_t)(cc2420_get_address() >> 8); packet->frame.src_addr[1] = (uint8_t)(cc2420_get_address() & 0xFF); } @@ -50,6 +51,7 @@ int16_t cc2420_send(cc2420_packet_t *packet) packet->frame.src_addr[6] = (uint8_t)(cc2420_get_address_long() >> 8); packet->frame.src_addr[7] = (uint8_t)(cc2420_get_address_long() & 0xFF); } + packet->frame.src_pan_id = cc2420_get_pan(); packet->frame.seq_nr = sequenz_nr; @@ -59,11 +61,12 @@ int16_t cc2420_send(cc2420_packet_t *packet) packet->length = ieee802154_frame_get_hdr_len(&packet->frame) + packet->frame.payload_len + 2; - if(packet->length > CC2420_MAX_PKT_LENGTH) { + if (packet->length > CC2420_MAX_PKT_LENGTH) { return -1; } + /* FCS is added in hardware */ - uint8_t pkt[packet->length-2]; + uint8_t pkt[packet->length - 2]; /* generate pkt */ cc2420_gen_pkt(pkt, packet); @@ -74,23 +77,25 @@ int16_t cc2420_send(cc2420_packet_t *packet) /* write length and packet to fifo */ cc2420_write_fifo(&packet->length, 1); - cc2420_write_fifo(pkt, packet->length-2); + cc2420_write_fifo(pkt, packet->length - 2); unsigned int cpsr = disableIRQ(); cc2420_strobe(CC2420_STROBE_TXON); // Wait for SFD to be set -> sync word transmitted while (cc2420_get_sfd() == 0) { - abort_count++; - if (abort_count > CC2420_SYNC_WORD_TX_TIME) { - // Abort waiting. CC2420 maybe in wrong mode - // e.g. sending preambles for always - puts("[CC2420 TX] fatal error\n"); - /* TODO: error handling */ - packet->length = 0; - break; - } + abort_count++; + + if (abort_count > CC2420_SYNC_WORD_TX_TIME) { + // Abort waiting. CC2420 maybe in wrong mode + // e.g. sending preambles for always + puts("[CC2420 TX] fatal error\n"); + /* TODO: error handling */ + packet->length = 0; + break; + } } + DEBUG("SEQ: %u\n", packet->frame.seq_nr); restoreIRQ(cpsr); @@ -111,7 +116,8 @@ static void cc2420_gen_pkt(uint8_t *buf, cc2420_packet_t *packet) uint8_t index, offset; index = ieee802154_frame_init(&packet->frame, buf); offset = index; - while(index < packet->length-2) { + + while (index < packet->length - 2) { buf[index] = packet->frame.payload[index - offset]; index += 1; }