#include "json_helper.hpp"
#include "util.hpp"
#include "wayland_ivi_wm.hpp"
+#include "low_can_client.hpp"
extern "C" {
#include <afb/afb-binding.h>
struct afb_instance {
std::unique_ptr<wl::display> display;
+ wm::LowCanClient lcc_;
wm::App app;
- afb_instance() : display{new wl::display}, app{this->display.get()} {}
+ afb_instance() : display{new wl::display}, lcc_{}, app{this->display.get()} {}
int init();
};
std::mutex binding_m;
int afb_instance::init() {
+ // Initialize LowCanClient class
+ this->lcc_.initialize();
+
+ // Initialize App class
return this->app.init();
}
return;
}
- auto ret = g_afb_instance->app.api_activate_surface(a_drawing_name, a_drawing_area);
- if (ret != nullptr) {
- afb_req_fail(req, "failed", ret);
- return;
- }
+ g_afb_instance->app.allocateWindowResource("activate",
+ a_drawing_name, a_drawing_area,
+ [&req](const char* errmsg){
+ if (errmsg != nullptr) {
+ HMI_ERROR("wm", errmsg);
+ afb_req_fail(req, "failed", errmsg);
+ return;
+ }
+ afb_req_success(req, NULL, "success");
+ });
- afb_req_success(req, NULL, "success");
} catch (std::exception &e) {
- afb_req_fail_f(req, "failed", "Uncaught exception while calling activatesurface: %s", e.what());
+ HMI_WARNING("wm", "failed", "Uncaught exception while calling activatesurface: %s", e.what());
return;
}
return;
}
- auto ret = g_afb_instance->app.api_deactivate_surface(a_drawing_name);
- if (ret != nullptr) {
- afb_req_fail(req, "failed", ret);
- return;
- }
+ g_afb_instance->app.allocateWindowResource("deactivate",
+ a_drawing_name, nullptr,
+ [&req](const char* errmsg){
+ if (errmsg != nullptr) {
+ HMI_ERROR("wm", errmsg);
+ afb_req_fail(req, "failed", errmsg);
+ return;
+ }
+ afb_req_success(req, NULL, "success");
+ });
- afb_req_success(req, NULL, "success");
} catch (std::exception &e) {
- afb_req_fail_f(req, "failed", "Uncaught exception while calling deactivatesurface: %s", e.what());
+ HMI_WARNING("wm", "Uncaught exception while calling deactivatesurface: %s", e.what());
return;
}
}
afb_req_fail(req, "failed", "Need char const* argument drawing_name");
return;
}
+ afb_req_success(req, NULL, "success");
- auto ret = g_afb_instance->app.api_enddraw(a_drawing_name);
- if (ret != nullptr) {
- afb_req_fail(req, "failed", ret);
- return;
- }
+ g_afb_instance->app.api_enddraw(a_drawing_name);
- afb_req_success(req, NULL, "success");
} catch (std::exception &e) {
- afb_req_fail_f(req, "failed", "Uncaught exception while calling enddraw: %s", e.what());
+ HMI_WARNING("wm", "failed", "Uncaught exception while calling enddraw: %s", e.what());
return;
}
return;
}
int event_type = json_object_get_int(j);
+ if ((wm::App::Event_Val_Min > event_type)
+ || (wm::App::Event_Val_Max < event_type)) {
+ afb_req_fail(req, "failed", "Invalid EventType");
+ return;
+ }
+
const char *event_name = g_afb_instance->app.kListEventName[event_type];
struct afb_event event = g_afb_instance->app.map_afb_event[event_name];
int ret = afb_req_subscribe(req, event);
{}
};
+void on_event(const char *event, struct json_object *object){
+ HMI_DEBUG("wm", "event:%s", event);
+
+ // 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
+ const char* signal_name = lcc->analyzeCanSignal(object);
+
+ // 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");
+
+ // Set event
+ if (lcc->getCurrentParkingBrakeState()) {
+ can_event = "parking_brake_on";
+ }
+ else {
+ can_event = "parking_brake_off";
+ }
+ }
+ else if (strstr(signal_name, lcc->kSignalName_[lcc->SignalNoAccelPedalPos])) {
+ // Update accel pedal position
+ app->setAccelPedalPos(lcc->getCurrentAccelPedalPosition());
+
+ if (lcc->isChangedAccelPedalState()) {
+ HMI_DEBUG("wm", "Accelerator Pedal state is changed");
+
+ // 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 (strstr(signal_name, lcc->kSignalName_[lcc->SignalNoLightstatusBrake])) {
+ HMI_DEBUG("wm", "Lightstatus Brake state is changed");
+
+ // Set event
+ if (lcc->getCurrentLightstatusBrakeState()) {
+ can_event = "lightstatus_brake_on";
+ }
+ else {
+ can_event = "lightstatus_brake_off";
+ }
+ }
+
+ // Allocate window resource
+ if (nullptr != can_event) {
+ g_afb_instance->app.allocateWindowResource(can_event,
+ nullptr, nullptr,
+ [](const char* errmsg){
+ if (errmsg != nullptr) {
+ HMI_ERROR("wm", errmsg);
+ }
+ });
+ }
+ }
+}
+
extern "C" const struct afb_binding_v2 afbBindingV2 = {
- "windowmanager", nullptr, nullptr, windowmanager_verbs, nullptr, binding_init, nullptr, 0};
+ "windowmanager", nullptr, nullptr, windowmanager_verbs, nullptr, binding_init, on_event, 0};