Add SIGUSR1 and SIGUSR2 signals to disable/enable the LEDs

Fixed enable on LedDeviceWrapper constructor.
This commit is contained in:
Portisch 2019-04-19 06:22:23 +00:00
parent 48aee89032
commit 0e756beae4
3 changed files with 26 additions and 0 deletions

View File

@ -98,6 +98,8 @@ int LinearColorSmoothing::switchOff()
_outputQueue.pop_front();
}
emit _hyperion->ledDeviceData(std::vector<ColorRgb>(_ledCount, ColorRgb::BLACK));
return 0;
}

View File

@ -20,6 +20,7 @@ LedDeviceWrapper::LedDeviceWrapper(Hyperion* hyperion)
: QObject(hyperion)
, _hyperion(hyperion)
, _ledDevice(nullptr)
, _enabled(true)
{
// prepare the device constrcutor map
#define REGISTER(className) LedDeviceWrapper::addToDeviceMap(QString(#className).toLower(), LedDevice##className::construct);

View File

@ -41,12 +41,33 @@ using namespace commandline;
void signal_handler(const int signum)
{
/// Hyperion instance
Hyperion* _hyperion = Hyperion::getInstance();
if(signum == SIGCHLD)
{
// only quit when a registered child process is gone
// currently this feature is not active ...
return;
}
else if (signum == SIGUSR1)
{
if (_hyperion != nullptr)
{
_hyperion->setComponentState(hyperion::COMP_SMOOTHING, false);
_hyperion->setComponentState(hyperion::COMP_LEDDEVICE, false);
}
return;
}
else if (signum == SIGUSR2)
{
if (_hyperion != nullptr)
{
_hyperion->setComponentState(hyperion::COMP_LEDDEVICE, true);
_hyperion->setComponentState(hyperion::COMP_SMOOTHING, true);
}
return;
}
QCoreApplication::quit();
// reset signal handler to default (in case this handler is not capable of stopping)
@ -132,6 +153,8 @@ int main(int argc, char** argv)
signal(SIGABRT, signal_handler);
signal(SIGCHLD, signal_handler);
signal(SIGPIPE, signal_handler);
signal(SIGUSR1, signal_handler);
signal(SIGUSR2, signal_handler);
// force the locale
setlocale(LC_ALL, "C");