请问广播在哪里调用啊

我们要做类似于mesh组网的功能,接收到控制命令后通过广播中转,但是不知道广播在哪里发送的,广播了中转数据就得一直发。我想在中转数据发送完毕就把广播的内容修改为类似于心跳的东西。

广播开关/重启


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
//获取当前广播状态
//0为非广播,非0为广播
uint8_t adv_status;
GAPRole_GetParameter(GAPROLE_ADVERT_ENABLED, &adv_status );
 
//开启广播
uint8_t advertising_enable = true;
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8_t ), &advertising_enable );
//关闭广播
advertising_enable = false;
GAPRole_SetParameter( GAPROLE_ADVERT_ENABLED, sizeof( uint8_t ), &advertising_enable );
//  对应的状态上报:
// :GAPROLE_WAITING
// :pEvent->gap.opcode == GAP_END_DISCOVERABLE_DONE_EVENT
 
//重启广播
//要先关闭广播,然后在停止广播的事件产生后才能再去使能广播,不能刚执行完关闭广播,就去开启广播
//因为这里只是设置协议栈状态机标识位,实际上广播并没有立刻停止,要等协议栈轮询处理后,才会真正关闭,如果现在去启动广播,协议栈会认为当前已经在广播状态


广播间隔


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
//获取当前的广播间隔
uint16_t advInt;
advInt = GAP_GetParamValue( TGAP_DISC_ADV_INT_MIN );
PRINT("min adv %d\r\n",advInt);
advInt = GAP_GetParamValue( TGAP_DISC_ADV_INT_MAX );
PRINT("max adv %d\r\n",advInt);
 
//修改广播间隔
 
/*注意,广播的参数修改,需要重启广播,才能生效
 *可以修改后,然后在广播 GAPROLE_WAITING(广播停止)状态产生后,然后立刻开启广播. 不能关闭广播后立刻开启广播.
 */
uint16 advInt = 160;
GAP_SetParamValue( TGAP_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_DISC_ADV_INT_MAX, advInt );


广播超时


1
2
3
4
5
6
7
8
9
uint16_t adv_timeout;
//获取当前的广播超时时间,以0.625ms为单位,0表示永不超时
adv_timeout = GAP_GetParamValue( TGAP_GEN_DISC_ADV_MIN );
PRINT("adv_timeout =%d\r\n",adv_timeout);
//设置广播间隔,需要重启广播后才能生效 
GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, 16000 );
//超时产生后,会产生蓝牙状态更新事件上报,对应的事件为"GAPROLE_WAITING"
 
//也可以通过应用层的去手动控制广播的关闭与开启


设置/修改广播内容

广播内容的修改不用停止广播,直接在协议栈初始化后修改即可

1
2
3
4
5
6
//设置/修改扫描回复以及广播数据,这种修改需要重启广播
GAPRole_SetParameter( GAPROLE_SCAN_RSP_DATA, sizeof ( scanRspData ), scanRspData );
GAPRole_SetParameter( GAPROLE_ADVERT_DATA, sizeof( advertData ), advertData );
 
//或者 通过下面方式进行修改,实时生效
bStatus_t GAP_UpdateAdvertisingData( u8 taskID,u8 adType,u8 dataLen,u8 *pAdvertData );


设置广播类型


1
2
3
4
5
6
7
//设置广播类型为 不可连接的,不支持扫描回复包
uint8 initial_adv_event_type = GAP_ADTYPE_ADV_NONCONN_IND;
GAPRole_SetParameter( GAPROLE_ADV_EVENT_TYPE, sizeof( uint8 ), &initial_adv_event_type );
 
//设置广播类型为 可连接的,支持扫描回复包
initial_adv_event_type = GAP_ADTYPE_ADV_IND;
GAPRole_SetParameter( GAPROLE_ADV_EVENT_TYPE, sizeof( uint8 ), &initial_adv_event_type );


广播信道MAP


1
2
3
4
5
6
7
8
9
10
11
12
13
14
//获取广播信道映射
// GAP_ADVCHAN_DEFINES GAP Advertisement Channel Map
#define GAP_ADVCHAN_37  0x01  //!< Advertisement Channel 37
#define GAP_ADVCHAN_38  0x02  //!< Advertisement Channel 38
#define GAP_ADVCHAN_39  0x04  //!< Advertisement Channel 39
#define GAP_ADVCHAN_ALL (GAP_ADVCHAN_37 | GAP_ADVCHAN_38 | GAP_ADVCHAN_39) //!< All Advertisement Channels Enabled
 
uint8_t adv_channel_map;
GAPRole_GetParameter(GAPROLE_ADV_CHANNEL_MAP, &adv_channel_map);
 
//设置广播信道映射
//可以在任何时候设置
adv_channel_map = GAP_ADVCHAN_37  | GAP_ADVCHAN_38 ;
GAPRole_SetParameter( GAPROLE_ADV_CHANNEL_MAP, sizeof( uint8 ), &adv_channel_map);



只有登录才能回复,可以选择微信账号登录