/** * @file include/di_fw/battery.h * @brief battery header file * @date August 24, 2016 * @author A.A.W.M. Ruijs * @copyright 2016 Dual Inventive Technology Centre B.V. */ #ifndef INCLUDE_DI_FW_BATTERY_H_ #define INCLUDE_DI_FW_BATTERY_H_ #include /** * Enum of batteries that can be selected * Note: entries are used as index in an array, do not change values */ enum di_fw_batteries { DI_FW_BATTERY_1 = 0, #ifdef DI_FW_BATTERY_ADC_CHANNEL2 DI_FW_BATTERY_2, #endif DI_FW_BATTERY_COUNT, }; struct di_fw_battery_data { di_time_t last_update; float current_voltage; float previous_voltage; const enum di_fw_batteries battery_num; enum di_device_battery_state current_state; enum di_device_battery_state previous_state; }; /** * ADC conversion groep for battery measurements */ extern const ADCConversionGroup di_fw_battery_adc_conversion_group; /** * convert raw ADC value to voltage * @param val the adc sample that need to be converted to voltage */ float di_fw_battery_calculate_voltage(adcsample_t val); /** * Check if device "release" transition is allowed ("idle" -> "armed") by checking battery #1 * state for HALF or FULL state. * @return true When release is allowed, false otherwise */ bool di_fw_battery_is_state_change_allowed(void); /** * return battery state of requested battery * @param id requested battery * * @return enum di_device_battery_state current battery state or DI_DEVICE_BATTERY_STATE_UNKNOWN * in case of an invalid battery id */ enum di_device_battery_state di_fw_battery_get_battery_state(enum di_fw_batteries id); /** * return battery error for current state of requested battery * @param id requested battery * * @return di_errno_t correpsponding error */ di_errno_t di_fw_battery_get_battery_error(enum di_fw_batteries id); /** * return battery warning for current state of requested battery * @param id requested battery * * @return di_errno_t correpsponding warning */ di_errno_t di_fw_battery_get_battery_warning(enum di_fw_batteries id); /** * take one battery voltage sample. Provide your own bufer * * @param adc_buffer pointer to 'adc_sample' type of buffer to receive the samples * * @return DNOK when sample was taken, DNE_PARAM or DNE_IOFAILED otherwise */ di_errno_t di_fw_battery_take_sample(adcsample_t *adc_buffer); /** * configure ADC for measurement and start the thread for measuring * @param powersafe_mode: boolean that indicates the powersafe mode. When TRUE the powersafe mode * is active and no periodic thread will be spawned and no battery data will be published * When FALSE the module will function in normal operation and data will be * published */ void di_fw_battery_init(bool powersafe_mode); #endif /* INCLUDE_DI_FW_BATTERY_H_ */