GenericCommunicator: added handling of synchronized surfaces commands
[profile/ivi/layer-management.git] / LayerManagerPlugins / Communicators / GenericCommunicator / include / GenericCommunicator.h
1 /***************************************************************************
2  *
3  * Copyright 2012 BMW Car IT GmbH
4  * Copyright (C) 2012 DENSO CORPORATION and Robert Bosch Car Multimedia Gmbh
5  *
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  *        http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  ****************************************************************************/
20 #ifndef __GENERICCOMMUNICATOR_H__
21 #define __GENERICCOMMUNICATOR_H__
22
23 /**
24  * \defgroup GenericCommunicator Generic Communicator API
25  */
26
27 #include "ICommunicator.h"
28 #include "PluginBase.h"
29 #include "Log.h"
30 #include "IpcModuleLoader.h"
31 #include "ObjectType.h"
32 #include "ThreadBase.h"
33 #include <map>
34 #include <list>
35 #include <string>
36
37 class GenericCommunicator;
38 class GraphicalObject;
39 class ICommandExecutor;
40 class Configuration;
41
42 //=============================================================================
43 // internal types
44 //=============================================================================
45 typedef void (GenericCommunicator::*CallBackMethod)(t_ilm_message);
46
47 struct MethodTable
48 {
49     const char *name;
50     CallBackMethod function;
51 };
52 typedef std::map<std::string, MethodTable> CallBackTable;
53
54
55 //=============================================================================
56 // interface
57 //=============================================================================
58 class GenericCommunicator : public ICommunicator, protected ThreadBase, public PluginBase
59 {
60 public:
61     GenericCommunicator(ICommandExecutor& executor, Configuration& config);
62     virtual ~GenericCommunicator() {}
63
64     // from ICommunicator
65     virtual bool start();
66     virtual void stop();
67     virtual void process(int timeout_ms);
68     virtual void setdebug(bool onoff);
69
70     // from ThreadBase
71     virtual t_ilm_bool threadMainLoop();
72
73     // from PluginBase
74     virtual t_ilm_const_string pluginGetName() const;
75     virtual HealthCondition pluginGetHealth();
76
77 private:
78     void ServiceConnect(t_ilm_message message);
79     void ServiceDisconnect(t_ilm_message message);
80     void Debug(t_ilm_message message);
81     void ScreenShot(t_ilm_message message);
82     void ScreenShotOfLayer(t_ilm_message message);
83     void ScreenShotOfSurface(t_ilm_message message);
84     void GetScreenResolution(t_ilm_message message);
85     void GetNumberOfHardwareLayers(t_ilm_message message);
86     void GetScreenIDs(t_ilm_message message);
87     void ListAllLayerIDS(t_ilm_message message);
88     void ListAllLayerIDsOnScreen(t_ilm_message message);
89     void ListAllSurfaceIDS(t_ilm_message message);
90     void ListSurfaceofLayer(t_ilm_message message);
91     void GetPropertiesOfSurface(t_ilm_message message);
92     void GetPropertiesOfLayer(t_ilm_message message);
93     void CreateSurface(t_ilm_message message);
94     void InitializeSurface(t_ilm_message message);
95     void InitializeSurfaceFromId(t_ilm_message message);
96     void CreateSurfaceFromId(t_ilm_message message);
97     void SetSurfaceNativeContent(t_ilm_message message);
98     void RemoveSurfaceNativeContent(t_ilm_message message);
99     void SetSynchronizedSurfaces(t_ilm_message message);
100     void RemoveSynchronizedSurfaces(t_ilm_message message);
101     void RemoveSurface(t_ilm_message message);
102     void CreateLayer(t_ilm_message message);
103     void CreateLayerFromId(t_ilm_message message);
104     void CreateLayerWithDimension(t_ilm_message message);
105     void CreateLayerFromIdWithDimension(t_ilm_message message);
106     void RemoveLayer(t_ilm_message message);
107     void AddSurfaceToLayer(t_ilm_message message);
108     void RemoveSurfaceFromLayer(t_ilm_message message);
109     void SetSurfaceSourceRegion(t_ilm_message message);
110     void SetLayerSourceRegion(t_ilm_message message);
111     void SetSurfaceDestinationRegion(t_ilm_message message);
112     void SetSurfacePosition(t_ilm_message message);
113     void GetSurfacePosition(t_ilm_message message);
114     void SetSurfaceDimension(t_ilm_message message);
115     void SetLayerDestinationRegion(t_ilm_message message);
116     void SetLayerPosition(t_ilm_message message);
117     void GetLayerPosition(t_ilm_message message);
118     void SetLayerDimension(t_ilm_message message);
119     void GetLayerDimension(t_ilm_message message);
120     void GetSurfaceDimension(t_ilm_message message);
121     void SetSurfaceOpacity(t_ilm_message message);
122     void SetLayerOpacity(t_ilm_message message);
123     void GetSurfaceOpacity(t_ilm_message message);
124     void GetLayerOpacity(t_ilm_message message);
125     void SetSurfaceOrientation(t_ilm_message message);
126     void GetSurfaceOrientation(t_ilm_message message);
127     void SetLayerOrientation(t_ilm_message message);
128     void GetLayerOrientation(t_ilm_message message);
129     void GetSurfacePixelformat(t_ilm_message message);
130     void SetSurfaceVisibility(t_ilm_message message);
131     void SetLayerVisibility(t_ilm_message message);
132     void GetSurfaceVisibility(t_ilm_message message);
133     void GetLayerVisibility(t_ilm_message message);
134     void SetRenderOrderOfLayers(t_ilm_message message);
135     void SetSurfaceRenderOrderWithinLayer(t_ilm_message message);
136     void GetLayerType(t_ilm_message message);
137     void GetLayertypeCapabilities(t_ilm_message message);
138     void GetLayerCapabilities(t_ilm_message message);
139     void FadeIn(t_ilm_message message);
140     void SynchronizedFade(t_ilm_message message);
141     void FadeOut(t_ilm_message message);
142     void Exit(t_ilm_message message);
143     void CommitChanges(t_ilm_message message);
144     void CreateShader(t_ilm_message message);
145     void DestroyShader(t_ilm_message message);
146     void SetShader(t_ilm_message message);
147     void SetUniforms(t_ilm_message message);
148     void SetKeyboardFocusOn(t_ilm_message message);
149     void GetKeyboardFocusSurfaceId(t_ilm_message message);
150     void UpdateInputEventAcceptanceOn(t_ilm_message message);
151     void SetSurfaceChromaKey(t_ilm_message message);
152     void SetLayerChromaKey(t_ilm_message message);
153     void LayerAddNotification(t_ilm_message message);
154     void SurfaceAddNotification(t_ilm_message message);
155     void LayerRemoveNotification(t_ilm_message message);
156     void SurfaceRemoveNotification(t_ilm_message message);
157     void SetOptimizationMode(t_ilm_message message);
158     void GetOptimizationMode(t_ilm_message message);
159     void GetPropertiesOfScreen(t_ilm_message message);
160
161 private:
162     void RemoveApplicationReference(char* owner);
163     void processNotificationQueue();
164     void sendNotification(GraphicalObject* object, t_ilm_notification_mask mask);
165
166 private:
167     IpcModule m_ipcModule;
168     CallBackTable m_callBackTable;
169     bool m_running;
170     unsigned long int mThreadId;
171 };
172
173 #endif // __GENERICCOMMUNICATOR_H__