Exemple #1
0
void
gu::Config::parse (param_map_t& pmap, const std::string& params)
    throw (Exception)
{
    if (0 == params[0]) return;

    std::vector<std::string> pv = gu::tokenize (params, PARAM_SEP, ESCAPE);

    for (size_t i = 0; i < pv.size(); ++i)
    {
        std::vector<std::string> kvv =
            gu::tokenize (pv[i], KEY_VALUE_SEP, ESCAPE, true);

        assert(kvv.size() > 0);

        gu::trim(kvv[0]);
        const std::string& key = kvv[0];

        if (!key.empty())
        {
            if (kvv.size() == 1)
            {
                gu_throw_error(EINVAL) <<"Key without value: '" << key
                                       <<"' at position '"
                                       << i << "' in parameter list.";
            }

            if (kvv.size() > 2)
            {
                gu_throw_error(EINVAL) <<"More than one value for key '" << key
                                       <<"' at '"
                                       << pv[i] << "' in parameter list.";
            }

            gu::trim(kvv[1]);
            std::string& value = kvv[1];

            param_map_t::iterator pi = pmap.find(key);

            if (pi != pmap.end())
            {
                log_warn << "Element " << pv[i] << " overwrites previous value"
                         << " '" << pi->second << "' of '" << key << "' by '"
                         << value << "'";
            }

            log_debug << "Found param '" << key << "' = '" << value << "'";
            pmap[key] = value;
        }
        else if (kvv.size() > 1)
        {
            gu_throw_error(EINVAL) << "Empty key at '" << pv[i]
                                << "' in parameter list.";
        }
    }
}
Exemple #2
0
    void walk_get_param(httpd* server) {
        httpVar* param_var = httpdGetVariableByName(server, "param");
        if (param_var) {
            const char* param_name = param_var->value;

            param_map_t::iterator it = param_map.find(param_name);
            if (it != param_map.end()) {
                pthread_mutex_lock(&rbt_mutex);
                    double v = WalkerManager::GetInstance()->GetParameterValue(it->second);
                pthread_mutex_unlock(&rbt_mutex);

                static char buf[50];
                sprintf(buf, "%lf", v);
                httpdSetContentType(server, "application/json");
                httpdOutput(server, buf);
            } else httpdOutput(server, "Parameter $param not found!");
        } else
            httpdOutput(server, "Please specify the param name!");
    }
Exemple #3
0
    void walk(httpd* server) {
        httpVar* motion_var = httpdGetVariableByName(server, "motion");
        if (motion_var) {
            param_map_t::iterator it = motion_map.find(motion_var->value);
            if (it == motion_map.end())
                httpdOutput(server, "Motion parameter $motion is invalid!");
            else {
                pthread_mutex_lock(&rbt_mutex);
                    Behaviour::GetInstance()->Walk(it->second);
                pthread_mutex_unlock(&rbt_mutex);

                httpdOutput(server, "walk - motion: $motion");
            }
        } else {
            pthread_mutex_lock(&rbt_mutex);
                Behaviour::GetInstance()->Walk();
            pthread_mutex_unlock(&rbt_mutex);

            httpdOutput(server, "walk (no motion specified)");
        }
    }
Exemple #4
0
    void walk_set_param(httpd* server) {
        httpVar *param_var = httpdGetVariableByName(server, "param"),
                *value_var = httpdGetVariableByName(server, "value");

        if (param_var && value_var) {
            double value;
            if (0 == sscanf(value_var->value, "%lf", &value)) {
                httpdOutput(server, "The value is invalid!");
            }

            const char* param_name = param_var->value;

            param_map_t::iterator it = param_map.find(param_name);
            if (it != param_map.end()) {
                pthread_mutex_lock(&rbt_mutex);
                    WalkerManager::GetInstance()->SetParameter(it->second, value);
                    //TODO save parset file?
                pthread_mutex_unlock(&rbt_mutex);

                httpdOutput(server, "Parameter $param has been set as $value.");
            } else httpdOutput(server, "Parameter $param not found!");
        } else
            httpdOutput(server, "Please specify the param name and the value!");
    }