int main() { int appFailureCode = 1; int sigError = -1; //Ready to catch signals sigset_t mask; sigemptyset(&mask); sigaddset(&mask, SIGUSR1); sigaddset(&mask, SIGUSR2); sigaddset(&mask, SIGINT); sigaddset(&mask, SIGTERM); if (sigprocmask(SIG_BLOCK, &mask, NULL) == -1) { sigError = errno; } initLog(false); Led redLed(24); redLed.on(); try{ if(sigError != -1){ throw Error::system(sigError, "Unable to listen to signals: "); } Chapi chapi(mask, redLed); chapi.exec(); appFailureCode = 0; } catch(Error &e){ log(LOG_ERR, "%s", e.what()); redLed.blinkNumber((e.getKind() == Error::configError) ? 2 : ((e.getKind() == Error::systemError) ? 3 : 4)); loop(); } catch(std::exception &e){ log(LOG_ERR, "%s", e.what()); redLed.blinkNumber(5); loop(); } catch(char const*err) { log(LOG_ERR, "%s", err); redLed.blinkNumber(5); loop(); } catch(...){ log(LOG_ERR, "unknown error"); redLed.blinkNumber(5); loop(); } redLed.off(); log(LOG_INFO, "chapi ended"); return appFailureCode; }
void red_thread(void * arg) { // Ar::Thread::sleep(1250); PwmOut redLed(LED_RED); redLed.period_ms(2); // 500 Hz // Fader dutyCycle(0.035f); while (1) { // print_thread_ticks(); int16_t a = g_z.receive(); float dutyCycle = (float)(4096 - (a < 0 ? -a : a)) / 4096.0f; printf("z=%d\r\n", a); redLed = dutyCycle; // Ar::Thread::sleep(kLedFadeRate); } }