boolean LEDGroup::setMode(const String& mode) { modes newMode = getModeFromString(mode); if (newMode != NUM_MODES) { _mode = newMode; switch (_mode) { case NONE: // Stop the ticker and turn off all LEDs _modeTicker.detach(); setAllState(false); break; case ALL: // Stop the ticker and turn on all LEDs _modeTicker.detach(); setAllState(true); case BLINK: _modeFlashState = false; _modeTicker.attach_ms(500, _modeStepper); break; case CHASE: _modeCurrentState = 5; // LED 1 and 3 _modeTicker.attach_ms(250, _modeStepper); break; case TWINKLE: _modeTwinkleCounter = 0; _modeCurrentState = 0; _modeNextState = random(0, _numLeds); _leds[_modeCurrentState]->setState(true); _modeTicker.attach_ms(100, _modeStepper); break; } return true; } return false; }
void Config::handleCmdLine() { // at this point opts_ should be populated with command line options if (opts_.count(OPT_HELP_ONLYLONG)) { help_ = true; ok_ = true; std::cout << optdesc_ << std::endl; } else if (opts_.count(OPT_VERSION_ONLYLONG)) { version_ = true; ok_ = true; } else { // extract options values try { if (opts_.count(OPT_PID_ONLYLONG)) { pidfile_ = expandTilde(opts_[OPT_PID_ONLYLONG].as<std::string>()); pidfile_set_ = true; } if (opts_.count(OPT_LOG_ONLYLONG)) { getLogFromChar(opts_[OPT_LOG_ONLYLONG].as<char>()); } if (opts_.count(OPT_LOG_FILE_ONLYLONG)) { logfile_ = expandTilde(opts_[OPT_LOG_FILE_ONLYLONG].as<std::string>()); logfile_set_ = true; } if (opts_.count(OPT_CONFIG_ONLYLONG)) { config_file_ = opts_[OPT_CONFIG_ONLYLONG].as<std::string>(); config_file_set_ = true; } if (opts_.count(OPT_MODE_ONLYLONG)) { getModeFromString(opts_[OPT_MODE_ONLYLONG].as<std::string>()); } if (opts_.count(OPT_FOREGROUND_ONLYLONG)) { foreground_ = true; } ok_ = true; } catch(std::exception &e) { error_ = e.what(); } } }
//------------------------------------------------ void Sound::loadSoundsFromXMLFile( const std::string& filePath, const std::string& file ) { std::string fullFilePath = filePath + file; XMLParser parser( fullFilePath.c_str() ); XMLDocument& doc = parser.getDocument(); if( !doc.Error() ) { XMLNode* root = doc.FirstChildElement( "Sounds" ); XMLNode* soundElement; for( soundElement = root->FirstChildElement( "Sound" ); soundElement != 0; soundElement = soundElement->NextSiblingElement( "Sound" ) ) { parser.validateXMLAttributes( soundElement, "name,mode", "" ); std::string soundName = parser.getXMLAttributeAsString( soundElement, "name", "" ); std::string soundMode = parser.getXMLAttributeAsString( soundElement, "mode", "" ); const char* soundFile = soundElement->GetText(); Sound::createOrGetSound( soundName, filePath + std::string( soundFile ), getModeFromString( soundMode ) ); } } }
void Config::parseConfig() { if (configFileOK() == false) { return; } try { po::store(po::parse_config_file<char>(config_file_.c_str(), configdesc_), conf_opts_); po::notify(conf_opts_); // store pidfile, logfile and log level, but don't override command line values if (conf_opts_.count(OPT_CONF_PID) && !pidfile_set_) { pidfile_ = expandTilde(conf_opts_[OPT_CONF_PID].as<std::string>()); pidfile_set_ = true; } if (conf_opts_.count(OPT_CONF_LOG) && !loglevel_set_) { getLogFromChar(conf_opts_[OPT_CONF_LOG].as<char>()); } if (conf_opts_.count(OPT_CONF_LOG_FILE) && !logfile_set_) { logfile_ = expandTilde(conf_opts_[OPT_CONF_LOG_FILE].as<std::string>()); logfile_set_ = true; } // store move coefficients if (conf_opts_.count(OPT_MOVEC_X)) { coeffs_.cx = conf_opts_[OPT_MOVEC_X].as<double>(); } if (conf_opts_.count(OPT_MOVEC_Y)) { coeffs_.cy = conf_opts_[OPT_MOVEC_Y].as<double>(); } if (conf_opts_.count(OPT_CONF_MODE) && !opmode_set_) { getModeFromString(conf_opts_[OPT_CONF_MODE].as<std::string>()); } // store timeouts if (conf_opts_.count(OPT_CONF_POLL_TIMEOUT)) { pollTimeout_= conf_opts_[OPT_CONF_POLL_TIMEOUT].as<int>(); } if (conf_opts_.count(OPT_CONF_CONN_TIMEOUT)) { connTimeout_= conf_opts_[OPT_CONF_CONN_TIMEOUT].as<int>(); } if (conf_opts_.count(OPT_CONF_DISCONNECT_TIMEOUT)) { disconnectTimeout_= conf_opts_[OPT_CONF_DISCONNECT_TIMEOUT].as<int>(); } if (conf_opts_.count(OPT_CONF_LED_UPDATE_TIMEOUT)) { ledTimeout_= conf_opts_[OPT_CONF_LED_UPDATE_TIMEOUT].as<int>(); } if (conf_opts_.count(OPT_CONF_GESTURE_TIMEOUT)) { gestureTimeout_ = conf_opts_[OPT_CONF_GESTURE_TIMEOUT].as<int>(); } // store move threshold if (conf_opts_.count(OPT_CONF_MOVE_THRESHOLD)) { moveThreshold_= conf_opts_[OPT_CONF_MOVE_THRESHOLD].as<int>(); } // store gesture threshold if (conf_opts_.count(OPT_CONF_GESTURE_THRESHOLD)) { gestureThreshold_= conf_opts_[OPT_CONF_GESTURE_THRESHOLD].as<int>(); } // add key map entries one by one const std::vector<boost::shared_ptr<po::option_description>> &opts = configdesc_.options(); for (boost::shared_ptr<po::option_description> opt : opts) { const std::string &longname = opt->long_name(); // filter out non-key options if ( (longname != OPT_CONF_PID) && (longname != OPT_CONF_LOG) && (longname != OPT_CONF_LOG_FILE) && (longname != OPT_MOVEC_X) && (longname != OPT_MOVEC_Y) && (longname != OPT_CONF_MODE) && (longname != OPT_CONF_POLL_TIMEOUT) && (longname != OPT_CONF_CONN_TIMEOUT) && (longname != OPT_CONF_DISCONNECT_TIMEOUT) && (longname != OPT_CONF_LED_UPDATE_TIMEOUT) && (longname != OPT_CONF_MOVE_THRESHOLD) && (longname != OPT_CONF_GESTURE_THRESHOLD) && (longname != OPT_CONF_GESTURE_TIMEOUT) && conf_opts_.count(longname) ) { KeyMapEntry entry; entry = keymap_parser_.createEntry(longname, conf_opts_[longname].as<std::string>()); if ((entry.pscode != 0) && (entry.lincode != KEY_RESERVED)) { if ((longname == OPT_PSBTN_TRIANGLE) || (longname == OPT_PSBTN_CIRCLE) || (longname == OPT_PSBTN_CROSS) || (longname == OPT_PSBTN_SQUARE) || (longname == OPT_PSBTN_SELECT) || (longname == OPT_PSBTN_START) || (longname == OPT_PSBTN_PS) || (longname == OPT_PSBTN_MOVE) || (longname == OPT_PSBTN_T)) { // first controller keymaps_[0].push_back(entry); } // gesture options go to the second controller map else { // second controller keymaps_[1].push_back(entry); } } else { // invalid key map entry ok_ = false; break; } } } } catch(boost::bad_any_cast &e) { error_ = e.what(); ok_ = false; } catch (std::exception &e) { error_ = e.what(); ok_ = false; } }