广播的时间的疑问
1、注释说GAP_ADTYPE_FLAGS_LIMITED模式广播时间是30.72s,但实测不是这么多,怎么解释?
2、这个广播时间长度能不能修改?
3、广播时候有个led在闪,但我没看到那个地方设置其闪的,是底层库里面设置的?
1、看看你用的具体的工程是否有这样的功能
2、可以改
3、看看你用的具体的工程是否有这样的功能,以及程序配置
谢谢!
1、我的是keyfob工程,实测大概每次广播180s
2、怎么改?
3、这个led flash可否关闭,怎么改?
有知道 这三个问题的吗
谢谢了
Derek,
1, keyfob 是个好工程, 必须的。
2. 请看初始化里面的 gapRole_AdvertOffTime 这个值的定义和用法。
3,请参考 HalLedSet() 的用法。
Yan
gapRole_AdvertOffTime 我看了,也修改了,仅影响两次广播中间等待的时间
每次广播还是180s
我希望每次广播的时间也能修改,180s太长了
Hi Derek Wu1
默认是180s
你可以尝试调用 GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT...)改变广播持续时间。
哦,有这个接口啊,谢谢!
我来试试
Derek Wu1
其实,这一块我也不是很熟悉。
以下是我的几种做法,你可以参考下:
1.保持无限广播:
先设置TGAP_GEN_DISC_ADV_MIN = 0。GAP_SetParamValue(TGAP_GEN_DISC_ADV_MIN,0).再使能广播。
至于 GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );不用管,因为:
当TGAP_GEN_DISC_ADV_MIN = 0时。GAPROLE_ADVERT_OFF_TIME是无效的。
2.单次限时广播:
先设置广播的持续时间,如30s:TGAP_GEN_DISC_ADV_MIN = 30000。GAP_SetParamValue(TGAP_GEN_DISC_ADV_MIN,30000).
然后注意设置gapRole_AdvertOffTime = 0。
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );
这样你开启一次广播,持续30秒后就自动停止了。
3.循环限制广播:
先设置你每次的广播时间,如10秒:TGAP_GEN_DISC_ADV_MIN = 10000。GAP_SetParamValue(TGAP_GEN_DISC_ADV_MIN,10000)。
然后设置关闭广播的持续时间,如20秒:
gapRole_AdvertOffTime = 20000。
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );
这样的效果就是:广播10秒,停止20秒。广播10秒...如此循环。
你可以试一下,不过这么做妥不妥,得让TI的工程师来说了算。
Hi, shaokai
设置广播的持续时间是设置 TGAP_LIM_ADV_TIMEOUT还是TGAP_GEN_DISC_ADV_MIN 呢? 我看一个是最小持续时间,一个是最大持续时间,是不是随便设一个就Ok哒?
首先:DEFAULT_DISCOVERABLE_MODE 要设置成 GAP_ADTYPE_FLAGS_LIMITED
然后 设置时间:
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );
GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT, DEFAULT_DISCOVERABLE_TIMEOUT );
Hi Fred
我也这样尝试了,当设置GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT, 3000 )时, 广播时间并非设定的3s, 这是为什么呢?
您好,
请参考GAP理解
1、GAP-通用接入规范:
BLE协议栈的GAP层负责处理设备的接入方式和过程,包括设备发现,链路建立,链路终止,启动安全功能,设备配置。
GAP层通常扮演以下四种角色中的一种:
广播者——广告发送者,不是可连接的设备
观察者——扫描广告,不能够启动连接
外围设备——广告发送者,是可连接的设备,在单一链路层连接时作为一个从机
中央设备——扫描广告启动连接,在单一或者多链路层连接时作为主机,支持三个同时连接
在一个典型的蓝牙系统中,外围设备发送具体的广告数据让任何中央设备知道他是一个可连接的设备。广告内容包含设备地址,还可以包含一些额外的额数据,比如设备名称。中央设备接收到广告后发送一个搜索请求给外围设备,外围设备答复一个搜索答复。这就是设备发现的过程,这样中央设备就知道外围设备是一个可连接的设备。中央设备可以发送一个建立连接的请求给外围设备,一个连接情况包含一些连接参数:
连接间隔——在一个BLE连接中跳频机制需要被使用,这样两个设备之间可以在一个特定的通道上进行数据收发,在一个特定的时间之后会跳到一个新的通道上,LL层负责通道切换。这个遇见设备收发数据被称作是连接事件。尽管没有应用程序数据需要收发,两个设备之间仍然会交换链路层数据来保持连接。连接间隔是两个连接事件之间的时间,使用一个单元值为1.25ms的步进。连接间隔从最小值6(7.5ms)到最大值3200(4.0s)。
不同的应用也许需要不同的连接间隔,一个长时间的连接间隔将会节约更多的能量,因为设备可以在两个连接事件之间睡眠更长的时间。但是他会导致数据发送不及时,如果有数据要发送那么他只能够在下一次连接事件到来时才能被发送。
从机延迟——这个参数描述了从机跳过连接事件的次数。这使外围设备具有一定的灵活性,如果它不具有任何数据传送,它可以选择跳过连接事件,并保持睡眠,从而提供了一些积蓄力量。这一决定取决于外围设备。
监督超时——这是两个成功的连接事件之间间隔的最大值。如果超过这个时间还未出现成功的连接事件,那么设备将会考虑失去连接,返回一个未连接状态。这个参数值使用10ms的步进。监督超时时间从最小10(100ms)到最大3200(32.0s)。同时超时时间必须大于有效连接事件。
有效连接事件时间 = 连接间隔 X (1 + 从机延迟值)
在某些情况下,中央设备请求与外围设备建立连接包含连接参数对外围设备而言是不利的。在其他情况下,外围设备可以在连接过程中改变连接参数这个取决于外围设备的应用程序。外围设备可以请求中央设备改变连接参数通过设置连接参数更新请求。这个请求是被协议栈的L2CAP处理的。
这个请求包含四个参数:最小连接间隔、最大连接间隔、从机延迟、监督超时时间。这些值代表了外围设备针对连接的期望参数,连接间隔是以范围的形式提供的。当中央设备接收到这个请求, 他有权利决定是接受还是拒绝这些参数。
GAP通常还会负责启动BLE连接的安全功能。只有对通过身份验证的连接而言某些数据是可读或可写的。一旦形成一个连接,两个设备可以通过一个过程被称为配对。进行配对时,密钥建立加密和认证的链接。在一个典型的案例,外围设备需要中央设备提供密钥以完成配对过程。这可能是一个固定值,如“000000”,或可能是一个随机生成的值被提供给用户。中央设备发送正确的密钥后,两台设备交换安全密钥加密和验证的链接。
在许多情况下,相同的中央设备和外围设备将会经常建立连接和断开连接。BLE具有一个安全功能允许两个设备在配对的时候给对方一个长久的安全密钥。此功能称为绑定,使得两个重连设备能够迅速重新确立加密和认证而不需要经过充分的配对过程,只要它们存储长期的密钥信息。
这里的无限广播指的是什么呢?好像广播也是有间隔的吧?不可能是一直广播的?
顶,你研究的比较清楚,谢谢了
广播时,例程调用HalLedSet( HAL_LED_1, HAL_LED_MODE_ON );这个让灯保持常亮,之所以闪烁而不是常亮,是因为启用了POWER_SAVING,休眠模式下,灯会灭;唤醒后,灯又会亮,也就是广播在间隔时是灭的,所以你看到的是闪烁现象。
Dear Derek,
请问你解决了该问题了没有?如解决了,可以分享一下吗?谢谢!
回答的很仔细,有空做一下实验。
经实验验证:GAP_SetParamValue(TGAP_LIM_ADV_TIMEOUT ,30);可以实现广播30s,数值的单位是基于秒的,很多人以为默认是ms。还有要在限制模式下。
是的
这个单位是秒
Limited Discovery mode下,GAP_SetParamValue(TGAP_LIM_ADV_TIMEOUT, 3);
General Discovery mode下,GAP_SetParamValue(TGAP_GEN_DISC_ADV_MIN,3000);
注意设置uint16 gapRole_AdvertOffTime = 0;
这个gapRole_AdvertOffTime是干什么用的,很不好用的样子
hi
你这个是什么资料?能分享给我一份吗?
什么资料啊,这个就是看stack的代码 啊
不错,谢谢
这个时间单位是秒