diff --git a/include/model_car_ultrasounds.h b/include/model_car_ultrasounds.h index 62eecebd6509b91dac8ba749bd6d8f13e38c072c..ef658f01f252c9cff1013b1c0e6c849589b4997c 100644 --- a/include/model_car_ultrasounds.h +++ b/include/model_car_ultrasounds.h @@ -1,20 +1,11 @@ #ifndef _MODEL_CAR_ULTRASOUNDS_H #define _MODEL_CAR_ULTRASOUNDS_H -#include "rs232.h" -#include "commexceptions.h" -#include "threadserver.h" #include "model_car_driver_base.h" -#include "model_car_exceptions.h" -#include "model_car_protocol.h" -#include <iostream> -#include <iomanip> -#include <vector> -#include <dirent.h> -#include <chrono> -#include <thread> #include <map> +typedef std::map<const SENSOR_ID, double> ultrasounds_map_t; + /** * @class CModelCarUltrasounds * @brief CModelCarUltrasounds class brief description text @@ -24,14 +15,16 @@ class CModelCarUltrasounds: public CModelCarDriverBase { private: - void process_data_frame(uint8_t id,uint32_t timestamp, TDataUnion data_union); - std::map<SENSOR_ID, TUltrasoundData> m_uss_values; - - protected: + void process_data_frame(uint8_t id, TDataUnion data_union); + ultrasounds_map_t ultrasound_values; public: CModelCarUltrasounds(std::string name); - bool get_uss(SENSOR_ID id, float & value); + double get_side_right_distance(void); + double get_side_left_distance(void); + double get_rear_right_distance(void); + double get_rear_center_distance(void); + double get_rear_left_distance(void); ~CModelCarUltrasounds(void); }; diff --git a/src/model_car_ultrasounds.cpp b/src/model_car_ultrasounds.cpp index f1968d0dca04fe2a1c8046acf66b6faec4c0054f..32fcfea0e17b90c7d58518565243605f1f0e84ff 100644 --- a/src/model_car_ultrasounds.cpp +++ b/src/model_car_ultrasounds.cpp @@ -2,53 +2,82 @@ CModelCarUltrasounds::CModelCarUltrasounds(std::string name) : CModelCarDriverBase(name, ARDUINO_REAR_US) { - TUltrasoundData us_data; - us_data.distance=0; - m_uss_values.insert(std::make_pair(ID_ARD_SENS_US_SIDE_RIGHT, us_data)); - m_uss_values.insert(std::make_pair(ID_ARD_SENS_US_REAR_CENTER_RIGHT, us_data)); - m_uss_values.insert(std::make_pair(ID_ARD_SENS_US_REAR_CENTER, us_data)); - m_uss_values.insert(std::make_pair(ID_ARD_SENS_US_REAR_CENTER_LEFT, us_data)); - m_uss_values.insert(std::make_pair(ID_ARD_SENS_US_SIDE_LEFT, us_data)); + ultrasound_values.insert(std::make_pair(ID_ARD_SENS_US_SIDE_RIGHT, 0.0)); + ultrasound_values.insert(std::make_pair(ID_ARD_SENS_US_REAR_CENTER_RIGHT, 0.0)); + ultrasound_values.insert(std::make_pair(ID_ARD_SENS_US_REAR_CENTER, 0.0)); + ultrasound_values.insert(std::make_pair(ID_ARD_SENS_US_REAR_CENTER_LEFT, 0.0)); + ultrasound_values.insert(std::make_pair(ID_ARD_SENS_US_SIDE_LEFT, 0.0)); } -void CModelCarUltrasounds::process_data_frame(uint8_t id,uint32_t timestamp, TDataUnion data_union) +void CModelCarUltrasounds::process_data_frame(uint8_t id, TDataUnion data_union) { - //std::cout << "CModelCarUltrasounds::process_data_frame: id=" << unsigned(id) << std::endl; + ultrasounds_map_t::iterator it = this->ultrasound_values.find((SENSOR_ID)id); + static int num_messages=5; - const SENSOR_ID currentSensor = static_cast<SENSOR_ID>(id); - - auto it = m_uss_values.find(currentSensor); - if(it==m_uss_values.end()) + if(it!=this->ultrasound_values.end()) + it->second = data_union.us.distance/100.0; //cm + num_messages--; + if(num_messages==0) { - std::cout << "CModelCarUltrasounds::process_data_frame: error, incorrect id: " << (unsigned int)id << std::endl; + num_messages=5; + if(!this->event_server->event_is_set(this->new_data_event_id)) + this->event_server->set_event(this->new_data_event_id); } - else - { - it->second = data_union.us; //cm - //it->second.distance = it->second.distance/100.0; //m - //m_uss_values[currentSensor] = data_union.us; - } - } -bool CModelCarUltrasounds::get_uss(SENSOR_ID id, float & value) +double CModelCarUltrasounds::get_side_right_distance(void) { - bool ok=false; + double distance; + this->data_mutex.enter(); - auto it = m_uss_values.find(id); - - if ( it == m_uss_values.end() ) - { - // not found - } - else - { - value = it->second.distance/100.0; //m - ok=true; - } + distance=this->ultrasound_values[ID_ARD_SENS_US_SIDE_RIGHT]; this->data_mutex.exit(); - - return ok; + + return distance; +} + +double CModelCarUltrasounds::get_side_left_distance(void) +{ + double distance; + + this->data_mutex.enter(); + distance=this->ultrasound_values[ID_ARD_SENS_US_SIDE_LEFT]; + this->data_mutex.exit(); + + return distance; +} + +double CModelCarUltrasounds::get_rear_right_distance(void) +{ + double distance; + + this->data_mutex.enter(); + distance=this->ultrasound_values[ID_ARD_SENS_US_REAR_CENTER_RIGHT]; + this->data_mutex.exit(); + + return distance; +} + +double CModelCarUltrasounds::get_rear_center_distance(void) +{ + double distance; + + this->data_mutex.enter(); + distance=this->ultrasound_values[ID_ARD_SENS_US_REAR_CENTER]; + this->data_mutex.exit(); + + return distance; +} + +double CModelCarUltrasounds::get_rear_left_distance(void) +{ + double distance; + + this->data_mutex.enter(); + distance=this->ultrasound_values[ID_ARD_SENS_US_REAR_CENTER_LEFT]; + this->data_mutex.exit(); + + return distance; } CModelCarUltrasounds::~CModelCarUltrasounds()