BLE动态修改MAC地址

前言:实现动态修改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;
}

posted @ 2025-02-25 10:19  SweetTea_lllpc  阅读(172)  评论(0)    收藏  举报