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."; } } }
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!"); }
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)"); } }
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!"); }