ch582 的 BLE peripheral 案例如何才能添加一个自己的 Characteristic

WCH官方你们好!我现在是想要在 peripheral 案例上稍作修改,借此学习下你们这套蓝牙库,随后我再继续开发实现自己需要的功能。


--------------------------------- 问题1 ---------------------------------


我想要在 Characteristic 5 后面添加一个 My Characteristic,也就是第六个 Characteristic,我是这么写的:


首先是 gattprofile.c 这个文件,有这么一段代码:

static gattAttribute_t simpleProfileAttrTbl[] = {
    // Simple Profile Service
    {
        {ATT_BT_UUID_SIZE, primaryServiceUUID}, /* type */
        GATT_PERMIT_READ,             /* permissions */
        0,                     /* handle */
        (uint8_t *)&simpleProfileService      /* pValue */
    },


这段代码里面就是 GATT 的定义了,我在这段代码的上面添加了CHAR的UUID,读写属性,Value,User Desp。我是这么改的:


// **************************************** MY CODE BEGIN **************************************** //
#define MY_CHAR_UUID 0x8888
const uint8_t MyCharUUID[ATT_BT_UUID_SIZE] = {
    LO_UINT16(MY_CHAR_UUID), HI_UINT16(MY_CHAR_UUID)
};
static uint8_t MyCharProps = GATT_PROP_READ;
const uint8_t MyCharValue[4] = {
    0x01, 0x02, 0x03, 0x04
};
static uint8_t MyCharValueUserDesp[] = "MyCharValueUserDesp\0";
// **************************************** MY CODE END **************************************** //

static gattAttribute_t simpleProfileAttrTbl[] = {
    // Simple Profile Service
    {
        {ATT_BT_UUID_SIZE, primaryServiceUUID}, /* type */
        GATT_PERMIT_READ,                       /* permissions */
        0,                                      /* handle */
        (uint8_t *)&simpleProfileService        /* pValue */
    },


随后在 simpleProfileAttrTbl[] 的最后,我又添加了这么一段代码:

    // Characteristic 5 User Description
    {
        {ATT_BT_UUID_SIZE, charUserDescUUID},
        GATT_PERMIT_READ,
        0,
        simpleProfileChar5UserDesp},

    // **************************************** MY CODE BEGIN **************************************** //
    // My Characteristic Declaration
    {
        {ATT_BT_UUID_SIZE, characterUUID},
        GATT_PERMIT_READ,
        0,
        &MyCharProps},

    // My Characteristic Value
    {
        {ATT_BT_UUID_SIZE, MyCharUUID},
        GATT_PERMIT_READ,
        0,
        (uint8_t*)MyCharValue},

    // My Characteristic User Desc
    {
        {ATT_BT_UUID_SIZE, charUserDescUUID},
        GATT_PERMIT_READ,
        0,
        MyCharValueUserDesp},
    // **************************************** MY CODE END **************************************** //
};


经过手机端的蓝牙调试助手,以及 nRF Connect 这两款软件测试,User Desp 的值都是可以取出来的,但是 “My Characteristic Value”的值(即 0x01,0x02,0x03,0x04)却无论如何都取不出来,请问我还少写了什么?


--------------------------------- 问题2 ---------------------------------


此外,我还有一个别的问题:

我在 peripheral 案例中的 “void Peripheral_Init()”函数中,找到了这么一段代码,如果我没有理解错误的话,这应该就是给每个 Characteristic 的 Value 赋予初值。

    // Setup the SimpleProfile Characteristic Values
    {
        uint8_t charValue1[SIMPLEPROFILE_CHAR1_LEN] = {1};
        uint8_t charValue2[SIMPLEPROFILE_CHAR2_LEN] = {2};
        uint8_t charValue3[SIMPLEPROFILE_CHAR3_LEN] = {3};
        uint8_t charValue4[SIMPLEPROFILE_CHAR4_LEN] = {4};
        uint8_t charValue5[SIMPLEPROFILE_CHAR5_LEN] = {1, 2, 3, 4, 5};

        SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR1, SIMPLEPROFILE_CHAR1_LEN, charValue1);
        SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR2, SIMPLEPROFILE_CHAR2_LEN, charValue2);
        SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR3, SIMPLEPROFILE_CHAR3_LEN, charValue3);
        SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR4, SIMPLEPROFILE_CHAR4_LEN, charValue4);
        SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR5, SIMPLEPROFILE_CHAR5_LEN, charValue5);
    }


但是,当我打开 HID_Keyboard 案例后,我发现在 HID_Keyboard 案例中,并没有为 BLE HID Service 的每个字段都调用 HidDev_SetParameter() 或 Hid_SetParameter()。


请问这是为什么?


--------------------------------- 问题3 ---------------------------------


请问:

SimpleProfile_SetParameter 和 simpleProfile_WriteAttrCB 有什么区别?为什么要分成这两个函数呢?

如果是添加属性,可以参考博客:

CH573 CH582 CH579蓝牙从机(peripheral)例程讲解三(蓝牙服务修改) - WCH蓝牙应用分享 - 博客园

如果是添加服务,可以发送邮件至邮箱lpc@wch.cn,提供一份基于HID添加服务的demo。


你好,我的邮箱是 个人信息保护,已隐藏




你好,我的邮箱是个人信息保护,已隐藏,也想要一份添加服务的例程


已发送至邮箱, 请查收。


我也要,邮箱:个人信息保护,已隐藏


已发送至邮箱,请查收。


只有登录才能回复,可以选择微信账号登录