广播开关/重启
//获取当前广播状态
//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
//重启广播
//要先关闭广播,然后在停止广播的事件产生后才能再去使能广播,不能刚执行完关闭广播,就去开启广播
//因为这里只是设置协议栈状态机标识位,实际上广播并没有立刻停止,要等协议栈轮询处理后,才会真正关闭,如果现在去启动广播,协议栈会认为当前已经在广播状态
广播间隔
//获取当前的广播间隔
uint16_t advInt;
advInt = GAP_GetParamValue( TGAP_DISC_ADV_INT_MIN );
PRINT("min adv %drn",advInt);
advInt = GAP_GetParamValue( TGAP_DISC_ADV_INT_MAX );
PRINT("max adv %drn",advInt);
//修改广播间隔
/*注意,广播的参数修改,需要重启广播,才能生效
*可以修改后,然后在广播 GAPROLE_WAITING(广播停止)状态产生后,然后立刻开启广播. 不能关闭广播后立刻开启广播.
*/
uint16 advInt = 160;
GAP_SetParamValue( TGAP_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_DISC_ADV_INT_MAX, advInt );
广播超时
uint16_t adv_timeout;
//获取当前的广播超时时间,以0.625ms为单位,0表示永不超时
adv_timeout = GAP_GetParamValue( TGAP_GEN_DISC_ADV_MIN );
PRINT("adv_timeout =%drn",adv_timeout);
//设置广播间隔,需要重启广播后才能生效
GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, 16000 );
//超时产生后,会产生蓝牙状态更新事件上报,对应的事件为"GAPROLE_WAITING"
//也可以通过应用层的去手动控制广播的关闭与开启
设置/修改广播内容
广播内容的修改不用停止广播,直接在协议栈初始化后修改即可
//设置/修改扫描回复以及广播数据,这种修改需要重启广播
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 );
设置广播类型
//设置广播类型为 不可连接的,不支持扫描回复包
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
//获取广播信道映射
// 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);
广播开关/重启
//获取当前广播状态
//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
//重启广播
//要先关闭广播,然后在停止广播的事件产生后才能再去使能广播,不能刚执行完关闭广播,就去开启广播
//因为这里只是设置协议栈状态机标识位,实际上广播并没有立刻停止,要等协议栈轮询处理后,才会真正关闭,如果现在去启动广播,协议栈会认为当前已经在广播状态
广播间隔
//获取当前的广播间隔
uint16_t advInt;
advInt = GAP_GetParamValue( TGAP_DISC_ADV_INT_MIN );
PRINT("min adv %drn",advInt);
advInt = GAP_GetParamValue( TGAP_DISC_ADV_INT_MAX );
PRINT("max adv %drn",advInt);
//修改广播间隔
/*注意,广播的参数修改,需要重启广播,才能生效
*可以修改后,然后在广播 GAPROLE_WAITING(广播停止)状态产生后,然后立刻开启广播. 不能关闭广播后立刻开启广播.
*/
uint16 advInt = 160;
GAP_SetParamValue( TGAP_DISC_ADV_INT_MIN, advInt );
GAP_SetParamValue( TGAP_DISC_ADV_INT_MAX, advInt );
广播超时
uint16_t adv_timeout;
//获取当前的广播超时时间,以0.625ms为单位,0表示永不超时
adv_timeout = GAP_GetParamValue( TGAP_GEN_DISC_ADV_MIN );
PRINT("adv_timeout =%drn",adv_timeout);
//设置广播间隔,需要重启广播后才能生效
GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, 16000 );
//超时产生后,会产生蓝牙状态更新事件上报,对应的事件为"GAPROLE_WAITING"
//也可以通过应用层的去手动控制广播的关闭与开启
设置/修改广播内容
广播内容的修改不用停止广播,直接在协议栈初始化后修改即可
//设置/修改扫描回复以及广播数据,这种修改需要重启广播
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 );
设置广播类型
//设置广播类型为 不可连接的,不支持扫描回复包
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
//获取广播信道映射
// 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);
举报