mirror of
https://github.com/paparazzi/paparazzi.git
synced 2026-05-29 02:38:07 +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">
|
<module name="bat_checker" dir="energy">
|
||||||
<doc>
|
<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_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_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>
|
</doc>
|
||||||
<header>
|
<header>
|
||||||
<file name="bat_checker.h"/>
|
<file name="bat_checker.h"/>
|
||||||
|
|||||||
@@ -31,28 +31,56 @@
|
|||||||
#include "generated/airframe.h"
|
#include "generated/airframe.h"
|
||||||
#include "generated/modules.h"
|
#include "generated/modules.h"
|
||||||
#include "subsystems/electrical.h"
|
#include "subsystems/electrical.h"
|
||||||
|
#include "mcu_periph/gpio.h"
|
||||||
#include "led.h"
|
#include "led.h"
|
||||||
|
|
||||||
#ifndef BAT_CHECKER_LED
|
#if (!defined BAT_CHECKER_GPIO && !defined BAT_CHECKER_LED)
|
||||||
#error You must define BAT_CHECKER_LED in your airframe file.
|
#error You must define BAT_CHECKER_GPIO or BAT_CHECKER_LED in your airframe file.
|
||||||
#endif
|
#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)
|
void init_bat_checker(void)
|
||||||
{
|
{
|
||||||
|
#ifdef BAT_CHECKER_LED
|
||||||
LED_INIT(BAT_CHECKER_LED);
|
LED_INIT(BAT_CHECKER_LED);
|
||||||
LED_OFF(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)
|
void bat_checker_periodic(void)
|
||||||
{
|
{
|
||||||
|
|
||||||
if (electrical.bat_critical) {
|
if (electrical.bat_critical) {
|
||||||
|
#ifdef BAT_CHECKER_LED
|
||||||
LED_ON(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) {
|
} else if (electrical.bat_low) {
|
||||||
|
#ifdef BAT_CHECKER_LED
|
||||||
LED_TOGGLE(BAT_CHECKER_LED);
|
LED_TOGGLE(BAT_CHECKER_LED);
|
||||||
|
#endif
|
||||||
|
#ifdef BAT_CHECKER_GPIO
|
||||||
|
gpio_toggle(BAT_CHECKER_GPIO);
|
||||||
|
#endif
|
||||||
} else {
|
} else {
|
||||||
|
#ifdef BAT_CHECKER_LED
|
||||||
LED_OFF(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