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
14 * @brief This file implementation of CicoSCResourceManager class
16 //==========================================================================
21 #include "CicoSCResourceManager.h"
23 #include "ico_syc_error.h"
24 #include "ico_syc_mrp_resource_private.h"
26 #include "ico_syc_msg_cmd_def.h"
27 #include "CicoSystemConfig.h"
29 #include "CicoSCCommand.h"
30 #include "CicoSCPolicyManager.h"
31 #include "CicoSCLifeCycleController.h"
32 #include "CicoAilItems.h"
33 #include "CicoSCWindowController.h"
34 #include "CicoSCInputController.h"
35 #include "CicoSCPolicyDef.h"
37 struct CompDisplayResourceRequest
39 CompDisplayResourceRequest(const resource_request_t *req)
42 bool operator() (const resource_request_t *req)
47 ICO_DBG("appid=%s:%s", req->appid, m_req->appid);
48 if ((0 == strcmp(m_req->appid, req->appid)) &&
49 (m_req->pid == req->pid) &&
50 ((m_req->resid & RESID_TYPE_MASK) == (req->resid & RESID_TYPE_MASK)) &&
51 (m_req->surfaceid == req->surfaceid)) {
57 const resource_request_t *m_req;
60 struct CompSoundResourceRequest
62 CompSoundResourceRequest(const resource_request_t *req)
65 bool operator() (const resource_request_t *req)
71 ICO_DBG("appid=%s:%s", req->appid, m_req->appid);
72 if ((0 == strcmp(m_req->appid, req->appid)) &&
73 (m_req->pid == req->pid) &&
74 ((m_req->resid & RESID_TYPE_MASK) == (req->resid & RESID_TYPE_MASK)) &&
75 (m_req->soundid == req->soundid)) {
81 const resource_request_t *m_req;
84 struct CompInputResourceRequest
86 CompInputResourceRequest(const resource_request_t *req)
89 bool operator() (const resource_request_t *req)
95 ICO_DBG("appid=%s:%s", req->appid, m_req->appid);
96 if ((0 == strcmp(m_req->appid, req->appid)) &&
97 (0 == strcmp(m_req->device, req->device)) &&
98 (m_req->pid == req->pid) &&
99 ((m_req->resid & RESID_TYPE_MASK) == (req->resid & RESID_TYPE_MASK))) {
105 const resource_request_t *m_req;
109 CicoSCResourceManager::CicoSCResourceManager()
110 : m_policyMgr(NULL), m_winCtrl(NULL), m_inputCtrl(NULL),
111 m_animaName("Fade"), m_animaTime(400)
113 m_policyMgr = new CicoSCPolicyManager(this);
115 CicoSystemConfig *sysConf = CicoSystemConfig::getInstance();
116 list<resource_request_t*> l;
119 // initialize display current request and waiting queue
120 const vector<CicoSCDisplayConf*>& dispConfList
121 = sysConf->getDisplayConfList();
122 vector<CicoSCDisplayConf*>::const_iterator itr;
123 itr = dispConfList.begin();
124 for (; itr != dispConfList.end(); ++itr) {
125 vector<CicoSCDisplayZoneConf*>::iterator itr2;
126 itr2 = (*itr)->zoneConfList.begin();
127 for (; itr2 != (*itr)->zoneConfList.end(); ++itr2) {
128 m_curDispResOwerReq[(*itr2)->id] = NULL;
134 // initialize sound current request and waiting queue
135 const vector<CicoSCSoundConf*>& soundConfList
136 = sysConf->getSoundConfList();
137 vector<CicoSCSoundConf*>::const_iterator itr;
138 itr = soundConfList.begin();
139 for (; itr != soundConfList.end(); ++itr) {
140 vector<CicoSCSoundZoneConf*>::iterator itr2;
141 itr2 = (*itr)->zoneConfList.begin();
142 for (; itr2 != (*itr)->zoneConfList.end(); ++itr2) {
143 m_curSoundResReq[(*itr2)->id] = NULL;
144 m_soundReqQueue[(*itr2)->id] = l;
150 // initialize input current request and waiting queue
151 const vector<CicoSCInputDevConf*>& inputDevConfList
152 = sysConf->getInputDevConfList();
153 vector<CicoSCInputDevConf*>::const_iterator itr;
154 itr = inputDevConfList.begin();
155 for (; itr != inputDevConfList.end(); ++itr) {
156 vector<CicoSCSwitchConf*>::iterator itr2;
157 itr2 = (*itr)->switchConfList.begin();
158 for (; itr2 != (*itr)->switchConfList.end(); ++itr2) {
159 m_curInputResReq[(*itr2)->id] = NULL;
160 m_inputReqQueue[(*itr2)->id] = l;
166 CicoSCResourceManager::~CicoSCResourceManager()
172 CicoSCResourceManager::initialize(void)
174 ICO_TRA("CicoSCResourceManager::initialize Enter");
176 int ret = ICO_SYC_EOK;
178 ret = ico_syc_mrp_init(enforceSound, this);
179 if (ICO_SYC_EOK != ret) {
180 ICO_TRA("CicoSCResourceManager::initialize Leave");
184 ret = m_policyMgr->initialize();
185 if (ICO_SYC_EOK != ret) {
186 ICO_TRA("CicoSCResourceManager::initialize Leave");
191 ICO_TRA("CicoSCResourceManager::initialize Leave");
196 CicoSCResourceManager::terminate(void)
198 ICO_TRA("CicoSCResourceManager::terminate Enter");
199 m_policyMgr->terminate();
201 ICO_TRA("CicoSCResourceManager::terminate Leave");
205 CicoSCResourceManager::handleCommand(const CicoSCCommand &cmd,
208 ICO_TRA("CicoSCResourceManager::handleCommand Enter"
209 "(cmdid=0x%08X internal=%s)",
210 cmd.cmdid, internal ? "true" : "false");
212 CicoSCCmdResCtrlOpt *opt = (CicoSCCmdResCtrlOpt*)cmd.opt;
214 // request command from application or internal
215 int reqtype = internal ? REQTYPE_AUTO : REQTYPE_APP;
217 if ((MSG_CMD_CREATE_RES == cmd.cmdid) ||
218 (MSG_CMD_ACQUIRE_RES == cmd.cmdid)) {
220 if (true == opt->dispres) {
221 resource_request_t *req = newResourceRequest(RESID_KIND_DISPLAY,
224 if (MSG_CMD_CREATE_RES == cmd.cmdid) {
225 acquireDisplayResource(req, false);
228 if ((true == m_policyMgr->getRegulation()) &&
229 (false == isMatchDisplayed())) {
230 updateDispResRegulationPreProc(req);
231 updateDisplayResourceRegulation(STID_DRVREGULATION_ON);
234 acquireDisplayResource(req);
239 if (true == opt->soundres) {
240 resource_request_t *req = newResourceRequest(RESID_KIND_SOUND,
243 if ((true == m_policyMgr->getRegulation()) &&
244 (false == isMatchDisplayed())) {
245 updateSoundResRegulationPreProc(req);
246 updateSoundResourceRegulation(STID_DRVREGULATION_ON);
249 acquireSoundResource(req);
253 if (true == opt->inputres) {
254 resource_request_t *req = newResourceRequest(RESID_KIND_INPUT,
257 if ((true == m_policyMgr->getRegulation()) &&
258 (false == isMatchDisplayed())) {
259 updateInputResRegulationPreProc(req);
260 updateInputResourceRegulation(STID_DRVREGULATION_ON);
263 acquireInputResource(req);
267 else if ((MSG_CMD_RELEASE_RES == cmd.cmdid) ||
268 (MSG_CMD_DESTORY_RES == cmd.cmdid)) {
270 if (true == opt->dispres) {
271 resource_request_t *req = newResourceRequest(RESID_KIND_DISPLAY,
274 releaseDisplayResource(req);
276 if (true == opt->soundres) {
277 resource_request_t *req = newResourceRequest(RESID_KIND_SOUND,
280 releaseSoundResource(req);
282 if (true == opt->inputres) {
283 resource_request_t *req = newResourceRequest(RESID_KIND_INPUT,
286 releaseInputResource(req);
290 ICO_WRN("Unknown command");
293 ICO_TRA("CicoSCResourceManager::handleCommand Leave");
297 CicoSCResourceManager::setWindowController(CicoSCWindowController *winCtrl)
303 CicoSCResourceManager::setInputController(CicoSCInputController *inputCtrl)
305 m_inputCtrl = inputCtrl;
310 CicoSCResourceManager::popDispResReq(resource_request_t *req)
312 ICO_TRA("CicoSCResourceManager::popDispResReq Enter");
314 map<int, list<resource_request_t*> >::iterator itr;
315 itr = m_dispReqQueue.begin();
316 CompDisplayResourceRequest comp(req);
317 for (; itr != m_dispReqQueue.end(); ++itr) {
318 list<resource_request_t*>::iterator itr2;
319 itr2 = find_if(itr->second.begin(), itr->second.end(), comp);
320 if (itr->second.end() != itr2) {
321 ICO_DBG("Dequeue waiting display request queue zone=%d req=0x%08x",
323 m_dispReqQueue[req->dispzoneid].erase(itr2);
324 ICO_TRA("CicoSCResourceManager::popDispResReq Leave"
330 ICO_TRA("CicoSCResourceManager::popDispResReq Leave(NULL)");
336 CicoSCResourceManager::popSoundResReq(resource_request_t *req)
338 ICO_TRA("CicoSCResourceManager::popSoundResReq Enter");
340 map<int, list<resource_request_t*> >::iterator itr;
341 itr = m_soundReqQueue.begin();
342 CompSoundResourceRequest comp(req);
343 for (; itr != m_soundReqQueue.end(); ++itr) {
344 list<resource_request_t*>::iterator itr2;
345 itr2 = find_if(itr->second.begin(), itr->second.end(), comp);
346 if (itr->second.end() != itr2) {
347 ICO_DBG("Dequeue waiting sound request queue"
348 "(req=0x%08x zone:%02d:%s appid=%s)",
349 *itr2, itr->first, (*itr2)->soundzone, (*itr2)->appid);
350 m_soundReqQueue[req->soundzoneid].erase(itr2);
351 ICO_TRA("CicoSCResourceManager::popSoundResReq Leave"
356 ICO_TRA("CicoSCResourceManager::popSoundResReq Leave(NULL)");
361 CicoSCResourceManager::popInputResReq(resource_request_t *req)
363 ICO_TRA("CicoSCResourceManager::popInputResReq Enter");
365 map<int, list<resource_request_t*> >::iterator itr;
366 itr = m_inputReqQueue.begin();
367 CompInputResourceRequest comp(req);
368 for (; itr != m_inputReqQueue.end(); ++itr) {
369 list<resource_request_t*>::iterator itr2;
370 itr2 = find_if(itr->second.begin(), itr->second.end(), comp);
371 if (itr->second.end() != itr2) {
372 ICO_DBG("Dequeue waiting input request queue"
373 "(req=0x%08x input:%d appid=%s)",
374 *itr2, (*itr2)->input, (*itr2)->appid);
375 m_inputReqQueue[req->input].erase(itr2);
376 ICO_TRA("CicoSCResourceManager::popInputResReq Leave"
382 ICO_TRA("CicoSCResourceManager::popDispResReq Leave(NULL)");
388 CicoSCResourceManager::acquireDisplayResource(resource_request_t *newreq,
391 ICO_TRA("CicoSCResourceManager::acquireDisplayResource Enter");
393 CicoSystemConfig *sysConf = CicoSystemConfig::getInstance();
394 const CicoSCAppKindConf *appKindConf = NULL;
395 appKindConf = sysConf->findAppKindConfbyId(newreq->appkind);
396 if (NULL == appKindConf) {
397 ICO_ERR("not found CicoSCAppKindConf instance");
398 ICO_TRA("CicoSCResourceManager::acquireDisplayResource Leave(false)");
402 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
403 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
404 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_VISIBLE)) {
406 if ((NULL != m_winCtrl) && (true == control)) {
407 m_winCtrl->show(newreq->surfaceid,
409 newreq->animationTime);
411 delResourceRequest(newreq);
413 ICO_DBG("kind of system application");
414 ICO_TRA("CicoSCResourceManager::acquireDisplayResource Leave(true)");
418 // if exist current ower request, pop request
419 resource_request_t *req = findCurDispResOwerReq(newreq);
422 ICO_DBG("dispzoneid=%d/%d zone=%s/%s",
423 req->dispzoneid, newreq->dispzoneid,
424 req->dispzone, newreq->dispzone);
425 if (req->dispzoneid != newreq->dispzoneid) {
426 req = popCurDispResOwerReq(req);
427 m_policyMgr->releaseDisplayResource(req->dispzoneid, req->prio);
428 chgzone = newreq->dispzoneid;
432 // if exist in wating request list, pop request
434 req = popWaitingDispResReq(newreq);
436 ICO_DBG("dispzoneid=%d/%d zone=%s/%s",
437 req->dispzoneid, newreq->dispzoneid,
438 req->dispzone, newreq->dispzone);
439 if (req->dispzoneid != newreq->dispzoneid) {
440 chgzone = newreq->dispzoneid;
450 // update request data
451 req->dispzoneid = newreq->dispzoneid;
452 if (NULL != req->dispzone) free(req->dispzone);
453 req->dispzone = strdup(newreq->dispzone);
454 req->layerid = newreq->layerid;
455 if (NULL != req->animation) free(req->animation);
456 req->animation = strdup(newreq->animation);
457 req->animationTime = newreq->animationTime;
459 // delete new request
460 delResourceRequest(newreq);
463 if (false == control) {
464 ICO_TRA("Enqueue waiting display resource request"
465 "(req=0x%08x appid=%s)", req, req->appid);
466 m_waitingDispResReq.push_front(req);
468 dumpWaitingDispResReq();
473 int type = req->resid & RESID_TYPE_MASK;
474 bool state = m_policyMgr->acquireDisplayResource(type,
478 updateDisplayResource(req, chgzone);
482 // move request window
483 m_winCtrl->setGeometry(req->surfaceid, req->dispzone, req->layerid,
484 req->animation, req->animationTime,
485 req->animation, req->animationTime);
488 // just in case, hide window
489 if (NULL != m_winCtrl) {
490 // hide request window
491 m_winCtrl->hide(req->surfaceid, NULL, 0);
494 ICO_DBG("Enqueue waiting display resource request"
495 "(req=0x%08x appid=%s)", req, req->appid);
496 m_waitingDispResReq.push_front(req);
498 dumpWaitingDispResReq();
502 ICO_TRA("CicoSCResourceManager::acquireDisplayResource Leave");
507 CicoSCResourceManager::releaseDisplayResource(resource_request_t *newreq)
509 ICO_TRA("CicoSCResourceManager::releaseDisplayResource Enter"
510 "(newreq=0x%08x)", newreq);
512 // if exist in wating request list, pop request
513 resource_request_t *req = popWaitingDispResReq(newreq);
515 delResourceRequest(req);
516 delResourceRequest(newreq);
517 ICO_TRA("CicoSCResourceManager::releaseDisplayResource Leave");
521 // if exist current ower request, pop request
522 req = popCurDispResOwerReq(newreq);
524 m_policyMgr->releaseDisplayResource(req->dispzoneid, req->prio);
525 delResourceRequest(req);
527 delResourceRequest(newreq);
529 list<resource_request_t*>::iterator itr;
530 itr = m_waitingDispResReq.begin();
531 for (; itr != m_waitingDispResReq.end(); ++itr) {
532 if (NULL != m_curDispResOwerReq[(*itr)->dispzoneid]) {
535 int type = (*itr)->resid & RESID_TYPE_MASK;
536 bool active = m_policyMgr->acquireDisplayResource(type,
539 if (true == active) {
540 resource_request_t* popreq = popWaitingDispResReq(*itr);
541 updateDisplayResource(popreq);
542 m_winCtrl->activeCB(NULL, NULL, popreq->surfaceid, -1);
547 ICO_TRA("CicoSCResourceManager::releaseDisplayResource Leave");
551 CicoSCResourceManager::acquireSoundResource(resource_request_t *newreq)
553 ICO_TRA("CicoSCResourceManager::acquireSoundResource Enter");
555 CicoSystemConfig *sysConf = CicoSystemConfig::getInstance();
556 const CicoSCAppKindConf *appKindConf = NULL;
557 appKindConf = sysConf->findAppKindConfbyId(newreq->appkind);
558 if (NULL == appKindConf) {
559 ICO_ERR("not found CicoSCAppKindConf instance");
560 ICO_TRA("CicoSCResourceManager::acquireSoundResource Leave(false)");
564 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
565 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
566 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_AUDIO)) {
568 delResourceRequest(newreq);
570 ICO_DBG("kind of system application");
571 ICO_TRA("CicoSCResourceManager::acquireSoundResource Leave(true)");
575 resource_request_t *req = popSoundResReq(newreq);
581 CompSoundResourceRequest comp(req);
582 if (true == comp(m_curSoundResReq[req->soundzoneid])) {
583 ICO_DBG("already acquired appid=%s pid=%d soundid=0x%08X",
584 req->appid, req->pid, req->soundid);
585 ICO_TRA("CicoSCResourceManager::acquireSoundResource Leave(true)");
587 delResourceRequest(newreq);
591 int type = req->resid & RESID_TYPE_MASK;
592 bool state = m_policyMgr->acquireSoundResource(type,
596 updateSoundResource(req);
599 ICO_DBG("Enqueue waiting sound request queue"
600 "(req=0x%08x zone:%02d:%s appid=%s)",
601 req, req->soundzoneid, req->soundzone, req->appid);
602 m_soundReqQueue[req->soundzoneid].push_front(req);
605 ICO_TRA("CicoSCResourceManager::acquireSoundResource Leave");
610 CicoSCResourceManager::releaseSoundResource(resource_request_t *newreq)
612 ICO_TRA("CicoSCResourceManager::releaseSoundResource Enter");
615 CompSoundResourceRequest comp(newreq);
616 for (int i = 0; i < (int)m_curSoundResReq.size(); ++i) {
617 if (NULL == m_curSoundResReq[i]) {
621 if (true == comp(m_curSoundResReq[i])) {
622 ICO_DBG("Dequeue current sound resource ower request"
623 "(req=0x%08x zoneid=%02d:%s appid=%s)",
624 m_curSoundResReq[i], m_curSoundResReq[i]->dispzoneid,
625 m_curSoundResReq[i]->dispzone,
626 m_curSoundResReq[i]->appid);
627 ICO_PRF("CHG_GUI_RES sound deprived zone=%02d:%s appid=%s",
628 m_curSoundResReq[i]->dispzoneid,
629 m_curSoundResReq[i]->dispzone,
630 m_curSoundResReq[i]->appid);
631 ico_syc_mrp_release_sound_resource(m_curSoundResReq[i]);
632 delResourceRequest(newreq);
633 delResourceRequest(m_curSoundResReq[i]);
634 m_curSoundResReq[i] = NULL;
640 // If current request is not changed,
641 // remove the request from the waiting queue.
642 if (false == curchg) {
643 resource_request_t *req = popSoundResReq(newreq);
645 ico_syc_mrp_release_sound_resource(req);
646 delResourceRequest(req);
649 delResourceRequest(newreq);
650 ICO_TRA("CicoSCResourceManager::releaseSoundResource Leave");
654 map<int, list<resource_request_t*> >::iterator itr;
655 itr = m_soundReqQueue.begin();
656 for (; itr != m_soundReqQueue.end(); ++itr) {
657 list<resource_request_t*>::iterator itr2;
658 itr2 = itr->second.begin();
659 for (; itr2 != itr->second.end(); ++itr2) {
660 if (NULL != m_curSoundResReq[(*itr2)->soundzoneid]) {
664 int type = (*itr2)->resid & RESID_TYPE_MASK;
665 bool active = m_policyMgr->acquireSoundResource(type,
666 (*itr2)->soundzoneid,
668 if (true == active) {
669 resource_request_t* req = *itr2;
670 ICO_DBG("Dequeue waiting sound request queue "
671 "(req=0x%08x zone:%02d:%s appid=%s)",
672 *itr2, itr->first, (*itr2)->soundzone, (*itr2)->appid);
673 itr->second.erase(itr2);
674 updateSoundResource(req);
680 ICO_TRA("CicoSCResourceManager::releaseSoundResource Leave");
684 CicoSCResourceManager::acquireInputResource(resource_request_t *newreq)
686 ICO_TRA("CicoSCResourceManager::acquireInputResource Enter");
688 resource_request_t *req = popInputResReq(newreq);
694 CompInputResourceRequest comp(req);
695 if (true == comp(m_curInputResReq[req->input])) {
696 ICO_DBG("already acquired appid=%s pid=%d input=0x%08X",
697 req->appid, req->pid, req->input);
698 ICO_TRA("CicoSCResourceManager::acquireInputResource Leave(true)");
700 delResourceRequest(newreq);
704 bool state = m_policyMgr->acquireInputResource(req->input, req->prio);
706 updateInputResource(req);
709 ICO_DBG("Enqueue waiting input request queue"
710 "(req=0x%08x input:%d appid=%s)", req, req->input, req->appid);
711 m_inputReqQueue[req->input].push_front(req);
714 ICO_TRA("CicoSCResourceManager::acquireInputResource Leave(true)");
719 CicoSCResourceManager::releaseInputResource(resource_request_t *newreq)
721 ICO_TRA("CicoSCResourceManager::releaseInputResource Enter");
723 CompInputResourceRequest comp(newreq);
724 for (int i = 0; i < (int)m_curInputResReq.size(); ++i) {
725 if (NULL == m_curInputResReq[i]) {
729 if (true == comp(m_curInputResReq[i])) {
730 if (NULL != m_inputCtrl) {
731 m_inputCtrl->delInputApp(m_curInputResReq[i]->appid,
732 m_curInputResReq[i]->device,
733 m_curInputResReq[i]->input);
735 ICO_DBG("Dequeue current input resource ower request"
736 "(req=0x%08x input=%d appid=%s)",
737 m_curInputResReq[i], m_curInputResReq[i]->input,
738 m_curInputResReq[i]->appid);
739 ICO_PRF("CHG_GUI_RES input deprived input=%d appid=%s",
740 m_curInputResReq[i]->input, m_curInputResReq[i]->appid);
741 delResourceRequest(newreq);
742 delResourceRequest(m_curInputResReq[i]);
743 m_curInputResReq[i] = NULL;
749 // If current request is not changed,
750 // remove the request from the waiting queue.
751 if (false == curchg) {
752 resource_request_t *req = popInputResReq(newreq);
754 delResourceRequest(req);
757 delResourceRequest(newreq);
758 ICO_TRA("CicoSCResourceManager::releaseInputResource Leave");
762 map<int, list<resource_request_t*> >::iterator itr;
763 itr = m_inputReqQueue.begin();
764 for (; itr != m_inputReqQueue.end(); ++itr) {
765 list<resource_request_t*>::iterator itr2;
766 itr2 = itr->second.begin();
767 for (; itr2 != itr->second.end(); ++itr2) {
768 if (NULL != m_curInputResReq[(*itr2)->input]) {
771 bool active = m_policyMgr->acquireInputResource((*itr2)->input,
773 if (true == active) {
774 resource_request_t* req = *itr2;
775 ICO_DBG("Dequeue waiting input request queue "
776 "(req=0x%08x input:%d appid=%s)",
777 *itr2, (*itr2)->input, (*itr2)->appid);
778 itr->second.erase(itr2);
779 updateInputResource(req);
784 ICO_TRA("CicoSCResourceManager::releaseInputResource Leave");
788 CicoSCResourceManager::newResourceRequest(int resid,
790 const CicoSCCommand &cmd)
792 ICO_TRA("CicoSCResourceManager::newResourceRequest Enter");
794 resource_request_t *req = NULL;
795 req = (resource_request_t*)calloc(1, sizeof(resource_request_t));
796 CicoSCCmdResCtrlOpt *opt = (CicoSCCmdResCtrlOpt*)cmd.opt;
797 CicoSystemConfig *systemConfig = CicoSystemConfig::getInstance();
799 req->reqtype = reqtype;
801 CicoSCLifeCycleController *lifeCycle =
802 CicoSCLifeCycleController::getInstance();
803 const CicoAilItems* ailItem = lifeCycle->findAIL(cmd.appid);
804 if (NULL != ailItem) {
805 req->category = ailItem->m_categoryID;
806 req->appkind = ailItem->m_kindID;
809 req->prio = req->category;
813 /* set resource id */
814 req->resid = RESID_TYPE_BASIC;
815 if (1 == opt->type) {
816 req->resid = RESID_TYPE_INTERRUPT;
820 req->resid |= RESID_CMD_RELEASE;
821 if (MSG_CMD_ACQUIRE_RES == cmd.cmdid) {
822 req->resid |= RESID_CMD_ACQUIRE;
825 /* set application information */
826 req->appid = strdup(cmd.appid.c_str());
828 req->state = RES_STATE_WAITING;
830 if (resid == RESID_KIND_DISPLAY) {
831 req->dispzone = strdup(opt->dispzone.c_str());
832 req->dispzoneid = systemConfig->getDizplayZoneIdbyFullName(req->dispzone);
833 req->layerid = opt->layerid;
834 req->winname = strdup(opt->winname.c_str());
835 req->surfaceid = opt->surfaceid;
836 req->id = opt->surfaceid;;
837 req->animation = strdup(opt->animation.c_str());
838 req->animationTime = opt->animationTime;
840 else if (resid == RESID_KIND_SOUND) {
841 req->soundzone = strdup(opt->soundzone.c_str());
842 req->soundzoneid = systemConfig->getSoundZoneIdbyFullName(req->soundzone);
843 ICO_DBG("req->soundzoneid=%d", req->soundzoneid);
844 req->soundname = strdup(opt->soundname.c_str());
845 req->soundid = opt->soundid;
846 req->soundadjust = opt->adjust;
847 req->id = opt->soundid;
849 else if (resid == RESID_KIND_INPUT) {
850 req->device = strdup(opt->device.c_str());
851 req->input = opt->input;
852 req->id = opt->input;
855 ICO_TRA("CicoSCResourceManager::newResourceRequest Leave"
856 "(req=0x%08x appid=%s)", req, req->appid);
861 CicoSCResourceManager::delResourceRequest(resource_request_t *req)
863 if (NULL == req) return;
865 if (NULL != req->appid) free(req->appid);
866 if (NULL != req->dispzone) free(req->dispzone);
867 if (NULL != req->winname) free(req->winname);
868 if (NULL != req->animation) free(req->animation);
869 if (NULL != req->soundzone) free(req->soundzone);
870 if (NULL != req->soundname) free(req->soundname);
871 if (NULL != req->device) free(req->device);
877 CicoSCResourceManager::enforceSound(unsigned short state,
878 resource_request_t *req,
881 ICO_TRA("CicoSCResourceManager::enforceSound Enter");
883 ICO_TRA("CicoSCResourceManager::enforceSound Leave");
886 // receive changed state
888 CicoSCResourceManager::receiveChangedState(int state)
890 ICO_TRA("CicoSCResourceManager::receiveChangedState Enter"
891 "(state=%d)", state);
893 if (STID_DRVREGULATION_ON == state) {
894 if (true == isMatchDisplayed()) {
895 updateDisplayResourceRegulation(state);
896 updateSoundResourceRegulation(state);
897 updateInputResourceRegulation(state);
901 updateDisplayResourceRegulation(state);
902 updateSoundResourceRegulation(state);
903 updateInputResourceRegulation(state);
906 ICO_TRA("CicoSCResourceManager::receiveChangedState Leave");
909 //--------------------------------------------------------------------------
911 * @brief get policy manager instance
913 * @return resource manager instace
915 //--------------------------------------------------------------------------
916 CicoSCPolicyManager *
917 CicoSCResourceManager::getPolicyManager(void)
923 CicoSCResourceManager::updateDisplayResource(resource_request_t *req,
926 ICO_TRA("CicoSCResourceManager::updateDisplayResource Enter"
927 "(req=0x%08x)", req);
929 std::map<unsigned int, resource_request_t*>::iterator itr;
930 itr = m_curDispResOwerReq.find(req->dispzoneid);
931 if ((m_curDispResOwerReq.end() != itr) && (NULL != itr->second)) {
933 if (itr->second == req) {
934 ICO_DBG("already ower appid=%s pid=%d surfaceid=0x%08X",
935 req->appid, req->pid, req->surfaceid);
936 // show request window
937 m_winCtrl->show(req->surfaceid, req->animation, req->animationTime);
938 m_winCtrl->activeCB(NULL, NULL, req->surfaceid, -1);
939 ICO_TRA("CicoSCResourceManager::updateDisplayResource Leave");
942 resource_request_t *popreq = popCurDispResOwerReq(itr->second);
943 if (NULL != popreq) {
944 if (NULL != m_winCtrl) {
945 // hide current window
946 m_winCtrl->hide(popreq->surfaceid, NULL, 0);
949 // state change to waiting
950 popreq->state = RES_STATE_WAITING;
952 ICO_DBG("Enqueue waiting display resource request"
953 "(req=0x%08x zone=%02d:%s appid=%s",
954 popreq, popreq->dispzoneid,
955 popreq->dispzone, popreq->appid);
956 m_waitingDispResReq.push_front(popreq);
958 dumpWaitingDispResReq();
963 std::map<unsigned int, resource_request_t*>::iterator itr2;
964 itr2 = m_curDispResOwerReq.begin();
965 for (; itr2 != m_curDispResOwerReq.end(); ++itr2) {
966 resource_request_t *tmpreq = itr2->second;
968 if (true == m_policyMgr->getDispZoneState(itr2->first)) {
972 if (NULL == itr2->second) {
976 ICO_DBG("Dequeue current display resource ower request"
977 "(req=0x%08x zoneid=%02d:%s appid=%s)",
978 tmpreq, tmpreq->dispzoneid, tmpreq->dispzone, tmpreq->appid);
979 ICO_PRF("CHG_GUI_RES display deprived zone=%02d:%s appid=%s",
980 tmpreq->dispzoneid, tmpreq->dispzone, tmpreq->appid);
983 // hide current window
984 m_winCtrl->hide(tmpreq->surfaceid, NULL, 0);
986 ICO_DBG("Enqueue waiting display resource request"
987 "(req=0x%08x zone=%02d:%s appid=%s",
988 tmpreq, tmpreq->dispzoneid, tmpreq->dispzone, tmpreq->appid);
989 m_waitingDispResReq.push_front(tmpreq);
992 if (NULL != m_winCtrl) {
993 int ret = ICO_SYC_EOK;
994 if (-1 != chgzoneid) {
995 // move request window
996 ret = m_winCtrl->setGeometry(req->surfaceid, req->dispzone,
998 req->animation, req->animationTime,
999 req->animation, req->animationTime);
1000 if (ICO_SYC_EOK != ret) {
1005 // show request window
1006 m_winCtrl->show(req->surfaceid, req->animation, req->animationTime);
1008 // state change to acquired
1009 req->state = RES_STATE_ACQUIRED;
1010 // update current zone request
1011 ICO_DBG("Enqueue current display resource ower request"
1012 "(req=0x%08x zoneid=%02d:%s appid=%s)",
1013 req, req->dispzoneid, req->dispzone, req->appid);
1014 ICO_PRF("CHG_GUI_RES display acquired zone=%02d:%s appid=%s",
1015 req->dispzoneid, req->dispzone, req->appid);
1016 m_curDispResOwerReq[req->dispzoneid] = req;
1018 dumpCurDispResOwerReq();
1021 // if current zone ower not exist after zone change
1022 if (-1 != chgzoneid) {
1023 list<resource_request_t*>::iterator itr;
1024 itr = m_waitingDispResReq.begin();
1025 for (; itr != m_waitingDispResReq.end(); ++itr) {
1026 if (m_curDispResOwerReq[(*itr)->dispzoneid] != NULL) {
1030 if (true == m_policyMgr->isExistDisplayZoneOwer((*itr)->dispzoneid)) {
1034 int type = (*itr)->resid & RESID_TYPE_MASK;
1035 bool active = false;
1036 active = m_policyMgr->acquireDisplayResource(type,
1039 if (true == active) {
1040 resource_request_t* req = *itr;
1041 ICO_DBG("Dequeue waiting display resource request"
1042 "(req=0x%08x zone=%02d:%s appid=%s)",
1043 *itr, (*itr)->dispzoneid,
1044 (*itr)->dispzone, (*itr)->appid);
1045 m_waitingDispResReq.erase(itr);
1047 dumpWaitingDispResReq();
1049 updateDisplayResource(req);
1051 m_winCtrl->active(req->surfaceid, -1);
1058 ICO_TRA("CicoSCResourceManager::updateDisplayResource Leave");
1062 CicoSCResourceManager::updateSoundResource(resource_request_t *req)
1064 ICO_TRA("CicoSCResourceManager::updateSoundResource Enter"
1065 "(req=0x%08x)", req);
1066 for (int i = 0; i < (int)m_curSoundResReq.size(); ++i) {
1067 ICO_DBG("zoneid=%d active=%d current=0x%08x",
1068 i, m_policyMgr->getSoundZoneState(i), m_curSoundResReq[i]);
1070 if (NULL == m_curSoundResReq[i]) {
1074 if ((i == req->soundzoneid) ||
1075 (false == m_policyMgr->getSoundZoneState(i))) {
1077 // state change to waiting
1078 m_curSoundResReq[i]->state = RES_STATE_WAITING;
1080 ICO_DBG("Enqueue waiting sound request queue "
1081 "(req=0x%08x zone:%02d:%s appid=%s)",
1082 m_curSoundResReq[i], i,
1083 m_curSoundResReq[i]->soundzone, m_curSoundResReq[i]->appid);
1084 m_soundReqQueue[i].push_front(m_curSoundResReq[i]);
1086 // initialize current zone request
1087 ICO_DBG("Dequeue current sound request queue "
1088 "(req=0x%08x zone:%02d:%s appid=%s)",
1089 m_curSoundResReq[i], i,
1090 m_curSoundResReq[i]->soundzone, m_curSoundResReq[i]->appid);
1091 ICO_PRF("CHG_GUI_RES sound deprived zone=%02d:%s appid=%s",
1092 i, m_curSoundResReq[i]->soundzone,
1093 m_curSoundResReq[i]->appid);
1094 m_curSoundResReq[i] = NULL;
1098 if (req != m_curSoundResReq[req->soundzoneid]) {
1099 ico_syc_mrp_acquire_sound_resource(req);
1100 ico_syc_mrp_active_app(req->appid);
1102 // state change to acquired
1103 req->state = RES_STATE_ACQUIRED;
1104 // update current zone request
1105 ICO_DBG("Enqueue current sound request queue "
1106 "(req=0x%08x zone:%02d:%s appid=%s)",
1107 req, req->soundzoneid, req->soundzone, req->appid);
1108 ICO_PRF("CHG_GUI_RES sound acquired zone=%02d:%s appid=%s",
1109 req->soundzoneid, req->soundzone, req->appid);
1110 m_curSoundResReq[req->soundzoneid] = req;
1112 ICO_TRA("CicoSCResourceManager::updateSoundResource Leave");
1116 CicoSCResourceManager::updateInputResource(resource_request_t *req)
1118 ICO_TRA("CicoSCResourceManager::updateInputResource Enter"
1119 "(req=0x%08x)", req);
1120 for (int i = 0; i < (int)m_curInputResReq.size(); ++i) {
1121 ICO_DBG("input=%d active=%d current=0x%08x",
1122 i, m_policyMgr->getInputState(i), m_curInputResReq[i]);
1124 if (NULL == m_curInputResReq[i]) {
1128 if ((i == req->input) ||
1129 (false == m_policyMgr->getInputState(i))) {
1131 if (NULL != m_inputCtrl) {
1132 // add input control
1133 m_inputCtrl->delInputApp(req->appid, req->device, req->input);
1136 // state change to waiting
1137 m_curInputResReq[i]->state = RES_STATE_WAITING;
1139 ICO_DBG("Enqueue waiting input request queue "
1140 "(req=0x%08x input:%d appid=%s)",
1141 m_curInputResReq[i], i, m_curInputResReq[i]->appid);
1142 m_inputReqQueue[i].push_front(m_curInputResReq[i]);
1143 // initialize current zone request
1144 ICO_DBG("Dequeue current input request queue "
1145 "(req=0x%08x input:%d appid=%s)",
1146 m_curInputResReq[i],
1147 m_curInputResReq[i]->input, m_curInputResReq[i]->appid);
1148 ICO_PRF("CHG_GUI_RES input deprived input=%d appid=%s",
1149 m_curInputResReq[i]->input,
1150 m_curInputResReq[i]->appid);
1151 m_curInputResReq[i] = NULL;
1155 if (req != m_curInputResReq[req->input]) {
1156 // delete input control
1157 m_inputCtrl->addInputApp(req->appid, req->device, req->input, 0, 0);
1158 // state change to acquired
1159 req->state = RES_STATE_ACQUIRED;
1160 // update current zone request
1161 ICO_DBG("Enqueue current input request queue "
1162 "(req=0x%08x input:%d appid=%s)", req, req->input, req->appid);
1163 ICO_PRF("CHG_GUI_RES input acquired input=%d appid=%s",
1164 req->input, req->appid);
1165 m_curInputResReq[req->input] = req;
1167 ICO_TRA("CicoSCResourceManager::updateInputResource Leave");
1171 CicoSCResourceManager::updateDisplayResourceRegulation(int state)
1173 ICO_TRA("CicoSCResourceManager::updateDisplayResourceRegulation Enter"
1174 "(state=%d)", state);
1176 if (STID_DRVREGULATION_ON == state) {
1177 bool curchg = false;
1178 std::map<unsigned int, resource_request_t*>::iterator itr;
1179 itr = m_curDispResOwerReq.begin();
1180 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1181 resource_request_t *current = itr->second;
1182 if (NULL == current) {
1186 int type = current->resid & RESID_TYPE_MASK;
1187 bool active = false;
1188 active = m_policyMgr->acquireDisplayResource(type,
1189 current->dispzoneid,
1191 if (false == active) {
1192 if (NULL != m_winCtrl) {
1193 // hide current window
1194 m_winCtrl->hide(current->surfaceid,
1195 m_animaName.c_str(), m_animaTime);
1201 if (false == curchg) {
1202 ICO_TRA("CicoSCResourceManager::updateDisplayResourceRegulation "
1207 list<resource_request_t*>::iterator itr2;
1208 itr2 = m_waitingDispResReq.begin();
1209 for (; itr2 != m_waitingDispResReq.end(); ++itr2) {
1210 int type = (*itr2)->resid & RESID_TYPE_MASK;
1211 bool active = false;
1212 active = m_policyMgr->acquireDisplayResource(type,
1213 (*itr2)->dispzoneid,
1215 if (true == active) {
1216 if (NULL != m_winCtrl) {
1217 // show current window
1218 m_winCtrl->show((*itr2)->surfaceid,
1219 m_animaName.c_str(), m_animaTime);
1225 else if (STID_DRVREGULATION_OFF == state) {
1226 std::map<unsigned int, resource_request_t*>::iterator itr;
1227 itr = m_curDispResOwerReq.begin();
1228 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1229 resource_request_t *current = itr->second;
1230 if (NULL == current) {
1231 if (true == m_policyMgr->isExistDisplayZoneOwer(itr->first)) {
1232 if (NULL != m_winCtrl) {
1233 int surfaceid = m_winCtrl->getDisplayedWindow(itr->first);
1236 if ((surfaceid > 0) && (NULL != itr->second) &&
1237 (itr->second->surfaceid != surfaceid)) {
1238 m_winCtrl->hide(surfaceid,
1239 m_animaName.c_str(),
1243 if (surfaceid > 0) {
1244 m_winCtrl->hide(surfaceid,
1245 m_animaName.c_str(),
1253 list<resource_request_t*>::iterator itr2;
1254 itr2 = m_waitingDispResReq.begin();
1255 for (; itr2 != m_waitingDispResReq.end(); ++itr2) {
1256 resource_request_t *req = *itr2;
1257 if (itr->first != (unsigned int)req->dispzoneid) {
1260 int type = req->resid & RESID_TYPE_MASK;
1261 bool active = false;
1262 active = m_policyMgr->acquireDisplayResource(type,
1265 if (true == active) {
1266 ICO_DBG("Dequeue waiting display resource request"
1267 "(req=0x%08x zone=%02d:%s appid=%s)",
1268 req, req->dispzoneid,
1269 req->dispzone, req->appid);
1270 m_waitingDispResReq.erase(itr2);
1271 ICO_DBG("Enqueue current display resource request"
1272 "(req=0x%08x zone=%02d:%s appid=%s)",
1273 req, req->dispzoneid,
1274 req->dispzone, req->appid);
1275 ICO_PRF("CHG_GUI_RES display acquired zone=%02d:%s "
1277 req->dispzoneid, req->dispzone, req->appid);
1278 m_curDispResOwerReq[req->dispzoneid] = req;
1280 dumpCurDispResOwerReq();
1281 dumpWaitingDispResReq();
1283 m_winCtrl->show(req->surfaceid,
1284 m_animaName.c_str(), m_animaTime);
1285 m_winCtrl->active(req->surfaceid, -1);
1291 int type = current->resid & RESID_TYPE_MASK;
1292 bool active = false;
1293 active = m_policyMgr->acquireDisplayResource(type,
1294 current->dispzoneid,
1296 if (true == active) {
1297 if (NULL != m_winCtrl) {
1298 int surfaceid = m_winCtrl->getDisplayedWindow(
1299 itr->second->dispzoneid);
1300 if ((itr->second->surfaceid != surfaceid) &&
1302 m_winCtrl->hide(surfaceid,
1303 m_animaName.c_str(), m_animaTime);
1306 // show current window
1307 m_winCtrl->show(current->surfaceid,
1308 m_animaName.c_str(), m_animaTime);
1312 dumpCurDispResOwerReq();
1313 dumpWaitingDispResReq();
1319 ICO_TRA("CicoSCResourceManager::updateDisplayResourceRegulation Leave");
1323 CicoSCResourceManager::updateSoundResourceRegulation(int state)
1325 ICO_TRA("CicoSCResourceManager::updateSoundResourceRegulation Enter"
1326 "(state=%d)", state);
1328 bool curchg = false;
1329 for (int i = 0; i < (int)m_curSoundResReq.size(); ++i) {
1330 resource_request_t *current = m_curSoundResReq[i];
1331 if (NULL == current) {
1335 int type = current->resid & RESID_TYPE_MASK;
1336 bool active = false;
1337 active = m_policyMgr->acquireSoundResource(type,
1338 current->soundzoneid,
1340 if (false == active) {
1341 // state change to waiting
1342 current->state = RES_STATE_WAITING;
1344 ICO_DBG("Enqueue waiting sound request queue "
1345 "(req=0x%08x zone:%02d:%s appid=%s)",
1346 current, i, current->soundzone, current->appid);
1347 m_soundReqQueue[i].push_front(current);
1348 // initialize current zone request
1349 m_curSoundResReq[i] = NULL;
1354 if ((false == curchg) && (STID_DRVREGULATION_ON == state)) {
1355 ICO_TRA("CicoSCResourceManager::updateSoundResourceRegulation Leave");
1359 map<int, list<resource_request_t*> >::iterator itr;
1360 itr = m_soundReqQueue.begin();
1361 for (; itr != m_soundReqQueue.end(); ++itr) {
1362 if (NULL != m_curSoundResReq[itr->first]) {
1366 list<resource_request_t*>::iterator itr2;
1367 itr2 = itr->second.begin();
1368 for (; itr2 != itr->second.end(); ++itr2) {
1369 int type = (*itr2)->resid & RESID_TYPE_MASK;
1370 bool active = false;
1371 active = m_policyMgr->acquireSoundResource(type,
1372 (*itr2)->soundzoneid,
1374 if (true == active) {
1375 resource_request_t* req = *itr2;
1376 ICO_DBG("Dequeue waiting sound request queue "
1377 "(req=0x%08x zone:%02d:%s appid=%s)",
1378 *itr2, itr->first, (*itr2)->soundzone, (*itr2)->appid);
1379 itr->second.erase(itr2);
1380 updateSoundResource(req);
1386 ICO_TRA("CicoSCResourceManager::updateSoundResourceRegulation Leave");
1390 CicoSCResourceManager::updateInputResourceRegulation(int state)
1392 ICO_TRA("CicoSCResourceManager::updateInputResourceRegulation Enter"
1393 "(state=%d)", state);
1395 bool curchg = false;
1396 for (int i = 0; i < (int)m_curInputResReq.size(); ++i) {
1397 resource_request_t *current = m_curInputResReq[i];
1398 if (NULL == current) {
1402 bool active = false;
1403 active = m_policyMgr->acquireInputResource(current->input,
1405 if (false == active) {
1406 if (NULL != m_inputCtrl) {
1407 // hide current window
1408 m_inputCtrl->delInputApp(current->appid,
1412 // state change to waiting
1413 current->state = RES_STATE_WAITING;
1415 ICO_DBG("Enqueue waiting input request queue "
1416 "(req=0x%08x input:%d appid=%s)",
1417 current, i, current->appid);
1418 m_inputReqQueue[i].push_front(current);
1419 // initialize current zone request
1420 m_curInputResReq[i] = NULL;
1425 if ((false == curchg) && (STID_DRVREGULATION_ON == state)) {
1426 ICO_TRA("CicoSCResourceManager::updateInputResourceRegulation Leave");
1430 map<int, list<resource_request_t*> >::iterator itr;
1431 itr = m_inputReqQueue.begin();
1432 for (; itr != m_inputReqQueue.end(); ++itr) {
1433 if (NULL != m_curInputResReq[itr->first]) {
1437 list<resource_request_t*>::iterator itr2;
1438 itr2 = itr->second.begin();
1439 for (; itr2 != itr->second.end(); ++itr2) {
1440 bool active = false;
1441 active = m_policyMgr->acquireInputResource((*itr2)->input,
1443 if (true == active) {
1444 resource_request_t* req = *itr2;
1445 ICO_DBG("Dequeue waiting input request queue "
1446 "(req=0x%08x input:%d appid=%s)",
1447 *itr2, (*itr2)->input, (*itr2)->appid);
1448 itr->second.erase(itr2);
1449 updateInputResource(req);
1455 ICO_TRA("CicoSCResourceManager::updateInputResourceRegulation Leave");
1458 //--------------------------------------------------------------------------
1460 * @brief find currnet dipalay resource ower request
1462 * @param [in] request compare requset
1464 * @return request object on same requeset found, NULL on not found
1466 //--------------------------------------------------------------------------
1467 resource_request_t *
1468 CicoSCResourceManager::findCurDispResOwerReq(resource_request_t *req)
1471 ICO_WRN("invalid argument. req is null");
1474 std::map<unsigned int, resource_request_t*>::iterator itr;
1475 itr = m_curDispResOwerReq.begin();
1476 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1477 CompDisplayResourceRequest comp(req);
1478 if (true == comp(itr->second)) {
1485 //--------------------------------------------------------------------------
1487 * @brief pop currnet dipalay resource ower request from list
1489 * @param [in] request compare requset
1491 * @return request object on same requeset found, NULL on not found
1493 //--------------------------------------------------------------------------
1494 resource_request_t *
1495 CicoSCResourceManager::popCurDispResOwerReq(resource_request_t *req)
1498 ICO_WRN("invalid argument. req is null");
1501 std::map<unsigned int, resource_request_t*>::iterator itr;
1502 itr = m_curDispResOwerReq.begin();
1503 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1504 CompDisplayResourceRequest comp(req);
1505 if (true == comp(itr->second)) {
1506 ICO_DBG("Dequeue current display resource ower request"
1507 "(req=0x%08x zoneid=%02d:%s appid=%s)",
1508 itr->second, itr->first,
1509 itr->second->dispzone, itr->second->appid);
1510 ICO_PRF("CHG_GUI_RES display deprived zone=%02d:%s appid=%s",
1511 itr->first, itr->second->dispzone, itr->second->appid);
1512 resource_request_t *findreq = itr->second;
1515 dumpCurDispResOwerReq();
1523 //--------------------------------------------------------------------------
1525 * @brief dump currnet dipalay resource ower request
1527 //--------------------------------------------------------------------------
1529 CicoSCResourceManager::dumpCurDispResOwerReq(void)
1531 std::map<unsigned int, resource_request_t*>::iterator itr;
1532 itr = m_curDispResOwerReq.begin();
1533 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1534 if (NULL == itr->second) {
1535 ICO_DBG("current req=0x%08x zone=%02d:(null) appid=(null)",
1536 itr->second, itr->first);
1539 ICO_DBG("current req=0x%08x zone=%02d:%s appid=%s",
1540 itr->second, itr->first, itr->second->dispzone,
1541 itr->second->appid);
1546 //--------------------------------------------------------------------------
1548 * @brief find waiting dipalay resource request
1550 * @param [in] request compare requset
1552 * @return request object on same requeset found, NULL on not found
1554 //--------------------------------------------------------------------------
1555 resource_request_t *
1556 CicoSCResourceManager::findWaitingDispResReq(resource_request_t *req)
1559 ICO_WRN("invalid argument. req is null");
1562 CompDisplayResourceRequest comp(req);
1563 std::list<resource_request_t*>::iterator itr;
1564 itr = find_if(m_waitingDispResReq.begin(), m_waitingDispResReq.end(), comp);
1565 if (m_waitingDispResReq.end() != itr) {
1571 //--------------------------------------------------------------------------
1573 * @brief pop waiting dipalay resource request from waiting list
1575 * @param [in] request compare requset
1577 * @return request object on same requeset found, NULL on not found
1579 //--------------------------------------------------------------------------
1580 resource_request_t *
1581 CicoSCResourceManager::popWaitingDispResReq(resource_request_t *req)
1584 ICO_WRN("invalid argument. req is null");
1587 CompDisplayResourceRequest comp(req);
1588 std::list<resource_request_t*>::iterator itr;
1589 itr = find_if(m_waitingDispResReq.begin(), m_waitingDispResReq.end(), comp);
1590 if (m_waitingDispResReq.end() != itr) {
1591 ICO_DBG("Dequeue waiting display resource request"
1592 "(req=0x%08x zone:%02d:%s appid=%s)",
1593 *itr, (*itr)->dispzoneid, (*itr)->dispzone, (*itr)->appid);
1594 resource_request_t *findreq = *itr;
1595 m_waitingDispResReq.erase(itr);
1597 dumpWaitingDispResReq();
1604 //--------------------------------------------------------------------------
1606 * @brief dump waiting dipalay resource request
1608 //--------------------------------------------------------------------------
1610 CicoSCResourceManager::dumpWaitingDispResReq(void)
1612 std::list<resource_request_t*>::iterator itr;
1613 itr = m_waitingDispResReq.begin();
1614 for (; itr != m_waitingDispResReq.end(); ++itr) {
1616 ICO_DBG("waiting req=null");
1619 ICO_DBG("waiting req=0x%08x zone=%02d:%s appid=%s",
1620 *itr, (*itr)->dispzoneid, (*itr)->dispzone, (*itr)->appid);
1625 //--------------------------------------------------------------------------
1627 * @brief update display request for regulation pre-process
1629 //--------------------------------------------------------------------------
1631 CicoSCResourceManager::updateDispResRegulationPreProc(resource_request_t *req)
1633 ICO_TRA("CicoSCResourceManager::updateDispResRegulationPreProc Enter");
1635 dumpCurDispResOwerReq();
1636 dumpWaitingDispResReq();
1640 ICO_TRA("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1644 if (false == m_policyMgr->getRegulation()) {
1645 ICO_TRA("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1649 CicoSystemConfig *sysConf = CicoSystemConfig::getInstance();
1650 const CicoSCAppKindConf *appKindConf = NULL;
1651 appKindConf = sysConf->findAppKindConfbyId(req->appkind);
1652 if (NULL == appKindConf) {
1653 ICO_ERR("not found CicoSCAppKindConf instance");
1654 ICO_TRA("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1658 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
1659 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
1660 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_VISIBLE)) {
1662 if (NULL != m_winCtrl) {
1663 m_winCtrl->show(req->surfaceid,
1665 req->animationTime);
1667 delResourceRequest(req);
1669 ICO_DBG("kind of system application");
1670 ICO_TRA("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1674 int surfaceid = req->surfaceid;
1675 if (NULL != m_winCtrl) {
1676 surfaceid = m_winCtrl->getDisplayedWindow(req->dispzoneid);
1677 if (-1 == surfaceid) {
1678 ICO_WRN("displayed surface id is invalid.");
1679 surfaceid = req->surfaceid;
1683 if (req->surfaceid != surfaceid) {
1684 ICO_WRN("req->surfaceid(0x%08X) != displayedsurfaceid(0x%08X)",
1685 req->surfaceid, surfaceid);
1688 resource_request_t *curreq = NULL;
1689 int min = ICO_DISPLAY0_ZONEID_MIN;
1690 int max = ICO_DISPLAY0_ZONEID_MAX;
1691 if ((req->dispzoneid >= min) && (req->dispzoneid <= max)) {
1692 for (int i = min; i <= max; ++i) {
1693 std::map<unsigned int, resource_request_t*>::iterator itr;
1694 itr = m_curDispResOwerReq.find(i);
1695 if (itr != m_curDispResOwerReq.end()) {
1696 if (NULL != itr->second) {
1697 curreq = itr->second;
1704 min = ICO_DISPLAY1_ZONEID_MIN;
1705 max = ICO_DISPLAY1_ZONEID_MAX;
1706 if ((NULL == curreq) &&
1707 (req->dispzoneid >= min) && (req->dispzoneid <= max)) {
1708 for (int i = min; i <= max; ++i) {
1709 std::map<unsigned int, resource_request_t*>::iterator itr;
1710 itr = m_curDispResOwerReq.find(i);
1711 if (itr != m_curDispResOwerReq.end()) {
1712 if (NULL != itr->second) {
1713 curreq = itr->second;
1721 resource_request_t *curreq = NULL;
1722 std::map<unsigned int, resource_request_t*>::iterator itr;
1723 itr = m_curDispResOwerReq.find(req->dispzoneid);
1724 if (itr != m_curDispResOwerReq.end()) {
1725 curreq = itr->second;
1729 if (NULL != curreq) {
1730 ICO_DBG("Dequeue current display resource request"
1731 "(req=0x%08x zone:%02d:%s appid=%s)",
1732 curreq, curreq->dispzoneid, curreq->dispzone, curreq->appid);
1733 ICO_PRF("CHG_GUI_RES display deprived zone=%02d:%s appid=%s",
1734 curreq->dispzoneid, curreq->dispzone, curreq->appid);
1735 m_curDispResOwerReq[curreq->dispzoneid] = NULL;
1737 if (curreq->surfaceid != req->surfaceid) {
1738 resource_request_t *waitreq = popWaitingDispResReq(req);
1739 ICO_DBG("Enqueue waiting display resource request"
1740 "(req=0x%08x zone:%02d:%s appid=%s)",
1741 curreq, curreq->dispzoneid,
1742 curreq->dispzone, curreq->appid);
1743 m_waitingDispResReq.push_front(curreq);
1745 if (NULL != waitreq) {
1746 ICO_DBG("Enqueue current display resource request"
1747 "(req=0x%08x zone:%02d:%s appid=%s)",
1748 waitreq, waitreq->dispzoneid,
1749 waitreq->dispzone, waitreq->appid);
1750 ICO_PRF("CHG_GUI_RES display acquired zone=%02d:%s appid=%s",
1751 waitreq->dispzoneid, waitreq->dispzone, waitreq->appid);
1752 m_curDispResOwerReq[waitreq->dispzoneid] = waitreq;
1756 ICO_DBG("Enqueue current display resource request"
1757 "(req=0x%08x zone:%02d:%s appid=%s)",
1758 curreq, curreq->dispzoneid,
1759 curreq->dispzone, curreq->appid);
1760 ICO_PRF("CHG_GUI_RES display acquired zone=%02d:%s appid=%s",
1761 curreq->dispzoneid, curreq->dispzone, curreq->appid);
1762 m_curDispResOwerReq[curreq->dispzoneid] = curreq;
1765 delResourceRequest(req);
1768 dumpCurDispResOwerReq();
1769 dumpWaitingDispResReq();
1771 ICO_TRA("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1774 //--------------------------------------------------------------------------
1776 * @brief update sound request for regulation pre-process
1778 //--------------------------------------------------------------------------
1780 CicoSCResourceManager::updateSoundResRegulationPreProc(resource_request_t *req)
1782 ICO_TRA("CicoSCResourceManager::updateSoundResRegulationPreProc Enter");
1788 if (false == m_policyMgr->getRegulation()) {
1792 CicoSystemConfig *sysConf = CicoSystemConfig::getInstance();
1793 const CicoSCAppKindConf *appKindConf = NULL;
1794 appKindConf = sysConf->findAppKindConfbyId(req->appkind);
1795 if (NULL == appKindConf) {
1796 ICO_ERR("not found CicoSCAppKindConf instance");
1797 ICO_TRA("CicoSCResourceManager::updateSoundResRegulationPreProc Leave");
1801 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
1802 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
1803 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_AUDIO)) {
1805 delResourceRequest(req);
1807 ICO_DBG("kind of system application");
1808 ICO_TRA("CicoSCResourceManager::updateSoundResRegulationPreProc Leave");
1812 resource_request_t *curreq = NULL;
1813 std::map<int, resource_request_t*>::iterator itr;
1814 itr = m_curSoundResReq.find(req->soundzoneid);
1815 if (itr != m_curSoundResReq.end()) {
1816 curreq = itr->second;
1819 if (NULL != curreq) {
1820 ICO_DBG("Dequeue current sound resource request"
1821 "(req=0x%08x zone:%02d:%s appid=%s)",
1822 curreq, curreq->soundzoneid, curreq->soundzone, curreq->appid);
1823 ICO_PRF("CHG_GUI_RES sound deprived zone=%02d:%s appid=%s",
1824 curreq->soundzoneid, curreq->soundzone, curreq->appid);
1825 m_curSoundResReq[curreq->soundzoneid] = NULL;
1827 if (0 != strcmp(curreq->appid, req->appid)) {
1828 resource_request_t *waitreq = popSoundResReq(req);
1829 ICO_DBG("Enqueue waiting sound resource request"
1830 "(req=0x%08x zone:%02d:%s appid=%s)",
1831 curreq, curreq->soundzoneid,
1832 curreq->soundzone, curreq->appid);
1833 m_soundReqQueue[curreq->soundzoneid].push_front(curreq);
1835 if (NULL != waitreq) {
1836 ICO_DBG("Enqueue current sound resource request"
1837 "(req=0x%08x zone:%02d:%s appid=%s)",
1838 waitreq, waitreq->soundzoneid,
1839 waitreq->soundzone, waitreq->appid);
1840 ICO_PRF("CHG_GUI_RES sound acquired zone=%02d:%s appid=%s",
1841 waitreq->soundzoneid, waitreq->soundzoneid,
1843 m_curSoundResReq[curreq->soundzoneid] = waitreq;
1847 ICO_DBG("Enqueue current sound resource request"
1848 "(req=0x%08x zone:%02d:%s appid=%s)",
1849 curreq, curreq->soundzoneid,
1850 curreq->soundzone, curreq->appid);
1851 ICO_PRF("CHG_GUI_RES sound acquired zone=%d:%s appid=%s",
1852 curreq->soundzoneid, curreq->soundzone, curreq->appid);
1853 m_curSoundResReq[curreq->soundzoneid] = curreq;
1856 delResourceRequest(req);
1857 ICO_TRA("CicoSCResourceManager::updateSoundResRegulationPreProc Leave");
1860 //--------------------------------------------------------------------------
1862 * @brief update input request for regulation pre-process
1864 //--------------------------------------------------------------------------
1866 CicoSCResourceManager::updateInputResRegulationPreProc(resource_request_t *req)
1868 ICO_TRA("CicoSCResourceManager::updateInputResRegulationPreProc Enter");
1874 if (false == m_policyMgr->getRegulation()) {
1878 resource_request_t *curreq = NULL;
1879 std::map<int, resource_request_t*>::iterator itr;
1880 itr = m_curInputResReq.find(req->input);
1881 if (itr != m_curInputResReq.end()) {
1882 curreq = itr->second;
1885 if (NULL != curreq) {
1886 ICO_DBG("Dequeue current input resource request"
1887 "(req=0x%08x input:%d appid=%s)",
1888 curreq, curreq->input, curreq->appid);
1889 ICO_PRF("CHG_GUI_RES input deprived input=%d appid=%s",
1890 curreq->input, curreq->appid);
1891 m_curInputResReq[curreq->input] = NULL;
1893 if (0 != strcmp(curreq->appid, req->appid)) {
1894 resource_request_t *waitreq = popInputResReq(req);
1895 ICO_DBG("Enqueue waiting input resource request"
1896 "(req=0x%08x input:%d appid=%s)",
1897 curreq, curreq->input, curreq->appid);
1898 m_inputReqQueue[curreq->input].push_front(curreq);
1900 if (NULL != waitreq) {
1901 ICO_DBG("Enqueue current input resource request"
1902 "(req=0x%08x input:%d appid=%s)",
1903 waitreq, waitreq->input, waitreq->appid);
1904 ICO_PRF("CHG_GUI_RES input acquired input=%d appid=%s",
1905 waitreq->input, waitreq->appid);
1906 m_curInputResReq[curreq->input] = waitreq;
1910 ICO_DBG("Enqueue current input resource request"
1911 "(req=0x%08x input:%d appid=%s)",
1912 curreq, curreq->input, curreq->appid);
1913 ICO_PRF("CHG_GUI_RES input acquired input=%d appid=%s",
1914 curreq->input, curreq->appid);
1915 m_curInputResReq[curreq->input] = curreq;
1918 delResourceRequest(req);
1919 ICO_TRA("CicoSCResourceManager::updateInputResRegulationPreProc Leave");
1922 //--------------------------------------------------------------------------
1924 * @brief compare displayed surface and ower surface
1926 //--------------------------------------------------------------------------
1928 CicoSCResourceManager::isMatchDisplayed(void)
1931 std::map<unsigned int, resource_request_t*>::iterator itr;
1932 itr = m_curDispResOwerReq.begin();
1933 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1934 if (NULL == itr->second) {
1937 if (NULL != m_winCtrl) {
1938 int surfaceid = m_winCtrl->getDisplayedWindow(
1939 itr->second->dispzoneid);
1940 std::map<unsigned int, resource_request_t*>::iterator itr2;
1941 itr2 = m_curDispResOwerReq.begin();
1942 for (; itr2 != m_curDispResOwerReq.end(); ++itr2) {
1943 if (NULL == itr2->second) {
1946 if ((itr2->second->surfaceid == surfaceid)) {
1955 // vim:set expandtab ts=4 sw=4: