EasyLink_Status EasyLink_init(int ChannelNum) { if (configured) { if (Semaphore_pend(busyMutex, 0) == FALSE) { return EasyLink_Status_Busy_Error; } RF_close(rfHandle); } if (!rfParamsConfigured) { RF_Params_init(&rfParams); rfParams.nInactivityTimeout = EasyLink_ms_To_RadioTime(1); rfParamsConfigured = 1; } //CHIP_TYPE_CC2650 memcpy(&EasyLink_cmdPropRadioSetup.setup, &RF_cmdPropRadioDivSetup, sizeof(rfc_CMD_PROP_RADIO_SETUP_t)); RF_cmdFs.frequency=2400+(ChannelNum+1)*2; memcpy(&EasyLink_cmdFs, &RF_cmdFs, sizeof(rfc_CMD_FS_t)); memcpy(&EasyLink_RF_prop, &RF_prop, sizeof(RF_Mode)); memcpy(&EasyLink_cmdPropRxAdv, RF_pCmdPropRxAdv_preDef, sizeof(rfc_CMD_PROP_RX_ADV_t)); memcpy(&EasyLink_cmdPropTx, &RF_cmdPropTx, sizeof(rfc_CMD_PROP_TX_t)); if (rfModeMultiClient) { EasyLink_RF_prop.rfMode = RF_MODE_MULTIPLE; } rfHandle = RF_open(&rfObject, &EasyLink_RF_prop, (RF_RadioSetup*)&EasyLink_cmdPropRadioSetup.setup, &rfParams); addrSize = 1; EasyLink_cmdPropRxAdv.maxPktLen = EASYLINK_MAX_DATA_LENGTH + EASYLINK_MAX_ADDR_SIZE; EasyLink_cmdPropRxAdv.pAddr = addrFilterTable; EasyLink_cmdPropRxAdv.addrConf.addrSize = addrSize; EasyLink_cmdPropRxAdv.pktConf.filterOp = 1; EasyLink_cmdPropRxAdv.pQueue = &dataQueue; EasyLink_cmdPropRxAdv.pOutput = (uint8_t*)&rxStatistics; //Set the frequency RF_runCmd(rfHandle, (RF_Op*)&EasyLink_cmdFs, RF_PriorityNormal, 0, EASYLINK_RF_EVENT_MASK); asyncRxTimeOut = 0; Semaphore_Params params; Error_Block eb; Semaphore_Params_init(¶ms); Error_init(&eb); if (busyMutex == NULL) { busyMutex = Semaphore_create(0, ¶ms, &eb); if (busyMutex == NULL) { return EasyLink_Status_Mem_Error; } Semaphore_post(busyMutex); } else { Semaphore_post(busyMutex); } configured = 1; return EasyLink_Status_Success; }