CH59X/CH58X HID电池服务

HID 例程中默认提供了电池服务。

本次主要讲述如何修改电池电量以及不需要这个任务时如何删除这个服务。

一、修改电池电量

当前例程中给的电量是一个定值,可以自行修改。修改方式如下:

下面函数是计算当前电量,

static uint8_t battMeasure(void)
{
    uint16_t adc;
    uint8_t  percent;

    // Call measurement setup callback
    if(battServiceSetupCB != NULL)
    {
        battServiceSetupCB();
    }

    // Configure ADC and perform a read
    adc = 300;
    // Call measurement teardown callback
    if(battServiceTeardownCB != NULL)
    {
        battServiceTeardownCB();
    }

    if(adc >= battMaxLevel)
    {
        percent = 100;
    }
    else if(adc <= battMinLevel)
    {
        percent = 0;
    }
    else
    {
        if(battServiceCalcCB != NULL)
        {
            percent = battServiceCalcCB(adc);
        }
        else
        {
            uint16_t range = battMaxLevel - battMinLevel + 1;

            // optional if you want to keep it even, otherwise just take floor of divide
            // range += (range & 1);
            range >>= 2; // divide by 4

            percent = (uint8_t)((((adc - battMinLevel) * 25) + (range - 1)) / range);
        }
    }

    return percent;
}

传参及发送函数:

image

 

二、删除电池服务

1.打开Profile文件夹,右击battservice.c选择删除或排除编译,Profile/Include文件夹下右击battservice.h选择删除或排除编译,

2 .删除后点击编译,编译后会报错,根据报错将BATT相关的函数屏蔽,

屏蔽代码如下:

  Batt_GetParameter(BATT_PARAM_SERVICE_HANDLE,
                      &GATT_INCLUDED_HANDLE(hidAttrTbl, HID_INCLUDED_SERVICE_IDX));
Batt_GetParameter(BATT_PARAM_BATT_LEVEL_IN_REPORT, &(hidRptMap[2]));
 Batt_Register(hidDevBattCB);
Batt_AddService();
    // Setup Battery Characteristic Values
    {
        uint8_t critical = DEFAULT_BATT_CRITICAL_LEVEL;
        Batt_SetParameter(BATT_PARAM_CRITICAL_LEVEL, sizeof(uint8_t), &critical);
    }
Batt_MeasLevel();
Batt_HandleConnStatusCB(gapConnHandle, LINKDB_STATUS_UPDATE_REMOVED);

这些删除或者屏蔽之后就不会报错了,

三.Profile文件夹中hidconsumerservice.c中hidAttrTbl需删除:

    // Included service (battery)
    {
        {ATT_BT_UUID_SIZE, includeUUID},
        GATT_PERMIT_READ,
        0,
        (uint8_t *)&include},
复制代码
    // Feature Report declaration
    {
        {ATT_BT_UUID_SIZE, characterUUID},
        GATT_PERMIT_READ,
        0,
        &hidReportFeatureProps},

    // Feature Report
    {
        {ATT_BT_UUID_SIZE, hidReportUUID},
        GATT_PERMIT_ENCRYPT_READ | GATT_PERMIT_ENCRYPT_WRITE,
        0,
        &hidReportFeature},

    // HID Report Reference characteristic descriptor, feature
    {
        {ATT_BT_UUID_SIZE, reportRefUUID},
        GATT_PERMIT_READ,
        0,
        hidReportRefFeature},
复制代码
HID_INCLUDED_SERVICE_IDX
HID_FEATURE_IDX,                 // Feature Report
HID_REPORT_REF_FEATURE_IDX
    // Feature report
    hidRptMap[1].id = hidReportRefFeature[0];
    hidRptMap[1].type = hidReportRefFeature[1];
    hidRptMap[1].handle = hidAttrTbl[HID_FEATURE_IDX].handle;
    hidRptMap[1].cccdHandle = 0;
    hidRptMap[1].mode = HID_PROTOCOL_MODE_REPORT;

四.广播包:

复制代码
    // service UUIDs
    0x03, // length of this data
    GAP_ADTYPE_16BIT_MORE,
    LO_UINT16(HID_SERV_UUID),
    HI_UINT16(HID_SERV_UUID),
//    LO_UINT16(BATT_SERV_UUID),
//    HI_UINT16(BATT_SERV_UUID),

 

posted @ 2026-08-01 17:57  小舟从此逝_1  阅读(10)  评论(0)    收藏  举报