bes2500芯片BLE通信调试及总结

2023-11-30 09:12:08 浏览数 (2)

一 前记

恒玄的芯片是没文档的。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 作为一个软件工程师,能从纷杂的代码中找出来问题,是需要日积月累的。多看代码,多调试才是关键。

0 人点赞