diff options
| author | Franklin Wei <frankhwei536@gmail.com> | 2014-04-12 01:38:41 +0100 |
|---|---|---|
| committer | Franklin Wei <frankhwei536@gmail.com> | 2014-04-12 01:38:41 +0100 |
| commit | eac75c1807941382e424da830baba6dbbbca5c72 (patch) | |
| tree | f66a62684797f3339a8940bad2e3c2645cc8c805 /main.cpp | |
| parent | 8200cce66420b646b690ba191e755c1ecf4414bd (diff) | |
| download | pish-eac75c1807941382e424da830baba6dbbbca5c72.zip pish-eac75c1807941382e424da830baba6dbbbca5c72.tar.gz pish-eac75c1807941382e424da830baba6dbbbca5c72.tar.bz2 pish-eac75c1807941382e424da830baba6dbbbca5c72.tar.xz | |
Added and implemented signal behavior
Diffstat (limited to '')
| -rw-r--r-- | main.cpp | 22 |
1 files changed, 20 insertions, 2 deletions
@@ -1,19 +1,37 @@ +#include <cstdlib> #include <unistd.h> #include <led.h> #include <morse.h> #include <iostream> // let the user use this with a screen, too #include <parse.h> +#include <csignal> using namespace std; void parse_args(int argc, char* argv[]) { // nothing for now } +void prepare_to_exit(int signum) +{ + cerr << "Received signal " << signum << ", exiting." << endl; + dash(); + usleep(250000); + dash(); + exit(signum); +} int main(int argc, char* argv[]) { if(geteuid()!=0) // must be root to control LEDS! { - cerr << "Need to be root to control LEDs!"<< endl; - cerr << "PiSH will work fine, but the LEDs can not be used." << endl; + int ret=seteuid(0); + if(!ret) + { + cerr << "Cannot become root."<< endl; + cerr << "LEDs will not be used." << endl; + } + } + for(int i=0;i<_NSIG;++i) // handle any and all signals by exiting + { + signal(i, &prepare_to_exit); } parse_args(argc, argv); init_morse(); |