X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwindow_manager.hpp;h=9e710cecda64a6e359d50b400cff591dc8a27761;hb=ac17da7010c6bd90240a641d503991ca5d0cb41a;hp=1237a60dce7d5b0383557c8af3b550dead970dbf;hpb=99b6f4d2fcd421d3a760a88a67e511fb6fc98068;p=apps%2Fagl-service-windowmanager.git diff --git a/src/window_manager.hpp b/src/window_manager.hpp index 1237a60..9e710ce 100644 --- a/src/window_manager.hpp +++ b/src/window_manager.hpp @@ -21,26 +21,20 @@ #include #include #include -#include "controller_hooks.hpp" -#include "layers.hpp" -#include "layout.hpp" -#include "wayland_ivi_wm.hpp" +#include "result.hpp" #include "pm_wrapper.hpp" -#include "hmi-debug.h" +#include "util.hpp" #include "request.hpp" #include "wm_error.hpp" - -struct json_object; - -namespace wl +#include "wm_layer_control.hpp" +#include "wm_connection.hpp" +#include "low_can_client.hpp" +extern "C" { -struct display; +#include } -namespace compositor -{ -struct controller; -} +struct json_object; namespace wm { @@ -66,12 +60,12 @@ extern const char kKeyWidthPixel[]; extern const char kKeyHeightPixel[]; extern const char kKeyWidthMm[]; extern const char kKeyHeightMm[]; +extern const char kKeyScale[]; extern const char kKeyIds[]; struct id_allocator { unsigned next = 1; - // Surfaces that where requested but not yet created std::unordered_map id2name; std::unordered_map name2id; @@ -87,7 +81,7 @@ struct id_allocator unsigned sid = this->next++; this->id2name[sid] = name; this->name2id[name] = sid; - HMI_DEBUG("wm", "allocated new id %u with name %s", sid, name.c_str()); + HMI_DEBUG("allocated new id %u with name %s", sid, name.c_str()); return sid; } @@ -96,7 +90,7 @@ struct id_allocator { this->id2name[sid] = name; this->name2id[name] = sid; - HMI_DEBUG("wm", "register id %u with name %s", sid, name.c_str()); + HMI_DEBUG("register id %u with name %s", sid, name.c_str()); return; } @@ -136,10 +130,46 @@ struct id_allocator } }; +struct TmpClient +{ + std::string appid; + unsigned pid; +}; + +struct TmpService +{ + std::string appid; // Used to search who create service surface + std::string dest; // Used to attach service to destination application + std::string service;// The name of service surface + std::string uuid; // uuid + TmpService(const std::string& app, const std::string& dst, + const std::string& svc, const std::string& uuid) + : appid(app), dest(dst), service(svc), uuid(uuid) {} +}; + +struct CarInfo +{ + CarInfo() + : parking_brake_stt(true), + accel_pedal_stt(false), + accel_pedal_pos(0.0), + running_stt(false), + headlamp_stt(false), + lightstatus_brake_stt(true) + {}; + + bool parking_brake_stt; + bool accel_pedal_stt; + double accel_pedal_pos; + bool running_stt; + bool headlamp_stt; + bool lightstatus_brake_stt; +}; + class WindowManager { public: - typedef std::unordered_map rect_map; + typedef std::unordered_map rect_map; typedef std::function reply_func; enum EventType @@ -157,130 +187,155 @@ class WindowManager Event_ScreenUpdated, - Event_Error, + Event_Handshake, - Event_Val_Max = Event_Error, - }; - - const std::vector kListEventName{ - "active", - "inactive", - "visible", - "invisible", - "syncDraw", - "flushDraw", - "screenUpdated", - "error"}; + Event_HeadlampOff, + Event_HeadlampOn, - struct controller_hooks chooks; + Event_ParkingBrakeOff, + Event_ParkingBrakeOn, - // This is the one thing, we do not own. - struct wl::display *display; + Event_LightstatusBrakeOff, + Event_LightstatusBrakeOn, - std::unique_ptr controller; - std::vector> outputs; + Event_CarStop, + Event_CarRun, - // track current layouts separately - layer_map layers; - - // ID allocation and proxy methods for lookup - struct id_allocator id_alloc; - - // Set by AFB API when wayland events need to be dispatched - std::atomic pending_events; - - std::map map_afb_event; + Event_Error, - // Surface are info (x, y, w, h) - rect_map area_info; + Event_Val_Max = Event_Error, + }; - // FOR CES DEMO - std::vector surface_bg; + enum WM_Mode + { + Mode_Standalone = 0, + Mode_Connection, + }; - explicit WindowManager(wl::display *d); + explicit WindowManager(); ~WindowManager() = default; - WindowManager(WindowManager const &) = delete; WindowManager &operator=(WindowManager const &) = delete; WindowManager(WindowManager &&) = delete; WindowManager &operator=(WindowManager &&) = delete; int init(); - int dispatch_pending_events(); - void set_pending_events(); - - result api_request_surface(char const *appid, char const *drawing_name); - char const *api_request_surface(char const *appid, char const *drawing_name, char const *ivi_id); - void api_activate_surface(char const *appid, char const *drawing_name, char const *drawing_area, const reply_func &reply); - void api_deactivate_surface(char const *appid, char const *drawing_name, const reply_func &reply); - void api_enddraw(char const *appid, char const *drawing_name); + void sendHandshake(); + void setSubscribed(bool flg); + + result api_request_surface(char const *appid, char const *role); + char const *api_request_surface(char const *appid, char const *role, char const *ivi_id); + bool api_set_role(char const *appid, char const *role); + void api_activate_window(char const *appid, char const *role, char const *drawing_area, const reply_func &reply); + void api_activate_surface_for_slave(char const *appid, char const *drawing_name, + char const *drawing_area, const reply_func &reply); + void api_activate_surface_to_master(char const *appid, char const *drawing_name, + char const *drawing_area, const reply_func &reply); + void api_deactivate_window(char const *appid, char const *role, const reply_func &reply); + void api_deactivate_surface_for_slave(char const *appid, char const *drawing_name, + const reply_func &reply); + void api_deactivate_surface_to_master(char const *appid, char const *drawing_name, + const reply_func &reply); + void api_enddraw(char const *appid, char const *role); + int api_subscribe(afb_req req, int event_id); + void api_handshake(); + void api_enddraw_for_remote(char const *appid, char const *drawing_name); + bool api_client_set_render_order(const char *appid, const std::vector &render_order); + std::string api_client_attach_service_surface(const char* appid, const char* dest, const char* service_surface); + json_object* api_get_area_list(); + void api_change_area_size(ChangeAreaReq &areas); result api_get_display_info(); - result api_get_area_info(char const *drawing_name); - void api_ping(); - void send_event(char const *evname, char const *label); - void send_event(char const *evname, char const *label, char const *area, int x, int y, int w, int h); + result api_get_area_info(char const *role); + result api_get_car_info(char const *label); + void send_event(const std::string& evname); + void send_event(const std::string& evname, const std::string& role); + void send_event(const std::string& evname, const std::string& role, const std::string& area, int x, int y, int w, int h); // Events from the compositor we are interested in - void surface_created(uint32_t surface_id); - void surface_removed(uint32_t surface_id); + void surface_created(unsigned pid, unsigned surface_id); + void surface_removed(unsigned surface_id); void removeClient(const std::string &appid); void exceptionProcessForTransition(); + const char* convertRoleOldToNew(char const *role); + + void analyzeReceivedEvent(const char *event, struct json_object *object); - // Do not use these functions + + // Do not use this function void timerHandler(); void startTransitionWrapper(std::vector &actions); void processError(WMError error); + void processForRemoteRequest(json_object *data); + std::string searchApp(unsigned pid, unsigned ppid, unsigned surface, json_object* resp); + void storeSurface(const std::string& appid, unsigned ppid, unsigned surface); - private: - bool pop_pending_events(); - optional lookup_id(char const *name); - optional lookup_name(int id); - int init_layers(); - void surface_set_layout(int surface_id, const std::string& area = ""); - void layout_commit(); + WMConnection wmcon; + private: // WM Events to clients - void emit_activated(char const *label); - void emit_deactivated(char const *label); - void emit_syncdraw(char const *label, char const *area, int x, int y, int w, int h); + void emit_activated(const std::string& role); + void emit_deactivated(const std::string& role); + void emit_syncdraw(const std::string& role, char const *area, int x, int y, int w, int h); void emit_syncdraw(const std::string &role, const std::string &area); - void emit_flushdraw(char const *label); - void emit_visible(char const *label, bool is_visible); - void emit_invisible(char const *label); - void emit_visible(char const *label); + void emit_flushdraw(const std::string& role); + void emit_visible(const std::string& role, bool is_visible); + void emit_invisible(const std::string& role); + void emit_visible(const std::string& role); + void emitHeadlampOff(); + void emitHeadlampOn(); + void emitParkingBrakeOff(); + void emitParkingBrakeOn(); + void emitLightstatusBrakeOff(); + void emitLightstatusBrakeOn(); + void emitCarStop(); + void emitCarRun(); - void activate(int id); - void deactivate(int id); WMError setRequest(const std::string &appid, const std::string &role, const std::string &area, Task task, unsigned *req_num); - WMError doTransition(unsigned sequence_number); + WMError setRequest(Task task, unsigned* req_num); + WMError setRequestForSlave(const std::string& appid, const std::string &role, + const std::string &area, Task task, unsigned* req_num); WMError checkPolicy(unsigned req_num); + WMError checkPolicyForSlave(unsigned req_num); WMError startTransition(unsigned req_num); + void transitionCarState(TaskCarState task); WMError doEndDraw(unsigned req_num); - WMError layoutChange(const WMAction &action); - WMError visibilityChange(const WMAction &action); - WMError setSurfaceSize(unsigned surface, const std::string& area); void emitScreenUpdated(unsigned req_num); void setTimer(); void stopTimer(); void processNextRequest(); - int loadOldRoleDb(); - const char* convertRoleOldToNew(char const *drawing_name); + int loadOldRolesConfigFile(); + + int saveLastModeData(unsigned req_num); + + Task convertCanSignalToCarStateTask(const char *signal_name); + void inputCarStateTask(Task task); - const char *check_surface_exist(const char *drawing_name); + const char *check_surface_exist(const char *role); private: - std::unordered_map area2size; + std::map map_afb_event; std::unordered_map roleold2new; std::unordered_map rolenew2old; + std::shared_ptr lc; + + LowCanClient lcc; + CarInfo crr_car_info; PMWrapper pmw; + rect_map area_info; + struct id_allocator id_alloc; - static const char* kDefaultOldRoleDb; + bool subscribed; + + // ID allocation and proxy methods for lookup + std::unordered_map tmp_surface2app; + std::vector tmp_services; + static const char* kDefaultOldRolesConfig; }; } // namespace wm