Пример #1
0
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;
}
Пример #2
0
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();
        }
    }
}
Пример #3
0
	//------------------------------------------------
	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 ) );
			}
		}
	}
Пример #4
0
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;
    }
}