完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
我们要做类似于mesh组网的功能,接收到控制命令后通过广播中转,但是不知道广播在哪里发送的,广播了中转数据就得一直发。我想在中转数据发送完毕就把广播的内容修改为类似于心跳的东西。
|
|
相关推荐
1个回答
|
|
广播开关/重启
//获取当前广播状态 //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); |
|
|
|
只有小组成员才能发言,加入小组>>
477 浏览 1 评论
CH579M+RT-Thread,RTC从Sleep模式唤醒失败是什么原因?
2874 浏览 2 评论
2361 浏览 1 评论
818浏览 2评论
CH569通过HSPI实现USB3.0和FPGA高速双向通讯
644浏览 1评论
499浏览 1评论
CH32F103C8T6使用当前官网上的CDC例程会出现设备描述符请求失败
364浏览 1评论
641浏览 1评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2024-11-26 10:14 , Processed in 1.260278 second(s), Total 77, Slave 61 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号