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 有什么区别?为什么要分成这两个函数呢?