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.

[参考译文] LAUNCHTXL-CC1310:EasyLink和在通话前接听

Guru**** 2393725 points


请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/wireless-connectivity/sub-1-ghz-group/sub-1-ghz/f/sub-1-ghz-forum/620006/launchxl-cc1310-easylink-and-listen-before-talk

部件号:LAUNCHTXL-CC1310

我正在尝试将"先听后说"示例集成到简单链接中。

我更改 了EasyLink_Transmit,但我的代码总是在 RF_pendCmd上挂起。

有什么想法是我做错了什么或者为什么会挂起?  

#define CS_retries_when占线10. /*当信道繁忙时CS命令应运行的次数*/
#define RSSI_THRESHOLD_DBM -90 /*报告信道繁忙时RSSI高于此阈值*/
#define idle_Time_US 5000

静态RFC_CMD_NOP_t EasyLink _cmdNop;
静态RFC_CMD_PROP_CS_t EasyLink _cmdPropcs;
静态RFC_CMD_COUNT_BRANC_t EasyLink _cmdCountBranch;

EasyLink_Status EasyLink_Transmit(EasyLink TxPacket *txPacket)
{
EasyLink状态= EasyLink状态Tx错误;

如果(!已配置)||暂挂)
{
返回EasyLink_Status_Config_Error;
}
//检查并选择busyMutex
IF (semaphore_pend(busyMutex, 0)== false)
{
返回EasyLink Status_Busy_Error;
}
IF (txPacket->len > EasyLink _MAX_DATA_length)
{
返回EasyLink_Status_Param_Error;
}

memcpy(TxBuffer, txPacket->dstAddr, addrSize);
memcpy(txBuffer + addrSize, txPacket->payload,txPacket->len);

//发送到Tx的数据包长度包括地址
EasyLink _cmdProptx.pktLen = txPacket->len + addrSize;
EasyLink_cmdProptx.pktt = txBuffer;

如果(txPacket->absTime!= 0)
{
EasyLink _cmdNop.startrigger.triggerType = trig_ABSTIME;
EasyLink _cmdNop.startrigger.PastTrig =1;
EasyLink _cmdNop.StartTime = txPacket->absTime;
// EasyLink_cmdPropTx.startrigger.triggerType = trig_ABSTIME;
// EasyLink _cmdPropTx.startrigger.PastTrig = 1;
// EasyLink_cmdPropTx.StartTime = txPacket->absTime;
}
否则
{
EasyLink _cmdNop.startrigger.triggerType = trig_ABSTIME;
EasyLink _cmdNop.startrigger.PastTrig =1;
EasyLink _cmdNop.StartTime = RF_getCurrentTime()+(5000);
// EasyLink _cmdPropTx.startrigger.triggerType = trig_now;
// EasyLink _cmdPropTx.startrigger.PastTrig = 1;
// EasyLink_cmdPropTx.StartTime =0;
}

/*设置命令链的下一个指针*/
EasyLink_cmdNop.pNextOp =(RFC_radioOp_t*)&EasyLink_cmdPropCs;
EasyLink_cmdPropcs.pNextOp =(RFC_radioOp_t*)&EasyLink_cmdCountBranch;
EasyLink_cmdCountBranch.pNextOp =(RFC_radioOp_t*)&EasyLink_cmdPropTx;
EasyLink_cmdCountBranch.pNextOpIfOk =(RFC_radioOp_t*)&EasyLink_cmdPropCs;

/*使用特定于应用程序的定义*/自定义API命令
EasyLink_cmdPropCs.rssiThr = RSSI_THRESHOLD_DBM;
EasyLink _cmdPropcs.csEndTime =(idle_Time_US + 150)* 4;/*添加一些边距*/
EasyLink_cmdCountBranch.counter = CS_retries_when繁忙;
//发送数据包
RF_CmdHandle cmdHdl = RF_postCmd (rfHandle,(RF_Op*)&EasyLink_cmdNop,
RF_PriorityNormal,0,EasyLink_RF_event_mask);

//等待命令完成
RF_EventMask结果= RF_PendCmd (rfHandle,cmdHdl,(RF_EventLastCmdDone |)
RF_EventCmdError);


//如果(结果和RF_EventLastCmdDone)
如果(Result & RF_EventLastCmdDone)&&(EasyLink_cmdPropTx.status == PROP_DOLE_OK)
{
状态= EasyLink_Status_Success
;}

//释放busyMutex
semaphore_post(BusyMutex);


返回状态;
} 

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的,我发现了我的问题;

    我需要在init函数中初始设置EasyLink _cmdNop,EasyLink _cmdPropCS和EasyLink _cmdCountBranch字段。
    为此,我需要在SmartRF_settings_predefined文件中添加它们的预定义值。
    这些值可以从“说话前先听”示例中的application_settings文件复制。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您的更新,Good to Know问题已解决!