Mantis: play power off tune

To play a power off tune, I needed to convert the file to C++, so that I
could use the uORB::Publication.

The current implementation starts playing the power off sound but then
stops it as soon as the button is released.

The problem is mostly that we only get an interrupt when the button is
pressed or released but we don't seem to be able to poll it, at least
not in the current state.
This commit is contained in:
Julian Oes 2021-09-28 11:32:48 +02:00 committed by Daniel Agar
parent 860b23dd17
commit 6960600c28
2 changed files with 15 additions and 1 deletions

View File

@ -39,7 +39,7 @@ add_library(drivers_board
spi.cpp
timer_config.cpp
usb.c
pwr.c
pwr.cpp
)
add_dependencies(drivers_board arch_board_hw_info)

View File

@ -53,6 +53,7 @@
#include <nuttx/arch.h>
#include <uORB/uORB.h>
#include <uORB/Publication.hpp>
#include <uORB/topics/led_control.h>
#include <uORB/topics/tune_control.h>
@ -116,13 +117,26 @@ int board_power_off(int status)
static int board_button_irq(int irq, FAR void *context, FAR void *args)
{
uORB::Publication<tune_control_s, tune_control_s::ORB_QUEUE_LENGTH> tune_control_pub{ORB_ID(tune_control)};
if (board_pwr_button_down()) {
led_on(BOARD_LED_RED);
clock_gettime(CLOCK_REALTIME, &time_down);
power_state_notification(PWR_BUTTON_DOWN);
tune_control_s tune_control{};
tune_control.volume = tune_control_s::VOLUME_LEVEL_DEFAULT - 20;
tune_control.tune_id = tune_control_s::TUNE_ID_POWER_OFF;
tune_control.timestamp = hrt_absolute_time();
tune_control_pub.publish(tune_control);
} else {
tune_control_s tune_control{};
tune_control.tune_override = true;
tune_control.timestamp = hrt_absolute_time();
tune_control_pub.publish(tune_control);
power_state_notification(PWR_BUTTON_UP);
led_off(BOARD_LED_RED);