I'm a little reluctant to post this since, if it was an issue, it would surely have been reported by now. However....
In testing battery service notifications it seems that it only reports when the measured level is less that the previous measured level. This is fine for alkaline batteries etc. but LiPo batteries will never show that they are recharging/have been recharged unless you power-cycle the peripheral.
Looking at battservice.c:
In two places we have:
bStatus_t Batt_MeasLevel( void ) { uint8 level; level = battMeasure(); // If level has gone down if (level < battLevel) { // Update level battLevel = level; // Send a notification battNotifyLevel(); } return SUCCESS; and static bStatus_t battReadAttrCB( uint16 connHandle, gattAttribute_t *pAttr, uint8 *pValue, uint8 *pLen, uint16 offset, uint8 maxLen, uint8 method ) { .... // Measure battery level if reading level if ( uuid == BATT_LEVEL_UUID ) { uint8 level; level = battMeasure(); // If level has gone down if (level < battLevel) { // Update level battLevel = level; }
If you replace the level < battLevel with level != battLevel the service correctly notifies on both decreasing and increasing battery level.
But I guess it's forbidden to change a BT registered service?
Regards,
ac