/*********************************************************************************** * @fn basicRfInit * * @brief Initialise basic RF datastructures. Sets channel, short address and * PAN id in the chip and configures interrupt on packet reception * * @param pRfConfig - pointer to BASIC_RF_CONFIG struct. * This struct must be allocated by higher layer * txState - file scope variable that keeps tx state info * rxi - file scope variable info extracted from the last incoming * frame * * @return none */ uint8 basicRfInit(basicRfCfg_t* pRfConfig) { if (halRfInit()==FAILED) return FAILED; halIntOff(); // Set the protocol configuration pConfig = pRfConfig; rxi.pPayload = NULL; txState.receiveOn = TRUE; txState.frameCounter = 0; // Set channel halRfSetChannel(pConfig->channel); // Write the short address and the PAN ID to the CC2520 RAM halRfSetShortAddr(pConfig->myAddr); halRfSetPanId(pConfig->panId); // if security is enabled, write key and nonce #ifdef SECURITY_CCM basicRfSecurityInit(pConfig); #endif // Set up receive interrupt (received data or acknowlegment) halRfRxInterruptConfig(basicRfRxFrmDoneIsr); halIntOn(); return SUCCESS; }
/* ------------------------------------------------------------------------------------------------------ * mac_init() * * Description : MAC layer init. * */ void mac_init(void) { /* Initialise RF radio.*/ halRfInit(); #if (0) pib.coord_addr.mode = SHORT_ADDR; pib.coord_addr.short_addr = 0x0000; // Net coord short address is 0x0000; pib.coord = true; pib.short_addr = 0x0000; // Default node short address is 0xFFFF. pib.pan_id = 0xFFFF; // Default PAN ID is 0xFFFF. // Read MAC address in FALSH. HalFlashRead(HAL_FLASH_IEEE_PAGE, HAL_FLASH_IEEE_OSET, pib.ext_addr, Z_EXTADDR_LEN); pib.assoc_permit = false; // Node's association is permit. // pcb.mac_state = MLME_SCAN; pib.curr_channel = 20; /* channel 20.*/ pib.rx_on_when_idle = true; pib.max_csma_backoffs = 3; pib.min_be = 3; pib.dsn = (U8)halRfGetChipId(); // Random value as frame number. pib.tmp_pan_id = 0xFFFF; /* Write the short address and the PAN ID to the CC2520 RAM*/ halRfSetExtAddr(pib.ext_addr); halRfSetShortAddr(pib.short_addr); halRfSetPanId(pib.pan_id); #endif pib.curr_channel = 20; /* channel 20.*/ // Set channel halRfSetChannel(pib.curr_channel); halRfRxInterruptConfig(RfRxFrmDoneIsr); mac_buf_init(); halRfReceiveOn(); }