int16_t cc2420_send(cc2420_packet_t *packet) { volatile uint32_t abort_count = 0; /* Set missing frame information */ packet->frame.fcf.frame_ver = 0; 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) { packet->frame.src_addr[1] = (uint8_t)(cc2420_get_address() >> 8); packet->frame.src_addr[0] = (uint8_t)(cc2420_get_address() & 0xFF); } else if (packet->frame.fcf.src_addr_m == 3) {
/* * @brief Get the current address of transceiver device * * @param t The transceiver device * * @return The configured address of the device * * TODO: define error behavior */ static radio_address_t get_address(transceiver_type_t t) { switch (t) { case TRANSCEIVER_CC1100: #if (defined(MODULE_CC110X) || defined(MODULE_CC110X_LEGACY)) return cc110x_get_address(); #elif MODULE_CC110X_LEGACY_CSMA return cc1100_get_address(); #else return 0; /* XXX see TODO above */ #endif #ifdef MODULE_CC2420 case TRANSCEIVER_CC2420: return cc2420_get_address(); #endif #ifdef MODULE_MC1322X case TRANSCEIVER_MC1322X: return maca_get_address(); #endif #ifdef MODULE_NATIVENET case TRANSCEIVER_NATIVE: return nativenet_get_address(); #endif #ifdef MODULE_AT86RF231 case TRANSCEIVER_AT86RF231: return at86rf231_get_address(); #endif default: return 0; /* XXX see TODO above */ } }