diff options
author | zheng_wenlong <wenlong_zheng@nexty-ele.com> | 2018-11-20 15:46:47 +0900 |
---|---|---|
committer | zheng_wenlong <wenlong_zheng@nexty-ele.com> | 2018-11-20 15:46:47 +0900 |
commit | c1d5b18cd9d3318c5dcc2a071a7250f8ab74745c (patch) | |
tree | 8997a62935427d006b401d4663a769ed522d0413 /src/window_manager.hpp | |
parent | 9b4dec590ffb9ac99c7ce847b32e9663334d6f57 (diff) |
add ces2019 source
Diffstat (limited to 'src/window_manager.hpp')
-rw-r--r-- | src/window_manager.hpp | 96 |
1 files changed, 91 insertions, 5 deletions
diff --git a/src/window_manager.hpp b/src/window_manager.hpp index 57b9fde..18182b2 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 <afb/afb-binding.h> @@ -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,6 +187,18 @@ class WindowManager Event_ScreenUpdated, + Event_HeadlampOff, + Event_HeadlampOn, + + Event_ParkingBrakeOff, + Event_ParkingBrakeOn, + + Event_LightstatusBrakeOff, + Event_LightstatusBrakeOn, + + Event_CarStop, + Event_CarRun, + Event_Error, Event_Val_Max = Event_Error, @@ -173,27 +216,48 @@ class WindowManager result<int> 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_enddraw_for_remote(char const *appid, char const *drawing_name); + bool api_client_set_render_order(const char *appid, const std::vector<std::string> &render_order); + std::string api_client_attach_service_surface(const char* appid, const char* dest, const char* service_surface); result<json_object *> api_get_display_info(); result<json_object *> api_get_area_info(char const *role); + result<json_object *> 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<WMAction> &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 @@ -205,11 +269,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); @@ -218,21 +295,30 @@ class WindowManager void stopTimer(); void processNextRequest(); - int loadOldRoleDb(); + int loadOldRolesConfigFile(); + + Task convertCanSignalToCarStateTask(const char *signal_name); + void inputCarStateTask(Task task); + + const char *check_surface_exist(const char *role); private: std::map<std::string, struct afb_event> map_afb_event; - std::unordered_map<std::string, struct rect> area2size; std::unordered_map<std::string, std::string> roleold2new; std::unordered_map<std::string, std::string> rolenew2old; std::shared_ptr<LayerControl> lc; + + LowCanClient lcc; + CarInfo crr_car_info; + PMWrapper pmw; rect_map area_info; struct id_allocator id_alloc; // ID allocation and proxy methods for lookup std::unordered_map<unsigned, struct TmpClient> tmp_surface2app; - static const char* kDefaultOldRoleDb; + std::vector<struct TmpService> tmp_services; + static const char* kDefaultOldRolesConfig; }; } // namespace wm |