catch USR1 signal to poweroff quicker

Signed-off-by: Vincent-FK <vincent.buso@funkey-project.com>
This commit is contained in:
Vincent-FK 2020-10-28 08:46:46 +01:00
parent b7b91d4aae
commit 6cff159abf
4 changed files with 69 additions and 10 deletions

View File

@ -177,6 +177,10 @@ void MenuMode::end( )
return;
}
void MenuMode::stop( ){
stop_menu_loop = 1;
}
void MenuMode::draw_progress_bar(SDL_Surface * surface, uint16_t x, uint16_t y, uint16_t width,
uint16_t height, uint8_t percentage, uint16_t nb_bars){

View File

@ -52,15 +52,17 @@ typedef enum {ASPECT_RATIOS} ENUM_ASPECT_RATIOS_TYPES;
#define SHELL_CMD_USB_UNMOUNT "share stop"
#define SHELL_CMD_USB_CHECK_IS_SHARING "share is_sharing"
#define SHELL_CMD_POWERDOWN "shutdown_funkey"
#define SHELL_CMD_SCHEDULE_POWERDOWN "sched_shutdown"
class MenuMode
{
public:
//MenuMode();
static void init(Configuration &c);
static void end();
static int launch( );
static void init(Configuration &c);
static void end();
static int launch( );
static void stop( );
/*static SDL_Surface * draw_screen;

View File

@ -27,6 +27,7 @@
#include "Utility/Utils.h"
#include "Collection/MenuParser.h"
#include "SDL.h"
#include <SDL/SDL_ttf.h>
#include "Control/UserInput.h"
#include "Graphics/PageBuilder.h"
#include "Graphics/Page.h"
@ -41,7 +42,7 @@
#include <tuple>
#include <vector>
#include <time.h>
#include <SDL/SDL_ttf.h>
#include <signal.h>
#if defined(__linux) || defined(__APPLE__)
#include <sys/stat.h>
@ -180,6 +181,10 @@ int RetroFE::initialize( void *context )
Logger::write( Logger::ZONE_INFO, "RetroFE", "Initialized meta database" );
}
/* Init Signals */
Logger::write( Logger::ZONE_INFO, "RetroFE", "Initializing signal USR1..." );
signal(SIGUSR1, instance->handle_sigusr1);
instance->initialized = true;
return 0;
@ -979,7 +984,7 @@ void RetroFE::run( )
default:
std::stringstream ss;
ss << "Wrong state: " << state;
Logger::write( Logger::ZONE_ERROR, "RetroFE", "Wrong state: " + ss.str() );
Logger::write( Logger::ZONE_ERROR, "RetroFE", ss.str() );
state = RETROFE_IDLE;
break;
}
@ -1527,3 +1532,49 @@ CollectionInfo *RetroFE::getMenuCollection( std::string collectionName )
collection->playlists["all"] = &collection->items;
return collection;
}
/* Handler for SIGUSR1, caused by closing the console */
void RetroFE::handle_sigusr1(int sig)
{
printf("Caught signal USR1 %d\n", sig);
std::stringstream ss;
ss << "Caught signal USR1: " << sig;
Logger::write( Logger::ZONE_ERROR, "RetroFE", ss.str() );
/* Exit menu if it was launched */
MenuMode::stop();
/** Poweroff */
quick_poweroff();
}
/* Quick save and turn off the console */
void RetroFE::quick_poweroff()
{
/* Vars */
char shell_cmd[200];
FILE *fp;
/* Send command to kill any previously scheduled shutdown */
sprintf(shell_cmd, "pkill %s", SHELL_CMD_SCHEDULE_POWERDOWN);
fp = popen(shell_cmd, "r");
if (fp == NULL) {
printf("Failed to run command %s\n", shell_cmd);
std::stringstream ss;
ss << "Failed to run command " << shell_cmd;
Logger::write( Logger::ZONE_ERROR, "RetroFE", ss.str() );
}
/* Clean Poweroff */
sprintf(shell_cmd, "%s", SHELL_CMD_POWERDOWN);
fp = popen(shell_cmd, "r");
if (fp == NULL) {
printf("Failed to run command %s\n", shell_cmd);
std::stringstream ss;
ss << "Failed to run command " << shell_cmd;
Logger::write( Logger::ZONE_ERROR, "RetroFE", ss.str() );
}
}

View File

@ -89,11 +89,13 @@ public:
void launchExit( );
private:
volatile bool initialized;
volatile bool initializeError;
volatile bool initMetaDb;
SDL_Thread *initializeThread;
static int initialize( void *context );
volatile bool initialized;
volatile bool initializeError;
volatile bool initMetaDb;
SDL_Thread *initializeThread;
static int initialize( void *context );
static void handle_sigusr1(int sig);
static void quick_poweroff( );
#undef X
#define X(a, b) a,