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;
448 bool displayMatch = false;
451 char zoneO[128],zoneN[128];
452 zoneO[0] = zoneN[0] = '\0';
453 if ((NULL != req) && (NULL != req->dispzone)) {
455 const char* s = req->dispzone;
456 while ('\0' != *s) { // is stop code
457 if ('.' == *s) { // DISPLAY.ZONE found a period
458 break; // break of while
460 *d++ = *s++; // char copy
462 *d='\0'; // set stop code
464 if ((NULL != newreq) && (NULL != newreq->dispzone)) {
466 const char* s = newreq->dispzone;
467 while ('\0' != *s) { // is stop code
468 if ('.' == *s) { // DISPLAY.ZONE found a period
469 break; // break of while
471 *d++ = *s++; // char copy
473 *d='\0'; // set stop code
475 if ((0 != strlen(zoneO)) || (0 != strlen(zoneN))) {
476 if (0 == strcmp(zoneO, zoneN)) {
480 // update request data
481 req->dispzoneid = newreq->dispzoneid;
482 if (NULL != req->dispzone) free(req->dispzone);
483 req->dispzone = strdup(newreq->dispzone);
484 req->layerid = newreq->layerid;
485 if (NULL != req->animation) free(req->animation);
486 req->animation = strdup(newreq->animation);
487 req->animationTime = newreq->animationTime;
489 // delete new request
490 delResourceRequest(newreq);
493 if (false == control) {
494 ICO_TRA("Enqueue waiting display resource request"
495 "(req=0x%08x appid=%s)", req, req->appid);
496 m_waitingDispResReq.push_front(req);
498 dumpWaitingDispResReq();
503 int type = req->resid & RESID_TYPE_MASK;
504 bool state = m_policyMgr->acquireDisplayResource(type,
507 if ((true == state) && (false == displayMatch)){
508 updateDisplayResource(req, chgzone);
511 if ((-1 != chgzone) || (true == displayMatch)) {
512 if (NULL != m_winCtrl) {
513 // move request window
514 m_winCtrl->setGeometry(req->surfaceid, req->dispzone, req->layerid,
515 req->animation, req->animationTime,
516 req->animation, req->animationTime);
520 // just in case, hide window
521 if (NULL != m_winCtrl) {
522 // hide request window
523 m_winCtrl->hide(req->surfaceid, NULL, 0);
526 ICO_DBG("Enqueue waiting display resource request"
527 "(req=0x%08x appid=%s)", req, req->appid);
528 m_waitingDispResReq.push_front(req);
530 dumpWaitingDispResReq();
534 ICO_TRA("CicoSCResourceManager::acquireDisplayResource Leave");
539 CicoSCResourceManager::releaseDisplayResource(resource_request_t *newreq)
541 ICO_TRA("CicoSCResourceManager::releaseDisplayResource Enter"
542 "(newreq=0x%08x)", newreq);
544 // if exist in wating request list, pop request
545 resource_request_t *req = popWaitingDispResReq(newreq);
547 delResourceRequest(req);
548 delResourceRequest(newreq);
549 ICO_TRA("CicoSCResourceManager::releaseDisplayResource Leave");
553 // if exist current ower request, pop request
554 req = popCurDispResOwerReq(newreq);
556 m_policyMgr->releaseDisplayResource(req->dispzoneid, req->prio);
557 delResourceRequest(req);
559 delResourceRequest(newreq);
561 list<resource_request_t*>::iterator itr;
562 itr = m_waitingDispResReq.begin();
563 for (; itr != m_waitingDispResReq.end(); ++itr) {
564 if (NULL != m_curDispResOwerReq[(*itr)->dispzoneid]) {
567 int type = (*itr)->resid & RESID_TYPE_MASK;
568 bool active = m_policyMgr->acquireDisplayResource(type,
571 if (true == active) {
572 resource_request_t* popreq = popWaitingDispResReq(*itr);
573 updateDisplayResource(popreq);
574 m_winCtrl->activeCB(NULL, NULL, popreq->surfaceid, -1);
579 ICO_TRA("CicoSCResourceManager::releaseDisplayResource Leave");
583 CicoSCResourceManager::acquireSoundResource(resource_request_t *newreq)
585 ICO_TRA("CicoSCResourceManager::acquireSoundResource Enter");
587 CicoSystemConfig *sysConf = CicoSystemConfig::getInstance();
588 const CicoSCAppKindConf *appKindConf = NULL;
589 appKindConf = sysConf->findAppKindConfbyId(newreq->appkind);
590 if (NULL == appKindConf) {
591 ICO_ERR("not found CicoSCAppKindConf instance");
592 ICO_TRA("CicoSCResourceManager::acquireSoundResource Leave(false)");
596 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
597 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
598 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_AUDIO)) {
600 delResourceRequest(newreq);
602 ICO_DBG("kind of system application");
603 ICO_TRA("CicoSCResourceManager::acquireSoundResource Leave(true)");
607 resource_request_t *req = popSoundResReq(newreq);
613 CompSoundResourceRequest comp(req);
614 if (true == comp(m_curSoundResReq[req->soundzoneid])) {
615 ICO_DBG("already acquired appid=%s pid=%d soundid=0x%08X",
616 req->appid, req->pid, req->soundid);
617 ICO_TRA("CicoSCResourceManager::acquireSoundResource Leave(true)");
619 delResourceRequest(newreq);
623 int type = req->resid & RESID_TYPE_MASK;
624 bool state = m_policyMgr->acquireSoundResource(type,
628 updateSoundResource(req);
631 ICO_DBG("Enqueue waiting sound request queue"
632 "(req=0x%08x zone:%02d:%s appid=%s)",
633 req, req->soundzoneid, req->soundzone, req->appid);
634 m_soundReqQueue[req->soundzoneid].push_front(req);
637 ICO_TRA("CicoSCResourceManager::acquireSoundResource Leave");
642 CicoSCResourceManager::releaseSoundResource(resource_request_t *newreq)
644 ICO_TRA("CicoSCResourceManager::releaseSoundResource Enter");
647 CompSoundResourceRequest comp(newreq);
648 for (int i = 0; i < (int)m_curSoundResReq.size(); ++i) {
649 if (NULL == m_curSoundResReq[i]) {
653 if (true == comp(m_curSoundResReq[i])) {
654 ICO_DBG("Dequeue current sound resource ower request"
655 "(req=0x%08x zoneid=%02d:%s appid=%s)",
656 m_curSoundResReq[i], m_curSoundResReq[i]->dispzoneid,
657 m_curSoundResReq[i]->dispzone,
658 m_curSoundResReq[i]->appid);
659 ICO_PRF("CHG_GUI_RES sound deprived zone=%02d:%s appid=%s",
660 m_curSoundResReq[i]->dispzoneid,
661 m_curSoundResReq[i]->dispzone,
662 m_curSoundResReq[i]->appid);
663 ico_syc_mrp_release_sound_resource(m_curSoundResReq[i]);
664 delResourceRequest(newreq);
665 delResourceRequest(m_curSoundResReq[i]);
666 m_curSoundResReq[i] = NULL;
672 // If current request is not changed,
673 // remove the request from the waiting queue.
674 if (false == curchg) {
675 resource_request_t *req = popSoundResReq(newreq);
677 ico_syc_mrp_release_sound_resource(req);
678 delResourceRequest(req);
681 delResourceRequest(newreq);
682 ICO_TRA("CicoSCResourceManager::releaseSoundResource Leave");
686 map<int, list<resource_request_t*> >::iterator itr;
687 itr = m_soundReqQueue.begin();
688 for (; itr != m_soundReqQueue.end(); ++itr) {
689 list<resource_request_t*>::iterator itr2;
690 itr2 = itr->second.begin();
691 for (; itr2 != itr->second.end(); ++itr2) {
692 if (NULL != m_curSoundResReq[(*itr2)->soundzoneid]) {
696 int type = (*itr2)->resid & RESID_TYPE_MASK;
697 bool active = m_policyMgr->acquireSoundResource(type,
698 (*itr2)->soundzoneid,
700 if (true == active) {
701 resource_request_t* req = *itr2;
702 ICO_DBG("Dequeue waiting sound request queue "
703 "(req=0x%08x zone:%02d:%s appid=%s)",
704 *itr2, itr->first, (*itr2)->soundzone, (*itr2)->appid);
705 itr->second.erase(itr2);
706 updateSoundResource(req);
712 ICO_TRA("CicoSCResourceManager::releaseSoundResource Leave");
716 CicoSCResourceManager::acquireInputResource(resource_request_t *newreq)
718 ICO_TRA("CicoSCResourceManager::acquireInputResource Enter");
720 resource_request_t *req = popInputResReq(newreq);
726 CompInputResourceRequest comp(req);
727 if (true == comp(m_curInputResReq[req->input])) {
728 ICO_DBG("already acquired appid=%s pid=%d input=0x%08X",
729 req->appid, req->pid, req->input);
730 ICO_TRA("CicoSCResourceManager::acquireInputResource Leave(true)");
732 delResourceRequest(newreq);
736 bool state = m_policyMgr->acquireInputResource(req->input, req->prio);
738 updateInputResource(req);
741 ICO_DBG("Enqueue waiting input request queue"
742 "(req=0x%08x input:%d appid=%s)", req, req->input, req->appid);
743 m_inputReqQueue[req->input].push_front(req);
746 ICO_TRA("CicoSCResourceManager::acquireInputResource Leave(true)");
751 CicoSCResourceManager::releaseInputResource(resource_request_t *newreq)
753 ICO_TRA("CicoSCResourceManager::releaseInputResource Enter");
755 CompInputResourceRequest comp(newreq);
756 for (int i = 0; i < (int)m_curInputResReq.size(); ++i) {
757 if (NULL == m_curInputResReq[i]) {
761 if (true == comp(m_curInputResReq[i])) {
762 if (NULL != m_inputCtrl) {
763 m_inputCtrl->delInputApp(m_curInputResReq[i]->appid,
764 m_curInputResReq[i]->device,
765 m_curInputResReq[i]->input);
767 ICO_DBG("Dequeue current input resource ower request"
768 "(req=0x%08x input=%d appid=%s)",
769 m_curInputResReq[i], m_curInputResReq[i]->input,
770 m_curInputResReq[i]->appid);
771 ICO_PRF("CHG_GUI_RES input deprived input=%d appid=%s",
772 m_curInputResReq[i]->input, m_curInputResReq[i]->appid);
773 delResourceRequest(newreq);
774 delResourceRequest(m_curInputResReq[i]);
775 m_curInputResReq[i] = NULL;
781 // If current request is not changed,
782 // remove the request from the waiting queue.
783 if (false == curchg) {
784 resource_request_t *req = popInputResReq(newreq);
786 delResourceRequest(req);
789 delResourceRequest(newreq);
790 ICO_TRA("CicoSCResourceManager::releaseInputResource Leave");
794 map<int, list<resource_request_t*> >::iterator itr;
795 itr = m_inputReqQueue.begin();
796 for (; itr != m_inputReqQueue.end(); ++itr) {
797 list<resource_request_t*>::iterator itr2;
798 itr2 = itr->second.begin();
799 for (; itr2 != itr->second.end(); ++itr2) {
800 if (NULL != m_curInputResReq[(*itr2)->input]) {
803 bool active = m_policyMgr->acquireInputResource((*itr2)->input,
805 if (true == active) {
806 resource_request_t* req = *itr2;
807 ICO_DBG("Dequeue waiting input request queue "
808 "(req=0x%08x input:%d appid=%s)",
809 *itr2, (*itr2)->input, (*itr2)->appid);
810 itr->second.erase(itr2);
811 updateInputResource(req);
816 ICO_TRA("CicoSCResourceManager::releaseInputResource Leave");
820 CicoSCResourceManager::newResourceRequest(int resid,
822 const CicoSCCommand &cmd)
824 ICO_TRA("CicoSCResourceManager::newResourceRequest Enter");
826 resource_request_t *req = NULL;
827 req = (resource_request_t*)calloc(1, sizeof(resource_request_t));
828 CicoSCCmdResCtrlOpt *opt = (CicoSCCmdResCtrlOpt*)cmd.opt;
829 CicoSystemConfig *systemConfig = CicoSystemConfig::getInstance();
831 req->reqtype = reqtype;
833 CicoSCLifeCycleController *lifeCycle =
834 CicoSCLifeCycleController::getInstance();
835 const CicoAilItems* ailItem = lifeCycle->findAIL(cmd.appid);
836 if (NULL != ailItem) {
837 req->category = ailItem->m_categoryID;
838 req->appkind = ailItem->m_kindID;
841 req->prio = req->category;
845 /* set resource id */
846 req->resid = RESID_TYPE_BASIC;
847 if (1 == opt->type) {
848 req->resid = RESID_TYPE_INTERRUPT;
852 req->resid |= RESID_CMD_RELEASE;
853 if (MSG_CMD_ACQUIRE_RES == cmd.cmdid) {
854 req->resid |= RESID_CMD_ACQUIRE;
857 /* set application information */
858 req->appid = strdup(cmd.appid.c_str());
860 req->state = RES_STATE_WAITING;
862 if (resid == RESID_KIND_DISPLAY) {
863 req->dispzone = strdup(opt->dispzone.c_str());
864 req->dispzoneid = systemConfig->getDizplayZoneIdbyFullName(req->dispzone);
865 req->layerid = opt->layerid;
866 req->winname = strdup(opt->winname.c_str());
867 req->surfaceid = opt->surfaceid;
868 req->id = opt->surfaceid;;
869 req->animation = strdup(opt->animation.c_str());
870 req->animationTime = opt->animationTime;
872 else if (resid == RESID_KIND_SOUND) {
873 req->soundzone = strdup(opt->soundzone.c_str());
874 req->soundzoneid = systemConfig->getSoundZoneIdbyFullName(req->soundzone);
875 ICO_DBG("req->soundzoneid=%d", req->soundzoneid);
876 req->soundname = strdup(opt->soundname.c_str());
877 req->soundid = opt->soundid;
878 req->soundadjust = opt->adjust;
879 req->id = opt->soundid;
881 else if (resid == RESID_KIND_INPUT) {
882 req->device = strdup(opt->device.c_str());
883 req->input = opt->input;
884 req->id = opt->input;
887 ICO_TRA("CicoSCResourceManager::newResourceRequest Leave"
888 "(req=0x%08x appid=%s)", req, req->appid);
893 CicoSCResourceManager::delResourceRequest(resource_request_t *req)
895 if (NULL == req) return;
897 if (NULL != req->appid) free(req->appid);
898 if (NULL != req->dispzone) free(req->dispzone);
899 if (NULL != req->winname) free(req->winname);
900 if (NULL != req->animation) free(req->animation);
901 if (NULL != req->soundzone) free(req->soundzone);
902 if (NULL != req->soundname) free(req->soundname);
903 if (NULL != req->device) free(req->device);
909 CicoSCResourceManager::enforceSound(unsigned short state,
910 resource_request_t *req,
913 ICO_TRA("CicoSCResourceManager::enforceSound Enter");
915 ICO_TRA("CicoSCResourceManager::enforceSound Leave");
918 // receive changed state
920 CicoSCResourceManager::receiveChangedState(int state)
922 ICO_TRA("CicoSCResourceManager::receiveChangedState Enter"
923 "(state=%d)", state);
925 if (STID_DRVREGULATION_ON == state) {
926 if (true == isMatchDisplayed()) {
927 updateDisplayResourceRegulation(state);
928 updateSoundResourceRegulation(state);
929 updateInputResourceRegulation(state);
933 updateDisplayResourceRegulation(state);
934 updateSoundResourceRegulation(state);
935 updateInputResourceRegulation(state);
938 ICO_TRA("CicoSCResourceManager::receiveChangedState Leave");
941 //--------------------------------------------------------------------------
943 * @brief get policy manager instance
945 * @return resource manager instace
947 //--------------------------------------------------------------------------
948 CicoSCPolicyManager *
949 CicoSCResourceManager::getPolicyManager(void)
955 CicoSCResourceManager::updateDisplayResource(resource_request_t *req,
958 ICO_TRA("CicoSCResourceManager::updateDisplayResource Enter"
959 "(req=0x%08x)", req);
961 std::map<unsigned int, resource_request_t*>::iterator itr;
962 itr = m_curDispResOwerReq.find(req->dispzoneid);
963 if ((m_curDispResOwerReq.end() != itr) && (NULL != itr->second)) {
965 if (itr->second == req) {
966 ICO_DBG("already ower appid=%s pid=%d surfaceid=0x%08X",
967 req->appid, req->pid, req->surfaceid);
968 // show request window
969 m_winCtrl->show(req->surfaceid, req->animation, req->animationTime);
971 m_winCtrl->activeCB(NULL, NULL, req->surfaceid, -1);
973 ICO_TRA("CicoSCResourceManager::updateDisplayResource Leave");
976 resource_request_t *popreq = popCurDispResOwerReq(itr->second);
977 if (NULL != popreq) {
978 if (NULL != m_winCtrl) {
979 // hide current window
980 m_winCtrl->hide(popreq->surfaceid, NULL, 0);
983 // state change to waiting
984 popreq->state = RES_STATE_WAITING;
986 ICO_DBG("Enqueue waiting display resource request"
987 "(req=0x%08x zone=%02d:%s appid=%s",
988 popreq, popreq->dispzoneid,
989 popreq->dispzone, popreq->appid);
990 m_waitingDispResReq.push_front(popreq);
992 dumpWaitingDispResReq();
997 std::map<unsigned int, resource_request_t*>::iterator itr2;
998 itr2 = m_curDispResOwerReq.begin();
999 for (; itr2 != m_curDispResOwerReq.end(); ++itr2) {
1000 resource_request_t *tmpreq = itr2->second;
1002 if (true == m_policyMgr->getDispZoneState(itr2->first)) {
1006 if (NULL == itr2->second) {
1010 ICO_DBG("Dequeue current display resource ower request"
1011 "(req=0x%08x zoneid=%02d:%s appid=%s)",
1012 tmpreq, tmpreq->dispzoneid, tmpreq->dispzone, tmpreq->appid);
1013 ICO_PRF("CHG_GUI_RES display deprived zone=%02d:%s appid=%s",
1014 tmpreq->dispzoneid, tmpreq->dispzone, tmpreq->appid);
1015 itr2->second = NULL;
1017 // hide current window
1018 m_winCtrl->hide(tmpreq->surfaceid, NULL, 0);
1020 ICO_DBG("Enqueue waiting display resource request"
1021 "(req=0x%08x zone=%02d:%s appid=%s",
1022 tmpreq, tmpreq->dispzoneid, tmpreq->dispzone, tmpreq->appid);
1023 m_waitingDispResReq.push_front(tmpreq);
1026 if (NULL != m_winCtrl) {
1027 int ret = ICO_SYC_EOK;
1028 if (-1 != chgzoneid) {
1029 // move request window
1030 ret = m_winCtrl->setGeometry(req->surfaceid, req->dispzone,
1032 req->animation, req->animationTime,
1033 req->animation, req->animationTime);
1034 if (ICO_SYC_EOK != ret) {
1039 // show request window
1040 m_winCtrl->show(req->surfaceid, req->animation, req->animationTime);
1042 // state change to acquired
1043 req->state = RES_STATE_ACQUIRED;
1044 // update current zone request
1045 ICO_DBG("Enqueue current display resource ower request"
1046 "(req=0x%08x zoneid=%02d:%s appid=%s)",
1047 req, req->dispzoneid, req->dispzone, req->appid);
1048 ICO_PRF("CHG_GUI_RES display acquired zone=%02d:%s appid=%s",
1049 req->dispzoneid, req->dispzone, req->appid);
1050 m_curDispResOwerReq[req->dispzoneid] = req;
1052 dumpCurDispResOwerReq();
1055 // if current zone ower not exist after zone change
1056 if (-1 != chgzoneid) {
1057 list<resource_request_t*>::iterator itr;
1058 itr = m_waitingDispResReq.begin();
1059 for (; itr != m_waitingDispResReq.end(); ++itr) {
1060 if (m_curDispResOwerReq[(*itr)->dispzoneid] != NULL) {
1064 if (true == m_policyMgr->isExistDisplayZoneOwer((*itr)->dispzoneid)) {
1068 int type = (*itr)->resid & RESID_TYPE_MASK;
1069 bool active = false;
1070 active = m_policyMgr->acquireDisplayResource(type,
1073 if (true == active) {
1074 resource_request_t* req = *itr;
1075 ICO_DBG("Dequeue waiting display resource request"
1076 "(req=0x%08x zone=%02d:%s appid=%s)",
1077 *itr, (*itr)->dispzoneid,
1078 (*itr)->dispzone, (*itr)->appid);
1079 m_waitingDispResReq.erase(itr);
1081 dumpWaitingDispResReq();
1083 updateDisplayResource(req);
1085 m_winCtrl->active(req->surfaceid, -1);
1092 ICO_TRA("CicoSCResourceManager::updateDisplayResource Leave");
1096 CicoSCResourceManager::updateSoundResource(resource_request_t *req)
1098 ICO_TRA("CicoSCResourceManager::updateSoundResource Enter"
1099 "(req=0x%08x)", req);
1100 for (int i = 0; i < (int)m_curSoundResReq.size(); ++i) {
1101 ICO_DBG("zoneid=%d active=%d current=0x%08x",
1102 i, m_policyMgr->getSoundZoneState(i), m_curSoundResReq[i]);
1104 if (NULL == m_curSoundResReq[i]) {
1108 if ((i == req->soundzoneid) ||
1109 (false == m_policyMgr->getSoundZoneState(i))) {
1111 // state change to waiting
1112 m_curSoundResReq[i]->state = RES_STATE_WAITING;
1114 ICO_DBG("Enqueue waiting sound request queue "
1115 "(req=0x%08x zone:%02d:%s appid=%s)",
1116 m_curSoundResReq[i], i,
1117 m_curSoundResReq[i]->soundzone, m_curSoundResReq[i]->appid);
1118 m_soundReqQueue[i].push_front(m_curSoundResReq[i]);
1120 // initialize current zone request
1121 ICO_DBG("Dequeue current sound request queue "
1122 "(req=0x%08x zone:%02d:%s appid=%s)",
1123 m_curSoundResReq[i], i,
1124 m_curSoundResReq[i]->soundzone, m_curSoundResReq[i]->appid);
1125 ICO_PRF("CHG_GUI_RES sound deprived zone=%02d:%s appid=%s",
1126 i, m_curSoundResReq[i]->soundzone,
1127 m_curSoundResReq[i]->appid);
1128 m_curSoundResReq[i] = NULL;
1132 if (req != m_curSoundResReq[req->soundzoneid]) {
1133 ico_syc_mrp_acquire_sound_resource(req);
1134 ico_syc_mrp_active_app(req->appid);
1136 // state change to acquired
1137 req->state = RES_STATE_ACQUIRED;
1138 // update current zone request
1139 ICO_DBG("Enqueue current sound request queue "
1140 "(req=0x%08x zone:%02d:%s appid=%s)",
1141 req, req->soundzoneid, req->soundzone, req->appid);
1142 ICO_PRF("CHG_GUI_RES sound acquired zone=%02d:%s appid=%s",
1143 req->soundzoneid, req->soundzone, req->appid);
1144 m_curSoundResReq[req->soundzoneid] = req;
1146 ICO_TRA("CicoSCResourceManager::updateSoundResource Leave");
1150 CicoSCResourceManager::updateInputResource(resource_request_t *req)
1152 ICO_TRA("CicoSCResourceManager::updateInputResource Enter"
1153 "(req=0x%08x)", req);
1154 for (int i = 0; i < (int)m_curInputResReq.size(); ++i) {
1155 ICO_DBG("input=%d active=%d current=0x%08x",
1156 i, m_policyMgr->getInputState(i), m_curInputResReq[i]);
1158 if (NULL == m_curInputResReq[i]) {
1162 if ((i == req->input) ||
1163 (false == m_policyMgr->getInputState(i))) {
1165 if (NULL != m_inputCtrl) {
1166 // add input control
1167 m_inputCtrl->delInputApp(req->appid, req->device, req->input);
1170 // state change to waiting
1171 m_curInputResReq[i]->state = RES_STATE_WAITING;
1173 ICO_DBG("Enqueue waiting input request queue "
1174 "(req=0x%08x input:%d appid=%s)",
1175 m_curInputResReq[i], i, m_curInputResReq[i]->appid);
1176 m_inputReqQueue[i].push_front(m_curInputResReq[i]);
1177 // initialize current zone request
1178 ICO_DBG("Dequeue current input request queue "
1179 "(req=0x%08x input:%d appid=%s)",
1180 m_curInputResReq[i],
1181 m_curInputResReq[i]->input, m_curInputResReq[i]->appid);
1182 ICO_PRF("CHG_GUI_RES input deprived input=%d appid=%s",
1183 m_curInputResReq[i]->input,
1184 m_curInputResReq[i]->appid);
1185 m_curInputResReq[i] = NULL;
1189 if (req != m_curInputResReq[req->input]) {
1190 // delete input control
1191 m_inputCtrl->addInputApp(req->appid, req->device, req->input, 0, 0);
1192 // state change to acquired
1193 req->state = RES_STATE_ACQUIRED;
1194 // update current zone request
1195 ICO_DBG("Enqueue current input request queue "
1196 "(req=0x%08x input:%d appid=%s)", req, req->input, req->appid);
1197 ICO_PRF("CHG_GUI_RES input acquired input=%d appid=%s",
1198 req->input, req->appid);
1199 m_curInputResReq[req->input] = req;
1201 ICO_TRA("CicoSCResourceManager::updateInputResource Leave");
1205 CicoSCResourceManager::updateDisplayResourceRegulation(int state)
1207 ICO_TRA("CicoSCResourceManager::updateDisplayResourceRegulation Enter"
1208 "(state=%d)", state);
1210 if (STID_DRVREGULATION_ON == state) {
1211 bool curchg = false;
1212 std::map<unsigned int, resource_request_t*>::iterator itr;
1213 itr = m_curDispResOwerReq.begin();
1214 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1215 resource_request_t *current = itr->second;
1216 if (NULL == current) {
1220 int type = current->resid & RESID_TYPE_MASK;
1221 bool active = false;
1222 active = m_policyMgr->acquireDisplayResource(type,
1223 current->dispzoneid,
1225 if (false == active) {
1226 if (NULL != m_winCtrl) {
1227 // hide current window
1228 m_winCtrl->hide(current->surfaceid,
1229 m_animaName.c_str(), m_animaTime);
1235 if (false == curchg) {
1236 ICO_TRA("CicoSCResourceManager::updateDisplayResourceRegulation "
1241 list<resource_request_t*>::iterator itr2;
1242 itr2 = m_waitingDispResReq.begin();
1243 for (; itr2 != m_waitingDispResReq.end(); ++itr2) {
1244 int type = (*itr2)->resid & RESID_TYPE_MASK;
1245 bool active = false;
1246 active = m_policyMgr->acquireDisplayResource(type,
1247 (*itr2)->dispzoneid,
1249 if (true == active) {
1250 if (NULL != m_winCtrl) {
1251 // show current window
1252 m_winCtrl->show((*itr2)->surfaceid,
1253 m_animaName.c_str(), m_animaTime);
1259 else if (STID_DRVREGULATION_OFF == state) {
1260 std::map<unsigned int, resource_request_t*>::iterator itr;
1261 itr = m_curDispResOwerReq.begin();
1262 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1263 resource_request_t *current = itr->second;
1264 if (NULL == current) {
1265 if (true == m_policyMgr->isExistDisplayZoneOwer(itr->first)) {
1266 if (NULL != m_winCtrl) {
1267 int surfaceid = m_winCtrl->getDisplayedWindow(itr->first);
1270 if ((surfaceid > 0) && (NULL != itr->second) &&
1271 (itr->second->surfaceid != surfaceid)) {
1272 m_winCtrl->hide(surfaceid,
1273 m_animaName.c_str(),
1277 if (surfaceid > 0) {
1278 m_winCtrl->hide(surfaceid,
1279 m_animaName.c_str(),
1287 list<resource_request_t*>::iterator itr2;
1288 itr2 = m_waitingDispResReq.begin();
1289 for (; itr2 != m_waitingDispResReq.end(); ++itr2) {
1290 resource_request_t *req = *itr2;
1291 if (itr->first != (unsigned int)req->dispzoneid) {
1294 int type = req->resid & RESID_TYPE_MASK;
1295 bool active = false;
1296 active = m_policyMgr->acquireDisplayResource(type,
1299 if (true == active) {
1300 ICO_DBG("Dequeue waiting display resource request"
1301 "(req=0x%08x zone=%02d:%s appid=%s)",
1302 req, req->dispzoneid,
1303 req->dispzone, req->appid);
1304 m_waitingDispResReq.erase(itr2);
1305 ICO_DBG("Enqueue current display resource request"
1306 "(req=0x%08x zone=%02d:%s appid=%s)",
1307 req, req->dispzoneid,
1308 req->dispzone, req->appid);
1309 ICO_PRF("CHG_GUI_RES display acquired zone=%02d:%s "
1311 req->dispzoneid, req->dispzone, req->appid);
1312 m_curDispResOwerReq[req->dispzoneid] = req;
1314 dumpCurDispResOwerReq();
1315 dumpWaitingDispResReq();
1317 m_winCtrl->show(req->surfaceid,
1318 m_animaName.c_str(), m_animaTime);
1319 m_winCtrl->active(req->surfaceid, -1);
1325 int type = current->resid & RESID_TYPE_MASK;
1326 bool active = false;
1327 active = m_policyMgr->acquireDisplayResource(type,
1328 current->dispzoneid,
1330 if (true == active) {
1331 if (NULL != m_winCtrl) {
1332 int surfaceid = m_winCtrl->getDisplayedWindow(
1333 itr->second->dispzoneid);
1334 if ((itr->second->surfaceid != surfaceid) &&
1336 m_winCtrl->hide(surfaceid,
1337 m_animaName.c_str(), m_animaTime);
1340 // show current window
1341 m_winCtrl->show(current->surfaceid,
1342 m_animaName.c_str(), m_animaTime);
1346 dumpCurDispResOwerReq();
1347 dumpWaitingDispResReq();
1353 ICO_TRA("CicoSCResourceManager::updateDisplayResourceRegulation Leave");
1357 CicoSCResourceManager::updateSoundResourceRegulation(int state)
1359 ICO_TRA("CicoSCResourceManager::updateSoundResourceRegulation Enter"
1360 "(state=%d)", state);
1362 bool curchg = false;
1363 for (int i = 0; i < (int)m_curSoundResReq.size(); ++i) {
1364 resource_request_t *current = m_curSoundResReq[i];
1365 if (NULL == current) {
1369 int type = current->resid & RESID_TYPE_MASK;
1370 bool active = false;
1371 active = m_policyMgr->acquireSoundResource(type,
1372 current->soundzoneid,
1374 if (false == active) {
1375 // state change to waiting
1376 current->state = RES_STATE_WAITING;
1378 ICO_DBG("Enqueue waiting sound request queue "
1379 "(req=0x%08x zone:%02d:%s appid=%s)",
1380 current, i, current->soundzone, current->appid);
1381 m_soundReqQueue[i].push_front(current);
1382 // initialize current zone request
1383 m_curSoundResReq[i] = NULL;
1388 if ((false == curchg) && (STID_DRVREGULATION_ON == state)) {
1389 ICO_TRA("CicoSCResourceManager::updateSoundResourceRegulation Leave");
1393 map<int, list<resource_request_t*> >::iterator itr;
1394 itr = m_soundReqQueue.begin();
1395 for (; itr != m_soundReqQueue.end(); ++itr) {
1396 if (NULL != m_curSoundResReq[itr->first]) {
1400 list<resource_request_t*>::iterator itr2;
1401 itr2 = itr->second.begin();
1402 for (; itr2 != itr->second.end(); ++itr2) {
1403 int type = (*itr2)->resid & RESID_TYPE_MASK;
1404 bool active = false;
1405 active = m_policyMgr->acquireSoundResource(type,
1406 (*itr2)->soundzoneid,
1408 if (true == active) {
1409 resource_request_t* req = *itr2;
1410 ICO_DBG("Dequeue waiting sound request queue "
1411 "(req=0x%08x zone:%02d:%s appid=%s)",
1412 *itr2, itr->first, (*itr2)->soundzone, (*itr2)->appid);
1413 itr->second.erase(itr2);
1414 updateSoundResource(req);
1420 ICO_TRA("CicoSCResourceManager::updateSoundResourceRegulation Leave");
1424 CicoSCResourceManager::updateInputResourceRegulation(int state)
1426 ICO_TRA("CicoSCResourceManager::updateInputResourceRegulation Enter"
1427 "(state=%d)", state);
1429 bool curchg = false;
1430 for (int i = 0; i < (int)m_curInputResReq.size(); ++i) {
1431 resource_request_t *current = m_curInputResReq[i];
1432 if (NULL == current) {
1436 bool active = false;
1437 active = m_policyMgr->acquireInputResource(current->input,
1439 if (false == active) {
1440 if (NULL != m_inputCtrl) {
1441 // hide current window
1442 m_inputCtrl->delInputApp(current->appid,
1446 // state change to waiting
1447 current->state = RES_STATE_WAITING;
1449 ICO_DBG("Enqueue waiting input request queue "
1450 "(req=0x%08x input:%d appid=%s)",
1451 current, i, current->appid);
1452 m_inputReqQueue[i].push_front(current);
1453 // initialize current zone request
1454 m_curInputResReq[i] = NULL;
1459 if ((false == curchg) && (STID_DRVREGULATION_ON == state)) {
1460 ICO_TRA("CicoSCResourceManager::updateInputResourceRegulation Leave");
1464 map<int, list<resource_request_t*> >::iterator itr;
1465 itr = m_inputReqQueue.begin();
1466 for (; itr != m_inputReqQueue.end(); ++itr) {
1467 if (NULL != m_curInputResReq[itr->first]) {
1471 list<resource_request_t*>::iterator itr2;
1472 itr2 = itr->second.begin();
1473 for (; itr2 != itr->second.end(); ++itr2) {
1474 bool active = false;
1475 active = m_policyMgr->acquireInputResource((*itr2)->input,
1477 if (true == active) {
1478 resource_request_t* req = *itr2;
1479 ICO_DBG("Dequeue waiting input request queue "
1480 "(req=0x%08x input:%d appid=%s)",
1481 *itr2, (*itr2)->input, (*itr2)->appid);
1482 itr->second.erase(itr2);
1483 updateInputResource(req);
1489 ICO_TRA("CicoSCResourceManager::updateInputResourceRegulation Leave");
1492 //--------------------------------------------------------------------------
1494 * @brief find currnet dipalay resource ower request
1496 * @param [in] request compare requset
1498 * @return request object on same requeset found, NULL on not found
1500 //--------------------------------------------------------------------------
1501 resource_request_t *
1502 CicoSCResourceManager::findCurDispResOwerReq(resource_request_t *req)
1505 ICO_WRN("invalid argument. req is null");
1508 std::map<unsigned int, resource_request_t*>::iterator itr;
1509 itr = m_curDispResOwerReq.begin();
1510 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1511 CompDisplayResourceRequest comp(req);
1512 if (true == comp(itr->second)) {
1519 //--------------------------------------------------------------------------
1521 * @brief pop currnet dipalay resource ower request from list
1523 * @param [in] request compare requset
1525 * @return request object on same requeset found, NULL on not found
1527 //--------------------------------------------------------------------------
1528 resource_request_t *
1529 CicoSCResourceManager::popCurDispResOwerReq(resource_request_t *req)
1532 ICO_WRN("invalid argument. req is null");
1535 std::map<unsigned int, resource_request_t*>::iterator itr;
1536 itr = m_curDispResOwerReq.begin();
1537 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1538 CompDisplayResourceRequest comp(req);
1539 if (true == comp(itr->second)) {
1540 ICO_DBG("Dequeue current display resource ower request"
1541 "(req=0x%08x zoneid=%02d:%s appid=%s)",
1542 itr->second, itr->first,
1543 itr->second->dispzone, itr->second->appid);
1544 ICO_PRF("CHG_GUI_RES display deprived zone=%02d:%s appid=%s",
1545 itr->first, itr->second->dispzone, itr->second->appid);
1546 resource_request_t *findreq = itr->second;
1549 dumpCurDispResOwerReq();
1557 //--------------------------------------------------------------------------
1559 * @brief dump currnet dipalay resource ower request
1561 //--------------------------------------------------------------------------
1563 CicoSCResourceManager::dumpCurDispResOwerReq(void)
1565 std::map<unsigned int, resource_request_t*>::iterator itr;
1566 itr = m_curDispResOwerReq.begin();
1567 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1568 if (NULL == itr->second) {
1569 ICO_DBG("current req=0x%08x zone=%02d:(null) appid=(null)",
1570 itr->second, itr->first);
1573 ICO_DBG("current req=0x%08x zone=%02d:%s appid=%s",
1574 itr->second, itr->first, itr->second->dispzone,
1575 itr->second->appid);
1580 //--------------------------------------------------------------------------
1582 * @brief find waiting dipalay resource request
1584 * @param [in] request compare requset
1586 * @return request object on same requeset found, NULL on not found
1588 //--------------------------------------------------------------------------
1589 resource_request_t *
1590 CicoSCResourceManager::findWaitingDispResReq(resource_request_t *req)
1593 ICO_WRN("invalid argument. req is null");
1596 CompDisplayResourceRequest comp(req);
1597 std::list<resource_request_t*>::iterator itr;
1598 itr = find_if(m_waitingDispResReq.begin(), m_waitingDispResReq.end(), comp);
1599 if (m_waitingDispResReq.end() != itr) {
1605 //--------------------------------------------------------------------------
1607 * @brief pop waiting dipalay resource request from waiting list
1609 * @param [in] request compare requset
1611 * @return request object on same requeset found, NULL on not found
1613 //--------------------------------------------------------------------------
1614 resource_request_t *
1615 CicoSCResourceManager::popWaitingDispResReq(resource_request_t *req)
1618 ICO_WRN("invalid argument. req is null");
1621 CompDisplayResourceRequest comp(req);
1622 std::list<resource_request_t*>::iterator itr;
1623 itr = find_if(m_waitingDispResReq.begin(), m_waitingDispResReq.end(), comp);
1624 if (m_waitingDispResReq.end() != itr) {
1625 ICO_DBG("Dequeue waiting display resource request"
1626 "(req=0x%08x zone:%02d:%s appid=%s)",
1627 *itr, (*itr)->dispzoneid, (*itr)->dispzone, (*itr)->appid);
1628 resource_request_t *findreq = *itr;
1629 m_waitingDispResReq.erase(itr);
1631 dumpWaitingDispResReq();
1638 //--------------------------------------------------------------------------
1640 * @brief dump waiting dipalay resource request
1642 //--------------------------------------------------------------------------
1644 CicoSCResourceManager::dumpWaitingDispResReq(void)
1646 std::list<resource_request_t*>::iterator itr;
1647 itr = m_waitingDispResReq.begin();
1648 for (; itr != m_waitingDispResReq.end(); ++itr) {
1650 ICO_DBG("waiting req=null");
1653 ICO_DBG("waiting req=0x%08x zone=%02d:%s appid=%s",
1654 *itr, (*itr)->dispzoneid, (*itr)->dispzone, (*itr)->appid);
1659 //--------------------------------------------------------------------------
1661 * @brief update display request for regulation pre-process
1663 //--------------------------------------------------------------------------
1665 CicoSCResourceManager::updateDispResRegulationPreProc(resource_request_t *req)
1667 ICO_TRA("CicoSCResourceManager::updateDispResRegulationPreProc Enter");
1669 dumpCurDispResOwerReq();
1670 dumpWaitingDispResReq();
1674 ICO_TRA("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1678 if (false == m_policyMgr->getRegulation()) {
1679 ICO_TRA("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1683 CicoSystemConfig *sysConf = CicoSystemConfig::getInstance();
1684 const CicoSCAppKindConf *appKindConf = NULL;
1685 appKindConf = sysConf->findAppKindConfbyId(req->appkind);
1686 if (NULL == appKindConf) {
1687 ICO_ERR("not found CicoSCAppKindConf instance");
1688 ICO_TRA("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1692 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
1693 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
1694 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_VISIBLE)) {
1696 if (NULL != m_winCtrl) {
1697 m_winCtrl->show(req->surfaceid,
1699 req->animationTime);
1701 delResourceRequest(req);
1703 ICO_DBG("kind of system application");
1704 ICO_TRA("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1708 int surfaceid = req->surfaceid;
1709 if (NULL != m_winCtrl) {
1710 surfaceid = m_winCtrl->getDisplayedWindow(req->dispzoneid);
1711 if (-1 == surfaceid) {
1712 ICO_WRN("displayed surface id is invalid.");
1713 surfaceid = req->surfaceid;
1717 if (req->surfaceid != surfaceid) {
1718 ICO_WRN("req->surfaceid(0x%08X) != displayedsurfaceid(0x%08X)",
1719 req->surfaceid, surfaceid);
1722 resource_request_t *curreq = NULL;
1723 int min = ICO_DISPLAY0_ZONEID_MIN;
1724 int max = ICO_DISPLAY0_ZONEID_MAX;
1725 if ((req->dispzoneid >= min) && (req->dispzoneid <= max)) {
1726 for (int i = min; i <= max; ++i) {
1727 std::map<unsigned int, resource_request_t*>::iterator itr;
1728 itr = m_curDispResOwerReq.find(i);
1729 if (itr != m_curDispResOwerReq.end()) {
1730 if (NULL != itr->second) {
1731 curreq = itr->second;
1738 min = ICO_DISPLAY1_ZONEID_MIN;
1739 max = ICO_DISPLAY1_ZONEID_MAX;
1740 if ((NULL == curreq) &&
1741 (req->dispzoneid >= min) && (req->dispzoneid <= max)) {
1742 for (int i = min; i <= max; ++i) {
1743 std::map<unsigned int, resource_request_t*>::iterator itr;
1744 itr = m_curDispResOwerReq.find(i);
1745 if (itr != m_curDispResOwerReq.end()) {
1746 if (NULL != itr->second) {
1747 curreq = itr->second;
1755 resource_request_t *curreq = NULL;
1756 std::map<unsigned int, resource_request_t*>::iterator itr;
1757 itr = m_curDispResOwerReq.find(req->dispzoneid);
1758 if (itr != m_curDispResOwerReq.end()) {
1759 curreq = itr->second;
1763 if (NULL != curreq) {
1764 ICO_DBG("Dequeue current display resource request"
1765 "(req=0x%08x zone:%02d:%s appid=%s)",
1766 curreq, curreq->dispzoneid, curreq->dispzone, curreq->appid);
1767 ICO_PRF("CHG_GUI_RES display deprived zone=%02d:%s appid=%s",
1768 curreq->dispzoneid, curreq->dispzone, curreq->appid);
1769 m_curDispResOwerReq[curreq->dispzoneid] = NULL;
1771 if (curreq->surfaceid != req->surfaceid) {
1772 resource_request_t *waitreq = popWaitingDispResReq(req);
1773 ICO_DBG("Enqueue waiting display resource request"
1774 "(req=0x%08x zone:%02d:%s appid=%s)",
1775 curreq, curreq->dispzoneid,
1776 curreq->dispzone, curreq->appid);
1777 m_waitingDispResReq.push_front(curreq);
1779 if (NULL != waitreq) {
1780 ICO_DBG("Enqueue current display resource request"
1781 "(req=0x%08x zone:%02d:%s appid=%s)",
1782 waitreq, waitreq->dispzoneid,
1783 waitreq->dispzone, waitreq->appid);
1784 ICO_PRF("CHG_GUI_RES display acquired zone=%02d:%s appid=%s",
1785 waitreq->dispzoneid, waitreq->dispzone, waitreq->appid);
1786 m_curDispResOwerReq[waitreq->dispzoneid] = waitreq;
1790 ICO_DBG("Enqueue current display resource request"
1791 "(req=0x%08x zone:%02d:%s appid=%s)",
1792 curreq, curreq->dispzoneid,
1793 curreq->dispzone, curreq->appid);
1794 ICO_PRF("CHG_GUI_RES display acquired zone=%02d:%s appid=%s",
1795 curreq->dispzoneid, curreq->dispzone, curreq->appid);
1796 m_curDispResOwerReq[curreq->dispzoneid] = curreq;
1799 delResourceRequest(req);
1802 dumpCurDispResOwerReq();
1803 dumpWaitingDispResReq();
1805 ICO_TRA("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1808 //--------------------------------------------------------------------------
1810 * @brief update sound request for regulation pre-process
1812 //--------------------------------------------------------------------------
1814 CicoSCResourceManager::updateSoundResRegulationPreProc(resource_request_t *req)
1816 ICO_TRA("CicoSCResourceManager::updateSoundResRegulationPreProc Enter");
1822 if (false == m_policyMgr->getRegulation()) {
1826 CicoSystemConfig *sysConf = CicoSystemConfig::getInstance();
1827 const CicoSCAppKindConf *appKindConf = NULL;
1828 appKindConf = sysConf->findAppKindConfbyId(req->appkind);
1829 if (NULL == appKindConf) {
1830 ICO_ERR("not found CicoSCAppKindConf instance");
1831 ICO_TRA("CicoSCResourceManager::updateSoundResRegulationPreProc Leave");
1835 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
1836 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
1837 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_AUDIO)) {
1839 delResourceRequest(req);
1841 ICO_DBG("kind of system application");
1842 ICO_TRA("CicoSCResourceManager::updateSoundResRegulationPreProc Leave");
1846 resource_request_t *curreq = NULL;
1847 std::map<int, resource_request_t*>::iterator itr;
1848 itr = m_curSoundResReq.find(req->soundzoneid);
1849 if (itr != m_curSoundResReq.end()) {
1850 curreq = itr->second;
1853 if (NULL != curreq) {
1854 ICO_DBG("Dequeue current sound resource request"
1855 "(req=0x%08x zone:%02d:%s appid=%s)",
1856 curreq, curreq->soundzoneid, curreq->soundzone, curreq->appid);
1857 ICO_PRF("CHG_GUI_RES sound deprived zone=%02d:%s appid=%s",
1858 curreq->soundzoneid, curreq->soundzone, curreq->appid);
1859 m_curSoundResReq[curreq->soundzoneid] = NULL;
1861 if (0 != strcmp(curreq->appid, req->appid)) {
1862 resource_request_t *waitreq = popSoundResReq(req);
1863 ICO_DBG("Enqueue waiting sound resource request"
1864 "(req=0x%08x zone:%02d:%s appid=%s)",
1865 curreq, curreq->soundzoneid,
1866 curreq->soundzone, curreq->appid);
1867 m_soundReqQueue[curreq->soundzoneid].push_front(curreq);
1869 if (NULL != waitreq) {
1870 ICO_DBG("Enqueue current sound resource request"
1871 "(req=0x%08x zone:%02d:%s appid=%s)",
1872 waitreq, waitreq->soundzoneid,
1873 waitreq->soundzone, waitreq->appid);
1874 ICO_PRF("CHG_GUI_RES sound acquired zone=%02d:%s appid=%s",
1875 waitreq->soundzoneid, waitreq->soundzone,
1877 m_curSoundResReq[curreq->soundzoneid] = waitreq;
1881 ICO_DBG("Enqueue current sound resource request"
1882 "(req=0x%08x zone:%02d:%s appid=%s)",
1883 curreq, curreq->soundzoneid,
1884 curreq->soundzone, curreq->appid);
1885 ICO_PRF("CHG_GUI_RES sound acquired zone=%d:%s appid=%s",
1886 curreq->soundzoneid, curreq->soundzone, curreq->appid);
1887 m_curSoundResReq[curreq->soundzoneid] = curreq;
1890 delResourceRequest(req);
1891 ICO_TRA("CicoSCResourceManager::updateSoundResRegulationPreProc Leave");
1894 //--------------------------------------------------------------------------
1896 * @brief update input request for regulation pre-process
1898 //--------------------------------------------------------------------------
1900 CicoSCResourceManager::updateInputResRegulationPreProc(resource_request_t *req)
1902 ICO_TRA("CicoSCResourceManager::updateInputResRegulationPreProc Enter");
1908 if (false == m_policyMgr->getRegulation()) {
1912 resource_request_t *curreq = NULL;
1913 std::map<int, resource_request_t*>::iterator itr;
1914 itr = m_curInputResReq.find(req->input);
1915 if (itr != m_curInputResReq.end()) {
1916 curreq = itr->second;
1919 if (NULL != curreq) {
1920 ICO_DBG("Dequeue current input resource request"
1921 "(req=0x%08x input:%d appid=%s)",
1922 curreq, curreq->input, curreq->appid);
1923 ICO_PRF("CHG_GUI_RES input deprived input=%d appid=%s",
1924 curreq->input, curreq->appid);
1925 m_curInputResReq[curreq->input] = NULL;
1927 if (0 != strcmp(curreq->appid, req->appid)) {
1928 resource_request_t *waitreq = popInputResReq(req);
1929 ICO_DBG("Enqueue waiting input resource request"
1930 "(req=0x%08x input:%d appid=%s)",
1931 curreq, curreq->input, curreq->appid);
1932 m_inputReqQueue[curreq->input].push_front(curreq);
1934 if (NULL != waitreq) {
1935 ICO_DBG("Enqueue current input resource request"
1936 "(req=0x%08x input:%d appid=%s)",
1937 waitreq, waitreq->input, waitreq->appid);
1938 ICO_PRF("CHG_GUI_RES input acquired input=%d appid=%s",
1939 waitreq->input, waitreq->appid);
1940 m_curInputResReq[curreq->input] = waitreq;
1944 ICO_DBG("Enqueue current input resource request"
1945 "(req=0x%08x input:%d appid=%s)",
1946 curreq, curreq->input, curreq->appid);
1947 ICO_PRF("CHG_GUI_RES input acquired input=%d appid=%s",
1948 curreq->input, curreq->appid);
1949 m_curInputResReq[curreq->input] = curreq;
1952 delResourceRequest(req);
1953 ICO_TRA("CicoSCResourceManager::updateInputResRegulationPreProc Leave");
1956 //--------------------------------------------------------------------------
1958 * @brief compare displayed surface and ower surface
1960 //--------------------------------------------------------------------------
1962 CicoSCResourceManager::isMatchDisplayed(void)
1965 std::map<unsigned int, resource_request_t*>::iterator itr;
1966 itr = m_curDispResOwerReq.begin();
1967 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1968 if (NULL == itr->second) {
1971 if (NULL != m_winCtrl) {
1972 int surfaceid = m_winCtrl->getDisplayedWindow(
1973 itr->second->dispzoneid);
1974 std::map<unsigned int, resource_request_t*>::iterator itr2;
1975 itr2 = m_curDispResOwerReq.begin();
1976 for (; itr2 != m_curDispResOwerReq.end(); ++itr2) {
1977 if (NULL == itr2->second) {
1980 if ((itr2->second->surfaceid == surfaceid)) {
1989 // vim:set expandtab ts=4 sw=4: