LowCanClient can receive accelerator.pedal.position signal
[apps/agl-service-windowmanager.git] / src / low_can_client.cpp
index 451fa24..01a7340 100644 (file)
@@ -29,17 +29,21 @@ namespace wm {
 LowCanClient::LowCanClient() :
   vehicle_speed_(0),
   trans_gear_pos_(0),
-  parking_brake_status_(TRUE),
   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"),
   prv_car_state_("car_stop"),
   crr_car_state_("car_stop"),
-  prv_lamp_state_("lamp_off"),
-  crr_lamp_state_("lamp_off"),
+  is_changed_lamp_state_(false),
   is_changed_parking_brake_state_(false),
-  is_changed_car_state_(false),
-  is_changed_lamp_state_(false)
+  is_changed_accel_pedal_state_(false),
+  is_changed_car_state_(false)
 {
     HMI_DEBUG("wm:lcc", "Call");
 }
@@ -61,7 +65,9 @@ void LowCanClient::initialize() {
     // low-can subscribe { "event": "transmission_gear_position" }
     // low-can subscribe { "event": "headlamp_status" }
     // low-can subscribe { "event": "parking_brake_status" }
-    for (int i=0; i<this->kNumEvent_; i++) {
+    // low-can subscribe { "event": "accelerator.pedal.position" }
+    int num_event = this->kEventName_.size();
+    for (int i=0; i<num_event; i++) {
         json_object *json_obj = json_object_new_object();
         json_object_object_add(json_obj, "event", json_object_new_string(this->kEventName_[i]));
         HMI_DEBUG("wm:lcc", "subscribe message:%s", json_object_get_string(json_obj));
@@ -70,7 +76,6 @@ void LowCanClient::initialize() {
         ret = afb_service_call_sync("low-can", "subscribe", json_obj, &json_result);
         if (0 > ret) {
             HMI_INFO("wm:lcc", "Could not subscribe to \"low-can\" :%d", ret);
-            return;
         }
         HMI_DEBUG("wm:lcc", "subscribe result:%s", json_object_get_string(json_result));
     }
@@ -84,8 +89,8 @@ void LowCanClient::analyzeCanSignal(struct json_object *object) {
     const char* name = jh::getStringFromJson(object, "name");
     HMI_DEBUG("wm:lcc", "CAN signal name:%s", name);
 
-    if (strstr(name, "vehicle.speed")) {
-        HMI_DEBUG("wm:lcc", "Receive vehicle speed");
+    if (strstr(name, this->kEventName_[0])) {
+        HMI_DEBUG("wm:lcc", "Receive %s", this->kEventName_[0]);
         // Update vehicle speed
         int speed = jh::getIntFromJson(object, "value");
         if (this->vehicle_speed_ != speed) {
@@ -93,8 +98,8 @@ void LowCanClient::analyzeCanSignal(struct json_object *object) {
             HMI_DEBUG("wm:lcc", "Update vehicle speed:%d", this->vehicle_speed_);
         }
     }
-    else if (strstr(name, "transmission_gear_position")) {
-        HMI_DEBUG("wm:lcc", "Receive transmission gear position");
+    else if (strstr(name, this->kEventName_[1])) {
+        HMI_DEBUG("wm:lcc", "Receive %s", this->kEventName_[1]);
         // Update transmission gear position
         int gear_pos = jh::getIntFromJson(object, "value");
         if (this->trans_gear_pos_ != gear_pos) {
@@ -102,8 +107,17 @@ void LowCanClient::analyzeCanSignal(struct json_object *object) {
             HMI_DEBUG("wm:lcc", "Update transmission gear position:%d", this->trans_gear_pos_);
         }
     }
-    else if (strstr(name, "parking_brake_status")) {
-        HMI_DEBUG("wm:lcc", "Receive parking brake status");
+    else if (strstr(name, this->kEventName_[2])) {
+        HMI_DEBUG("wm:lcc", "Receive %s", this->kEventName_[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_);
+        }
+    }
+    else if (strstr(name, this->kEventName_[3])) {
+        HMI_DEBUG("wm:lcc", "Receive %s", this->kEventName_[3]);
         // Update parking gear status
         json_bool parking_brake = jh::getBoolFromJson(object, "value");
         if (this->parking_brake_status_ != parking_brake) {
@@ -111,16 +125,25 @@ void LowCanClient::analyzeCanSignal(struct json_object *object) {
             HMI_DEBUG("wm:lcc", "Update parking brake status:%d", this->parking_brake_status_);
         }
     }
-    else if (strstr(name, "headlamp_status")) {
-        HMI_DEBUG("wm:lcc", "Receive headlamp status");
-        // 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_);
+    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 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";
@@ -130,6 +153,15 @@ void LowCanClient::analyzeCanSignal(struct json_object *object) {
     }
     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());
+
     // Update car state
     if ((0 == this->vehicle_speed_) || (true == this->parking_brake_status_)) {
         this->crr_car_state_ = "car_stop";
@@ -139,14 +171,14 @@ void LowCanClient::analyzeCanSignal(struct json_object *object) {
     }
     HMI_DEBUG("wm:lcc", "Current car state:%s", this->crr_car_state_.c_str());
 
-    // Update lamp state
-    if (true == this->headlamp_status_) {
-        this->crr_lamp_state_ = "lamp_on";
-    }
-    else {
-        this->crr_lamp_state_ = "lamp_off";
+    // 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;
     }
-    HMI_DEBUG("wm:lcc", "Current lamp state:%s", this->crr_lamp_state_.c_str());
 
     // If parking brake state is changed,
     // backup current state for previous state and set flag
@@ -157,6 +189,15 @@ void LowCanClient::analyzeCanSignal(struct json_object *object) {
         this->is_changed_parking_brake_state_ = true;
     }
 
+    // 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 car state is changed,
     // backup current state for previous state and set flag
     if (this->prv_car_state_ != this->crr_car_state_) {
@@ -165,15 +206,13 @@ void LowCanClient::analyzeCanSignal(struct json_object *object) {
         this->prv_car_state_ = this->crr_car_state_;
         this->is_changed_car_state_ = true;
     }
+}
 
-    // 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;
-    }
+bool LowCanClient::isChangedLampState() {
+    HMI_DEBUG("wm:lcc", "Call");
+
+    // Return changed flag
+    return this->is_changed_lamp_state_;
 }
 
 bool LowCanClient::isChangedParkingBrakeState() {
@@ -183,6 +222,13 @@ bool LowCanClient::isChangedParkingBrakeState() {
     return this->is_changed_parking_brake_state_;
 }
 
+bool LowCanClient::isChangedAccelPedalState() {
+    HMI_DEBUG("wm:lcc", "Call");
+
+    // Return changed flag
+    return this->is_changed_accel_pedal_state_;
+}
+
 bool LowCanClient::isChangedCarState() {
     HMI_DEBUG("wm:lcc", "Call");
 
@@ -190,11 +236,14 @@ bool LowCanClient::isChangedCarState() {
     return this->is_changed_car_state_;
 }
 
-bool LowCanClient::isChangedLampState() {
+const char* LowCanClient::getCurrentLampState() {
     HMI_DEBUG("wm:lcc", "Call");
 
-    // Return changed flag
-    return this->is_changed_lamp_state_;
+    // Clear changed flag
+    this->is_changed_lamp_state_ = false;
+
+    // Return current lamp state
+    return this->crr_lamp_state_.c_str();
 }
 
 const char* LowCanClient::getCurrentParkingBrakeState() {
@@ -207,24 +256,24 @@ const char* LowCanClient::getCurrentParkingBrakeState() {
     return this->crr_parking_brake_state_.c_str();
 }
 
-const char* LowCanClient::getCurrentCarState() {
+const char* LowCanClient::getCurrentAccelPedalState() {
     HMI_DEBUG("wm:lcc", "Call");
 
     // Clear changed flag
-    this->is_changed_car_state_ = false;
+    this->is_changed_accel_pedal_state_ = false;
 
-    // Return current car state
-    return this->crr_car_state_.c_str();
+    // Return current accelerator pedal state
+    return this->crr_accel_pedal_state_.c_str();
 }
 
-const char* LowCanClient::getCurrentLampState() {
+const char* LowCanClient::getCurrentCarState() {
     HMI_DEBUG("wm:lcc", "Call");
 
     // Clear changed flag
-    this->is_changed_lamp_state_ = false;
+    this->is_changed_car_state_ = false;
 
-    // Return current lamp state
-    return this->crr_lamp_state_.c_str();
+    // Return current car state
+    return this->crr_car_state_.c_str();
 }