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; }
传参及发送函数:

二、删除电池服务
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),

浙公网安备 33010602011771号