int Proxy::processCarString(const string &s){ // Load configuration // TODO move it? KeyValueConfiguration kv = getKeyValueConfiguration(); // TODO Use vectors and sensor_count ?(tokens[5] and arr_size) const uint32_t sensor_count = kv.getValue<uint32_t>("proxy.numberOfSensors"); const uint LENGTH_RULE = kv.getValue<uint>("proxy.arduinoStringLength"); const string sensor0_token = kv.getValue<string>("proxy.sensor0.token"); const string sensor1_token = kv.getValue<string>("proxy.sensor1.token"); const string sensor2_token = kv.getValue<string>("proxy.sensor2.token"); const string sensor3_token = kv.getValue<string>("proxy.sensor3.token"); const string sensor4_token = kv.getValue<string>("proxy.sensor4.token"); const int sensor0_id = kv.getValue<int>("proxy.sensor0.id");; const int sensor1_id = kv.getValue<int>("proxy.sensor1.id");; const int sensor2_id = kv.getValue<int>("proxy.sensor2.id");; const int sensor3_id = kv.getValue<int>("proxy.sensor3.id");; const int sensor4_id = kv.getValue<int>("proxy.sensor4.id");; string payload = s; // Use tokens[sensor_count] instead of tokens[5]. Need to learn vector and its operators. string tokens[5] = {sensor0_token, sensor1_token, sensor2_token, sensor3_token, sensor4_token}; int arr_size = sizeof(tokens)/sizeof(tokens[0]); size_t idx; int i; int digits; int problem; Container containerSensorBoardData = getKeyValueDataStore().get(automotive::miniature::SensorBoardData::ID()); SensorBoardData sbd = containerSensorBoardData.getData<SensorBoardData> (); // Set the number of sensors to sensor_count sbd.setNumberOfSensors(sensor_count); // Check length if(payload.length() != LENGTH_RULE){ //cout << "BAD LENGTH SHOULD FAIL" << endl; } // For each token for(i=0;i<arr_size;i++){ problem = 0; string key = payload.substr(0,tokens[i].length()); //cout << i << ". Token=" << tokens[i] << " key=" << key << endl; if(key == tokens[i]){ payload = payload.substr(tokens[i].length()+1,string::npos); // Remove token and space try { digits = stoi(payload, &idx, 10); // get number } catch (...) { problem = 1; } } else { return -2; } // TODO fix ifs if(!problem){ // Add to SBD //cout << "We parsed token:" << tokens[i] << " and got value:" << digits << endl; if(tokens[i] == sensor0_token){ sbd.putTo_MapOfDistances(sensor0_id, digits); } else if(tokens[i] == sensor1_token){ sbd.putTo_MapOfDistances(sensor1_id, digits); } else if(tokens[i] == sensor2_token){ sbd.putTo_MapOfDistances(sensor2_id, digits ); } else if(tokens[i] == sensor3_token){ sbd.putTo_MapOfDistances(sensor3_id, digits ); } else if(tokens[i] == sensor4_token){ sbd.putTo_MapOfDistances(sensor4_id, digits ); } if(i < arr_size - 1){ payload = payload.substr(idx + 1,string::npos); // We need to remove digit values + a space } else { payload = payload.substr(idx,string::npos); // We only need to remove digit values } } else { return -3; } } if(payload.length() == 0){ //cout << "Finished parsing: " << sbd.toString() << endl; // TODO Invoke something with SBD instead of sending it from here. Container sbdc(sbd); getConference().send(sbdc); return 1; } else { return 0; // TO DO: Should never happen check } }