App (ResourceManager) class has the current car info
authorYuta Doi <yuta-d@witz-inc.co.jp>
Thu, 17 May 2018 07:48:33 +0000 (16:48 +0900)
committerYuta Doi <yuta-d@witz-inc.co.jp>
Thu, 17 May 2018 07:52:10 +0000 (16:52 +0900)
and LowCanClient does not check whether CAN signal value is changed

Change-Id: I41dfd0772f8fb4db70c4b5c0caa35791600abc54
Signed-off-by: Yuta Doi <yuta-d@witz-inc.co.jp>
src/app.cpp
src/app.hpp
src/low_can_client.cpp
src/low_can_client.hpp
src/main.cpp

index 296ce35..ac789ad 100644 (file)
@@ -119,6 +119,13 @@ App::App(wl::display *d)
    } catch (std::exception &e) {
       HMI_ERROR("wm", "Loading of configuration failed: %s", e.what());
    }
+
+   // Initialize current car info
+   this->crr_car_info_.parking_brake_stt = true;
+   this->crr_car_info_.accel_pedal_stt = false;
+   this->crr_car_info_.accel_pedal_pos = 0;
+   this->crr_car_info_.car_stt = "stop";
+   this->crr_car_info_.headlamp_stt = false;
 }
 
 int App::init() {
@@ -369,15 +376,16 @@ void App::allocateWindowResource(char const *event, char const *drawing_name,
     json_bool is_changed;
     is_changed = jh::getBoolFromJson(json_parking_brake, "is_changed");
     if (is_changed) {
-        // Update parking brake state
         std::string parking_brake_state = jh::getStringFromJson(json_parking_brake, "state");
         HMI_DEBUG("wm", "parking_brake_state: %s", parking_brake_state.c_str());
 
-        // Emit parking brake event
+        // Update state and emit event
         if ("parking_brake_off" == parking_brake_state) {
+            this->crr_car_info_.parking_brake_stt = false;
             this->emitParkingBrakeOff();
         }
         else if ("parking_brake_on" == parking_brake_state) {
+            this->crr_car_info_.parking_brake_stt = true;
             this->emitParkingBrakeOn();
         }
         else {
@@ -393,6 +401,24 @@ void App::allocateWindowResource(char const *event, char const *drawing_name,
         return;
     }
 
+    is_changed = jh::getBoolFromJson(json_accel_pedal, "is_changed");
+    if (is_changed) {
+        std::string accel_pedal_state = jh::getStringFromJson(json_accel_pedal, "state");
+        HMI_DEBUG("wm", "accel_pedal_state: %s", accel_pedal_state.c_str());
+
+        // Update state
+        if ("accel_pedal_off" == accel_pedal_state) {
+            this->crr_car_info_.accel_pedal_stt = false;
+        }
+        else if ("accel_pedal_on" == accel_pedal_state) {
+            this->crr_car_info_.accel_pedal_stt = true;
+        }
+        else {
+            reply("Unknown accel pedal state");
+            return;
+        }
+    }
+
     // Check car state
     json_object* json_car;
     if (!json_object_object_get_ex(json_out, "car", &json_car)) {
@@ -402,15 +428,16 @@ void App::allocateWindowResource(char const *event, char const *drawing_name,
 
     is_changed = jh::getBoolFromJson(json_car, "is_changed");
     if (is_changed) {
-        // Update car state
         std::string car_state = jh::getStringFromJson(json_car, "state");
         HMI_DEBUG("wm", "car_state: %s", car_state.c_str());
 
         // Emit car event
         if ("car_stop" == car_state) {
+            this->crr_car_info_.car_stt = "stop";
             this->emitCarStop();
         }
         else if ("car_run" == car_state) {
+            this->crr_car_info_.car_stt = "run";
             this->emitCarRun();
         }
         else {
@@ -428,15 +455,16 @@ void App::allocateWindowResource(char const *event, char const *drawing_name,
 
     is_changed = jh::getBoolFromJson(json_lamp, "is_changed");
     if (is_changed) {
-        // Update car state
         std::string lamp_state = jh::getStringFromJson(json_lamp, "state");
         HMI_DEBUG("wm", "lamp_state: %s", lamp_state.c_str());
 
-        // Emit lamp event
+        // Update state and emit event
         if ("lamp_off" == lamp_state) {
+            this->crr_car_info_.headlamp_stt = false;
             this->emitHeadlampOff();
         }
         else if ("lamp_on" == lamp_state) {
+            this->crr_car_info_.headlamp_stt = true;
             this->emitHeadlampOn();
         }
         else {
@@ -1066,6 +1094,10 @@ void App::setSurfaceSize(const char* role, const char* area) {
     this->enqueue_flushdraw(surface_id);
 }
 
+void App::setAccelPedalPos(double val) {
+    this->crr_car_info_.accel_pedal_pos = val;
+}
+
 extern const char* kDefaultAppDb;
 int App::loadAppDb() {
     HMI_DEBUG("wm", "Call");
index b7d6815..13bc421 100644 (file)
@@ -128,6 +128,14 @@ struct id_allocator {
    }
 };
 
+typedef struct CarInfo {
+    bool parking_brake_stt;
+    bool accel_pedal_stt;
+    double accel_pedal_pos;
+    const char *car_stt;
+    bool headlamp_stt;
+} CarInfo;
+
 struct App {
 
    typedef std::unordered_map<uint32_t, struct compositor::rect> rect_map;
@@ -234,6 +242,8 @@ struct App {
    void surface_created(uint32_t surface_id);
    void surface_removed(uint32_t surface_id);
 
+   void setAccelPedalPos(double val);
+
 private:
    PolicyManager pm_;
    LayoutManager lm_;
@@ -241,6 +251,7 @@ private:
    std::unordered_map<std::string, std::string> app2role_;
    std::unordered_map<std::string, std::string> role2app_;
    std::unordered_map<int, int> appid2role_;
+   CarInfo crr_car_info_;
 
    int allocateSurface();
    void setSurfaceSize(const char* role, const char* area);
index e3e472f..192e124 100644 (file)
@@ -32,15 +32,8 @@ LowCanClient::LowCanClient() :
   headlamp_status_(FALSE),
   parking_brake_status_(TRUE),
   accel_pedal_pos_(0),
-  prv_lamp_state_("lamp_off"),
-  crr_lamp_state_("lamp_off"),
-  prv_parking_brake_state_("parking_brake_on"),
-  crr_parking_brake_state_("parking_brake_on"),
-  prv_accel_pedal_state_("accel_pedal_off"),
-  crr_accel_pedal_state_("accel_pedal_off"),
-  is_changed_lamp_state_(false),
-  is_changed_parking_brake_state_(false),
-  is_changed_accel_pedal_state_(false)
+  accel_pedal_stt_(FALSE),
+  is_changed_accel_pedal_stt_(false)
 {
     HMI_DEBUG("wm:lcc", "Call");
 }
@@ -67,7 +60,7 @@ void LowCanClient::initialize() {
         // Set Event
         json_object *json_obj = json_object_new_object();
         json_object_object_add(json_obj, "event",
-                               json_object_new_string(this->kEventName_[i]));
+                               json_object_new_string(this->kSignalName_[i]));
 
         // Set filter
         if (0 != strcmp("", this->kFilterValue_[i])) {
@@ -88,197 +81,91 @@ void LowCanClient::initialize() {
     return;
 }
 
-void LowCanClient::analyzeCanSignal(struct json_object *object) {
+const char* LowCanClient::analyzeCanSignal(struct json_object *object) {
     HMI_DEBUG("wm:lcc", "object:%s", json_object_get_string(object));
 
     const char* name = jh::getStringFromJson(object, "name");
     HMI_DEBUG("wm:lcc", "CAN signal name:%s", name);
 
-    if (strstr(name, this->kEventName_[0])) {
-        HMI_DEBUG("wm:lcc", "Receive %s", this->kEventName_[0]);
+    if (strstr(name, this->kSignalName_[0])) {
         // Update vehicle speed
-        int speed = jh::getIntFromJson(object, "value");
-        if (this->vehicle_speed_ != speed) {
-            this->vehicle_speed_ = speed;
-            HMI_DEBUG("wm:lcc", "Update vehicle speed:%d", this->vehicle_speed_);
-        }
+        this->vehicle_speed_ = jh::getIntFromJson(object, "value");
+        HMI_DEBUG("wm:lcc", "Update vehicle speed:%d", this->vehicle_speed_);
     }
-    else if (strstr(name, this->kEventName_[1])) {
-        HMI_DEBUG("wm:lcc", "Receive %s", this->kEventName_[1]);
+    else if (strstr(name, this->kSignalName_[1])) {
         // Update transmission gear position
-        int gear_pos = jh::getIntFromJson(object, "value");
-        if (this->trans_gear_pos_ != gear_pos) {
-            this->trans_gear_pos_ = gear_pos;
-            HMI_DEBUG("wm:lcc", "Update transmission gear position:%d", this->trans_gear_pos_);
-        }
+        this->trans_gear_pos_ = jh::getIntFromJson(object, "value");
+        HMI_DEBUG("wm:lcc", "Update transmission gear position:%d", this->trans_gear_pos_);
     }
-    else if (strstr(name, this->kEventName_[2])) {
-        HMI_DEBUG("wm:lcc", "Receive %s", this->kEventName_[2]);
+    else if (strstr(name, this->kSignalName_[2])) {
         // Update headlamp status
-        json_bool headlamp = jh::getBoolFromJson(object, "value");
-        if (this->headlamp_status_ != headlamp) {
-            this->headlamp_status_ = headlamp;
-            HMI_DEBUG("wm:lcc", "Update headlamp status:%d", this->headlamp_status_);
-        }
+        this->headlamp_status_ = jh::getBoolFromJson(object, "value");
+        HMI_DEBUG("wm:lcc", "Update headlamp status:%d", this->headlamp_status_);
     }
-    else if (strstr(name, this->kEventName_[3])) {
-        HMI_DEBUG("wm:lcc", "Receive %s", this->kEventName_[3]);
+    else if (strstr(name, this->kSignalName_[3])) {
         // Update parking gear status
-        json_bool parking_brake = jh::getBoolFromJson(object, "value");
-        if (this->parking_brake_status_ != parking_brake) {
-            this->parking_brake_status_ = parking_brake;
-            HMI_DEBUG("wm:lcc", "Update parking brake status:%d", this->parking_brake_status_);
-        }
-    }
-    else if (strstr(name, this->kEventName_[4])) {
-        HMI_DEBUG("wm:lcc", "Receive %s", this->kEventName_[4]);
-        // Update accelerator pedal status
-        double accel_pedal_pos = jh::getDoubleFromJson(object, "value");
-        if (this->accel_pedal_pos_ != accel_pedal_pos) {
-            this->accel_pedal_pos_ = accel_pedal_pos;
-            HMI_DEBUG("wm:lcc", "Update accelerator pedal status:%lf", this->accel_pedal_pos_);
-        }
-    }
-
-    // Update transmission gear position state
-    if (TransGearPosValN == this->trans_gear_pos_) {
-        this->crr_accel_pedal_state_ = "trans_gear_neutral";
-    }
-    else {
-        this->crr_accel_pedal_state_ = "trans_gear_not_neutral";
-    }
-    HMI_DEBUG("wm:lcc", "Current transmission gear state:%s", this->crr_trans_gear_state_.c_str());
-
-    // Update lamp state
-    if (true == this->headlamp_status_) {
-        this->crr_lamp_state_ = "lamp_on";
-    }
-    else {
-        this->crr_lamp_state_ = "lamp_off";
-    }
-    HMI_DEBUG("wm:lcc", "Current lamp state:%s", this->crr_lamp_state_.c_str());
-
-    // Update parking brake state
-    if (this->parking_brake_status_) {
-        this->crr_parking_brake_state_ = "parking_brake_on";
-    }
-    else {
-        this->crr_parking_brake_state_ = "parking_brake_off";
-    }
-    HMI_DEBUG("wm:lcc", "Current parking brake state:%s", this->crr_parking_brake_state_.c_str());
-
-    // Update accelerator pedal state
-    if (0 == this->accel_pedal_pos_) {
-        this->crr_accel_pedal_state_ = "accel_pedal_off";
-    }
-    else {
-        this->crr_accel_pedal_state_ = "accel_pedal_on";
-    }
-    HMI_DEBUG("wm:lcc", "Current accelerator pedal state:%s", this->crr_accel_pedal_state_.c_str());
-
-    // If transmission gear state is changed,
-    // backup current state for previous state and set flag
-    if (this->prv_trans_gear_state_ != this->crr_trans_gear_state_) {
-        HMI_DEBUG("wm:lcc", "Transmission Gear is changed: %s -> %s",
-                  this->prv_trans_gear_state_.c_str(), this->crr_trans_gear_state_.c_str());
-        this->prv_trans_gear_state_ = this->crr_trans_gear_state_;
-        this->is_changed_trans_gear_state_ = true;
+        this->parking_brake_status_ = jh::getBoolFromJson(object, "value");
+        HMI_DEBUG("wm:lcc", "Update parking brake status:%d", this->parking_brake_status_);
     }
+    else if (strstr(name, this->kSignalName_[4])) {
+        // Clear flag for whether accel pedal state is changed
+        this->is_changed_accel_pedal_stt_ = false;
 
-    // If lamp state is changed,
-    // backup current state for previous state and set flag
-    if (this->prv_lamp_state_ != this->crr_lamp_state_) {
-        HMI_DEBUG("wm:lcc", "Lamp state is changed: %s -> %s",
-                  this->prv_lamp_state_.c_str(), this->crr_lamp_state_.c_str());
-        this->prv_lamp_state_ = this->crr_lamp_state_;
-        this->is_changed_lamp_state_ = true;
-    }
+        // Update accelerator pedal status
+        this->accel_pedal_pos_ = jh::getDoubleFromJson(object, "value");
+        HMI_DEBUG("wm:lcc", "Update accelerator pedal position:%lf", this->accel_pedal_pos_);
 
-    // If parking brake state is changed,
-    // backup current state for previous state and set flag
-    if (this->prv_parking_brake_state_ != this->crr_parking_brake_state_) {
-        HMI_DEBUG("wm:lcc", "Parking Brake state is changed: %s -> %s",
-                  this->prv_parking_brake_state_.c_str(), this->crr_parking_brake_state_.c_str());
-        this->prv_parking_brake_state_ = this->crr_parking_brake_state_;
-        this->is_changed_parking_brake_state_ = true;
-    }
+        bool accel_pedal_stt;
+        if (0 != this->accel_pedal_pos_) {
+            accel_pedal_stt = true;
+        }
+        else {
+            accel_pedal_stt = false;
+        }
 
-    // If accelerator pedal state is changed,
-    // backup current state for previous state and set flag
-    if (this->prv_accel_pedal_state_ != this->crr_accel_pedal_state_) {
-        HMI_DEBUG("wm:lcc", "Accelerator Pedal is changed: %s -> %s",
-                  this->prv_accel_pedal_state_.c_str(), this->crr_accel_pedal_state_.c_str());
-        this->prv_accel_pedal_state_ = this->crr_accel_pedal_state_;
-        this->is_changed_accel_pedal_state_ = true;
+        if (accel_pedal_stt != this->accel_pedal_stt_) {
+            this->is_changed_accel_pedal_stt_ = true;
+            this->accel_pedal_stt_ = accel_pedal_stt;
+        }
     }
-}
 
-bool LowCanClient::isChangedTransGearState() {
-    HMI_DEBUG("wm:lcc", "Call");
-
-    // Return changed flag
-    return this->is_changed_trans_gear_state_;
+    return name;
 }
 
-bool LowCanClient::isChangedLampState() {
-    HMI_DEBUG("wm:lcc", "Call");
-
-    // Return changed flag
-    return this->is_changed_lamp_state_;
-}
-
-bool LowCanClient::isChangedParkingBrakeState() {
+bool LowCanClient::isChangedAccelPedalState() {
     HMI_DEBUG("wm:lcc", "Call");
 
-    // Return changed flag
-    return this->is_changed_parking_brake_state_;
+    return this->is_changed_accel_pedal_stt_;
 }
 
-bool LowCanClient::isChangedAccelPedalState() {
+int LowCanClient::getCurrentTransGearState() {
     HMI_DEBUG("wm:lcc", "Call");
 
-    // Return changed flag
-    return this->is_changed_accel_pedal_state_;
+    return this->trans_gear_pos_;
 }
 
-const char* LowCanClient::getCurrentTransGearState() {
+bool LowCanClient::getCurrentHeadlampState() {
     HMI_DEBUG("wm:lcc", "Call");
 
-    // Clear changed flag
-    this->is_changed_trans_gear_state_ = false;
-
-    // Return current transmission gear state
-    return this->crr_trans_gear_state_.c_str();
+    return (bool)this->headlamp_status_;
 }
 
-const char* LowCanClient::getCurrentLampState() {
+bool LowCanClient::getCurrentParkingBrakeState() {
     HMI_DEBUG("wm:lcc", "Call");
 
-    // Clear changed flag
-    this->is_changed_lamp_state_ = false;
-
-    // Return current lamp state
-    return this->crr_lamp_state_.c_str();
+    return (bool)this->parking_brake_status_;
 }
 
-const char* LowCanClient::getCurrentParkingBrakeState() {
+double LowCanClient::getCurrentAccelPedalPosition() {
     HMI_DEBUG("wm:lcc", "Call");
 
-    // Clear changed flag
-    this->is_changed_parking_brake_state_ = false;
-
-    // Return current parking brake state
-    return this->crr_parking_brake_state_.c_str();
+    return this->accel_pedal_pos_;
 }
 
-const char* LowCanClient::getCurrentAccelPedalState() {
+bool LowCanClient::getCurrentAccelPedalState() {
     HMI_DEBUG("wm:lcc", "Call");
 
-    // Clear changed flag
-    this->is_changed_accel_pedal_state_ = false;
-
-    // Return current accelerator pedal state
-    return this->crr_accel_pedal_state_.c_str();
+    return this->accel_pedal_stt_;
 }
 
 
index 9cd10e2..4bc3747 100644 (file)
@@ -31,16 +31,37 @@ public:
     explicit LowCanClient();
     ~LowCanClient() = default;
 
+    enum SignalNo {
+        SignalNoVehicliSpeed = 0,
+        SignalNoTransGearPos,
+        SignalNoHeadlame,
+        SignalNoParkingBrake,
+        SignalNoAccelPedalPos,
+
+        SignalNum,
+
+        SignalNoMin = SignalNoVehicliSpeed,
+        SignalNoMax = SignalNum - 1,
+    };
+
+    const std::vector<const char*> kSignalName_{
+        "vehicle.speed",
+        "transmission_gear_position",
+        "headlamp_status",
+        "parking_brake_status",
+        "accelerator.pedal.position",
+    };
+
     void initialize();
-    void analyzeCanSignal(struct json_object *object);
-    bool isChangedTransGearState();
-    bool isChangedLampState();
-    bool isChangedParkingBrakeState();
+    const char* analyzeCanSignal(struct json_object *object);
+
+    int getCurrentTransGearState();
+    bool getCurrentHeadlampState();
+    bool getCurrentParkingBrakeState();
+    double getCurrentAccelPedalPosition();
+    bool getCurrentAccelPedalState();
+
     bool isChangedAccelPedalState();
-    const char* getCurrentTransGearState();
-    const char* getCurrentLampState();
-    const char* getCurrentParkingBrakeState();
-    const char* getCurrentAccelPedalState();
 
 private:
     // Disable copy and move
@@ -62,27 +83,6 @@ private:
         TransGearPosValN,
     };
 
-    enum SignalNo {
-        SignalNoVehicliSpeed = 0,
-        SignalNoTransGearPos,
-        SignalNoHeadlame,
-        SignalNoParkingBrake,
-        SignalNoAccelPedalPos,
-
-        SignalNum,
-
-        SignalNoMin = SignalNoVehicliSpeed,
-        SignalNoMax = SignalNum - 1,
-    };
-
-    const std::vector<const char*> kEventName_{
-        "vehicle.speed",
-        "transmission_gear_position",
-        "headlamp_status",
-        "parking_brake_status",
-        "accelerator.pedal.position",
-    };
-
     const std::vector<const char*> kFilterValue_{
         "",
         "",
@@ -96,20 +96,9 @@ private:
     json_bool headlamp_status_;
     json_bool parking_brake_status_;
     double accel_pedal_pos_;
+    bool accel_pedal_stt_;
 
-    std::string prv_trans_gear_state_;
-    std::string crr_trans_gear_state_;
-    std::string prv_lamp_state_;
-    std::string crr_lamp_state_;
-    std::string prv_parking_brake_state_;
-    std::string crr_parking_brake_state_;
-    std::string prv_accel_pedal_state_;
-    std::string crr_accel_pedal_state_;
-
-    bool is_changed_trans_gear_state_;
-    bool is_changed_lamp_state_;
-    bool is_changed_parking_brake_state_;
-    bool is_changed_accel_pedal_state_;
+    bool is_changed_accel_pedal_stt_;
 };
 
 } // namespace wm
index 3a60b94..1db33a4 100644 (file)
@@ -664,50 +664,56 @@ void on_event(const char *event, struct json_object *object){
 
     // If receive low can signal
     if (strstr(event, "low-can")) {
+        wm::LowCanClient *lcc = &(g_afb_instance->lcc_);
+        wm::App *app = &(g_afb_instance->app);
+
         // Analyze low can signal
-        g_afb_instance->lcc_.analyzeCanSignal(object);
+        const char* signal_name = lcc->analyzeCanSignal(object);
 
-        if (g_afb_instance->lcc_.isChangedParkingBrakeState()) {
-            // If parking brake state is changed
+        // If car info is updated, set event name
+        const char *can_event = nullptr;
+        if (strstr(signal_name, lcc->kSignalName_[lcc->SignalNoParkingBrake])) {
             HMI_DEBUG("wm", "Parking Brake state is changed");
 
-            // Get parking brake state
-            const char* parking_brake_state = g_afb_instance->lcc_.getCurrentParkingBrakeState();
-
-            // Allocate window resource
-            g_afb_instance->app.allocateWindowResource(parking_brake_state, nullptr,
-                                                       nullptr, nullptr,
-                                                       [](const char* errmsg){
-                if (errmsg != nullptr) {
-                    HMI_ERROR("wm", errmsg);
-                }
-            });
+            // Set event
+            if (lcc->getCurrentParkingBrakeState()) {
+                can_event = "parking_brake_on";
+            }
+            else {
+                can_event = "parking_brake_off";
+            }
         }
-        if (g_afb_instance->lcc_.isChangedAccelPedalState()) {
-            // If accelerator pedal state is changed
-            HMI_DEBUG("wm", "Accelerator Pedal state is changed");
+        else if (strstr(signal_name, lcc->kSignalName_[lcc->SignalNoAccelPedalPos])) {
+            // Update accel pedal position
+            app->setAccelPedalPos(lcc->getCurrentAccelPedalPosition());
 
-            // Get parking brake state
-            const char* accel_pedal_state = g_afb_instance->lcc_.getCurrentAccelPedalState();
+            if (lcc->isChangedAccelPedalState()) {
+                HMI_DEBUG("wm", "Accelerator Pedal state is changed");
 
-            // Allocate window resource
-            g_afb_instance->app.allocateWindowResource(accel_pedal_state, nullptr,
-                                                       nullptr, nullptr,
-                                                       [](const char* errmsg){
-                if (errmsg != nullptr) {
-                    HMI_ERROR("wm", errmsg);
+                // Set event
+                if (lcc->getCurrentAccelPedalState()) {
+                    can_event = "accel_pedal_on";
                 }
-            });
+                else {
+                    can_event = "accel_pedal_off";
+                }
+            }
+        }
+        else if (strstr(signal_name, lcc->kSignalName_[lcc->SignalNoHeadlame])) {
+            HMI_DEBUG("wm", "Headlamp state is changed");
+
+            // Set event
+            if (lcc->getCurrentHeadlampState()) {
+                can_event = "headlamp_on";
+            }
+            else {
+                can_event = "headlamp_off";
+            }
         }
-        else if (g_afb_instance->lcc_.isChangedLampState()) {
-            // If lamp state is changed
-            HMI_DEBUG("wm", "Lamp state is changed");
-
-            // Get lamp state
-            const char* lamp_state = g_afb_instance->lcc_.getCurrentLampState();
 
-            // Allocate window resource
-            g_afb_instance->app.allocateWindowResource(lamp_state, nullptr,
+        // Allocate window resource
+        if (nullptr != can_event) {
+            g_afb_instance->app.allocateWindowResource(can_event, nullptr,
                                                        nullptr, nullptr,
                                                        [](const char* errmsg){
                 if (errmsg != nullptr) {