mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-09 22:49:53 +08:00
[module] update bat_checker to allow configuration from GPIO
and not only LED
This commit is contained in:
@@ -2,9 +2,22 @@
|
||||
|
||||
<module name="bat_checker" dir="energy">
|
||||
<doc>
|
||||
<description>Battery checker module</description>
|
||||
<description>
|
||||
Battery checker module
|
||||
|
||||
When the battery voltage goes below the BAT_LOW level, this will toggle a GPIO/LED.
|
||||
If the battery voltage is lower than BAT_CRITICAL level, the LED/GPIO stays ON.
|
||||
The output signal can be connected to an actaul LED or a buzzer to indicated the end of battery to the user.
|
||||
|
||||
When a LED is used, define the LED number in your airframe with BAT_CHECKER_LED.
|
||||
When a GPIO is used, define the GPIO port and pin in your airframe with BAT_CHECKER_GPIO.
|
||||
You should at least use one of these two options.
|
||||
</description>
|
||||
<define name="BAT_CHECKER_DELAY" value="delay" description="number of seconds the battery voltage has to below LOW_BAT_LEVEL before warning signal is activated"/>
|
||||
<define name="BAT_CHECKER_LED" value="X" description="led number to use for the warning signal"/>
|
||||
<define name="BAT_CHECKER_GPIO" value="GPIOX,GPIOY" description="alternatively, a GPIO can be set instead of a LED (ex: GPIOA,GPIO5)"/>
|
||||
<define name="BAT_CHECKER_GPIO_ON" value="gpio_set" description="tells if output signal is ON when GPIO is high or low"/>
|
||||
<define name="BAT_CHECKER_GPIO_OFF" value="gpio_clear" description="tells if output signal is OFF when GPIO is high or low"/>
|
||||
</doc>
|
||||
<header>
|
||||
<file name="bat_checker.h"/>
|
||||
|
||||
@@ -31,28 +31,56 @@
|
||||
#include "generated/airframe.h"
|
||||
#include "generated/modules.h"
|
||||
#include "subsystems/electrical.h"
|
||||
#include "mcu_periph/gpio.h"
|
||||
#include "led.h"
|
||||
|
||||
#ifndef BAT_CHECKER_LED
|
||||
#error You must define BAT_CHECKER_LED in your airframe file.
|
||||
#if (!defined BAT_CHECKER_GPIO && !defined BAT_CHECKER_LED)
|
||||
#error You must define BAT_CHECKER_GPIO or BAT_CHECKER_LED in your airframe file.
|
||||
#endif
|
||||
|
||||
// in case GPIO logic is inverted
|
||||
#ifndef BAT_CHECKER_GPIO_ON
|
||||
#define BAT_CHECKER_GPIO_ON gpio_set
|
||||
#endif
|
||||
#ifndef BAT_CHECKER_GPIO_OFF
|
||||
#define BAT_CHECKER_GPIO_OFF gpio_clear
|
||||
#endif
|
||||
|
||||
void init_bat_checker(void)
|
||||
{
|
||||
#ifdef BAT_CHECKER_LED
|
||||
LED_INIT(BAT_CHECKER_LED);
|
||||
LED_OFF(BAT_CHECKER_LED);
|
||||
#endif
|
||||
#ifdef BAT_CHECKER_GPIO
|
||||
gpio_setup_output(BAT_CHECKER_GPIO);
|
||||
#endif
|
||||
}
|
||||
|
||||
void bat_checker_periodic(void)
|
||||
{
|
||||
|
||||
if (electrical.bat_critical) {
|
||||
#ifdef BAT_CHECKER_LED
|
||||
LED_ON(BAT_CHECKER_LED);
|
||||
#endif
|
||||
#ifdef BAT_CHECKER_GPIO
|
||||
BAT_CHECKER_GPIO_ON(BAT_CHECKER_GPIO);
|
||||
#endif
|
||||
} else if (electrical.bat_low) {
|
||||
#ifdef BAT_CHECKER_LED
|
||||
LED_TOGGLE(BAT_CHECKER_LED);
|
||||
#endif
|
||||
#ifdef BAT_CHECKER_GPIO
|
||||
gpio_toggle(BAT_CHECKER_GPIO);
|
||||
#endif
|
||||
} else {
|
||||
#ifdef BAT_CHECKER_LED
|
||||
LED_OFF(BAT_CHECKER_LED);
|
||||
#endif
|
||||
#ifdef BAT_CHECKER_GPIO
|
||||
BAT_CHECKER_GPIO_OFF(BAT_CHECKER_GPIO);
|
||||
#endif
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user