2 * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
4 * This program is licensed under the terms and conditions of the
5 * Apache License, version 2.0. The full text of the Apache License is at
6 * http://www.apache.org/licenses/LICENSE-2.0
10 //==========================================================================
12 * @file CicoSCResourceManager.cpp
16 //==========================================================================
17 #include "CicoSCResourceManager.h"
19 #include "ico_syc_error.h"
20 #include "ico_syc_mrp_resource_private.h"
22 #include "ico_syc_msg_cmd_def.h"
23 #include "CicoSCSystemConfig.h"
24 #include "CicoSCCommandParser.h"
25 #include "CicoSCPolicyManager.h"
26 #include "CicoSCLifeCycleController.h"
27 #include "CicoSCAilItems.h"
28 #include "CicoSCWindowController.h"
29 #include "CicoSCInputController.h"
31 CicoSCResourceManager::CicoSCResourceManager()
32 : m_winCtrl(NULL), m_inputCtrl(NULL)
34 m_policyMgr = new CicoSCPolicyManager(this);
37 CicoSCResourceManager::~CicoSCResourceManager()
43 CicoSCResourceManager::initialize(void)
45 ICO_DBG("CicoSCResourceManager::initialize Enter");
47 int ret = ICO_SYC_EOK;
49 ret = ico_syc_mrp_init(enforceDisplay, enforceSound, enforceInput, this);
50 if (ICO_SYC_EOK != ret) {
54 ret = m_policyMgr->initialize();
55 if (ICO_SYC_EOK != ret) {
59 ICO_DBG("CicoSCResourceManager::initialize Leave");
64 CicoSCResourceManager::terminate(void)
66 ICO_DBG("CicoSCResourceManager::terminate Enter");
67 m_policyMgr->terminate();
68 ICO_DBG("CicoSCResourceManager::terminate Leave");
72 CicoSCResourceManager::handleCommand(const CicoSCCommand &cmd,
75 ICO_DBG("CicoSCResourceManager::handleCommand Enter"
76 "(cmdid=%08X)", cmd.cmdid);
78 CicoSCCmdResCtrlOpt *opt = (CicoSCCmdResCtrlOpt*)cmd.opt;
80 // request command from application or internal
81 int reqtype = internal ? REQTYPE_AUTO : REQTYPE_APP;
83 if (MSG_CMD_ACQUIRE_RES == cmd.cmdid) {
85 if (true == opt->displayres) {
86 resource_request_t *req = newResourceRequest(RESID_KIND_DISPLAY,
89 acquireDisplayResource(req, 0);
91 if (true == opt->soundres) {
92 resource_request_t *req = newResourceRequest(RESID_KIND_SOUND,
95 acquireSoundResource(req, 0);
97 if (true == opt->inputres) {
98 resource_request_t *req = newResourceRequest(RESID_KIND_INPUT,
101 acquireInputResource(req, 0);
104 else if (MSG_CMD_RELEASE_RES == cmd.cmdid) {
106 if (true == opt->displayres) {
107 resource_request_t *req = newResourceRequest(RESID_KIND_DISPLAY,
110 releaseDisplayResource(req);
112 if (true == opt->soundres) {
113 resource_request_t *req = newResourceRequest(RESID_KIND_SOUND,
116 releaseSoundResource(req);
118 if (true == opt->inputres) {
119 resource_request_t *req = newResourceRequest(RESID_KIND_INPUT,
122 releaseInputResource(req);
126 ICO_WRN("Unknown command");
129 ICO_DBG("CicoSCResourceManager::handleCommand Leave");
133 CicoSCResourceManager::setWindowController(CicoSCWindowController *winCtrl)
139 CicoSCResourceManager::setInputController(CicoSCInputController *inputCtrl)
141 m_inputCtrl = inputCtrl;
145 CicoSCResourceManager::acquireDisplayResource(resource_request_t *req,
148 bool state = m_policyMgr->acquireDisplayResource(req->dispzoneid,
151 if (NULL != m_winCtrl) {
152 //m_winCtrl->show(req->surfaceid, NULL, 0);
159 CicoSCResourceManager::releaseDisplayResource(resource_request_t *req)
162 return ico_syc_mrp_release_display_resource(req);
166 CicoSCResourceManager::acquireSoundResource(resource_request_t *req,
169 return ico_syc_mrp_acquire_sound_resource(req, addprio);
173 CicoSCResourceManager::releaseSoundResource(resource_request_t *req)
175 return ico_syc_mrp_release_sound_resource(req);
179 CicoSCResourceManager::acquireInputResource(resource_request_t *req,
182 return ico_syc_mrp_acquire_input_resource(req, addprio);
186 CicoSCResourceManager::releaseInputResource(resource_request_t *req)
188 return ico_syc_mrp_release_input_resource(req);
192 CicoSCResourceManager::newResourceRequest(int resid,
194 const CicoSCCommand &cmd)
196 resource_request_t *req = NULL;
197 req = (resource_request_t*)calloc(1, sizeof(resource_request_t));
198 CicoSCCmdResCtrlOpt *opt = (CicoSCCmdResCtrlOpt*)cmd.opt;
199 CicoSCSystemConfig *systemConfig = CicoSCSystemConfig::getInstance();
201 req->reqtype = reqtype;
203 CicoSCLifeCycleController *lifeCycle =
204 CicoSCLifeCycleController::getInstance();
205 const CicoSCAilItems* ailItem = lifeCycle->findAIL(cmd.appid);
206 req->category = ailItem->m_categoryID;
207 ICO_DBG("req->category=%d", req->category);
210 const CicoSCCategoryConf *categoryConf =
211 systemConfig->findCategoryConfbyId(req->category);
212 if (NULL == categoryConf) {
218 /* set resource id */
219 req->resid = RESID_TYPE_BASIC;
220 if (1 == opt->type) {
221 req->resid = RESID_TYPE_INTERRUPT;
225 req->resid |= RESID_CMD_RELEASE;
226 if (MSG_CMD_ACQUIRE_RES == cmd.cmdid) {
227 req->resid |= RESID_CMD_ACQUIRE;
230 /* set application infomartion */
231 req->appid = strdup(cmd.appid.c_str());
233 req->state = ICO_APF_RESOURCE_STATE_WAITTING;
235 if (resid == RESID_KIND_DISPLAY) {
236 req->dispzone = strdup(opt->displayZone.c_str());
237 req->dispzoneid = systemConfig->getDizplayZoneIdbyFullName(req->dispzone);
238 req->winname = strdup(opt->windowName.c_str());
239 req->surfaceid = opt->surfaceid;
240 req->id = opt->surfaceid;;
242 else if (resid == RESID_KIND_SOUND) {
243 req->soundzone = strdup(opt->soundZone.c_str());
244 req->soundzoneid = systemConfig->getSoundZoneIdbyFullName(req->soundzone);
245 req->sooudname = strdup(opt->soundName.c_str());
246 req->soundid = opt->soundid;
247 req->soundadjust = opt->adjust;
248 req->id = opt->soundid;
250 else if (resid == RESID_KIND_INPUT) {
251 req->device = strdup(opt->device.c_str());
252 req->input = opt->input;
253 req->id = opt->input;
260 CicoSCResourceManager::delResourceRequest(resource_request_t *req)
262 if (NULL == req) return;
264 if (NULL != req->appid) free(req->appid);
265 if (NULL != req->dispzone) free(req->dispzone);
266 if (NULL != req->winname) free(req->winname);
267 if (NULL != req->soundzone) free(req->soundzone);
268 if (NULL != req->sooudname) free(req->sooudname);
269 if (NULL != req->device) free(req->device);
275 CicoSCResourceManager::enforceDisplay(unsigned short state,
280 ICO_DBG("CicoSCResourceManager::enforceDisplay Enter");
281 // ico_uxf_window_control(appid, id, ICO_UXF_APPSCTL_INVISIBLE,
282 // state == ICO_APF_RESOURCE_STATE_ACQUIRED ? 0 : 1);
283 ICO_DBG("CicoSCResourceManager::enforceDisplay Leave");
287 CicoSCResourceManager::enforceSound(unsigned short state,
291 ICO_DBG("CicoSCResourceManager::enforceSound Enter");
293 ICO_DBG("CicoSCResourceManager::enforceSound Leave");
297 CicoSCResourceManager::enforceInput(unsigned short state,
302 ICO_DBG("CicoSCResourceManager::enforceInput Enter");
304 ico_apc_inputsw_t *czone;
307 for (i = 0; i < ninputsw; i++) {
308 if (strcasecmp(inputsw[i].inputsw->swname, device) == 0) break;
312 i = confsys->misc.default_inputswId;
316 if (ico_uxf_input_control(state == ICO_APF_RESOURCE_STATE_ACQUIRED ? 1 : 0,
317 appid, czone->inputdev->device,
318 czone->inputsw->input) != ICO_UXF_EOK) {
319 ICO_WRN("failed to enforce input control");
322 ICO_DBG("CicoSCResourceManager::enforceInput Leave");
325 // receive changed state
327 CicoSCResourceManager::receiveChangedState(int state)
329 ICO_DBG("CicoSCResourceManager::receiveChanagedState Enter");
330 ICO_DBG("CicoSCResourceManager::receiveChanagedState Leave");
332 // vim:set expandtab ts=4 sw=4: