【WCH蓝牙系列芯片】-基于CH592开发板—获取从机广播间隔参数
------------------------------------------------------------------------------------------------------------------------------------
这次接收如何在蓝牙动态广播间隔时,在CH592F的开发板上使用蓝牙从机设备去读取广播间隔参数。
//读取蓝牙广播间隔参数 void Check_Current_Adv_Interval(void) { uint16_t current_adv_min = 0; uint16_t current_adv_max = 0; //读取最小广播间隔 current_adv_min = GAP_GetParamValue(TGAP_DISC_ADV_INT_MIN); //读取最大广播间隔 current_adv_max = GAP_GetParamValue(TGAP_DISC_ADV_INT_MAX); // // 如果读出来是 160,代表实际时间是 160 * 0.625 = 100 毫秒 PRINT("Current ADV MIN: %d (Ticks)\r\n", current_adv_min); PRINT("Current ADV MAX: %d (Ticks)\r\n", current_adv_max); //打印毫秒值 PRINT("Time in ms: %d ms\r\n", (current_adv_min * 5) / 8); }
可以将封装好的Check_Current_Adv_Interval()函数,创建一个TMOS的任务函数,启动一个定时任务去执行这个参数;当蓝牙初始化之后,启动任务就一秒一次读取。

再用TMOS写一个更新广播间隔的任务事件,5秒执行一次
if(events & SBP_Update_ADV_Interval_EVT) { uint8_t initial_advertising_enable = FALSE; //关广播 // Set the GAP Role Parameters GAPRole_SetParameter(GAPROLE_ADVERT_ENABLED, sizeof(uint8_t), &initial_advertising_enable); printf("-> close_ADV \r\n"); uint8_t buff[2] = {0}; ADVTime = ADVTime+1600; //更新广播间隔参数 if(ADVTime >16000) { ADVTime = 80; } // Set advertising interval buff[0] = GAP_SetParamValue(TGAP_DISC_ADV_INT_MIN, ADVTime); buff[1] = GAP_SetParamValue(TGAP_DISC_ADV_INT_MAX, ADVTime); printf("--->buff[0] = %d,buff[1] = %d\r\n", buff[0], buff[1]); tmos_start_task(Peripheral_TaskID, SBP_Update_ADV_Interval_EVT, 1600*5); return (events ^ SBP_Update_ADV_Interval_EVT); }
然后再等待开启广播的回调中,再次开启广播

通过串口打印来观察广播间隔读取情况,和广播间隔读取情况。


连接参数获取:
此外,在蓝牙从机中,当蓝牙主机与蓝牙从机建立连接之后,也可以在从机设备端看到连接的参数信息,

static void peripheralParamUpdateCB(uint16_t connHandle, uint16_t connInterval, uint16_t connSlaveLatency, uint16_t connTimeout) { if(connHandle == peripheralConnList.connHandle) { peripheralConnList.connInterval = connInterval; peripheralConnList.connSlaveLatency = connSlaveLatency; peripheralConnList.connTimeout = connTimeout; PRINT("Update %x - Int %x \n", connHandle, connInterval); //打印句柄和间隔 PRINT("Update Handle: %d \r\n", connHandle); // 打印handle值 PRINT("New Conn Interval: %d (*1.25) = %d ms \r\n", connInterval, (connInterval * 5) / 4); //连接间隔 PRINT("New Slave Latency: %d \r\n", connSlaveLatency); // 打印潜伏期:比如是 4,就从机可以连续 4 次不理主机的呼叫继续睡。 PRINT("New Conn Timeout: %d (*10) = %d ms \r\n", connTimeout, connTimeout * 10); // 连接超时时间 } else { PRINT("ERR..\n"); } }
可以在peripheralParamUpdateCB 连接参数更新完成回调函数中,当蓝牙主机(比如手机)和从机(你的板子)成功协商并修改了连接参数后,可以获取到下面的几个参数。
-
connHandle - connect handle 连接句柄 (当前连接的唯一ID编号,多连接时用于区分不同设备)
-
connInterval - connect interval 新的连接间隔
-
connSlaveLatency - connect slave latency 新的从机潜伏期
-
connTimeout - connect timeout 连接超时时间
连接间隔:BLE主机和BLE从机成功建立连接后,主机从机设备之间的交互频率(握手)。其实际连接间隔时间为6~3200,单位是1.25ms,所以实际的连接间隔时间是61.25~32001.25ms。
通过串口打印也可以看到连接参数值

浙公网安备 33010602011771号