一 前记
恒玄的芯片是没文档的。BES2500芯片有着资源大,代码乱等特点。最近用到了这里的BLE部分。又折腾了一把,伤筋动骨啊。不过,总算是搞定了。这里是要做个总结吧。
二 源码解析
关于ble广播:
代码语言:txt复制 app_ble_custom_adv_write_data(BLE_ADV_ACTIVITY_USER_1,
true,
BLE_ADV_PUBLIC_STATIC,
(uint8_t *)adv_addr_set2,
NULL,
80,
ADV_TYPE_EXT_CON_DIRECT,
ADV_MODE_LEGACY,
-5,
(uint8_t *)APP_DEMO_DATA1, APP_DEMO_DATA1_LEN,
NULL, 0);
app_ble_custom_adv_start(BLE_ADV_ACTIVITY_USER_1);
这里可以让ble能搜到的,这里面有不少看点:
重心是两个玩意,一个是广播类型:ADV_TYPE_EXT_CON_DIRECT
这个是可以搜到的关键,这个宏定义要深入理解一下:
代码语言:javascript复制/* Advertise Types */
/* ************************************************ */
typedef enum app_ble_adv_type
{
/// Connectable and scannable undirected advertising
ADV_TYPE_UNDIRECT = 0,
/// Directed connectable with Low Duty Cycle
ADV_TYPE_DIRECT_LDC,
/// Directed connectable with High Duty Cycle
ADV_TYPE_DIRECT_HDC,
/// Non-connectable but Scannable undirected advertising
ADV_TYPE_NON_CONN_SCAN,
/// Non-connectable and nonscannable undirected
ADV_TYPE_NON_CONN_NON_SCAN,
/// Undirected connectable but scannable with extended ADV
ADV_TYPE_CONN_EXT_ADV,
/// Directed connectable no scannable with extended ADV
ADV_TYPE_EXT_CON_DIRECT,
/// Type MAx Number
ADV_TYPE_MAX,
} BLE_ADV_TYPE_E;
还有就是数据信息:
#define APP_DEMO_DATA1 "x02x01x06x03x18x04xFE"
#define APP_DEMO_DATA1_LEN (7)
这个到底啥意思呢?
请看说明:
标志域 02 01 06 为 广播数据类型
02:此域长度为2个字节
01: 为标志域
06:BIT1,BIT2 = 1, 根据以下定义,所以为:
* LE General Discoverable Mode
03 03 02 18 为服务标识域
03:此域长度为2个字节
03: 为服务标识域
02 18:=》18 02 => Immediate Alert Service (防丢报警服务)
这里面这样就清楚了。
三 问题梳理
1 源码要深入理解。
这里涉及到的不同产品,都揉在一起了。导致代码量庞大。多分析源码和看流程,才是进步的关键。
2 编译宏的问题。这里面最大的问题是编译宏没搞对。不同的产品需要不同的宏,这里要深入的分析了。没文档,要自己摸索的。
四 总结备忘
1 作为一个软件工程师,能从纷杂的代码中找出来问题,是需要日积月累的。多看代码,多调试才是关键。