当前位置: 首页 > news >正文

个人做网站租云服务器/百度保障平台 客服

个人做网站租云服务器,百度保障平台 客服,张家港网站优化,蚌埠公司做网站转载:http://blog.csdn.net/zzfenglin/article/details/51166830 发现模式 (Discoverable Mode) 低功耗蓝牙的发现模式主要分为有限可发现模式和普通可发现模式,TI的CC2540和CC2541的工程中发现模式具体定义在“components/ble/i…

转载:http://blog.csdn.net/zzfenglin/article/details/51166830

发现模式 (Discoverable Mode)


低功耗蓝牙的发现模式主要分为有限可发现模式和普通可发现模式,TI的CC2540和CC2541的工程中发现模式具体定义在components/ble/include目录下的Gap.h文件中,如下所示:

/** @defgroup GAP_ADTYPE_FLAGS_MODES GAP ADTYPE Flags Discovery Modes
* @{
*/
#define GAP_ADTYPE_FLAGS_LIMITED                0x01 //!< Discovery Mode: LE Limited Discoverable Mode
#define GAP_ADTYPE_FLAGS_GENERAL                0x02 //!< Discovery Mode: LE General Discoverable Mode
#define GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED    0x04 //!< Discovery Mode: BR/EDR Not Supported
/** @} End GAP_ADTYPE_FLAGS_MODES */

注意发现模式的定义必须在广播数据的开头处,不能在扫描回应数据中定义,实例代码如下:

// GAP - Advertisement data (max size = 31 bytes, though this is
// best kept short to conserve power while advertisting)
static uint8 advertData[] =
{// Flags; this sets the device to use limited discoverable// mode (advertises for 30 seconds at a time) instead of general// discoverable mode (advertises indefinitely)0x02,   // length of this dataGAP_ADTYPE_FLAGS,DEFAULT_DISCOVERABLE_MODE | GAP_ADTYPE_FLAGS_BREDR_NOT_SUPPORTED,// service UUID, to notify central devices what services are included// in this peripheral0x03,   // length of this dataGAP_ADTYPE_16BIT_MORE,      // some of the UUID's, but not allLO_UINT16( SIMPLEPROFILE_SERV_UUID ),HI_UINT16( SIMPLEPROFILE_SERV_UUID ),};



有限可发现模式 (GAP_ADTYPE_FLAGS_LIMITED)


如果将上述实例代码段中的DEFAULT_DISCOVERABLE_MODE设置为GAP_ADTYPE_FLAGS_LIMITED,设置的代码如下:

#define DEFAULT_DISCOVERABLE_MODE             GAP_ADTYPE_FLAGS_LIMITED

则设备就处于有限可发现模式,当设备处于有限可发现模式时,很多人以及网上的一些资料提到广播会在使能打开之后的 30.72s 之后停止广播。但是实际测试并不是这样,而是180s,通过查阅发现在Gap.h文件中有如下说明:

#define TGAP_LIM_ADV_TIMEOUT           1  //!< Maximum time to remain advertising, when in Limited Discoverable mode. In seconds (default 180 seconds)

注释中说明在有限可发现模式下,默认是180s之后停止广播,如果想设置这个值,可以用下面的方式:

GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT, ADV_TIMEOUT );


注意:通过上述方法设置 TGAP_LIM_ADV_TIMEOUT时,设置的时间单位是s(秒)。


还有些人会碰到另一种情况,就是在设置的时间或者是默认的时间之后,广播停止了,但是过了一段时间,默认应该是 30s 之后,广播又重新开启了,出现这种情况的时候确认下GAPROLE_ADVERT_OFF_TIME的设置,如果不设置该值,就会出现停止广播 30s(默认值)之后重新广播的情况,该值的默认值在projects/ble/profiles/roles目录下的peripheral.c文件中设置,如下:

#define DEFAULT_ADVERT_OFF_TIME       30000   // 30 seconds

所以如果要实现有限可发现模式,就要在应用的初始化地方设置该值为 0,设置方式如下:

uint16 gapRole_AdvertOffTime = 0;
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );


介于上面的说明,我们来实现两个具体的情景便于理解:


1.广播使能开启之后,限制广播在 30s 之后停止,并且在应用部分没有使能打开的情况下不再广播,相关代码实现如下:

#define DEFAULT_DISCOVERABLE_MODE             GAP_ADTYPE_FLAGS_LIMITEDuint16 gapRole_AdvertOffTime = 0;
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );//GAPROLE_ADVERT_OFF_TIME设置的时间单位是ms,默认是30suint16 ADV_TIMEOUT = 30;
GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT, ADV_TIMEOUT );//设置的单位是s,不设置的话,默认是180s


2.广播使能开启之后,限制广播在 20s 之后停止,然后过 15s 之后自动重新广播,如此反复。

#define DEFAULT_DISCOVERABLE_MODE             GAP_ADTYPE_FLAGS_LIMITEDuint16 gapRole_AdvertOffTime = 15000;
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );//GAPROLE_ADVERT_OFF_TIME设置的时间单位是ms,默认是30suint16 ADV_TIMEOUT = 20;
GAP_SetParamValue( TGAP_LIM_ADV_TIMEOUT, ADV_TIMEOUT );//设置的单位是s,不设置的话,默认是180s



另外,该模式下设置广播间隔方法如下:

GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MIN, advInt );//单位是0.625ms
GAP_SetParamValue( TGAP_LIM_DISC_ADV_INT_MAX, advInt );//单位是0.625ms



普通可发现模式 (GAP_ADTYPE_FLAGS_GENERAL)


若将实例代码段中的DEFAULT_DISCOVERABLE_MODE设置为GAP_ADTYPE_FLAGS_GENERAL,设置的代码如下:

#define DEFAULT_DISCOVERABLE_MODE             GAP_ADTYPE_FLAGS_GENERAL

普通可发现模式是用的最多的模式,在该模式下,我们可以设置广播持续时间,设置方法如下:

GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_ADV_DURATION );

我们看一下TGAP_GEN_DISC_ADV_MIN的介绍,仍然在Gap.h中,如下:

#define TGAP_GEN_DISC_ADV_MIN          0  //!< Minimum time to remain advertising, when in Discoverable mode (mSec).  Setting this parameter to 0 turns off the timeout (default).

从注释可以看到如果设置DEFAULT_ADV_DURATION为0,那就关闭了超时,也就是会一直持续的广播(当然前提是应用部分没有去主动使能关闭广播)。这个时候GAPROLE_ADVERT_OFF_TIME就无效了,因为持续广播时不会触发GAP_END_DISCOVERABLE_DONE_EVENT这个事件(该事件只有在广播关闭的时候才会发送给应用层,并在peripheral.c中进行接收处理,这是唯一处理GAPROLE_ADVERT_OFF_TIME的地方)。


接下来直接介绍几种使用场景:


1.最常用的场景,一直持续广播

#define DEFAULT_DISCOVERABLE_MODE             GAP_ADTYPE_FLAGS_GENERAL
// Duration of slow advertising duration in ms (set to 0 for continuous advertising)
#define DEFAULT_SLOW_ADV_DURATION             0
GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_SLOW_ADV_DURATION );

2.普通可发现模式下的限时广播,使能打开广播后限制20s后停止广播,而且不再自动重新广播。

#define DEFAULT_DISCOVERABLE_MODE             GAP_ADTYPE_FLAGS_GENERAL
// Duration of advertising duration in ms (set to 0 for continuous advertising)
#define DEFAULT_ADV_DURATION             20000
GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_ADV_DURATION );
uint16 gapRole_AdvertOffTime = 0;
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );

3.循环间断限时广播,使能打开广播之后,广播20s,然后停止广播,过10s之后自动重新开始广播,如此反复。

#define DEFAULT_DISCOVERABLE_MODE             GAP_ADTYPE_FLAGS_GENERAL
// Duration of slow advertising duration in ms (set to 0 for continuous advertising)
#define DEFAULT_ADV_DURATION             20000
GAP_SetParamValue( TGAP_GEN_DISC_ADV_MIN, DEFAULT_ADV_DURATION );
uint16 gapRole_AdvertOffTime = 10000;
GAPRole_SetParameter( GAPROLE_ADVERT_OFF_TIME, sizeof( uint16 ), &gapRole_AdvertOffTime );

普通可发现模式修改广播间隔的方法如下:

GAP_SetParamValue(TGAP_GEN_DISC_ADV_INT_MIN, advInt );//单位是0.625ms
GAP_SetParamValue(TGAP_GEN_DISC_ADV_INT_MAX, advInt );	//单位是0.625ms


参考博文:http://blog.csdn.net/zhuangjitongxue/article/details/49805595

http://www.lbrq.cn/news/1102699.html

相关文章:

  • 制作公司网站的步骤/百度网盘资源链接入口
  • 设计联盟网站/免费域名怎么注册
  • 想做设计师需要学什么/长沙seo免费诊断
  • 做关于时尚网站的目的/成都网络推广中联无限
  • 2016网站开发语言/seo网站优化培训价格
  • 六安网站关键词排名优化报价/深圳优化公司样高粱seo
  • 上海哪家公司做网站好/网络营销的市场背景
  • 怎么做考试资料分享网站/seo快速排名是什么
  • 怎样在我的世界做汽车视频网站/免费建网站软件哪个好
  • 网站的竞价怎么做/青岛seo优化公司
  • 网上写作真正能赚钱的网站/友链互换平台推荐
  • 招聘网站上找在家做/百度付费推广
  • 政府门户网站建设取得/快速seo优化
  • 网站建设深/网店运营实训报告
  • 2023免费推广网站/百度下载安装到桌面上
  • 网站建设支付/百度sem认证
  • 深圳电商网站开发公司/镇江百度推广
  • 果洛wap网站建设公司/搜索引擎排名机制
  • 大理微网站建设/网络营销公司哪家好
  • 电商客服外包加盟代理/网站优化公司开始上班了
  • 做网站还要做点手机吗/数据分析师要学什么
  • 网站建设技术参数/企业网站优化价格
  • 做桑拿网站犯法吗/福州seo推广外包
  • 四川省建筑施工企业特种作业人员/长沙网站优化推广
  • 重庆巨能建设集团网站/广州疫情防控措施
  • 中装建设官方网站/自媒体营销模式有哪些
  • 移动门网站建设/网络推广网络营销外包
  • 做彩票网站代理/哪里有竞价推广托管
  • 玉溪网站建设网站建设/网页生成
  • wordpress 发布时间不对/沧浪seo网站优化软件
  • MongoDB多节点集群原理 -- 复制集
  • 数据结构与算法汇总
  • MES系列 - MES是提升制造执行效率与透明度的关键系统
  • 050_Set接口(HashSet / TreeSet / LinkedHashSet)
  • 深入浅出理解动态规划
  • Android无需授权直接访问Android/data目录漏洞