转载自:https://www.cnblogs.com/gscw/p/18735613
前言:实现动态修改MAC,需要注意关闭广播后调用GAP_ConfigDeviceAddr(ADDRTYPE_PRIVATE_NONRESOLVE, ownAddr)
配置完成后再开启广播。
void HidEmu_Init()
{tmos_start_task(hidEmuTaskId, CloseADV_EVT, 6000);
}static uint8 data = 0;
uint16_t HidEmu_ProcessEvent(uint8_t task_id, uint16_t events)
{if(events & CloseADV_EVT){uint8_t initial_advertising_enable = 0;GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable);tmos_start_task(hidEmuTaskId, ChangeMAC_EVT, 600);return (events ^ CloseADV_EVT);}if(events & ChangeMAC_EVT){uint8_t ownAddr[6] = {data, 0x02, 0x03, 0xE4, 0xC2, 0x00};data++;uint8 ret = GAP_ConfigDeviceAddr(ADDRTYPE_PRIVATE_NONRESOLVE, ownAddr);PRINT("Change MAC ret:%x\n",ret);uint8_t initial_advertising_enable = 1;ret = GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable);PRINT("Open ADV ret:%x\n",ret);tmos_start_task(hidEmuTaskId, CloseADV_EVT, 6000);return (events ^ ChangeMAC_EVT);}return 0;
}