1.1添加新的uuid:

// Characteristic 6 UUID: 0xFFF6
const uint8_t simpleProfilechar6UUID[ATT_BT_UUID_SIZE] = {
    LO_UINT16(SIMPLEPROFILE_CHAR6_UUID), HI_UINT16(SIMPLEPROFILE_CHAR6_UUID)};

1.2添加uuid宏

#define SIMPLEPROFILE_CHAR6_UUID    0xFFE6

2.1添加属性表成员

// Simple Profile Characteristic 6 Properties
static uint8_t simpleProfileChar6Props = GATT_PROP_READ | GATT_PROP_WRITE;

// Characteristic 6 Value
static uint8_t simpleProfileChar6[SIMPLEPROFILE_CHAR6_LEN] = {0};

// Simple Profile Characteristic 6 User Description
static uint8_t simpleProfileChar6UserDesp[] = "Characteristic 6\0";

2.2添加宏定义

#define SIMPLEPROFILE_CHAR6_LEN     20

2.3属性表内容填充

// Characteristic 6 Declaration
{
{ATT_BT_UUID_SIZE, characterUUID},
GATT_PERMIT_READ,
0,
&simpleProfileChar6Props},

// Characteristic Value 6
{
{ATT_BT_UUID_SIZE, simpleProfilechar6UUID},
GATT_PERMIT_READ | GATT_PERMIT_WRITE,                 
0,
simpleProfileChar6},

// Characteristic 6 User Description
{
{ATT_BT_UUID_SIZE, charUserDescUUID},
GATT_PERMIT_READ,
0,
simpleProfileChar6UserDesp},

3.1读回调增加新uuid处理,在simpleProfile_ReadAttrCB回调函数中添加:

            case SIMPLEPROFILE_CHAR6_UUID:
                           if(maxLen > SIMPLEPROFILE_CHAR6_LEN)
                           {
                               *pLen = SIMPLEPROFILE_CHAR6_LEN;
                           }
                           else
                           {
                               *pLen = maxLen;
                           }
                           tmos_memcpy(pValue, pAttr->pValue, *pLen);
                           break;

3.2写回调增加新uuid处理,在simpleProfile_WriteAttrCB回调函数中添加:

 case SIMPLEPROFILE_CHAR6_UUID:
                           //Validate the value
                           // Make sure it's not a blob oper
                           if(offset == 0)
                           {
                               if(len > SIMPLEPROFILE_CHAR6_LEN)
                               {
                                   status = ATT_ERR_INVALID_VALUE_SIZE;
                               }
                           }
                           else
                           {
                               status = ATT_ERR_ATTR_NOT_LONG;
                           }

                           //Write the value
                           if(status == SUCCESS)
                           {
                               tmos_memcpy(pAttr->pValue, pValue, SIMPLEPROFILE_CHAR6_LEN);
                               notifyApp = SIMPLEPROFILE_CHAR6;
                           }
                           break;

3.3添加宏定义

#define SIMPLEPROFILE_CHAR6         5           // RW uint8_t - Profile Characteristic 6 value

3.4READ功能填入和获取value

case SIMPLEPROFILE_CHAR6:
            if(len == SIMPLEPROFILE_CHAR6_LEN)
            {
                tmos_memcpy(simpleProfileChar6, value, SIMPLEPROFILE_CHAR6_LEN);
            }
            else
            {
                ret = bleInvalidRange;
            }
            break;

 case SIMPLEPROFILE_CHAR6:
            tmos_memcpy(value, simpleProfileChar6, SIMPLEPROFILE_CHAR6_LEN);
            break;

初始化调用或运行过程中调用SimpleProfile_SetParameter(SIMPLEPROFILE_CHAR6, SIMPLEPROFILE_CHAR6_LEN, charValue6);即可填充数据,主机调用read获取此value。

3.5WRITE功能添加回调处理

        case SIMPLEPROFILE_CHAR6:
        {
            uint8_t newValue[SIMPLEPROFILE_CHAR6_LEN];
            tmos_memcpy(newValue, pValue, len);
            PRINT("profile ChangeCB CHAR6..\n");
            break;
        }

 

posted on 2025-05-23 18:01  WCH蓝牙应用分享  阅读(53)  评论(0)    收藏  举报