This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

AWR2243: how to monitor the Tx transmit power

Part Number: AWR2243
Other Parts Discussed in Thread: AM2732

Tool/software:

Hi,

My hardware platform is AM2732 + AWR2243 * 2.

I'm trying to monitor the Tx transmit power, and my configuration parameters are as follows:

My configured parameters are:

 
rlTxPowMonConf_t tx0PowrMonCfg = { 0, 7, 0, 0, 0, 30, 30, 0, 0 };
rlAllTxPowMonConf_t txPowMonConfig = { &tx0PowrMonCfg, &tx0PowrMonCfg, &tx0PowrMonCfg };
ret = rlRfTxPowrMonConfig(RL_DEVICE_MAP_INTERNAL_BSS, &txPowMonConfig);

After this, I executed the mmwDemo_cfgAnalogMonitor interface and configured the parameters as:

 
analogMonCfg.enMask |= 0x1 << MMWDEMO_ANALOG_MONITOR_TX0_POWER;
analogMonCfg.enMask |= 0x1 << MMWDEMO_ANALOG_MONITOR_TX1_POWER;
analogMonCfg.enMask |= 0x1 << MMWDEMO_ANALOG_MONITOR_TX2_POWER;

According to the rlRfTxPowrMonConfig interface documentation, after configuring this interface, asynchronous events RL_RF_AE_MON_TX0_POWER_REPORT, RL_RF_AE_MON_TX1_POWER_REPORT, RL_RF_AE_MON_TX2_POWER_REPORT should be reported.

However, when I monitor events in the MmwDemo_eventCallbackFxn interface, there are no asynchronous event reports being output.

May I ask: Is there an issue with my process? Or are the parameters incorrect? What should I do to be able to monitor the Tx power?

Best Regards!

Thank you!

  • interface rlRfTxPowrMonConfig(),from file rl_monitoring.c is below:

    /** @fn rlReturnVal_t rlRfTxPowrMonConfig(rlUInt8_t deviceMap, rlAllTxPowMonConf_t* data)
    *
    * @brief Sets information related to TX power monitoring.
    * @param[in] deviceMap - Bitmap of devices to send the message
    * @param[in] data - Tx power monitor configuration
    *
    * @return rlReturnVal_t Success - 0, Failure - Error Code
    *
    * This API is a Monitoring Configuration API, containing information
    * related to TX0/1/2 power monitoring.
    * Once configured, radarSS will send Async event (RL_RF_AE_MON_TX0_POWER_REPORT,
    * RL_RF_AE_MON_TX1_POWER_REPORT, RL_RF_AE_MON_TX2_POWER_REPORT) to report monitoring data
    *
    * @note 1: The TX[0:2] power monitoring accuracy degrades at high TX backoffs and is unreliable
    * for backoffs higher than 20dB on AWR2243 and 26dB on xWR6x43. \n
    * @note 2: The 0dB back-off corresponds to typically 13dBm power level in AWR2243/xWR6x43 device.
    */
    /* Sub block ID: 0x01C7, ICD API: AWR_MONITOR_TX0_POWER_CONF_SB */
    /* Sub block ID: 0x01C8, ICD API: AWR_MONITOR_TX1_POWER_CONF_SB */
    /* Sub block ID: 0x01C9, ICD API: AWR_MONITOR_TX2_POWER_CONF_SB */
    /* DesignId : MMWL_DesignId_080 */
    /* Requirements : AUTORADAR_REQ-861 */
    rlReturnVal_t rlRfTxPowrMonConfig(rlUInt8_t deviceMap, rlAllTxPowMonConf_t *data)
    {
    rlReturnVal_t retVal;
    /* Initialize Command and Response Sub Blocks */
    rlDriverMsg_t inMsg;
    rlDriverMsg_t outMsg = {0};
    rlUInt16_t numSbc = 0U;

    /* Initialize Command and Response Sub Blocks */
    rlPayloadSb_t inPayloadSb[RL_MAX_SB_IN_MSG] = {0};

    RL_LOGV_ARG0("rlRfTxPowrMonConfig starts...\n");

    /* Construct command packet */
    rlDriverConstructInMsg(RL_RF_MONITORING_CONF_SET_MSG, &inMsg, &inPayloadSb[0U]);
    // CLI_write("rl_driverData.deviceMap = 0X%X \n",rl_driverData.deviceMap);
    // CLI_write(" data=%x ,deviceMap=%d\n",data,deviceMap);

    /* check if deviceIndex is out of defined value */
    if ((rlDriverIsDeviceMapValid(deviceMap) != RL_RET_CODE_OK) || \
    (RL_NULL_PTR == data))
    {
    retVal = RL_RET_CODE_INVALID_INPUT;
    RL_LOGE_ARG0("rlRfTxPowrMonConfig, Invalid input \n");
    CLI_write("rlRfTxPowrMonConfig, Invalid input \n");
    }
    else
    {

    /* check for NULL pointer */
    if ((RL_NULL_PTR != data->tx0PowrMonCfg))
    {
    /* Fill in-message Payload */
    rlDriverFillPayload(RL_RF_MONITORING_CONF_SET_MSG,
    RL_RF_TX0_POW_MON_CONF_SB,
    &inPayloadSb[numSbc],
    (rlUInt8_t* )data->tx0PowrMonCfg,
    (rlUInt16_t)sizeof(rlTxPowMonConf_t));
    numSbc++;
    }
    /* check for NULL pointer */
    if ((RL_NULL_PTR != data->tx1PowrMonCfg))
    {
    /* Fill in-message Payload */
    rlDriverFillPayload(RL_RF_MONITORING_CONF_SET_MSG,
    RL_RF_TX1_POW_MON_CONF_SB,
    &inPayloadSb[numSbc],
    (rlUInt8_t* )data->tx1PowrMonCfg,
    (rlUInt16_t)sizeof(rlTxPowMonConf_t));
    numSbc++;
    }
    /* check for NULL pointer */
    if ((RL_NULL_PTR != data->tx2PowrMonCfg))
    {
    /* Fill in-message Payload */
    rlDriverFillPayload(RL_RF_MONITORING_CONF_SET_MSG,
    RL_RF_TX2_POW_MON_CONF_SB,
    &inPayloadSb[numSbc],
    (rlUInt8_t* )data->tx2PowrMonCfg,
    (rlUInt16_t)sizeof(rlTxPowMonConf_t));
    numSbc++;
    }
    if (numSbc > 0U)
    {
    /* setting num of sub-block to inMsg */
    inMsg.opcode.nsbc = numSbc;
    CLI_write("TX0 Pow mon:%d,%d,%d,%d,%d \n",data->tx0PowrMonCfg->reportMode,
    data->tx0PowrMonCfg->profileIndx,
    data->tx0PowrMonCfg->rfFreqBitMask,
    data->tx0PowrMonCfg->txPowAbsErrThresh,
    data->tx0PowrMonCfg->txPowOffsetValRF1
    );

    /* Send Command to mmWave Radar Device */
    retVal = rlDriverCmdInvoke(deviceMap, inMsg, &outMsg);
    }
    else
    {
    retVal = RL_RET_CODE_INVALID_INPUT;
    CLI_write("sub block is NULL\n");
    }
    }
    CLI_write(" data->tx0PowrMonCfg=0X%X,0X%X,0X%X,numSbc=%d,%d \n",data->tx0PowrMonCfg,data->tx1PowrMonCfg,data->tx2PowrMonCfg,numSbc,retVal);

    return retVal;
    }

  • Hi Miles,

    Our experts are currently out of office. We will get back to you as soon as possible.

    BR,

    Animesh Anand

  • This problem has been solved, it can be closed.

    Thanks