目前我们所做的方案,需要能手动设置不同的发射功率,请问cc2540的发射功率范围是多少DBM?还有我们在软件里面设置时,是对txPwrLevel值进行修改就可以呢还是调用其他函数?另外我在软件里看到接口函数HCI_EXT_SetTxPowerCmd,此函数是否就是设置发射功率的,如是,但参数里只定义了4个级别,不够我们调节所用,有无其他函数接口?
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.
目前我们所做的方案,需要能手动设置不同的发射功率,请问cc2540的发射功率范围是多少DBM?还有我们在软件里面设置时,是对txPwrLevel值进行修改就可以呢还是调用其他函数?另外我在软件里看到接口函数HCI_EXT_SetTxPowerCmd,此函数是否就是设置发射功率的,如是,但参数里只定义了4个级别,不够我们调节所用,有无其他函数接口?
Hi Wang wx,
发射功率范围就是-23dBm 到 +4dBm. 默认设置的是0dBm, 这个在代码里面也有体现.
相信你说的是proximity profile里面的"txPwrLevel" 变量, 如果你用的是keyfob, 这个只是用来发nofity告诉比如IOS的APP目前Keyfob的发射功率是多大, 设置这个不会起改变RF发射功率的作用.
你说的没错, HCI_EXT_SetTxPowerCmd()就是用来设置发射功率的. 而且只有这个函数. 但是只有-23dbm, -6dbm, 0 dbm, +4dbm四个级别. 不知道你所要的范围是怎么样的? 不过, 比如说, -6dbm跟-10dbm几乎是没什么差别的.
Hi Yan,
谢谢解答,你的回答对我非常有用,另外 在keyfob里面有如下定义:
// GAP Role Callbacks
static gapRolesCBs_t keyFob_PeripheralCBs =
{
peripheralStateNotificationCB, // Profile State Change Callbacks
NULL // When a valid RSSI is read from controller
};
我想在此添加函数来获得RSSI值,该怎么做?是否在我的函数里直接调用HCI_ReadRssiCmd就可以?
Hi Wang wx,
这个NULL的位置是个回调函数.当你调用HCI_ReadRssiCmd()获取RSSI值的时候, 最终这个如果不是NULL的话就会被调用.
被调用的位置请看peripheral.c 中的 "gapRole_ProcessOSALMsg() ".
case HCI_GAP_EVENT_EVENT: // 判断是否是HCI event
if ( pMsg->status == HCI_COMMAND_COMPLETE_EVENT_CODE ) // 是否HCI command complete event, 当调用HCI_ReadRssiCmd()
// 读取RSSI命令, 会有HCI command complete event 从controller返回
if ( pPkt->cmdOpcode == HCI_READ_RSSI ) // 是否为读取RSSI命令的 command complete event 返回
if ( (gapRole_state == GAPROLE_CONNECTED) && (rssi != RSSI_NOT_AVAILABLE) ) // 如果处于连接状态, 而且返回的RSSI值有效
{
// Report RSSI to app
if ( pGapRoles_AppCGs && pGapRoles_AppCGs->pfnRssiRead ) // 这里就判断你所提结构体里面那个回调是否为NULL
{
pGapRoles_AppCGs->pfnRssiRead( rssi ); // 如果你定义了回调处理函数, 就在这里调用处理
}
}