cc2640在定时器回调函数中不能正常修改广播数据?
我在Broadcaster工程里加入了按键功能,当按键按下之后修改广播数据。
在Board_initKeys(KeyPressHandler)初始化按键之后程序正常运行。当按键按下之后board_key.c里会在中断里面开启定时器,
当200ms到了之后会回调KeyPressHandler。
1.我就是直接在KeyPressHandler里面修改广播数据,advertData里面数据确实变化了但是实际广播出来的数据却没有变。
static void KeyPressHandler(uint8 keys)
{
if (keys & KEY_UP)
{
advertData[7] = 0xFF;
GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);
}
}
2.只在KeyPressHandler设置事件后里面将消息入队,在SimpleBLEBroadcaster_processAppMsg直接改变广播数据,
这种是可以实现动态修改广播数据。
static void KeyPressHandler(uint8 keys)
{
// Enqueue the event.
sbbEvt_t *pMsg;
// Create dynamic pointer to message.
if (pMsg = ICall_malloc(sizeof(sbbEvt_t)))
{
pMsg->hdr.event = KEY_CHANGE_EVT;
pMsg->hdr.state = keys;
// Enqueue the message.
Util_enqueueMsg(appMsgQueue, sem, (uint8_t*)pMsg);
}
}
static void SimpleBLEBroadcaster_processAppMsg(sbbEvt_t *pMsg)
{
switch (pMsg->hdr.event)
{
case SBB_STATE_CHANGE_EVT:
SimpleBLEBroadcaster_processStateChangeEvt((gaprole_States_t)pMsg-> hdr.state);
break;
case KEY_CHANGE_EVT:
{
if ((pMsg->hdr.state) & KEY_UP)
{
advertData[7] = 0xFF;
GAPRole_SetParameter(GAPROLE_ADVERT_DATA, sizeof(advertData), advertData);
}
}
break;
default: // Do nothing.
break;
}
}
我的疑问是难道修改广播数据只能在SimpleBLEBroadcaster_taskFxn线程里面?