/************************************************************************************************** * @fn macRadioUpdateTxPower * * @brief Update the radio's transmit power if a new power level has been requested * * @param reqTxPower - file scope variable that holds the last request power level * macPhyTxPower - global variable that holds radio's set power level * * @return none ************************************************************************************************** */ MAC_INTERNAL_API void macRadioUpdateTxPower(void) { halIntState_t s; /* * If the requested power setting is different from the actual radio setting, * attempt to udpate to the new power setting. */ HAL_ENTER_CRITICAL_SECTION(s); if (reqTxPower != macPhyTxPower) { /* * Radio power cannot be updated when the radio is physically transmitting. * If there is a possibility radio is transmitting, do not change the power * setting. This function will be called again after the current transmit * completes. */ if (!macRxOutgoingAckFlag && !MAC_TX_IS_PHYSICALLY_ACTIVE()) { /* * Set new power level; update the shadow value and write * the new value to the radio hardware. */ macPhyTxPower = reqTxPower; MAC_RADIO_SET_TX_POWER(macPhyTxPower); } } HAL_EXIT_CRITICAL_SECTION(s); }
/************************************************************************************************** * @fn znpTestRF * * @brief This function initializes and checks the ZNP RF Test Mode NV items. It is designed * to be invoked before/instead of MAC radio initialization. * * input parameters * * None. * * output parameters * * None. * * @return None. */ void znpTestRF(void) { uint8 rfTestParms[4] = { 0, 0, 0, 0 }; if ((SUCCESS != osal_nv_item_init(ZNP_NV_RF_TEST_PARMS, 4, rfTestParms)) || (SUCCESS != osal_nv_read(ZNP_NV_RF_TEST_PARMS, 0, 4, rfTestParms)) || (rfTestParms[0] == 0)) { return; } // Settings from SmartRF Studio MDMCTRL0 = 0x85; RXCTRL = 0x3F; FSCTRL = 0x5A; FSCAL1 = 0x2B; AGCCTRL1 = 0x11; ADCTEST0 = 0x10; ADCTEST1 = 0x0E; ADCTEST2 = 0x03; FRMCTRL0 = 0x43; FRMCTRL1 = 0x00; MAC_RADIO_RXTX_OFF(); MAC_RADIO_SET_CHANNEL(rfTestParms[1]); MAC_RADIO_SET_TX_POWER(rfTestParms[2]); TX_PWR_TONE_SET(rfTestParms[3]); switch (rfTestParms[0]) { case 1: // Rx promiscuous mode. MAC_RADIO_RX_ON(); break; case 2: // Un-modulated Tx. TX_PWR_MOD__SET(1); // no break; case 3: // Modulated Tx. // Modulated is default register setting, so no special action. // Now turn on Tx power for either mod or un-modulated Tx test. MAC_RADIO_TX_ON(); break; default: // Not expected. break; } // Clear the RF test mode. (void)osal_memset(rfTestParms, 0, 4); (void)osal_nv_write(ZNP_NV_RF_TEST_PARMS, 0, 4, rfTestParms); while (1); // Spin in RF test mode until a hard reset. }