1 /***************************************************************************
2 * Copyright 2012 BMW Car IT GmbH
3 * Copyright (C) 2012 DENSO CORPORATION and Robert Bosch Car Multimedia Gmbh
6 * Licensed under the Apache License, Version 2.0 (the "License");
7 * you may not use this file except in compliance with the License.
8 * You may obtain a copy of the License at
10 * http://www.apache.org/licenses/LICENSE-2.0
12 * Unless required by applicable law or agreed to in writing, software
13 * distributed under the License is distributed on an "AS IS" BASIS,
14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15 * See the License for the specific language governing permissions and
16 * limitations under the License.
18 ****************************************************************************/
20 #include "GenericCommunicator.h"
21 #include "ilm_types.h"
24 #include "Configuration.h"
26 #include "ICommandExecutor.h"
27 #include "CommitCommand.h"
28 #include "LayerCreateCommand.h"
29 #include "SurfaceCreateCommand.h"
30 #include "SurfaceGetDimensionCommand.h"
31 #include "LayerGetDimensionCommand.h"
32 #include "SurfaceGetOpacityCommand.h"
33 #include "LayerGetOpacityCommand.h"
34 #include "SurfaceGetPixelformatCommand.h"
35 #include "LayerGetVisibilityCommand.h"
36 #include "SurfaceGetVisibilityCommand.h"
37 #include "LayerAddSurfaceCommand.h"
38 #include "LayerRemoveSurfaceCommand.h"
39 #include "LayerRemoveCommand.h"
40 #include "SurfaceRemoveCommand.h"
41 #include "SurfaceGetOrientationCommand.h"
42 #include "LayerGetOrientationCommand.h"
43 #include "LayerSetDestinationRectangleCommand.h"
44 #include "SurfaceSetDestinationRectangleCommand.h"
45 #include "LayerSetOpacityCommand.h"
46 #include "SurfaceSetOpacityCommand.h"
47 #include "LayerSetSourceRectangleCommand.h"
48 #include "SurfaceSetSourceRectangleCommand.h"
49 #include "LayerSetOrientationCommand.h"
50 #include "SurfaceSetOrientationCommand.h"
51 #include "LayerSetVisibilityCommand.h"
52 #include "SurfaceSetVisibilityCommand.h"
53 #include "DebugCommand.h"
54 #include "ExitCommand.h"
55 #include "ScreenSetRenderOrderCommand.h"
56 #include "LayerSetRenderOrderCommand.h"
57 #include "LayerSetDimensionCommand.h"
58 #include "SurfaceSetDimensionCommand.h"
59 #include "LayerSetPositionCommand.h"
60 #include "SurfaceSetPositionCommand.h"
61 #include "LayerGetPositionCommand.h"
62 #include "SurfaceGetPositionCommand.h"
63 #include "ShaderCreateCommand.h"
64 #include "ShaderDestroyCommand.h"
65 #include "SurfaceSetShaderCommand.h"
66 #include "ShaderSetUniformsCommand.h"
67 #include "ScreenDumpCommand.h"
68 #include "LayerDumpCommand.h"
69 #include "SurfaceDumpCommand.h"
70 #include "SurfaceSetNativeContentCommand.h"
71 #include "SurfaceRemoveNativeContentCommand.h"
72 #include "SurfaceSetKeyboardFocusCommand.h"
73 #include "SurfaceGetKeyboardFocusCommand.h"
74 #include "SurfaceUpdateInputEventAcceptance.h"
75 #include "SurfaceSetChromaKeyCommand.h"
76 #include "LayerSetChromaKeyCommand.h"
77 #include "SetOptimizationModeCommand.h"
78 #include "GetOptimizationModeCommand.h"
79 #include "SetSynchronizedSurfacesCommand.h"
80 #include "RemoveSynchronizedSurfacesCommand.h"
91 #define DEFAULT_SCREEN 0
93 GenericCommunicator::GenericCommunicator(ICommandExecutor& executor, Configuration& config)
94 : ICommunicator(&executor)
95 , PluginBase(executor, config, Communicator_Api_v1)
96 , m_running(ILM_FALSE)
98 MethodTable manager_methods[] =
100 { "ServiceConnect", &GenericCommunicator::ServiceConnect },
101 { "ServiceDisconnect", &GenericCommunicator::ServiceDisconnect },
102 { "Debug", &GenericCommunicator::Debug },
103 { "ScreenShot", &GenericCommunicator::ScreenShot },
104 { "ScreenShotOfLayer", &GenericCommunicator::ScreenShotOfLayer },
105 { "ScreenShotOfSurface", &GenericCommunicator::ScreenShotOfSurface },
106 { "GetScreenResolution", &GenericCommunicator::GetScreenResolution },
107 { "GetNumberOfHardwareLayers", &GenericCommunicator::GetNumberOfHardwareLayers },
108 { "GetScreenIDs", &GenericCommunicator::GetScreenIDs },
109 { "ListAllLayerIDS", &GenericCommunicator::ListAllLayerIDS },
110 { "ListAllLayerIDsOnScreen", &GenericCommunicator::ListAllLayerIDsOnScreen },
111 { "ListAllSurfaceIDS", &GenericCommunicator::ListAllSurfaceIDS },
112 { "ListSurfaceofLayer", &GenericCommunicator::ListSurfaceofLayer },
113 { "GetPropertiesOfSurface", &GenericCommunicator::GetPropertiesOfSurface },
114 { "GetPropertiesOfLayer", &GenericCommunicator::GetPropertiesOfLayer },
115 { "CreateSurface", &GenericCommunicator::CreateSurface },
116 { "CreateSurfaceFromId", &GenericCommunicator::CreateSurfaceFromId },
117 { "InitializeSurface", &GenericCommunicator::InitializeSurface },
118 { "InitializeSurfaceFromId", &GenericCommunicator::InitializeSurfaceFromId },
119 { "SetSurfaceNativeContent", &GenericCommunicator::SetSurfaceNativeContent },
120 { "RemoveSurfaceNativeContent", &GenericCommunicator::RemoveSurfaceNativeContent },
121 { "RemoveSurface", &GenericCommunicator::RemoveSurface },
122 { "CreateLayer", &GenericCommunicator::CreateLayer },
123 { "CreateLayerFromId", &GenericCommunicator::CreateLayerFromId },
124 { "CreateLayerWithDimension", &GenericCommunicator::CreateLayerWithDimension },
125 { "CreateLayerFromIdWithDimension", &GenericCommunicator::CreateLayerFromIdWithDimension },
126 { "RemoveLayer", &GenericCommunicator::RemoveLayer },
127 { "AddSurfaceToLayer", &GenericCommunicator::AddSurfaceToLayer },
128 { "RemoveSurfaceFromLayer", &GenericCommunicator::RemoveSurfaceFromLayer },
129 { "SetSurfaceSourceRegion", &GenericCommunicator::SetSurfaceSourceRegion },
130 { "SetLayerSourceRegion", &GenericCommunicator::SetLayerSourceRegion },
131 { "SetSurfaceDestinationRegion", &GenericCommunicator::SetSurfaceDestinationRegion },
132 { "SetSurfacePosition", &GenericCommunicator::SetSurfacePosition },
133 { "GetSurfacePosition", &GenericCommunicator::GetSurfacePosition },
134 { "SetSurfaceDimension", &GenericCommunicator::SetSurfaceDimension },
135 { "SetLayerDestinationRegion", &GenericCommunicator::SetLayerDestinationRegion },
136 { "SetLayerPosition", &GenericCommunicator::SetLayerPosition },
137 { "GetLayerPosition", &GenericCommunicator::GetLayerPosition },
138 { "SetLayerDimension", &GenericCommunicator::SetLayerDimension },
139 { "GetLayerDimension", &GenericCommunicator::GetLayerDimension },
140 { "GetSurfaceDimension", &GenericCommunicator::GetSurfaceDimension },
141 { "SetSurfaceOpacity", &GenericCommunicator::SetSurfaceOpacity },
142 { "SetLayerOpacity", &GenericCommunicator::SetLayerOpacity },
143 { "GetSurfaceOpacity", &GenericCommunicator::GetSurfaceOpacity },
144 { "GetLayerOpacity", &GenericCommunicator::GetLayerOpacity },
145 { "SetSurfaceOrientation", &GenericCommunicator::SetSurfaceOrientation },
146 { "GetSurfaceOrientation", &GenericCommunicator::GetSurfaceOrientation },
147 { "SetLayerOrientation", &GenericCommunicator::SetLayerOrientation },
148 { "GetLayerOrientation", &GenericCommunicator::GetLayerOrientation },
149 { "GetSurfacePixelformat", &GenericCommunicator::GetSurfacePixelformat },
150 { "SetSurfaceVisibility", &GenericCommunicator::SetSurfaceVisibility },
151 { "SetLayerVisibility", &GenericCommunicator::SetLayerVisibility },
152 { "GetSurfaceVisibility", &GenericCommunicator::GetSurfaceVisibility },
153 { "GetLayerVisibility", &GenericCommunicator::GetLayerVisibility },
154 { "SetRenderOrderOfLayers", &GenericCommunicator::SetRenderOrderOfLayers },
155 { "SetSurfaceRenderOrderWithinLayer", &GenericCommunicator::SetSurfaceRenderOrderWithinLayer },
156 { "GetLayerType", &GenericCommunicator::GetLayerType },
157 { "GetLayertypeCapabilities", &GenericCommunicator::GetLayertypeCapabilities },
158 { "GetLayerCapabilities", &GenericCommunicator::GetLayerCapabilities },
159 { "Exit", &GenericCommunicator::Exit },
160 { "CommitChanges", &GenericCommunicator::CommitChanges },
161 { "CreateShader", &GenericCommunicator::CreateShader },
162 { "DestroyShader", &GenericCommunicator::DestroyShader },
163 { "SetShader", &GenericCommunicator::SetShader },
164 { "SetUniforms", &GenericCommunicator::SetUniforms },
165 { "SetKeyboardFocusOn", &GenericCommunicator::SetKeyboardFocusOn },
166 { "GetKeyboardFocusSurfaceId", &GenericCommunicator::GetKeyboardFocusSurfaceId },
167 { "UpdateInputEventAcceptanceOn", &GenericCommunicator::UpdateInputEventAcceptanceOn },
168 { "SetSurfaceChromaKey", &GenericCommunicator::SetSurfaceChromaKey },
169 { "SetLayerChromaKey", &GenericCommunicator::SetLayerChromaKey },
170 { "LayerAddNotification", &GenericCommunicator::LayerAddNotification },
171 { "SurfaceAddNotification", &GenericCommunicator::SurfaceAddNotification },
172 { "LayerRemoveNotification", &GenericCommunicator::LayerRemoveNotification },
173 { "SurfaceRemoveNotification", &GenericCommunicator::SurfaceRemoveNotification },
174 { "SetOptimizationMode", &GenericCommunicator::SetOptimizationMode },
175 { "GetOptimizationMode", &GenericCommunicator::GetOptimizationMode },
176 { "GetPropertiesOfScreen", &GenericCommunicator::GetPropertiesOfScreen },
177 { "SetSynchronizedSurfaces", &GenericCommunicator::SetSynchronizedSurfaces },
178 { "RemoveSynchronizedSurfaces", &GenericCommunicator::RemoveSynchronizedSurfaces }
181 int entryCount = sizeof(manager_methods) / sizeof(MethodTable);
183 for (int index = 0; index < entryCount; ++index)
185 MethodTable* method = &manager_methods[index];
186 if (method->function)
188 m_callBackTable[method->name] = *method;
189 LOG_DEBUG("GenericCommunicator", "registered callback for " << method->name);
193 memset(&m_ipcModule, 0, sizeof(m_ipcModule));
195 mThreadId = pthread_self();
198 bool GenericCommunicator::start()
200 LOG_DEBUG("GenericCommunicator", "Starting up IpcModules.");
202 if (!loadIpcModule(&m_ipcModule))
204 LOG_ERROR("GenericCommunicator", "Loading IpcModule failed.");
207 LOG_DEBUG("GenericCommunicator", "Loading IpcModule success.");
209 if (!m_ipcModule.initServiceMode())
211 LOG_ERROR("GenericCommunicator", "Initializing IpcModule failed.");
214 LOG_DEBUG("GenericCommunicator", "Initializing IpcModule success.");
216 m_running = ILM_TRUE;
217 pluginSetHealth(HealthRunning);
226 void GenericCommunicator::stop()
228 LOG_INFO("GenericCommunicator", "stopping");
234 m_ipcModule.destroy();
236 pluginSetHealth(HealthStopped);
239 void GenericCommunicator::process(int timeout_ms)
241 t_ilm_message message = m_ipcModule.receive(timeout_ms);
247 t_ilm_message_type messageType = m_ipcModule.getMessageType(message);
248 t_ilm_const_string name = m_ipcModule.getMessageName(message);
249 t_ilm_client_handle senderHandle = m_ipcModule.getSenderHandle(message);
253 case IpcMessageTypeCommand:
254 if (m_callBackTable.end() != m_callBackTable.find(name))
256 LOG_DEBUG("GenericCommunicator", "received: " << name << " from "
257 << m_executor->getSenderName(senderHandle)
258 << "(" << m_executor->getSenderPid(senderHandle) << ")");
259 CallBackMethod method = m_callBackTable[name].function;
260 (this->*method)(message);
264 LOG_WARNING("GenericCommunicator", "Received unknown command " << name
265 << " from " << m_executor->getSenderName(senderHandle)
266 << "(pid " << m_executor->getSenderPid(senderHandle) << ")");
268 processNotificationQueue();
271 case IpcMessageTypeConnect:
272 LOG_DEBUG("GenericCommunicator", "client " << m_executor->getSenderName(senderHandle)
273 << "(pid " << m_executor->getSenderPid(senderHandle) << ") connected");
276 case IpcMessageTypeDisconnect:
277 LOG_DEBUG("GenericCommunicator", "client " << m_executor->getSenderName(senderHandle)
278 << "(pid " << m_executor->getSenderPid(senderHandle) << ") disconnected");
280 const LayerMap& layers = m_executor->getScene()->getAllLayers();
281 LayerMapConstIterator layerIter = layers.begin();
282 LayerMapConstIterator layerIterEnd = layers.end();
283 for (; layerIter != layerIterEnd; ++layerIter)
285 Layer* layer = layerIter->second;
286 layer->removeNotification(senderHandle);
289 const SurfaceMap& surfaces = m_executor->getScene()->getAllSurfaces();
290 SurfaceMapConstIterator surfaceIter = surfaces.begin();
291 SurfaceMapConstIterator surfaceIterEnd = surfaces.end();
292 for (; surfaceIter != surfaceIterEnd; ++surfaceIter)
294 Surface* surface = surfaceIter->second;
295 surface->removeNotification(senderHandle);
300 case IpcMessageTypeError:
301 LOG_DEBUG("GenericCommunicator", "Received error message " << name << " from "
302 << m_executor->getSenderName(senderHandle)
303 << "(pid " << m_executor->getSenderPid(senderHandle) << ")");
306 case IpcMessageTypeShutdown:
307 case IpcMessageTypeNone:
311 LOG_DEBUG("GenericCommunicator", "Received unknown data from "
312 << m_executor->getSenderName(senderHandle)
313 << "(pid " << m_executor->getSenderPid(senderHandle) << "), Message type: " << messageType);
316 m_ipcModule.destroyMessage(message);
319 void GenericCommunicator::setdebug(bool onoff)
321 (void)onoff; // TODO: remove, only prevents warning
324 t_ilm_bool GenericCommunicator::threadMainLoop()
330 t_ilm_const_string GenericCommunicator::pluginGetName() const
332 return "GenericCommunicator";
335 void GenericCommunicator::ServiceConnect(t_ilm_message message)
337 t_ilm_message response;
338 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
340 unsigned int processId = 0;
341 char processName[1024];
342 m_ipcModule.getUint(message, &processId);
343 m_ipcModule.getString(message, processName);
345 m_executor->addApplicationReference(clientHandle, new IApplicationReference(processName, processId));
347 LOG_DEBUG("GenericCommunicator", "ServiceConnect called from "
348 << m_executor->getSenderName(clientHandle)
349 << "(" << m_executor->getSenderPid(clientHandle) << ")");
351 response = m_ipcModule.createResponse(message);
352 m_ipcModule.sendToClients(response, &clientHandle, 1);
353 m_ipcModule.destroyMessage(response);
356 void GenericCommunicator::ServiceDisconnect(t_ilm_message message)
358 t_ilm_message response;
359 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
361 LOG_DEBUG("GenericCommunicator", "ServiceDisconnect called from "
362 << m_executor->getSenderName(clientHandle)
363 << "(" << m_executor->getSenderPid(clientHandle) << ")");
365 m_executor->removeApplicationReference(clientHandle);
367 response = m_ipcModule.createResponse(message);
368 m_ipcModule.sendToClients(response, &clientHandle, 1);
369 m_ipcModule.destroyMessage(response);
372 void GenericCommunicator::Debug(t_ilm_message message)
374 t_ilm_message response;
375 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
376 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
377 t_ilm_bool param = ILM_FALSE;
378 m_ipcModule.getBool(message, ¶m);
380 t_ilm_bool status = m_executor->execute(new DebugCommand(clientPid, param));
383 response = m_ipcModule.createResponse(message);
387 response = m_ipcModule.createErrorResponse(message);
388 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
391 m_ipcModule.sendToClients(response, &clientHandle, 1);
392 m_ipcModule.destroyMessage(response);
395 void GenericCommunicator::GetScreenResolution(t_ilm_message message)
397 t_ilm_message response;
398 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
400 m_ipcModule.getUint(message, &screenid);
401 uint* resolution = m_executor->getScreenResolution(screenid);
403 response = m_ipcModule.createResponse(message);
404 m_ipcModule.appendUint(response, resolution[0]);
405 m_ipcModule.appendUint(response, resolution[1]);
406 m_ipcModule.sendToClients(response, &clientHandle, 1);
407 m_ipcModule.destroyMessage(response);
410 void GenericCommunicator::GetNumberOfHardwareLayers(t_ilm_message message)
412 t_ilm_message response;
413 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
415 m_ipcModule.getUint(message, &screenid);
416 uint numberOfHardwareLayers = m_executor->getNumberOfHardwareLayers(screenid);
417 response = m_ipcModule.createResponse(message);
418 m_ipcModule.appendUint(response, numberOfHardwareLayers);
419 m_ipcModule.sendToClients(response, &clientHandle, 1);
420 m_ipcModule.destroyMessage(response);
423 void GenericCommunicator::GetScreenIDs(t_ilm_message message)
425 t_ilm_message response;
426 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
428 uint* IDs = m_executor->getScreenIDs(&length);
429 response = m_ipcModule.createResponse(message);
430 m_ipcModule.appendUintArray(response, IDs, length);
431 m_ipcModule.sendToClients(response, &clientHandle, 1);
432 m_ipcModule.destroyMessage(response);
435 void GenericCommunicator::ScreenShot(t_ilm_message message)
437 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
438 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
439 t_ilm_message response;
443 m_ipcModule.getUint(message, &screenid);
444 m_ipcModule.getString(message, filename);
446 t_ilm_bool status = m_executor->execute(new ScreenDumpCommand(clientPid, filename, screenid));
449 response = m_ipcModule.createResponse(message);
453 response = m_ipcModule.createErrorResponse(message);
454 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
457 m_ipcModule.sendToClients(response, &clientHandle, 1);
458 m_ipcModule.destroyMessage(response);
461 void GenericCommunicator::ScreenShotOfLayer(t_ilm_message message)
463 t_ilm_message response;
464 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
465 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
467 m_ipcModule.getString(message, filename);
469 m_ipcModule.getUint(message, &layerid);
471 t_ilm_bool status = m_executor->execute(new LayerDumpCommand(clientPid, filename, layerid));
474 response = m_ipcModule.createResponse(message);
478 response = m_ipcModule.createErrorResponse(message);
479 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
482 m_ipcModule.sendToClients(response, &clientHandle, 1);
483 m_ipcModule.destroyMessage(response);
486 void GenericCommunicator::ScreenShotOfSurface(t_ilm_message message)
488 t_ilm_message response;
489 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
490 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
492 m_ipcModule.getString(message, filename);
494 m_ipcModule.getUint(message, &id);
495 t_ilm_bool status = m_executor->execute(new SurfaceDumpCommand(clientPid, filename, id));
498 response = m_ipcModule.createResponse(message);
502 response = m_ipcModule.createErrorResponse(message);
503 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
506 m_ipcModule.sendToClients(response, &clientHandle, 1);
507 m_ipcModule.destroyMessage(response);
510 void GenericCommunicator::ListAllLayerIDS(t_ilm_message message)
512 t_ilm_message response;
513 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
516 m_executor->getScene()->lockScene();
517 m_executor->getScene()->getLayerIDs(&length, &array);
518 m_executor->getScene()->unlockScene();
519 response = m_ipcModule.createResponse(message);
520 m_ipcModule.appendUintArray(response, array, length);
521 m_ipcModule.sendToClients(response, &clientHandle, 1);
522 m_ipcModule.destroyMessage(response);
525 void GenericCommunicator::ListAllLayerIDsOnScreen(t_ilm_message message)
527 t_ilm_message response;
528 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
530 m_ipcModule.getUint(message, &screenID);
534 m_executor->getScene()->lockScene();
535 t_ilm_bool status = m_executor->getScene()->getLayerIDsOfScreen(screenID, &length, &array);
536 m_executor->getScene()->unlockScene();
539 response = m_ipcModule.createResponse(message);
540 m_ipcModule.appendUintArray(response, array, length);
544 response = m_ipcModule.createErrorResponse(message);
545 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
548 m_ipcModule.sendToClients(response, &clientHandle, 1);
549 m_ipcModule.destroyMessage(response);
552 void GenericCommunicator::ListAllSurfaceIDS(t_ilm_message message)
554 t_ilm_message response;
555 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
558 m_executor->getScene()->lockScene();
559 m_executor->getScene()->getSurfaceIDs(&length, &array);
560 m_executor->getScene()->unlockScene();
561 response = m_ipcModule.createResponse(message);
562 m_ipcModule.appendUintArray(response, array, length);
563 m_ipcModule.sendToClients(response, &clientHandle, 1);
564 m_ipcModule.destroyMessage(response);
567 void GenericCommunicator::ListSurfaceofLayer(t_ilm_message message)
569 t_ilm_message response;
570 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
572 m_ipcModule.getUint(message, &id);
573 m_executor->getScene()->lockScene();
574 Layer* layer = m_executor->getScene()->getLayer(id);
577 std::list<Surface*> surfaces = layer->getAllSurfaces();
579 uint length = surfaces.size();
580 uint* array = new uint[length];
583 for (std::list<Surface*>::const_iterator it = surfaces.begin(); it != surfaces.end(); ++it)
586 array[arrayPos] = s->getID();
589 m_executor->getScene()->unlockScene();
591 response = m_ipcModule.createResponse(message);
592 m_ipcModule.appendUintArray(response, array, length);
596 m_executor->getScene()->unlockScene();
597 response = m_ipcModule.createErrorResponse(message);
598 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
601 m_ipcModule.sendToClients(response, &clientHandle, 1);
602 m_ipcModule.destroyMessage(response);
605 void GenericCommunicator::GetPropertiesOfSurface(t_ilm_message message)
607 t_ilm_message response;
608 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
610 m_ipcModule.getUint(message, &id);
612 Surface* surface = m_executor->getScene()->getSurface(id);
615 Rectangle dest = surface->getDestinationRegion();
616 Rectangle src = surface->getSourceRegion();
617 OrientationType orientation = surface->getOrientation();
618 unsigned char chromaKeyRed = 0;
619 unsigned char chromaKeyGreen = 0;
620 unsigned char chromaKeyBlue = 0;
621 surface->getChromaKey(chromaKeyRed, chromaKeyGreen, chromaKeyBlue);
623 response = m_ipcModule.createResponse(message);
624 m_ipcModule.appendDouble(response, surface->getOpacity());
625 m_ipcModule.appendUint(response, src.x);
626 m_ipcModule.appendUint(response, src.y);
627 m_ipcModule.appendUint(response, src.width);
628 m_ipcModule.appendUint(response, src.height);
629 m_ipcModule.appendUint(response, surface->OriginalSourceWidth);
630 m_ipcModule.appendUint(response, surface->OriginalSourceHeight);
631 m_ipcModule.appendUint(response, dest.x);
632 m_ipcModule.appendUint(response, dest.y);
633 m_ipcModule.appendUint(response, dest.width);
634 m_ipcModule.appendUint(response, dest.height);
635 m_ipcModule.appendUint(response, orientation);
636 m_ipcModule.appendBool(response, surface->getVisibility());
637 m_ipcModule.appendUint(response, surface->frameCounter);
638 m_ipcModule.appendUint(response, surface->drawCounter);
639 m_ipcModule.appendUint(response, surface->updateCounter);
640 m_ipcModule.appendUint(response, surface->getPixelFormat());
641 m_ipcModule.appendUint(response, surface->getNativeContent());
642 m_ipcModule.appendUint(response, surface->getInputEventAcceptanceOnDevices());
643 m_ipcModule.appendBool(response, surface->getChromaKeyEnabled());
644 m_ipcModule.appendUint(response, chromaKeyRed);
645 m_ipcModule.appendUint(response, chromaKeyGreen);
646 m_ipcModule.appendUint(response, chromaKeyBlue);
647 m_ipcModule.appendInt(response, surface->getCreatorPid());
651 response = m_ipcModule.createErrorResponse(message);
652 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
655 m_ipcModule.sendToClients(response, &clientHandle, 1);
656 m_ipcModule.destroyMessage(response);
659 void GenericCommunicator::GetPropertiesOfLayer(t_ilm_message message)
661 t_ilm_message response;
662 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
664 m_ipcModule.getUint(message, &id);
666 Layer* layer = m_executor->getScene()->getLayer(id);
669 Rectangle dest = layer->getDestinationRegion();
670 Rectangle src = layer->getSourceRegion();
671 OrientationType orientation = layer->getOrientation();
672 unsigned char chromaKeyRed = 0;
673 unsigned char chromaKeyGreen = 0;
674 unsigned char chromaKeyBlue = 0;
675 layer->getChromaKey(chromaKeyRed, chromaKeyGreen, chromaKeyBlue);
677 response = m_ipcModule.createResponse(message);
678 m_ipcModule.appendDouble(response, layer->getOpacity());
679 m_ipcModule.appendUint(response, src.x);
680 m_ipcModule.appendUint(response, src.y);
681 m_ipcModule.appendUint(response, src.width);
682 m_ipcModule.appendUint(response, src.height);
683 m_ipcModule.appendUint(response, layer->OriginalSourceWidth);
684 m_ipcModule.appendUint(response, layer->OriginalSourceHeight);
685 m_ipcModule.appendUint(response, dest.x);
686 m_ipcModule.appendUint(response, dest.y);
687 m_ipcModule.appendUint(response, dest.width);
688 m_ipcModule.appendUint(response, dest.height);
689 m_ipcModule.appendUint(response, orientation);
690 m_ipcModule.appendBool(response, layer->getVisibility());
691 m_ipcModule.appendUint(response, layer->getLayerType());
692 m_ipcModule.appendBool(response, layer->getChromaKeyEnabled());
693 m_ipcModule.appendUint(response, chromaKeyRed);
694 m_ipcModule.appendUint(response, chromaKeyGreen);
695 m_ipcModule.appendUint(response, chromaKeyBlue);
696 m_ipcModule.appendInt(response, layer->getCreatorPid());
700 response = m_ipcModule.createErrorResponse(message);
701 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
704 m_ipcModule.sendToClients(response, &clientHandle, 1);
705 m_ipcModule.destroyMessage(response);
708 void GenericCommunicator::CreateSurface(t_ilm_message message)
710 t_ilm_message response;
711 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
712 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
716 uint pixelformat = 0;
717 PixelFormat pf = PIXELFORMAT_UNKNOWN;
718 uint id = GraphicalObject::INVALID_ID;
720 m_ipcModule.getUint(message, &handle);
721 m_ipcModule.getUint(message, &width);
722 m_ipcModule.getUint(message, &height);
723 m_ipcModule.getUint(message, &pixelformat);
725 pf = (PixelFormat) pixelformat;
727 // First of all create the surface
728 t_ilm_bool status = m_executor->execute(new SurfaceCreateCommand(clientPid, &id));
730 // after that apply the native content
731 status &= m_executor->execute(new SurfaceSetNativeContentCommand(clientPid, id, handle, pf, width, height));
735 response = m_ipcModule.createResponse(message);
736 m_ipcModule.appendUint(response, id);
740 response = m_ipcModule.createErrorResponse(message);
741 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
744 m_ipcModule.sendToClients(response, &clientHandle, 1);
745 m_ipcModule.destroyMessage(response);
748 void GenericCommunicator::CreateSurfaceFromId(t_ilm_message message)
750 t_ilm_message response;
751 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
752 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
756 uint pixelformat = 0;
757 PixelFormat pf = PIXELFORMAT_UNKNOWN;
760 m_ipcModule.getUint(message, &handle);
761 m_ipcModule.getUint(message, &width);
762 m_ipcModule.getUint(message, &height);
763 m_ipcModule.getUint(message, &pixelformat);
764 m_ipcModule.getUint(message, &id);
766 pf = (PixelFormat) pixelformat;
768 // First of all create the surface
769 t_ilm_bool status = m_executor->execute(new SurfaceCreateCommand(clientPid, &id));
771 // after that apply the native content
772 status &= m_executor->execute(new SurfaceSetNativeContentCommand(clientPid, id, handle, pf, width, height));
776 response = m_ipcModule.createResponse(message);
777 m_ipcModule.appendUint(response, id);
781 response = m_ipcModule.createErrorResponse(message);
782 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
785 m_ipcModule.sendToClients(response, &clientHandle, 1);
786 m_ipcModule.destroyMessage(response);
789 void GenericCommunicator::InitializeSurface(t_ilm_message message)
791 t_ilm_message response;
792 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
793 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
794 uint id = GraphicalObject::INVALID_ID;
796 t_ilm_bool status = m_executor->execute(new SurfaceCreateCommand(clientPid, &id));
799 response = m_ipcModule.createResponse(message);
800 m_ipcModule.appendUint(response, id);
804 response = m_ipcModule.createErrorResponse(message);
805 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
808 m_ipcModule.sendToClients(response, &clientHandle, 1);
809 m_ipcModule.destroyMessage(response);
812 void GenericCommunicator::InitializeSurfaceFromId(t_ilm_message message)
814 t_ilm_message response;
815 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
816 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
818 m_ipcModule.getUint(message, &id);
819 t_ilm_bool status = m_executor->execute(new SurfaceCreateCommand(clientPid, &id));
822 response = m_ipcModule.createResponse(message);
823 m_ipcModule.appendUint(response, id);
827 response = m_ipcModule.createErrorResponse(message);
828 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
831 m_ipcModule.sendToClients(response, &clientHandle, 1);
832 m_ipcModule.destroyMessage(response);
835 void GenericCommunicator::SetSurfaceNativeContent(t_ilm_message message)
837 t_ilm_message response;
838 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
839 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
844 uint pixelformat = 0;
845 PixelFormat pf = PIXELFORMAT_UNKNOWN;
847 m_ipcModule.getUint(message, &id);
848 m_ipcModule.getUint(message, &handle);
849 m_ipcModule.getUint(message, &width);
850 m_ipcModule.getUint(message, &height);
851 m_ipcModule.getUint(message, &pixelformat);
853 pf = (PixelFormat) pixelformat;
855 t_ilm_bool status = m_executor->execute(new SurfaceSetNativeContentCommand(clientPid, id, handle, pf, width, height));
858 response = m_ipcModule.createResponse(message);
862 response = m_ipcModule.createErrorResponse(message);
863 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
866 m_ipcModule.sendToClients(response, &clientHandle, 1);
867 m_ipcModule.destroyMessage(response);
870 void GenericCommunicator::RemoveSurfaceNativeContent(t_ilm_message message)
872 t_ilm_message response;
873 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
874 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
876 m_ipcModule.getUint(message, &id);
878 t_ilm_bool status = m_executor->execute(new SurfaceRemoveNativeContentCommand(clientPid, id));
881 response = m_ipcModule.createResponse(message);
885 response = m_ipcModule.createErrorResponse(message);
886 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
889 m_ipcModule.sendToClients(response, &clientHandle, 1);
890 m_ipcModule.destroyMessage(response);
893 void GenericCommunicator::RemoveSurface(t_ilm_message message)
895 t_ilm_message response;
896 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
897 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
899 m_ipcModule.getUint(message, ¶m);
900 t_ilm_bool status = m_executor->execute(new SurfaceRemoveCommand(clientPid, param));
903 response = m_ipcModule.createResponse(message);
907 response = m_ipcModule.createErrorResponse(message);
908 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
911 m_ipcModule.sendToClients(response, &clientHandle, 1);
912 m_ipcModule.destroyMessage(response);
915 void GenericCommunicator::CreateLayer(t_ilm_message message)
917 t_ilm_message response;
918 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
919 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
920 uint id = GraphicalObject::INVALID_ID;
921 // use resolution of default screen as default width and height of layers
922 uint* resolution = m_executor->getScreenResolution(DEFAULT_SCREEN);
923 t_ilm_bool status = m_executor->execute(new LayerCreateCommand(clientPid, resolution[0], resolution[1], &id));
926 response = m_ipcModule.createResponse(message);
927 m_ipcModule.appendUint(response, id);
931 response = m_ipcModule.createErrorResponse(message);
932 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
935 m_ipcModule.sendToClients(response, &clientHandle, 1);
936 m_ipcModule.destroyMessage(response);
939 void GenericCommunicator::CreateLayerFromId(t_ilm_message message)
941 t_ilm_message response;
942 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
943 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
944 uint id = GraphicalObject::INVALID_ID;
946 m_ipcModule.getUint(message, &id);
947 // use resolution of default screen as default width and height of layers
948 uint* resolution = m_executor->getScreenResolution(DEFAULT_SCREEN);
949 t_ilm_bool status = m_executor->execute(new LayerCreateCommand(clientPid, resolution[0], resolution[1], &id));
952 response = m_ipcModule.createResponse(message);
953 m_ipcModule.appendUint(response, id);
957 response = m_ipcModule.createErrorResponse(message);
958 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
961 m_ipcModule.sendToClients(response, &clientHandle, 1);
962 m_ipcModule.destroyMessage(response);
966 void GenericCommunicator::CreateLayerWithDimension(t_ilm_message message)
968 t_ilm_message response;
969 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
970 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
972 m_ipcModule.getUint(message, &width);
974 m_ipcModule.getUint(message, &height);
976 uint id = GraphicalObject::INVALID_ID;
977 t_ilm_bool status = m_executor->execute(new LayerCreateCommand(clientPid, width, height, &id));
980 response = m_ipcModule.createResponse(message);
981 m_ipcModule.appendUint(response, id);
985 response = m_ipcModule.createErrorResponse(message);
986 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
989 m_ipcModule.sendToClients(response, &clientHandle, 1);
990 m_ipcModule.destroyMessage(response);
993 void GenericCommunicator::CreateLayerFromIdWithDimension(t_ilm_message message)
995 t_ilm_message response;
996 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
997 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
998 uint id = GraphicalObject::INVALID_ID;
1001 t_ilm_bool status = ILM_FALSE;
1003 m_ipcModule.getUint(message, &id);
1004 m_ipcModule.getUint(message, &width);
1005 m_ipcModule.getUint(message, &height);
1007 status = m_executor->execute(new LayerCreateCommand(clientPid, width, height, &id));
1010 response = m_ipcModule.createResponse(message);
1011 m_ipcModule.appendUint(response, id);
1015 response = m_ipcModule.createErrorResponse(message);
1016 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
1019 m_ipcModule.sendToClients(response, &clientHandle, 1);
1020 m_ipcModule.destroyMessage(response);
1023 void GenericCommunicator::RemoveLayer(t_ilm_message message)
1025 t_ilm_message response;
1026 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1027 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1029 m_ipcModule.getUint(message, ¶m);
1030 t_ilm_bool status = m_executor->execute(new LayerRemoveCommand(clientPid, param));
1033 response = m_ipcModule.createResponse(message);
1037 response = m_ipcModule.createErrorResponse(message);
1038 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1041 m_ipcModule.sendToClients(response, &clientHandle, 1);
1042 m_ipcModule.destroyMessage(response);
1045 void GenericCommunicator::AddSurfaceToLayer(t_ilm_message message)
1047 t_ilm_message response;
1048 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1049 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1053 m_ipcModule.getUint(message, &surfaceid);
1054 m_ipcModule.getUint(message, &layer);
1056 t_ilm_bool status = m_executor->execute(new LayerAddSurfaceCommand(clientPid, layer, surfaceid));
1059 response = m_ipcModule.createResponse(message);
1063 response = m_ipcModule.createErrorResponse(message);
1064 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_ALREADY_INUSE);
1067 m_ipcModule.sendToClients(response, &clientHandle, 1);
1068 m_ipcModule.destroyMessage(response);
1071 void GenericCommunicator::RemoveSurfaceFromLayer(t_ilm_message message)
1073 t_ilm_message response;
1074 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1075 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1078 m_ipcModule.getUint(message, &surfaceid);
1079 m_ipcModule.getUint(message, &layerid);
1081 t_ilm_bool status = m_executor->execute(new LayerRemoveSurfaceCommand(clientPid, layerid, surfaceid));
1084 response = m_ipcModule.createResponse(message);
1088 response = m_ipcModule.createErrorResponse(message);
1089 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1092 m_ipcModule.sendToClients(response, &clientHandle, 1);
1093 m_ipcModule.destroyMessage(response);
1096 void GenericCommunicator::SetSurfaceSourceRegion(t_ilm_message message)
1098 t_ilm_message response;
1099 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1100 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1107 m_ipcModule.getUint(message, &id);
1108 m_ipcModule.getUint(message, &x);
1109 m_ipcModule.getUint(message, &y);
1110 m_ipcModule.getUint(message, &width);
1111 m_ipcModule.getUint(message, &height);
1113 t_ilm_bool status = m_executor->execute(new SurfaceSetSourceRectangleCommand(clientPid, id, x, y, width, height));
1116 response = m_ipcModule.createResponse(message);
1120 response = m_ipcModule.createErrorResponse(message);
1121 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1124 m_ipcModule.sendToClients(response, &clientHandle, 1);
1125 m_ipcModule.destroyMessage(response);
1128 void GenericCommunicator::SetLayerSourceRegion(t_ilm_message message)
1130 t_ilm_message response;
1131 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1132 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1139 m_ipcModule.getUint(message, &id);
1140 m_ipcModule.getUint(message, &x);
1141 m_ipcModule.getUint(message, &y);
1142 m_ipcModule.getUint(message, &width);
1143 m_ipcModule.getUint(message, &height);
1145 t_ilm_bool status = m_executor->execute(new LayerSetSourceRectangleCommand(clientPid, id, x, y, width, height));
1148 response = m_ipcModule.createResponse(message);
1152 response = m_ipcModule.createErrorResponse(message);
1153 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1156 m_ipcModule.sendToClients(response, &clientHandle, 1);
1157 m_ipcModule.destroyMessage(response);
1160 void GenericCommunicator::SetSurfaceDestinationRegion(t_ilm_message message)
1162 t_ilm_message response;
1163 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1164 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1171 m_ipcModule.getUint(message, &id);
1172 m_ipcModule.getUint(message, &x);
1173 m_ipcModule.getUint(message, &y);
1174 m_ipcModule.getUint(message, &width);
1175 m_ipcModule.getUint(message, &height);
1177 t_ilm_bool status = m_executor->execute(new SurfaceSetDestinationRectangleCommand(clientPid, id, x, y, width, height));
1180 response = m_ipcModule.createResponse(message);
1184 response = m_ipcModule.createErrorResponse(message);
1185 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1188 m_ipcModule.sendToClients(response, &clientHandle, 1);
1189 m_ipcModule.destroyMessage(response);
1192 void GenericCommunicator::SetSurfacePosition(t_ilm_message message)
1194 t_ilm_message response;
1195 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1196 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1201 m_ipcModule.getUint(message, &id);
1202 m_ipcModule.getUint(message, &x);
1203 m_ipcModule.getUint(message, &y);
1205 t_ilm_bool status = m_executor->execute(new SurfaceSetPositionCommand(clientPid, id, x, y));
1208 response = m_ipcModule.createResponse(message);
1212 response = m_ipcModule.createErrorResponse(message);
1213 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1216 m_ipcModule.sendToClients(response, &clientHandle, 1);
1217 m_ipcModule.destroyMessage(response);
1220 void GenericCommunicator::GetSurfacePosition(t_ilm_message message)
1222 t_ilm_message response;
1223 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1224 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1229 m_ipcModule.getUint(message, &id);
1231 t_ilm_bool status = m_executor->execute(new SurfaceGetPositionCommand(clientPid, id, &x, &y));
1234 response = m_ipcModule.createResponse(message);
1235 m_ipcModule.appendUint(response, x);
1236 m_ipcModule.appendUint(response, y);
1240 response = m_ipcModule.createErrorResponse(message);
1241 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1244 m_ipcModule.sendToClients(response, &clientHandle, 1);
1245 m_ipcModule.destroyMessage(response);
1248 void GenericCommunicator::SetSurfaceDimension(t_ilm_message message)
1250 t_ilm_message response;
1251 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1252 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1257 m_ipcModule.getUint(message, &id);
1258 m_ipcModule.getUint(message, &width);
1259 m_ipcModule.getUint(message, &height);
1261 t_ilm_bool status = m_executor->execute(new SurfaceSetDimensionCommand(clientPid, id, width, height));
1264 response = m_ipcModule.createResponse(message);
1268 response = m_ipcModule.createErrorResponse(message);
1269 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1272 m_ipcModule.sendToClients(response, &clientHandle, 1);
1273 m_ipcModule.destroyMessage(response);
1276 void GenericCommunicator::SetLayerDestinationRegion(t_ilm_message message)
1278 t_ilm_message response;
1279 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1280 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1287 m_ipcModule.getUint(message, &id);
1288 m_ipcModule.getUint(message, &x);
1289 m_ipcModule.getUint(message, &y);
1290 m_ipcModule.getUint(message, &width);
1291 m_ipcModule.getUint(message, &height);
1293 t_ilm_bool status = m_executor->execute(new LayerSetDestinationRectangleCommand(clientPid, id, x, y, width, height));
1296 response = m_ipcModule.createResponse(message);
1300 response = m_ipcModule.createErrorResponse(message);
1301 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1304 m_ipcModule.sendToClients(response, &clientHandle, 1);
1305 m_ipcModule.destroyMessage(response);
1308 void GenericCommunicator::SetLayerPosition(t_ilm_message message)
1310 t_ilm_message response;
1311 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1312 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1317 m_ipcModule.getUint(message, &id);
1318 m_ipcModule.getUint(message, &x);
1319 m_ipcModule.getUint(message, &y);
1321 t_ilm_bool status = m_executor->execute(new LayerSetPositionCommand(clientPid, id, x, y));
1324 response = m_ipcModule.createResponse(message);
1328 response = m_ipcModule.createErrorResponse(message);
1329 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1332 m_ipcModule.sendToClients(response, &clientHandle, 1);
1333 m_ipcModule.destroyMessage(response);
1336 void GenericCommunicator::GetLayerPosition(t_ilm_message message)
1338 t_ilm_message response;
1339 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1340 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1345 m_ipcModule.getUint(message, &id);
1347 t_ilm_bool status = m_executor->execute(new LayerGetPositionCommand(clientPid, id, &x, &y));
1350 response = m_ipcModule.createResponse(message);
1351 m_ipcModule.appendUint(response, x);
1352 m_ipcModule.appendUint(response, y);
1356 response = m_ipcModule.createErrorResponse(message);
1357 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1360 m_ipcModule.sendToClients(response, &clientHandle, 1);
1361 m_ipcModule.destroyMessage(response);
1364 void GenericCommunicator::SetLayerDimension(t_ilm_message message)
1366 t_ilm_message response;
1367 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1368 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1373 m_ipcModule.getUint(message, &id);
1374 m_ipcModule.getUint(message, &width);
1375 m_ipcModule.getUint(message, &height);
1377 t_ilm_bool status = m_executor->execute(new LayerSetDimensionCommand(clientPid, id, width, height));
1380 response = m_ipcModule.createResponse(message);
1384 response = m_ipcModule.createErrorResponse(message);
1385 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1388 m_ipcModule.sendToClients(response, &clientHandle, 1);
1389 m_ipcModule.destroyMessage(response);
1392 void GenericCommunicator::GetLayerDimension(t_ilm_message message)
1394 t_ilm_message response;
1395 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1396 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1401 m_ipcModule.getUint(message, &id);
1403 t_ilm_bool status = m_executor->execute(new LayerGetDimensionCommand(clientPid, id, &width, &height));
1406 response = m_ipcModule.createResponse(message);
1407 m_ipcModule.appendUint(response, width);
1408 m_ipcModule.appendUint(response, height);
1412 response = m_ipcModule.createErrorResponse(message);
1413 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1416 m_ipcModule.sendToClients(response, &clientHandle, 1);
1417 m_ipcModule.destroyMessage(response);
1420 void GenericCommunicator::GetSurfaceDimension(t_ilm_message message)
1422 t_ilm_message response;
1423 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1424 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1429 m_ipcModule.getUint(message, &id);
1431 t_ilm_bool status = m_executor->execute(new SurfaceGetDimensionCommand(clientPid, id, &width, &height));
1434 response = m_ipcModule.createResponse(message);
1435 m_ipcModule.appendUint(response, width);
1436 m_ipcModule.appendUint(response, height);
1440 response = m_ipcModule.createErrorResponse(message);
1441 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1444 m_ipcModule.sendToClients(response, &clientHandle, 1);
1445 m_ipcModule.destroyMessage(response);
1448 void GenericCommunicator::SetSurfaceOpacity(t_ilm_message message)
1450 t_ilm_message response;
1451 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1452 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1456 m_ipcModule.getUint(message, &id);
1457 m_ipcModule.getDouble(message, ¶m);
1459 t_ilm_bool status = m_executor->execute(new SurfaceSetOpacityCommand(clientPid, id, param));
1462 response = m_ipcModule.createResponse(message);
1466 response = m_ipcModule.createErrorResponse(message);
1467 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1470 m_ipcModule.sendToClients(response, &clientHandle, 1);
1471 m_ipcModule.destroyMessage(response);
1474 void GenericCommunicator::SetLayerOpacity(t_ilm_message message)
1476 t_ilm_message response;
1477 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1478 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1482 m_ipcModule.getUint(message, &id);
1483 m_ipcModule.getDouble(message, ¶m);
1485 t_ilm_bool status = m_executor->execute(new LayerSetOpacityCommand(clientPid, id, param));
1488 response = m_ipcModule.createResponse(message);
1492 response = m_ipcModule.createErrorResponse(message);
1493 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1496 m_ipcModule.sendToClients(response, &clientHandle, 1);
1497 m_ipcModule.destroyMessage(response);
1500 void GenericCommunicator::GetSurfaceOpacity(t_ilm_message message)
1502 t_ilm_message response;
1503 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1504 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1508 m_ipcModule.getUint(message, &id);
1510 t_ilm_bool status = m_executor->execute(new SurfaceGetOpacityCommand(clientPid, id, ¶m));
1513 response = m_ipcModule.createResponse(message);
1514 m_ipcModule.appendDouble(response, param);
1518 response = m_ipcModule.createErrorResponse(message);
1519 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1522 m_ipcModule.sendToClients(response, &clientHandle, 1);
1523 m_ipcModule.destroyMessage(response);
1526 void GenericCommunicator::GetLayerOpacity(t_ilm_message message)
1528 t_ilm_message response;
1529 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1530 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1534 m_ipcModule.getUint(message, &id);
1536 t_ilm_bool status = m_executor->execute(new LayerGetOpacityCommand(clientPid, id, ¶m));
1539 response = m_ipcModule.createResponse(message);
1540 m_ipcModule.appendDouble(response, param);
1544 response = m_ipcModule.createErrorResponse(message);
1545 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1548 m_ipcModule.sendToClients(response, &clientHandle, 1);
1549 m_ipcModule.destroyMessage(response);
1552 void GenericCommunicator::SetSurfaceOrientation(t_ilm_message message)
1554 t_ilm_message response;
1555 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1556 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1559 OrientationType o = Zero;
1561 m_ipcModule.getUint(message, &id);
1562 m_ipcModule.getUint(message, ¶m);
1564 o = (OrientationType) param;
1566 t_ilm_bool status = m_executor->execute(new SurfaceSetOrientationCommand(clientPid, id, o));
1569 response = m_ipcModule.createResponse(message);
1573 response = m_ipcModule.createErrorResponse(message);
1574 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1577 m_ipcModule.sendToClients(response, &clientHandle, 1);
1578 m_ipcModule.destroyMessage(response);
1581 void GenericCommunicator::GetSurfaceOrientation(t_ilm_message message)
1583 t_ilm_message response;
1584 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1585 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1589 m_ipcModule.getUint(message, &id);
1591 t_ilm_bool status = m_executor->execute(new SurfaceGetOrientationCommand(clientPid, id, &o));
1594 response = m_ipcModule.createResponse(message);
1595 m_ipcModule.appendUint(response, o);
1599 response = m_ipcModule.createErrorResponse(message);
1600 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1603 m_ipcModule.sendToClients(response, &clientHandle, 1);
1604 m_ipcModule.destroyMessage(response);
1607 void GenericCommunicator::SetLayerOrientation(t_ilm_message message)
1609 t_ilm_message response;
1610 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1611 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1614 OrientationType o = Zero;
1616 m_ipcModule.getUint(message, &id);
1617 m_ipcModule.getUint(message, ¶m);
1619 o = (OrientationType) param;
1621 t_ilm_bool status = m_executor->execute(new LayerSetOrientationCommand(clientPid, id, o));
1624 response = m_ipcModule.createResponse(message);
1628 response = m_ipcModule.createErrorResponse(message);
1629 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1632 m_ipcModule.sendToClients(response, &clientHandle, 1);
1633 m_ipcModule.destroyMessage(response);
1636 void GenericCommunicator::GetLayerOrientation(t_ilm_message message)
1638 t_ilm_message response;
1639 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1640 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1644 m_ipcModule.getUint(message, &id);
1646 t_ilm_bool status = m_executor->execute(new LayerGetOrientationCommand(clientPid, id, &o));
1649 response = m_ipcModule.createResponse(message);
1650 m_ipcModule.appendUint(response, o);
1654 response = m_ipcModule.createErrorResponse(message);
1655 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1658 m_ipcModule.sendToClients(response, &clientHandle, 1);
1659 m_ipcModule.destroyMessage(response);
1662 void GenericCommunicator::GetSurfacePixelformat(t_ilm_message message)
1664 t_ilm_message response;
1665 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1666 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1668 PixelFormat pixelFormat;
1670 m_ipcModule.getUint(message, &id);
1672 t_ilm_bool status = m_executor->execute(new SurfaceGetPixelformatCommand(clientPid, id, &pixelFormat));
1675 response = m_ipcModule.createResponse(message);
1676 m_ipcModule.appendUint(response, pixelFormat);
1680 response = m_ipcModule.createErrorResponse(message);
1681 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1684 m_ipcModule.sendToClients(response, &clientHandle, 1);
1685 m_ipcModule.destroyMessage(response);
1688 void GenericCommunicator::SetSurfaceVisibility(t_ilm_message message)
1690 t_ilm_message response;
1691 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1692 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1694 t_ilm_bool newVis = ILM_FALSE;
1696 m_ipcModule.getUint(message, &surfaceid);
1697 m_ipcModule.getBool(message, &newVis);
1699 t_ilm_bool status = m_executor->execute(new SurfaceSetVisibilityCommand(clientPid, surfaceid, newVis));
1702 response = m_ipcModule.createResponse(message);
1706 response = m_ipcModule.createErrorResponse(message);
1707 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1710 m_ipcModule.sendToClients(response, &clientHandle, 1);
1711 m_ipcModule.destroyMessage(response);
1714 void GenericCommunicator::SetLayerVisibility(t_ilm_message message)
1716 t_ilm_message response;
1717 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1718 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1720 t_ilm_bool myparam = ILM_FALSE;
1722 m_ipcModule.getUint(message, &layerid);
1723 m_ipcModule.getBool(message, &myparam);
1725 t_ilm_bool status = m_executor->execute(new LayerSetVisibilityCommand(clientPid, layerid, myparam));
1728 response = m_ipcModule.createResponse(message);
1732 response = m_ipcModule.createErrorResponse(message);
1733 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1736 m_ipcModule.sendToClients(response, &clientHandle, 1);
1737 m_ipcModule.destroyMessage(response);
1740 void GenericCommunicator::GetSurfaceVisibility(t_ilm_message message)
1742 t_ilm_message response;
1743 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1744 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1748 m_ipcModule.getUint(message, &id);
1750 t_ilm_bool status = m_executor->execute(new SurfaceGetVisibilityCommand(clientPid, id, &visibility));
1753 response = m_ipcModule.createResponse(message);
1754 m_ipcModule.appendBool(response, visibility);
1758 response = m_ipcModule.createErrorResponse(message);
1759 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1762 m_ipcModule.sendToClients(response, &clientHandle, 1);
1763 m_ipcModule.destroyMessage(response);
1766 void GenericCommunicator::GetLayerVisibility(t_ilm_message message)
1768 t_ilm_message response;
1769 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1770 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1774 m_ipcModule.getUint(message, &id);
1776 t_ilm_bool status = m_executor->execute(new LayerGetVisibilityCommand(clientPid, id, &visibility));
1779 response = m_ipcModule.createResponse(message);
1780 m_ipcModule.appendBool(response, visibility);
1784 response = m_ipcModule.createErrorResponse(message);
1785 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1788 m_ipcModule.sendToClients(response, &clientHandle, 1);
1789 m_ipcModule.destroyMessage(response);
1792 void GenericCommunicator::SetSynchronizedSurfaces(t_ilm_message message)
1794 t_ilm_message response;
1795 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1796 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1798 // ipcArray was created in ipcModule using malloc (it's implemented C)
1799 // so we copy it to a buffer created with new() and discard
1800 // the ipcArray using free() to avoid memory corruption
1801 uint* ipcArray = NULL;
1804 m_ipcModule.getUintArray(message, &ipcArray, &length);
1805 array = new uint[length];
1806 memset(array, 0, length * sizeof(uint));
1807 memcpy(array, ipcArray, length * sizeof(uint));
1810 t_ilm_bool status = m_executor->execute(new SetSynchronizedSurfacesCommand(clientPid, array, length));
1813 response = m_ipcModule.createResponse(message);
1817 response = m_ipcModule.createErrorResponse(message);
1818 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1821 m_ipcModule.sendToClients(response, &clientHandle, 1);
1822 m_ipcModule.destroyMessage(response);
1825 void GenericCommunicator::RemoveSynchronizedSurfaces(t_ilm_message message)
1827 t_ilm_message response;
1828 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1829 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1831 // ipcArray was created in ipcModule using malloc (it's implemented C)
1832 // so we copy it to a buffer created with new() and discard
1833 // the ipcArray using free() to avoid memory corruption
1834 uint* ipcArray = NULL;
1837 m_ipcModule.getUintArray(message, &ipcArray, &length);
1838 array = new uint[length];
1839 memset(array, 0, length * sizeof(uint));
1840 memcpy(array, ipcArray, length * sizeof(uint));
1843 t_ilm_bool status = m_executor->execute(new RemoveSynchronizedSurfacesCommand(clientPid, array, length));
1846 response = m_ipcModule.createResponse(message);
1850 response = m_ipcModule.createErrorResponse(message);
1851 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1854 m_ipcModule.sendToClients(response, &clientHandle, 1);
1855 m_ipcModule.destroyMessage(response);
1858 void GenericCommunicator::SetRenderOrderOfLayers(t_ilm_message message)
1860 t_ilm_message response;
1861 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1862 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1867 m_ipcModule.getUintArray(message, &array, &length);
1868 m_ipcModule.getUint(message, &screenID);
1870 t_ilm_bool status = m_executor->execute(new ScreenSetRenderOrderCommand(clientPid, screenID, array, length));
1873 response = m_ipcModule.createResponse(message);
1877 response = m_ipcModule.createErrorResponse(message);
1878 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1881 m_ipcModule.sendToClients(response, &clientHandle, 1);
1882 m_ipcModule.destroyMessage(response);
1885 void GenericCommunicator::SetSurfaceRenderOrderWithinLayer(t_ilm_message message)
1887 t_ilm_message response;
1888 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1889 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
1894 m_ipcModule.getUint(message, &layerid);
1895 m_ipcModule.getUintArray(message, &array, &length);
1897 t_ilm_bool status = m_executor->execute(new LayerSetRenderOrderCommand(clientPid, layerid, array, length));
1900 response = m_ipcModule.createResponse(message);
1904 response = m_ipcModule.createErrorResponse(message);
1905 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1908 m_ipcModule.sendToClients(response, &clientHandle, 1);
1909 m_ipcModule.destroyMessage(response);
1912 void GenericCommunicator::GetLayerType(t_ilm_message message)
1914 t_ilm_message response;
1915 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1917 m_ipcModule.getUint(message, &id);
1919 Layer* layer = m_executor->getScene()->getLayer(id);
1922 response = m_ipcModule.createResponse(message);
1923 m_ipcModule.appendUint(response, layer->getLayerType());
1927 response = m_ipcModule.createErrorResponse(message);
1928 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1931 m_ipcModule.sendToClients(response, &clientHandle, 1);
1932 m_ipcModule.destroyMessage(response);
1935 void GenericCommunicator::GetLayertypeCapabilities(t_ilm_message message)
1937 t_ilm_message response;
1938 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1940 LayerType type = Unknown;
1942 m_ipcModule.getUint(message, &id);
1944 type = (LayerType) id;
1946 uint capabilities = m_executor->getLayerTypeCapabilities(type);
1947 response = m_ipcModule.createResponse(message);
1948 m_ipcModule.appendUint(response, capabilities);
1949 m_ipcModule.sendToClients(response, &clientHandle, 1);
1950 m_ipcModule.destroyMessage(response);
1953 void GenericCommunicator::GetLayerCapabilities(t_ilm_message message)
1955 t_ilm_message response;
1956 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1958 m_ipcModule.getUint(message, &id);
1960 Layer* layer = m_executor->getScene()->getLayer(id);
1963 response = m_ipcModule.createResponse(message);
1964 m_ipcModule.appendUint(response, layer->getCapabilities());
1968 response = m_ipcModule.createErrorResponse(message);
1969 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
1972 m_ipcModule.sendToClients(response, &clientHandle, 1);
1973 m_ipcModule.destroyMessage(response);
1976 void GenericCommunicator::FadeIn(t_ilm_message message)
1978 t_ilm_message response;
1979 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1980 response = m_ipcModule.createErrorResponse(message);
1981 m_ipcModule.appendUint(response, ILM_ERROR_NOT_IMPLEMENTED);
1982 m_ipcModule.sendToClients(response, &clientHandle, 1);
1983 m_ipcModule.destroyMessage(response);
1986 void GenericCommunicator::SynchronizedFade(t_ilm_message message)
1988 t_ilm_message response;
1989 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
1990 response = m_ipcModule.createErrorResponse(message);
1991 m_ipcModule.appendUint(response, ILM_ERROR_NOT_IMPLEMENTED);
1992 m_ipcModule.sendToClients(response, &clientHandle, 1);
1993 m_ipcModule.destroyMessage(response);
1996 void GenericCommunicator::FadeOut(t_ilm_message message)
1998 t_ilm_message response;
1999 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2000 response = m_ipcModule.createErrorResponse(message);
2001 m_ipcModule.appendUint(response, ILM_ERROR_NOT_IMPLEMENTED);
2002 m_ipcModule.sendToClients(response, &clientHandle, 1);
2003 m_ipcModule.destroyMessage(response);
2006 void GenericCommunicator::Exit(t_ilm_message message)
2008 t_ilm_message response;
2009 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2010 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2011 t_ilm_bool status = m_executor->execute(new ExitCommand(clientPid));
2014 response = m_ipcModule.createResponse(message);
2018 response = m_ipcModule.createErrorResponse(message);
2019 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
2022 m_ipcModule.sendToClients(response, &clientHandle, 1);
2023 m_ipcModule.destroyMessage(response);
2026 void GenericCommunicator::CommitChanges(t_ilm_message message)
2028 t_ilm_message response;
2029 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2030 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2031 t_ilm_bool status = m_executor->execute(new CommitCommand(clientPid));
2034 response = m_ipcModule.createResponse(message);
2038 response = m_ipcModule.createErrorResponse(message);
2039 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
2042 m_ipcModule.sendToClients(response, &clientHandle, 1);
2043 m_ipcModule.destroyMessage(response);
2046 void GenericCommunicator::CreateShader(t_ilm_message message)
2048 t_ilm_message response;
2049 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2050 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2051 char vertname[1024];
2052 char fragname[1024];
2055 m_ipcModule.getString(message, vertname);
2056 m_ipcModule.getString(message, fragname);
2058 t_ilm_bool status = m_executor->execute(new ShaderCreateCommand(clientPid, vertname, fragname, &id));
2061 response = m_ipcModule.createResponse(message);
2062 m_ipcModule.appendUint(response, id);
2066 response = m_ipcModule.createErrorResponse(message);
2067 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2070 m_ipcModule.sendToClients(response, &clientHandle, 1);
2071 m_ipcModule.destroyMessage(response);
2074 void GenericCommunicator::DestroyShader(t_ilm_message message)
2076 t_ilm_message response;
2077 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2078 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2081 m_ipcModule.getUint(message, &shaderid);
2083 t_ilm_bool status = m_executor->execute(new ShaderDestroyCommand(clientPid, shaderid));
2086 response = m_ipcModule.createResponse(message);
2090 response = m_ipcModule.createErrorResponse(message);
2091 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2094 m_ipcModule.sendToClients(response, &clientHandle, 1);
2095 m_ipcModule.destroyMessage(response);
2098 void GenericCommunicator::SetShader(t_ilm_message message)
2100 t_ilm_message response;
2101 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2102 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2106 m_ipcModule.getUint(message, &surfaceId);
2107 m_ipcModule.getUint(message, &shaderid);
2109 t_ilm_bool status = m_executor->execute(new SurfaceSetShaderCommand(clientPid, surfaceId, shaderid));
2112 response = m_ipcModule.createResponse(message);
2116 response = m_ipcModule.createErrorResponse(message);
2117 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2120 m_ipcModule.sendToClients(response, &clientHandle, 1);
2121 m_ipcModule.destroyMessage(response);
2124 void GenericCommunicator::SetUniforms(t_ilm_message message)
2126 t_ilm_message response;
2127 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2128 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2130 std::vector<string> uniforms;
2132 m_ipcModule.getUint(message, &id);
2135 //m_ipcModule.getStringArray(&uniforms);
2137 t_ilm_bool status = m_executor->execute(new ShaderSetUniformsCommand(clientPid, id, uniforms));
2140 response = m_ipcModule.createResponse(message);
2144 response = m_ipcModule.createErrorResponse(message);
2145 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2148 m_ipcModule.sendToClients(response, &clientHandle, 1);
2149 m_ipcModule.destroyMessage(response);
2152 void GenericCommunicator::SetKeyboardFocusOn(t_ilm_message message)
2154 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2155 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2156 t_ilm_message response;
2159 m_ipcModule.getUint(message, &surfaceId);
2161 t_ilm_bool status = m_executor->execute(new SurfaceSetKeyboardFocusCommand(clientPid, surfaceId));
2164 response = m_ipcModule.createResponse(message);
2168 response = m_ipcModule.createErrorResponse(message);
2169 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2172 m_ipcModule.sendToClients(response, &clientHandle, 1);
2173 m_ipcModule.destroyMessage(response);
2177 void GenericCommunicator::GetKeyboardFocusSurfaceId(t_ilm_message message)
2179 t_ilm_message response;
2180 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2181 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2184 t_ilm_bool status = m_executor->execute(new SurfaceGetKeyboardFocusCommand(clientPid, &surfaceId));
2187 response = m_ipcModule.createResponse(message);
2188 m_ipcModule.appendUint(response, surfaceId);
2192 response = m_ipcModule.createErrorResponse(message);
2193 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2196 m_ipcModule.sendToClients(response, &clientHandle, 1);
2197 m_ipcModule.destroyMessage(response);
2201 void GenericCommunicator::UpdateInputEventAcceptanceOn(t_ilm_message message)
2203 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2204 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2205 t_ilm_message response;
2208 InputDevice devices;
2211 m_ipcModule.getUint(message, &surfaceId);
2212 m_ipcModule.getUint(message, &udevices);
2213 m_ipcModule.getBool(message, &accept);
2215 devices = (InputDevice) udevices;
2217 t_ilm_bool status = m_executor->execute(new SurfaceUpdateInputEventAcceptance(clientPid, surfaceId, devices, accept));
2220 response = m_ipcModule.createResponse(message);
2224 response = m_ipcModule.createErrorResponse(message);
2225 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2228 m_ipcModule.sendToClients(response, &clientHandle, 1);
2229 m_ipcModule.destroyMessage(response);
2232 void GenericCommunicator::SetSurfaceChromaKey(t_ilm_message message)
2234 t_ilm_message response;
2235 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2236 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2241 m_ipcModule.getUint(message, &surfaceid);
2242 m_ipcModule.getUintArray(message, &array, &length);
2244 t_ilm_bool status = m_executor->execute(new SurfaceSetChromaKeyCommand(clientPid, surfaceid, array, length));
2247 response = m_ipcModule.createResponse(message);
2251 response = m_ipcModule.createErrorResponse(message);
2252 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2255 m_ipcModule.sendToClients(response, &clientHandle, 1);
2256 m_ipcModule.destroyMessage(response);
2259 void GenericCommunicator::SetLayerChromaKey(t_ilm_message message)
2261 t_ilm_message response;
2262 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2263 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2268 m_ipcModule.getUint(message, &layerid);
2269 m_ipcModule.getUintArray(message, &array, &length);
2271 t_ilm_bool status = m_executor->execute(new LayerSetChromaKeyCommand(clientPid, layerid, array, length));
2274 response = m_ipcModule.createResponse(message);
2278 response = m_ipcModule.createErrorResponse(message);
2279 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2282 m_ipcModule.sendToClients(response, &clientHandle, 1);
2283 m_ipcModule.destroyMessage(response);
2286 void GenericCommunicator::LayerAddNotification(t_ilm_message message)
2288 t_ilm_message response;
2289 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2292 m_ipcModule.getUint(message, &layerid);
2294 Layer* layer = m_executor->getScene()->getLayer(layerid);
2297 layer->addNotification(clientHandle);
2298 response = m_ipcModule.createResponse(message);
2302 response = m_ipcModule.createErrorResponse(message);
2303 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
2306 m_ipcModule.sendToClients(response, &clientHandle, 1);
2307 m_ipcModule.destroyMessage(response);
2310 void GenericCommunicator::SurfaceAddNotification(t_ilm_message message)
2312 t_ilm_message response;
2313 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2316 m_ipcModule.getUint(message, &surfaceid);
2318 Surface* surface = m_executor->getScene()->getSurface(surfaceid);
2321 surface->addNotification(clientHandle);
2322 response = m_ipcModule.createResponse(message);
2326 response = m_ipcModule.createErrorResponse(message);
2327 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
2330 m_ipcModule.sendToClients(response, &clientHandle, 1);
2331 m_ipcModule.destroyMessage(response);
2334 void GenericCommunicator::LayerRemoveNotification(t_ilm_message message)
2336 t_ilm_message response;
2337 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2340 m_ipcModule.getUint(message, &layerid);
2342 Layer* layer = m_executor->getScene()->getLayer(layerid);
2345 layer->removeNotification(clientHandle);
2346 response = m_ipcModule.createResponse(message);
2350 response = m_ipcModule.createErrorResponse(message);
2351 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
2354 m_ipcModule.sendToClients(response, &clientHandle, 1);
2355 m_ipcModule.destroyMessage(response);
2358 void GenericCommunicator::SurfaceRemoveNotification(t_ilm_message message)
2360 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2361 t_ilm_message response;
2364 m_ipcModule.getUint(message, &surfaceid);
2366 Surface* surface = m_executor->getScene()->getSurface(surfaceid);
2369 surface->removeNotification(clientHandle);
2370 response = m_ipcModule.createResponse(message);
2374 response = m_ipcModule.createErrorResponse(message);
2375 m_ipcModule.appendUint(response, ILM_ERROR_INVALID_ARGUMENTS);
2378 m_ipcModule.sendToClients(response, &clientHandle, 1);
2379 m_ipcModule.destroyMessage(response);
2382 void GenericCommunicator::processNotificationQueue()
2384 NotificationQueue& notificationQueue = m_executor->getClientNotificationQueue();
2385 NotificationQueue::iterator iter = notificationQueue.begin();
2386 NotificationQueue::iterator end = notificationQueue.end();
2388 for (; iter != end; ++iter)
2390 GraphicalObject* object = iter->first;
2391 t_ilm_notification_mask mask = iter->second;
2392 sendNotification(object, mask);
2394 notificationQueue.clear();
2397 void GenericCommunicator::sendNotification(GraphicalObject* object, t_ilm_notification_mask mask)
2399 switch (object->type)
2403 Layer* layer = static_cast<Layer*>(object);
2406 ApplicationReferenceList& arl = layer->getNotificationClients();
2410 t_ilm_message notification;
2411 Rectangle dest = layer->getDestinationRegion();
2412 Rectangle src = layer->getSourceRegion();
2413 OrientationType orientation = layer->getOrientation();
2415 unsigned char chromaKeyRed = 0;
2416 unsigned char chromaKeyGreen = 0;
2417 unsigned char chromaKeyBlue = 0;
2418 layer->getChromaKey(chromaKeyRed, chromaKeyGreen, chromaKeyBlue);
2420 std::stringstream notificationName;
2421 notificationName << "NotificationForLayer" << layer->getID();
2423 notification = m_ipcModule.createNotification(notificationName.str().c_str());
2424 m_ipcModule.appendUint(notification, layer->getID());
2425 m_ipcModule.appendUint(notification, mask);
2427 m_ipcModule.appendDouble(notification, layer->getOpacity());
2428 m_ipcModule.appendUint(notification, src.x);
2429 m_ipcModule.appendUint(notification, src.y);
2430 m_ipcModule.appendUint(notification, src.width);
2431 m_ipcModule.appendUint(notification, src.height);
2432 m_ipcModule.appendUint(notification, layer->OriginalSourceWidth);
2433 m_ipcModule.appendUint(notification, layer->OriginalSourceHeight);
2434 m_ipcModule.appendUint(notification, dest.x);
2435 m_ipcModule.appendUint(notification, dest.y);
2436 m_ipcModule.appendUint(notification, dest.width);
2437 m_ipcModule.appendUint(notification, dest.height);
2438 m_ipcModule.appendUint(notification, orientation);
2439 m_ipcModule.appendBool(notification, layer->getVisibility());
2440 m_ipcModule.appendUint(notification, layer->getLayerType());
2441 m_ipcModule.appendBool(notification, layer->getChromaKeyEnabled());
2442 m_ipcModule.appendUint(notification, chromaKeyRed);
2443 m_ipcModule.appendUint(notification, chromaKeyGreen);
2444 m_ipcModule.appendUint(notification, chromaKeyBlue);
2445 m_ipcModule.appendInt(notification, layer->getCreatorPid());
2447 int clientCount = arl.size();
2448 t_ilm_client_handle clientArray[256];
2450 ApplicationReferenceList::iterator iter = arl.begin();
2451 ApplicationReferenceList::iterator end = arl.end();
2453 for (int clientNumber = 0;
2454 iter != end, clientNumber < 256;
2455 ++iter, ++clientNumber)
2457 t_ilm_client_handle client = *iter;
2458 clientArray[clientNumber] = client;
2461 LOG_DEBUG("GenericCommunicator", "Sending " << clientCount << " notification(s): layer " << layer->getID() << " was updated.");
2463 if (!m_ipcModule.sendToClients(notification, clientArray, clientCount))
2465 LOG_ERROR("GenericCommunicator", "Sending notification to clients failed.")
2468 m_ipcModule.destroyMessage(notification);
2475 Surface* surface = static_cast<Surface*>(object);
2478 ApplicationReferenceList& arl = surface->getNotificationClients();
2482 t_ilm_message notification;
2483 std::stringstream notificationName;
2484 notificationName << "NotificationForSurface" << surface->getID();
2486 unsigned char chromaKeyRed = 0;
2487 unsigned char chromaKeyGreen = 0;
2488 unsigned char chromaKeyBlue = 0;
2489 surface->getChromaKey(chromaKeyRed, chromaKeyGreen, chromaKeyBlue);
2491 notification = m_ipcModule.createNotification(notificationName.str().c_str());
2492 m_ipcModule.appendUint(notification, surface->getID());
2493 m_ipcModule.appendUint(notification, mask);
2495 m_ipcModule.appendDouble(notification, surface->getOpacity());
2496 m_ipcModule.appendUint(notification, surface->getSourceRegion().x);
2497 m_ipcModule.appendUint(notification, surface->getSourceRegion().y);
2498 m_ipcModule.appendUint(notification, surface->getSourceRegion().width);
2499 m_ipcModule.appendUint(notification, surface->getSourceRegion().height);
2500 m_ipcModule.appendUint(notification, surface->OriginalSourceWidth);
2501 m_ipcModule.appendUint(notification, surface->OriginalSourceHeight);
2502 m_ipcModule.appendUint(notification, surface->getDestinationRegion().x);
2503 m_ipcModule.appendUint(notification, surface->getDestinationRegion().y);
2504 m_ipcModule.appendUint(notification, surface->getDestinationRegion().width);
2505 m_ipcModule.appendUint(notification, surface->getDestinationRegion().height);
2506 m_ipcModule.appendUint(notification, surface->getOrientation());
2507 m_ipcModule.appendBool(notification, surface->getVisibility());
2508 m_ipcModule.appendUint(notification, surface->frameCounter);
2509 m_ipcModule.appendUint(notification, surface->drawCounter);
2510 m_ipcModule.appendUint(notification, surface->updateCounter);
2511 m_ipcModule.appendUint(notification, surface->getPixelFormat());
2512 m_ipcModule.appendUint(notification, surface->getNativeContent());
2513 m_ipcModule.appendUint(notification, surface->getInputEventAcceptanceOnDevices());
2514 m_ipcModule.appendBool(notification, surface->getChromaKeyEnabled());
2515 m_ipcModule.appendUint(notification, chromaKeyRed);
2516 m_ipcModule.appendUint(notification, chromaKeyGreen);
2517 m_ipcModule.appendUint(notification, chromaKeyBlue);
2518 m_ipcModule.appendInt(notification, surface->getCreatorPid());
2520 int clientCount = arl.size();
2521 t_ilm_client_handle clients[256];
2523 ApplicationReferenceList::iterator iter = arl.begin();
2524 ApplicationReferenceList::iterator end = arl.end();
2526 for (int clientNumber = 0;
2527 iter != end, clientNumber < 256;
2528 ++iter, ++clientNumber)
2530 clients[clientNumber] = *iter;
2533 LOG_DEBUG("GenericCommunicator", "Sending " << clientCount << " notification(s): surface " << surface->getID() << " was updated.");
2535 if (!m_ipcModule.sendToClients(notification, clients, clientCount))
2537 LOG_ERROR("GenericCommunicator", "Sending notification to clients failed.")
2540 m_ipcModule.destroyMessage(notification);
2546 LOG_INFO("GenericCommunicator", "Unknown notification found in queue.");
2551 HealthCondition GenericCommunicator::pluginGetHealth()
2553 HealthCondition health = PluginBase::pluginGetHealth();
2554 if (0 != pthread_kill(mThreadId, 0))
2556 health = HealthDead;
2561 void GenericCommunicator::SetOptimizationMode(t_ilm_message message)
2563 t_ilm_message response;
2564 OptimizationType optimizationId;
2565 OptimizationModeType optimizationMode;
2566 unsigned int optMode;
2567 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2568 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2570 m_ipcModule.getUint(message, &optMode);
2571 optimizationId = (OptimizationType)optMode;
2572 m_ipcModule.getUint(message, &optMode);
2573 optimizationMode = (OptimizationModeType)optMode;
2575 t_ilm_bool status = m_executor->execute(new SetOptimizationModeCommand(clientPid, optimizationId, optimizationMode));
2578 response = m_ipcModule.createResponse(message);
2582 response = m_ipcModule.createErrorResponse(message);
2583 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2585 m_ipcModule.sendToClients(response, &clientHandle, 1);
2586 m_ipcModule.destroyMessage(response);
2589 void GenericCommunicator::GetOptimizationMode(t_ilm_message message)
2591 t_ilm_message response;
2592 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2593 t_ilm_uint clientPid = m_executor->getSenderPid(clientHandle);
2594 OptimizationType optimizationId;
2595 OptimizationModeType optimizationMode;
2598 m_ipcModule.getUint(message, &o);
2599 optimizationId = (OptimizationType)o;
2601 t_ilm_bool status = m_executor->execute(new GetOptimizationModeCommand(clientPid, optimizationId, &optimizationMode));
2604 response = m_ipcModule.createResponse(message);
2605 m_ipcModule.appendUint(response, (unsigned int)optimizationMode);
2609 response = m_ipcModule.createErrorResponse(message);
2610 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2612 m_ipcModule.sendToClients(response, &clientHandle, 1);
2613 m_ipcModule.destroyMessage(response);
2616 void GenericCommunicator::GetPropertiesOfScreen(t_ilm_message message)
2618 t_ilm_message response;
2619 t_ilm_client_handle clientHandle = m_ipcModule.getSenderHandle(message);
2621 m_ipcModule.getUint(message, &id);
2623 LmScreen* screen = m_executor->getScene()->getScreen(id);
2626 LayerList renderOrder = screen->getCurrentRenderOrder();
2627 std::vector<t_ilm_layer> layerIdVector;
2629 LayerListConstIterator iter = renderOrder.begin();
2630 LayerListConstIterator end = renderOrder.end();
2631 for (; iter != end; ++iter)
2633 layerIdVector.push_back((*iter)->getID());
2636 uint numberOfHardwareLayers = m_executor->getNumberOfHardwareLayers(id);
2637 uint* resolution = m_executor->getScreenResolution(id);
2639 response = m_ipcModule.createResponse(message);
2640 m_ipcModule.appendUintArray(response, layerIdVector.data(), layerIdVector.size());
2641 m_ipcModule.appendUint(response, numberOfHardwareLayers);
2642 m_ipcModule.appendUint(response, resolution[0]);
2643 m_ipcModule.appendUint(response, resolution[1]);
2647 response = m_ipcModule.createErrorResponse(message);
2648 m_ipcModule.appendUint(response, ILM_ERROR_RESOURCE_NOT_FOUND);
2651 m_ipcModule.sendToClients(response, &clientHandle, 1);
2652 m_ipcModule.destroyMessage(response);
2655 DECLARE_LAYERMANAGEMENT_PLUGIN(GenericCommunicator)