/** **************************************************************************************** * @brief ADC sample complete handler **************************************************************************************** */ void app_event_adc_sample_cmp_handler(void) { int bas_average_adc_value = 0; int bas_voltage; uint8_t bas_percentage; int i; ke_evt_clear(1UL << EVENT_ADC_SAMPLE_CMP_ID); // Close ADC and battery monitor battery_monitor_enable(MASK_DISABLE); adc_clock_off(); adc_power_off(); // Calculate average value for(i = 0; i < BASS_SAMPLE_NUMBER; ++i) bas_average_adc_value += usr_env.bas_reg_buf[i]; bas_average_adc_value /= BASS_SAMPLE_NUMBER; // When enable ADC decimation, the adc value should div 4 bas_average_adc_value /= 4; // bas voltage is 4 times bas_voltage = 4 * ADC_RESULT_mV(bas_average_adc_value); // Calculate the percentage of remaining battery if(bas_voltage <= BASS_FULLY_DISCHARGED_VOLTAGE) { bas_percentage = 0; } else if(bas_voltage >= BASS_FULLY_CHARGED_VOLTAGE) { bas_percentage = 100; } else { bas_percentage = (uint8_t)((bas_voltage - BASS_FULLY_DISCHARGED_VOLTAGE) * 100 / (BASS_FULLY_CHARGED_VOLTAGE - BASS_FULLY_DISCHARGED_VOLTAGE)); } QPRINTF("battery:%dmv(%d%%) adc:%d\r\n", bas_voltage, bas_percentage, bas_average_adc_value); // Update the percentage of remaining battery via bluetooth app_bass_batt_level_upd_req(app_bass_env->conhdl, 0, bas_percentage); }
void app_eaci_data_bass_hdl(uint8_t msg_id, uint8_t param_len, uint8_t const *param) { if (app_bass_env->enabled == false) return; switch (msg_id) { case EACI_MSG_DATA_REQ_BASS_BATT_LEVEL_UPD: if (param_len == BD_ADDR_LEN + 2) { uint8_t bas_instance = 0; uint8_t batt_level = 0; bas_instance = param[0]; batt_level = param[1]; app_bass_batt_level_upd_req(app_bass_env->conhdl, bas_instance, batt_level); } break; default: break; } }