X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fwindow_manager.hpp;h=9e710cecda64a6e359d50b400cff591dc8a27761;hb=ac17da7010c6bd90240a641d503991ca5d0cb41a;hp=30deb4b18674547f3bcbcb155eb05365b36d4caa;hpb=d9dc8ef258ed2ddeeca83775eee945dbfdae59c5;p=apps%2Fagl-service-windowmanager.git diff --git a/src/window_manager.hpp b/src/window_manager.hpp index 30deb4b..9e710ce 100644 --- a/src/window_manager.hpp +++ b/src/window_manager.hpp @@ -27,6 +27,8 @@ #include "request.hpp" #include "wm_error.hpp" #include "wm_layer_control.hpp" +#include "wm_connection.hpp" +#include "low_can_client.hpp" extern "C" { #include @@ -131,9 +133,38 @@ struct id_allocator struct TmpClient { std::string appid; - unsigned layer; + 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 { @@ -156,43 +187,90 @@ class WindowManager Event_ScreenUpdated, + Event_Handshake, + + Event_HeadlampOff, + Event_HeadlampOn, + + Event_ParkingBrakeOff, + Event_ParkingBrakeOn, + + Event_LightstatusBrakeOff, + Event_LightstatusBrakeOn, + + Event_CarStop, + Event_CarRun, + Event_Error, Event_Val_Max = Event_Error, }; + enum WM_Mode + { + Mode_Standalone = 0, + Mode_Connection, + }; + explicit WindowManager(); ~WindowManager() = default; - WindowManager(WindowManager const &) = delete; WindowManager &operator=(WindowManager const &) = delete; WindowManager(WindowManager &&) = delete; WindowManager &operator=(WindowManager &&) = delete; int init(); + 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_t req, int event_id); + 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 *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(unsigned 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 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); + + WMConnection wmcon; private: // WM Events to clients @@ -204,11 +282,24 @@ class WindowManager 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(); WMError setRequest(const std::string &appid, const std::string &role, const std::string &area, Task task, unsigned *req_num); + 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); void emitScreenUpdated(unsigned req_num); @@ -217,16 +308,34 @@ class WindowManager void stopTimer(); void processNextRequest(); + int loadOldRolesConfigFile(); + + int saveLastModeData(unsigned req_num); + + Task convertCanSignalToCarStateTask(const char *signal_name); + void inputCarStateTask(Task task); + + const char *check_surface_exist(const char *role); + private: - std::map map_afb_event; - 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; + bool subscribed; + // ID allocation and proxy methods for lookup std::unordered_map tmp_surface2app; + std::vector tmp_services; + static const char* kDefaultOldRolesConfig; }; } // namespace wm