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 "CicoSCSystemConfig.h"
28 #include "CicoSCConf.h"
29 #include "CicoSCCommand.h"
30 #include "CicoSCPolicyManager.h"
31 #include "CicoSCLifeCycleController.h"
32 #include "CicoSCAilItems.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 CicoSCSystemConfig *sysConf = CicoSCSystemConfig::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_DBG("CicoSCResourceManager::initialize Enter");
176 int ret = ICO_SYC_EOK;
178 ret = ico_syc_mrp_init(enforceSound, this);
179 if (ICO_SYC_EOK != ret) {
183 ret = m_policyMgr->initialize();
184 if (ICO_SYC_EOK != ret) {
189 ICO_DBG("CicoSCResourceManager::initialize Leave");
194 CicoSCResourceManager::terminate(void)
196 ICO_DBG("CicoSCResourceManager::terminate Enter");
197 m_policyMgr->terminate();
198 ICO_DBG("CicoSCResourceManager::terminate Leave");
202 CicoSCResourceManager::handleCommand(const CicoSCCommand &cmd,
205 ICO_DBG("CicoSCResourceManager::handleCommand Enter"
206 "(cmdid=0x%08X internal=%s)",
207 cmd.cmdid, internal ? "true" : "false");
209 CicoSCCmdResCtrlOpt *opt = (CicoSCCmdResCtrlOpt*)cmd.opt;
211 // request command from application or internal
212 int reqtype = internal ? REQTYPE_AUTO : REQTYPE_APP;
214 if ((MSG_CMD_CREATE_RES == cmd.cmdid) ||
215 (MSG_CMD_ACQUIRE_RES == cmd.cmdid)) {
217 if (true == opt->dispres) {
218 resource_request_t *req = newResourceRequest(RESID_KIND_DISPLAY,
221 if (MSG_CMD_CREATE_RES == cmd.cmdid) {
222 acquireDisplayResource(req, false);
225 if ((true == m_policyMgr->getRegulation()) &&
226 (false == isMatchDisplayed())) {
227 updateDispResRegulationPreProc(req);
228 updateDisplayResourceRegulation(STID_DRVREGULATION_ON);
231 acquireDisplayResource(req);
236 if (true == opt->soundres) {
237 resource_request_t *req = newResourceRequest(RESID_KIND_SOUND,
240 if ((true == m_policyMgr->getRegulation()) &&
241 (false == isMatchDisplayed())) {
242 updateSoundResRegulationPreProc(req);
243 updateSoundResourceRegulation(STID_DRVREGULATION_ON);
246 acquireSoundResource(req);
250 if (true == opt->inputres) {
251 resource_request_t *req = newResourceRequest(RESID_KIND_INPUT,
254 if ((true == m_policyMgr->getRegulation()) &&
255 (false == isMatchDisplayed())) {
256 updateInputResRegulationPreProc(req);
257 updateInputResourceRegulation(STID_DRVREGULATION_ON);
260 acquireInputResource(req);
264 else if ((MSG_CMD_RELEASE_RES == cmd.cmdid) ||
265 (MSG_CMD_DESTORY_RES == cmd.cmdid)) {
267 if (true == opt->dispres) {
268 resource_request_t *req = newResourceRequest(RESID_KIND_DISPLAY,
271 releaseDisplayResource(req);
273 if (true == opt->soundres) {
274 resource_request_t *req = newResourceRequest(RESID_KIND_SOUND,
277 releaseSoundResource(req);
279 if (true == opt->inputres) {
280 resource_request_t *req = newResourceRequest(RESID_KIND_INPUT,
283 releaseInputResource(req);
287 ICO_WRN("Unknown command");
290 ICO_DBG("CicoSCResourceManager::handleCommand Leave");
294 CicoSCResourceManager::setWindowController(CicoSCWindowController *winCtrl)
300 CicoSCResourceManager::setInputController(CicoSCInputController *inputCtrl)
302 m_inputCtrl = inputCtrl;
307 CicoSCResourceManager::popDispResReq(resource_request_t *req)
309 ICO_DBG("CicoSCResourceManager::popDispResReq Enter");
311 map<int, list<resource_request_t*> >::iterator itr;
312 itr = m_dispReqQueue.begin();
313 CompDisplayResourceRequest comp(req);
314 for (; itr != m_dispReqQueue.end(); ++itr) {
315 list<resource_request_t*>::iterator itr2;
316 itr2 = find_if(itr->second.begin(), itr->second.end(), comp);
317 if (itr->second.end() != itr2) {
318 ICO_DBG("Dequeue waiting display request queue zone=%d req=0x%08x",
320 m_dispReqQueue[req->dispzoneid].erase(itr2);
321 ICO_DBG("CicoSCResourceManager::popDispResReq Leave"
327 ICO_DBG("CicoSCResourceManager::popDispResReq Leave(NULL)");
333 CicoSCResourceManager::popSoundResReq(resource_request_t *req)
335 ICO_DBG("CicoSCResourceManager::popSoundResReq Enter");
337 map<int, list<resource_request_t*> >::iterator itr;
338 itr = m_soundReqQueue.begin();
339 CompSoundResourceRequest comp(req);
340 for (; itr != m_soundReqQueue.end(); ++itr) {
341 list<resource_request_t*>::iterator itr2;
342 itr2 = find_if(itr->second.begin(), itr->second.end(), comp);
343 if (itr->second.end() != itr2) {
344 ICO_DBG("Dequeue waiting sound request queue zone=%d req=0x%08x",
346 m_soundReqQueue[req->soundzoneid].erase(itr2);
347 ICO_DBG("CicoSCResourceManager::popSoundResReq Leave"
352 ICO_DBG("CicoSCResourceManager::popSoundResReq Leave(NULL)");
357 CicoSCResourceManager::popInputResReq(resource_request_t *req)
359 ICO_DBG("CicoSCResourceManager::popInputResReq Enter");
361 map<int, list<resource_request_t*> >::iterator itr;
362 itr = m_inputReqQueue.begin();
363 CompInputResourceRequest comp(req);
364 for (; itr != m_inputReqQueue.end(); ++itr) {
365 list<resource_request_t*>::iterator itr2;
366 itr2 = find_if(itr->second.begin(), itr->second.end(), comp);
367 if (itr->second.end() != itr2) {
368 ICO_DBG("Dequeue waiting input request queue input=%d req=0x%08x",
370 m_inputReqQueue[req->input].erase(itr2);
371 ICO_DBG("CicoSCResourceManager::popInputResReq Leave"
377 ICO_DBG("CicoSCResourceManager::popDispResReq Leave(NULL)");
383 CicoSCResourceManager::acquireDisplayResource(resource_request_t *newreq,
386 ICO_DBG("CicoSCResourceManager::acquireDisplayResource Enter");
388 CicoSCSystemConfig *sysConf = CicoSCSystemConfig::getInstance();
389 const CicoSCAppKindConf *appKindConf = NULL;
390 appKindConf = sysConf->findAppKindConfbyId(newreq->appkind);
391 if (NULL == appKindConf) {
392 ICO_ERR("not found CicoSCAppKindConf instance");
393 ICO_DBG("CicoSCResourceManager::acquireDisplayResource Leave(false)");
397 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
398 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
399 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_VISIBLE)) {
401 if ((NULL != m_winCtrl) && (true == control)) {
402 m_winCtrl->show(newreq->surfaceid,
404 newreq->animationTime);
406 delResourceRequest(newreq);
408 ICO_DBG("kind of system application");
409 ICO_DBG("CicoSCResourceManager::acquireDisplayResource Leave(true)");
413 // if exist current ower request, pop request
414 resource_request_t *req = findCurDispResOwerReq(newreq);
417 ICO_DBG("dispzoneid=%d/%d zone=%s/%s",
418 req->dispzoneid, newreq->dispzoneid,
419 req->dispzone, newreq->dispzone);
420 if (req->dispzoneid != newreq->dispzoneid) {
421 req = popCurDispResOwerReq(req);
422 m_policyMgr->releaseDisplayResource(req->dispzoneid, req->prio);
423 chgzone = newreq->dispzoneid;
427 // if exist in wating request list, pop request
429 req = popWaitingDispResReq(newreq);
431 ICO_DBG("dispzoneid=%d/%d zone=%s/%s",
432 req->dispzoneid, newreq->dispzoneid,
433 req->dispzone, newreq->dispzone);
434 if (req->dispzoneid != newreq->dispzoneid) {
435 chgzone = newreq->dispzoneid;
445 // update request data
446 req->dispzoneid = newreq->dispzoneid;
447 if (NULL != req->dispzone) free(req->dispzone);
448 req->dispzone = strdup(newreq->dispzone);
449 if (NULL != req->animation) free(req->animation);
450 req->animation = strdup(newreq->animation);
451 req->animationTime = newreq->animationTime;
453 // delete new request
454 delResourceRequest(newreq);
457 if (false == control) {
458 ICO_DBG("Enqueue waiting display resource request"
459 "(req=0x%08x appid=%s)", req, req->appid);
460 m_waitingDispResReq.push_front(req);
462 dumpWaitingDispResReq();
467 int type = req->resid & RESID_TYPE_MASK;
468 bool state = m_policyMgr->acquireDisplayResource(type,
472 updateDisplayResource(req, chgzone);
476 // move request window
477 m_winCtrl->setGeometry(req->surfaceid, req->dispzone,
478 req->animation, req->animationTime,
479 req->animation, req->animationTime);
482 // just in case, hide window
483 if (NULL != m_winCtrl) {
484 // hide request window
485 m_winCtrl->hide(req->surfaceid, NULL, 0);
488 ICO_DBG("Enqueue waiting display resource request"
489 "(req=0x%08x appid=%s)", req, req->appid);
490 m_waitingDispResReq.push_front(req);
492 dumpWaitingDispResReq();
496 ICO_DBG("CicoSCResourceManager::acquireDisplayResource Leave");
501 CicoSCResourceManager::releaseDisplayResource(resource_request_t *newreq)
503 ICO_DBG("CicoSCResourceManager::releaseDisplayResource Enter"
504 "(newreq=0x%08x)", newreq);
506 // if exist in wating request list, pop request
507 resource_request_t *req = popWaitingDispResReq(newreq);
509 delResourceRequest(req);
510 delResourceRequest(newreq);
511 ICO_DBG("CicoSCResourceManager::releaseDisplayResource Leave");
515 // if exist current ower request, pop request
516 req = popCurDispResOwerReq(newreq);
518 m_policyMgr->releaseDisplayResource(req->dispzoneid, req->prio);
519 delResourceRequest(req);
521 delResourceRequest(newreq);
523 list<resource_request_t*>::iterator itr;
524 itr = m_waitingDispResReq.begin();
525 for (; itr != m_waitingDispResReq.end(); ++itr) {
526 if (NULL != m_curDispResOwerReq[(*itr)->dispzoneid]) {
529 int type = (*itr)->resid & RESID_TYPE_MASK;
530 bool active = m_policyMgr->acquireDisplayResource(type,
533 if (true == active) {
534 resource_request_t* popreq = popWaitingDispResReq(*itr);
535 updateDisplayResource(popreq);
536 m_winCtrl->activeCB(NULL, NULL, popreq->surfaceid, -1);
541 ICO_DBG("CicoSCResourceManager::releaseDisplayResource Leave");
545 CicoSCResourceManager::acquireSoundResource(resource_request_t *newreq)
547 ICO_DBG("CicoSCResourceManager::acquireSoundResource Enter");
549 CicoSCSystemConfig *sysConf = CicoSCSystemConfig::getInstance();
550 const CicoSCAppKindConf *appKindConf = NULL;
551 appKindConf = sysConf->findAppKindConfbyId(newreq->appkind);
552 if (NULL == appKindConf) {
553 ICO_ERR("not found CicoSCAppKindConf instance");
554 ICO_DBG("CicoSCResourceManager::acquireSoundResource Leave(false)");
558 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
559 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
560 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_AUDIO)) {
562 delResourceRequest(newreq);
564 ICO_DBG("kind of system application");
565 ICO_DBG("CicoSCResourceManager::acquireSoundResource Leave(true)");
569 resource_request_t *req = popSoundResReq(newreq);
575 CompSoundResourceRequest comp(req);
576 if (true == comp(m_curSoundResReq[req->soundzoneid])) {
577 ICO_DBG("already acquired appid=%s pid=%d soundid=0x%08X",
578 req->appid, req->pid, req->soundid);
579 ICO_DBG("CicoSCResourceManager::acquireSoundResource Leave(true)");
581 delResourceRequest(newreq);
585 int type = req->resid & RESID_TYPE_MASK;
586 bool state = m_policyMgr->acquireSoundResource(type,
590 updateSoundResource(req);
593 ICO_DBG("Enqueue waiting sound request queue zone=%d req=0x%08x",
594 req->soundzoneid, req);
595 m_soundReqQueue[req->soundzoneid].push_front(req);
598 ICO_DBG("CicoSCResourceManager::acquireSoundResource Leave");
603 CicoSCResourceManager::releaseSoundResource(resource_request_t *newreq)
605 ICO_DBG("CicoSCResourceManager::releaseSoundResource Enter");
608 CompSoundResourceRequest comp(newreq);
609 for (int i = 0; i < (int)m_curSoundResReq.size(); ++i) {
610 if (NULL == m_curSoundResReq[i]) {
614 if (true == comp(m_curSoundResReq[i])) {
615 ico_syc_mrp_release_sound_resource(m_curSoundResReq[i]);
616 delResourceRequest(newreq);
617 delResourceRequest(m_curSoundResReq[i]);
618 m_curSoundResReq[i] = NULL;
624 // If current request is not changed,
625 // remove the request from the waiting queue.
626 if (false == curchg) {
627 resource_request_t *req = popSoundResReq(newreq);
629 ico_syc_mrp_release_sound_resource(req);
630 delResourceRequest(req);
633 delResourceRequest(newreq);
634 ICO_DBG("CicoSCResourceManager::releaseSoundResource Leave");
638 map<int, list<resource_request_t*> >::iterator itr;
639 itr = m_soundReqQueue.begin();
640 for (; itr != m_soundReqQueue.end(); ++itr) {
641 list<resource_request_t*>::iterator itr2;
642 itr2 = itr->second.begin();
643 for (; itr2 != itr->second.end(); ++itr2) {
644 if (NULL != m_curSoundResReq[(*itr2)->soundzoneid]) {
648 int type = (*itr2)->resid & RESID_TYPE_MASK;
649 bool active = m_policyMgr->acquireSoundResource(type,
650 (*itr2)->soundzoneid,
652 if (true == active) {
653 resource_request_t* req = *itr2;
654 ICO_DBG("Dequeue waiting sound request queue "
655 "zone=%d req=0x%08x", itr->first, *itr2);
656 itr->second.erase(itr2);
657 updateSoundResource(req);
663 ICO_DBG("CicoSCResourceManager::releaseSoundResource Leave");
667 CicoSCResourceManager::acquireInputResource(resource_request_t *newreq)
669 ICO_DBG("CicoSCResourceManager::acquireInputResource Enter");
671 resource_request_t *req = popInputResReq(newreq);
677 CompInputResourceRequest comp(req);
678 if (true == comp(m_curInputResReq[req->input])) {
679 ICO_DBG("already acquired appid=%s pid=%d input=0x%08X",
680 req->appid, req->pid, req->input);
681 ICO_DBG("CicoSCResourceManager::acquireInputResource Leave(true)");
683 delResourceRequest(newreq);
687 bool state = m_policyMgr->acquireInputResource(req->input, req->prio);
689 updateInputResource(req);
692 ICO_DBG("Enqueue waiting input request queue input=%d req=0x%08x",
694 m_inputReqQueue[req->input].push_front(req);
697 ICO_DBG("CicoSCResourceManager::acquireInputResource Leave");
702 CicoSCResourceManager::releaseInputResource(resource_request_t *newreq)
705 CompInputResourceRequest comp(newreq);
706 for (int i = 0; i < (int)m_curInputResReq.size(); ++i) {
707 if (NULL == m_curInputResReq[i]) {
711 if (true == comp(m_curInputResReq[i])) {
712 if (NULL != m_inputCtrl) {
713 m_inputCtrl->delInputApp(m_curInputResReq[i]->appid,
714 m_curInputResReq[i]->device,
715 m_curInputResReq[i]->input);
717 delResourceRequest(newreq);
718 delResourceRequest(m_curInputResReq[i]);
719 m_curInputResReq[i] = NULL;
725 // If current request is not changed,
726 // remove the request from the waiting queue.
727 if (false == curchg) {
728 resource_request_t *req = popInputResReq(newreq);
730 delResourceRequest(req);
733 delResourceRequest(newreq);
734 ICO_DBG("CicoSCResourceManager::releaseInputResource Leave");
738 map<int, list<resource_request_t*> >::iterator itr;
739 itr = m_inputReqQueue.begin();
740 for (; itr != m_inputReqQueue.end(); ++itr) {
741 list<resource_request_t*>::iterator itr2;
742 itr2 = itr->second.begin();
743 for (; itr2 != itr->second.end(); ++itr2) {
744 if (NULL != m_curInputResReq[(*itr2)->input]) {
747 bool active = m_policyMgr->acquireInputResource((*itr2)->input,
749 if (true == active) {
750 resource_request_t* req = *itr2;
751 ICO_DBG("Dequeue waiting input request queue "
752 "input=%d req=0x%08x", itr->first, *itr2);
753 itr->second.erase(itr2);
754 updateInputResource(req);
762 CicoSCResourceManager::newResourceRequest(int resid,
764 const CicoSCCommand &cmd)
766 ICO_DBG("CicoSCResourceManager::newResourceRequest Enter");
768 resource_request_t *req = NULL;
769 req = (resource_request_t*)calloc(1, sizeof(resource_request_t));
770 CicoSCCmdResCtrlOpt *opt = (CicoSCCmdResCtrlOpt*)cmd.opt;
771 CicoSCSystemConfig *systemConfig = CicoSCSystemConfig::getInstance();
773 req->reqtype = reqtype;
775 CicoSCLifeCycleController *lifeCycle =
776 CicoSCLifeCycleController::getInstance();
777 const CicoSCAilItems* ailItem = lifeCycle->findAIL(cmd.appid);
778 if (NULL != ailItem) {
779 req->category = ailItem->m_categoryID;
780 req->appkind = ailItem->m_kindID;
783 req->prio = req->category;
787 /* set resource id */
788 req->resid = RESID_TYPE_BASIC;
789 if (1 == opt->type) {
790 req->resid = RESID_TYPE_INTERRUPT;
794 req->resid |= RESID_CMD_RELEASE;
795 if (MSG_CMD_ACQUIRE_RES == cmd.cmdid) {
796 req->resid |= RESID_CMD_ACQUIRE;
799 /* set application information */
800 req->appid = strdup(cmd.appid.c_str());
802 req->state = RES_STATE_WAITING;
804 if (resid == RESID_KIND_DISPLAY) {
805 req->dispzone = strdup(opt->dispzone.c_str());
806 req->dispzoneid = systemConfig->getDizplayZoneIdbyFullName(req->dispzone);
807 req->winname = strdup(opt->winname.c_str());
808 req->surfaceid = opt->surfaceid;
809 req->id = opt->surfaceid;;
810 req->animation = strdup(opt->animation.c_str());
811 req->animationTime = opt->animationTime;
813 else if (resid == RESID_KIND_SOUND) {
814 req->soundzone = strdup(opt->soundzone.c_str());
815 req->soundzoneid = systemConfig->getSoundZoneIdbyFullName(req->soundzone);
816 ICO_DBG("req->soundzoneid=%d", req->soundzoneid);
817 req->soundname = strdup(opt->soundname.c_str());
818 req->soundid = opt->soundid;
819 req->soundadjust = opt->adjust;
820 req->id = opt->soundid;
822 else if (resid == RESID_KIND_INPUT) {
823 req->device = strdup(opt->device.c_str());
824 req->input = opt->input;
825 req->id = opt->input;
828 ICO_DBG("CicoSCResourceManager::newResourceRequest Leave"
829 "(req=0x%08x appid=%s)", req, req->appid);
834 CicoSCResourceManager::delResourceRequest(resource_request_t *req)
836 if (NULL == req) return;
838 if (NULL != req->appid) free(req->appid);
839 if (NULL != req->dispzone) free(req->dispzone);
840 if (NULL != req->winname) free(req->winname);
841 if (NULL != req->animation) free(req->animation);
842 if (NULL != req->soundzone) free(req->soundzone);
843 if (NULL != req->soundname) free(req->soundname);
844 if (NULL != req->device) free(req->device);
850 CicoSCResourceManager::enforceSound(unsigned short state,
851 resource_request_t *req,
854 ICO_DBG("CicoSCResourceManager::enforceSound Enter");
856 ICO_DBG("CicoSCResourceManager::enforceSound Leave");
859 // receive changed state
861 CicoSCResourceManager::receiveChangedState(int state)
863 ICO_DBG("CicoSCResourceManager::receiveChangedState Enter"
864 "(state=%d)", state);
866 if (STID_DRVREGULATION_ON == state) {
867 if (true == isMatchDisplayed()) {
868 updateDisplayResourceRegulation(state);
869 updateSoundResourceRegulation(state);
870 updateInputResourceRegulation(state);
874 updateDisplayResourceRegulation(state);
875 updateSoundResourceRegulation(state);
876 updateInputResourceRegulation(state);
879 ICO_DBG("CicoSCResourceManager::receiveChangedState Leave");
882 //--------------------------------------------------------------------------
884 * @brief get policy manager instance
886 * @return resource manager instace
888 //--------------------------------------------------------------------------
889 CicoSCPolicyManager *
890 CicoSCResourceManager::getPolicyManager(void)
896 CicoSCResourceManager::updateDisplayResource(resource_request_t *req,
899 ICO_DBG("CicoSCResourceManager::updateDisplayResource Enter"
900 "(req=0x%08x)", req);
902 std::map<unsigned int, resource_request_t*>::iterator itr;
903 itr = m_curDispResOwerReq.find(req->dispzoneid);
904 if ((m_curDispResOwerReq.end() != itr) && (NULL != itr->second)) {
906 if (itr->second == req) {
907 ICO_DBG("already ower appid=%s pid=%d surfaceid=0x%08X",
908 req->appid, req->pid, req->surfaceid);
909 // show request window
910 m_winCtrl->show(req->surfaceid, req->animation, req->animationTime);
911 m_winCtrl->activeCB(NULL, NULL, req->surfaceid, -1);
914 resource_request_t *popreq = popCurDispResOwerReq(itr->second);
915 if (NULL != popreq) {
916 if (NULL != m_winCtrl) {
917 // hide current window
918 m_winCtrl->hide(popreq->surfaceid, NULL, 0);
921 // state change to waiting
922 popreq->state = RES_STATE_WAITING;
924 ICO_DBG("Enqueue waiting display resource request"
925 "(req=0x%08x appid=%s", popreq, popreq->appid);
926 m_waitingDispResReq.push_front(popreq);
928 dumpWaitingDispResReq();
933 std::map<unsigned int, resource_request_t*>::iterator itr2;
934 itr2 = m_curDispResOwerReq.begin();
935 for (; itr2 != m_curDispResOwerReq.end(); ++itr2) {
936 resource_request_t *tmpreq = itr2->second;
938 if (true == m_policyMgr->getDispZoneState(itr2->first)) {
942 if (NULL == itr2->second) {
946 ICO_DBG("Dequeue current display resource ower request"
947 "(req=0x%08x zoneid=%d appid=%s)",
948 tmpreq, tmpreq->dispzoneid, tmpreq->appid);
951 // hide current window
952 m_winCtrl->hide(tmpreq->surfaceid, NULL, 0);
954 ICO_DBG("Enqueue waiting display resource request"
955 "(req=0x%08x appid=%s", tmpreq, tmpreq->appid);
956 m_waitingDispResReq.push_front(tmpreq);
959 if (NULL != m_winCtrl) {
960 if (-1 != chgzoneid) {
961 // move request window
962 m_winCtrl->setGeometry(req->surfaceid, req->dispzone,
963 req->animation, req->animationTime,
964 req->animation, req->animationTime);
966 // show request window
967 m_winCtrl->show(req->surfaceid, req->animation, req->animationTime);
969 // state change to acquired
970 req->state = RES_STATE_ACQUIRED;
971 // update current zone request
972 ICO_DBG("Enqueue current display resource ower request"
973 "(req=0x%08x zoneid=%d appid=%s)",
974 req, req->dispzoneid, req->appid);
975 m_curDispResOwerReq[req->dispzoneid] = req;
977 dumpCurDispResOwerReq();
980 // if current zone ower not exist after zone change
981 if (-1 != chgzoneid) {
982 list<resource_request_t*>::iterator itr;
983 itr = m_waitingDispResReq.begin();
984 for (; itr != m_waitingDispResReq.end(); ++itr) {
985 if (m_curDispResOwerReq[(*itr)->dispzoneid] != NULL) {
989 if (true == m_policyMgr->isExistDisplayZoneOwer((*itr)->dispzoneid)) {
993 int type = (*itr)->resid & RESID_TYPE_MASK;
995 active = m_policyMgr->acquireDisplayResource(type,
998 if (true == active) {
999 resource_request_t* req = *itr;
1000 ICO_DBG("Dequeue waiting display resource request"
1001 "(req=0x%08x appid=%s)", *itr, (*itr)->appid);
1002 m_waitingDispResReq.erase(itr);
1004 dumpWaitingDispResReq();
1006 updateDisplayResource(req);
1007 m_winCtrl->active(req->surfaceid, -1);
1013 ICO_DBG("CicoSCResourceManager::updateDisplayResource Leave");
1017 CicoSCResourceManager::updateSoundResource(resource_request_t *req)
1019 ICO_DBG("CicoSCResourceManager::updateSoundResource Enter"
1020 "(req=0x%08x)", req);
1021 for (int i = 0; i < (int)m_curSoundResReq.size(); ++i) {
1022 ICO_DBG("zoneid=%d active=%d current=0x%08x",
1023 i, m_policyMgr->getSoundZoneState(i), m_curSoundResReq[i]);
1025 if (NULL == m_curSoundResReq[i]) {
1029 if ((i == req->soundzoneid) ||
1030 (false == m_policyMgr->getSoundZoneState(i))) {
1032 // state change to waiting
1033 m_curSoundResReq[i]->state = RES_STATE_WAITING;
1035 ICO_DBG("Enqueue waiting sound request queue "
1036 "zone=%d req=0x%08x", i, m_curSoundResReq[i]);
1037 m_soundReqQueue[i].push_front(m_curSoundResReq[i]);
1038 // initialize current zone request
1039 m_curSoundResReq[i] = NULL;
1043 if (req != m_curSoundResReq[req->soundzoneid]) {
1044 ico_syc_mrp_acquire_sound_resource(req);
1045 ico_syc_mrp_active_app(req->appid);
1047 // state change to acquired
1048 req->state = RES_STATE_ACQUIRED;
1049 // update current zone request
1050 m_curSoundResReq[req->soundzoneid] = req;
1052 ICO_DBG("CicoSCResourceManager::updateSoundResource Leave");
1056 CicoSCResourceManager::updateInputResource(resource_request_t *req)
1058 ICO_DBG("CicoSCResourceManager::updateInputResource Enter"
1059 "(req=0x%08x)", req);
1060 for (int i = 0; i < (int)m_curInputResReq.size(); ++i) {
1061 ICO_DBG("input=%d active=%d current=0x%08x",
1062 i, m_policyMgr->getInputState(i), m_curInputResReq[i]);
1064 if (NULL == m_curInputResReq[i]) {
1068 if ((i == req->input) ||
1069 (false == m_policyMgr->getInputState(i))) {
1071 if (NULL != m_inputCtrl) {
1072 // add input control
1073 m_inputCtrl->delInputApp(req->appid, req->device, req->input);
1076 // state change to waiting
1077 m_curInputResReq[i]->state = RES_STATE_WAITING;
1079 ICO_DBG("Enqueue waiting input request queue "
1080 "zone=%d req=0x%08x", i, m_curInputResReq[i]);
1081 m_inputReqQueue[i].push_front(m_curInputResReq[i]);
1082 // initialize current zone request
1083 m_curInputResReq[i] = NULL;
1087 if (req != m_curInputResReq[req->input]) {
1088 // delete input control
1089 m_inputCtrl->addInputApp(req->appid, req->device, req->input, 0, 0);
1090 // state change to acquired
1091 req->state = RES_STATE_ACQUIRED;
1092 // update current zone request
1093 m_curInputResReq[req->input] = req;
1095 ICO_DBG("CicoSCResourceManager::updateInputResource Leave");
1099 CicoSCResourceManager::updateDisplayResourceRegulation(int state)
1101 ICO_DBG("CicoSCResourceManager::updateDisplayResourceRegulation Enter"
1102 "(state=%d)", state);
1104 if (STID_DRVREGULATION_ON == state) {
1105 bool curchg = false;
1106 std::map<unsigned int, resource_request_t*>::iterator itr;
1107 itr = m_curDispResOwerReq.begin();
1108 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1109 resource_request_t *current = itr->second;
1110 if (NULL == current) {
1114 int type = current->resid & RESID_TYPE_MASK;
1115 bool active = false;
1116 active = m_policyMgr->acquireDisplayResource(type,
1117 current->dispzoneid,
1119 if (false == active) {
1120 if (NULL != m_winCtrl) {
1121 // hide current window
1122 m_winCtrl->hide(current->surfaceid,
1123 m_animaName.c_str(), m_animaTime);
1129 if (false == curchg) {
1130 ICO_DBG("CicoSCResourceManager::updateDisplayResourceRegulation "
1135 list<resource_request_t*>::iterator itr2;
1136 itr2 = m_waitingDispResReq.begin();
1137 for (; itr2 != m_waitingDispResReq.end(); ++itr2) {
1138 int type = (*itr2)->resid & RESID_TYPE_MASK;
1139 bool active = false;
1140 active = m_policyMgr->acquireDisplayResource(type,
1141 (*itr2)->dispzoneid,
1143 if (true == active) {
1144 if (NULL != m_winCtrl) {
1145 // show current window
1146 m_winCtrl->show((*itr2)->surfaceid,
1147 m_animaName.c_str(), m_animaTime);
1153 else if (STID_DRVREGULATION_OFF == state) {
1154 std::map<unsigned int, resource_request_t*>::iterator itr;
1155 itr = m_curDispResOwerReq.begin();
1156 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1157 resource_request_t *current = itr->second;
1158 if (NULL == current) {
1159 if (true == m_policyMgr->isExistDisplayZoneOwer(itr->first)) {
1160 if (NULL != m_winCtrl) {
1161 int surfaceid = m_winCtrl->getDisplayedWindow(itr->first);
1164 if ((surfaceid > 0) && (NULL != itr->second) &&
1165 (itr->second->surfaceid != surfaceid)) {
1166 m_winCtrl->hide(surfaceid,
1167 m_animaName.c_str(),
1171 if (surfaceid > 0) {
1172 m_winCtrl->hide(surfaceid,
1173 m_animaName.c_str(),
1181 list<resource_request_t*>::iterator itr2;
1182 itr2 = m_waitingDispResReq.begin();
1183 for (; itr2 != m_waitingDispResReq.end(); ++itr2) {
1184 resource_request_t *req = *itr2;
1185 if (itr->first != (unsigned int)req->dispzoneid) {
1188 int type = req->resid & RESID_TYPE_MASK;
1189 bool active = false;
1190 active = m_policyMgr->acquireDisplayResource(type,
1193 if (true == active) {
1194 ICO_DBG("Dequeue waiting display resource request"
1195 "(req=0x%08x appid=%s)", req, req->appid);
1196 m_waitingDispResReq.erase(itr2);
1197 ICO_DBG("Enqueue current display resource request"
1198 "(req=0x%08x appid=%s)", req, req->appid);
1199 m_curDispResOwerReq[req->dispzoneid] = req;
1201 dumpCurDispResOwerReq();
1202 dumpWaitingDispResReq();
1204 m_winCtrl->show(req->surfaceid,
1205 m_animaName.c_str(), m_animaTime);
1206 m_winCtrl->active(req->surfaceid, -1);
1212 int type = current->resid & RESID_TYPE_MASK;
1213 bool active = false;
1214 active = m_policyMgr->acquireDisplayResource(type,
1215 current->dispzoneid,
1217 if (true == active) {
1218 if (NULL != m_winCtrl) {
1219 int surfaceid = m_winCtrl->getDisplayedWindow(
1220 itr->second->dispzoneid);
1221 if ((itr->second->surfaceid != surfaceid) &&
1223 m_winCtrl->hide(surfaceid,
1224 m_animaName.c_str(), m_animaTime);
1227 // show current window
1228 m_winCtrl->show(current->surfaceid,
1229 m_animaName.c_str(), m_animaTime);
1233 dumpCurDispResOwerReq();
1234 dumpWaitingDispResReq();
1240 ICO_DBG("CicoSCResourceManager::updateDisplayResourceRegulation Leave");
1244 CicoSCResourceManager::updateSoundResourceRegulation(int state)
1246 ICO_DBG("CicoSCResourceManager::updateSoundResourceRegulation Enter"
1247 "(state=%d)", state);
1249 bool curchg = false;
1250 for (int i = 0; i < (int)m_curSoundResReq.size(); ++i) {
1251 resource_request_t *current = m_curSoundResReq[i];
1252 if (NULL == current) {
1256 int type = current->resid & RESID_TYPE_MASK;
1257 bool active = false;
1258 active = m_policyMgr->acquireSoundResource(type,
1259 current->soundzoneid,
1261 if (false == active) {
1262 // state change to waiting
1263 current->state = RES_STATE_WAITING;
1265 ICO_DBG("Enqueue waiting sound request queue "
1266 "zone=%d req=0x%08x", i, current);
1267 m_soundReqQueue[i].push_front(current);
1268 // initialize current zone request
1269 m_curSoundResReq[i] = NULL;
1274 if ((false == curchg) && (STID_DRVREGULATION_ON == state)) {
1275 ICO_DBG("CicoSCResourceManager::updateSoundResourceRegulation Leave");
1279 map<int, list<resource_request_t*> >::iterator itr;
1280 itr = m_soundReqQueue.begin();
1281 for (; itr != m_soundReqQueue.end(); ++itr) {
1282 if (NULL != m_curSoundResReq[itr->first]) {
1286 list<resource_request_t*>::iterator itr2;
1287 itr2 = itr->second.begin();
1288 for (; itr2 != itr->second.end(); ++itr2) {
1289 int type = (*itr2)->resid & RESID_TYPE_MASK;
1290 bool active = false;
1291 active = m_policyMgr->acquireSoundResource(type,
1292 (*itr2)->soundzoneid,
1294 if (true == active) {
1295 resource_request_t* req = *itr2;
1296 ICO_DBG("Dequeue waiting sound request queue "
1297 "zone=%d req=0x%08x", itr->first, *itr2);
1298 itr->second.erase(itr2);
1299 updateSoundResource(req);
1305 ICO_DBG("CicoSCResourceManager::updateSoundResourceRegulation Leave");
1309 CicoSCResourceManager::updateInputResourceRegulation(int state)
1311 ICO_DBG("CicoSCResourceManager::updateInputResourceRegulation Enter"
1312 "(state=%d)", state);
1314 bool curchg = false;
1315 for (int i = 0; i < (int)m_curInputResReq.size(); ++i) {
1316 resource_request_t *current = m_curInputResReq[i];
1317 if (NULL == current) {
1321 bool active = false;
1322 active = m_policyMgr->acquireInputResource(current->input,
1324 if (false == active) {
1325 if (NULL != m_inputCtrl) {
1326 // hide current window
1327 m_inputCtrl->delInputApp(current->appid,
1331 // state change to waiting
1332 current->state = RES_STATE_WAITING;
1334 ICO_DBG("Enqueue waiting input request queue "
1335 "zone=%d req=0x%08x", i, current);
1336 m_inputReqQueue[i].push_front(current);
1337 // initialize current zone request
1338 m_curInputResReq[i] = NULL;
1343 if ((false == curchg) && (STID_DRVREGULATION_ON == state)) {
1344 ICO_DBG("CicoSCResourceManager::updateInputResourceRegulation Leave");
1348 map<int, list<resource_request_t*> >::iterator itr;
1349 itr = m_inputReqQueue.begin();
1350 for (; itr != m_inputReqQueue.end(); ++itr) {
1351 if (NULL != m_curInputResReq[itr->first]) {
1355 list<resource_request_t*>::iterator itr2;
1356 itr2 = itr->second.begin();
1357 for (; itr2 != itr->second.end(); ++itr2) {
1358 bool active = false;
1359 active = m_policyMgr->acquireInputResource((*itr2)->input,
1361 if (true == active) {
1362 resource_request_t* req = *itr2;
1363 ICO_DBG("Dequeue waiting input request queue "
1364 "zone=%d req=0x%08x", itr->first, *itr2);
1365 itr->second.erase(itr2);
1366 updateInputResource(req);
1372 ICO_DBG("CicoSCResourceManager::updateInputResourceRegulation Leave");
1375 //--------------------------------------------------------------------------
1377 * @brief find currnet dipalay resource ower request
1379 * @param [in] request compare requset
1381 * @return request object on same requeset found, NULL on not found
1383 //--------------------------------------------------------------------------
1384 resource_request_t *
1385 CicoSCResourceManager::findCurDispResOwerReq(resource_request_t *req)
1388 ICO_WRN("invalid argument. req is null");
1391 std::map<unsigned int, resource_request_t*>::iterator itr;
1392 itr = m_curDispResOwerReq.begin();
1393 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1394 CompDisplayResourceRequest comp(req);
1395 if (true == comp(itr->second)) {
1402 //--------------------------------------------------------------------------
1404 * @brief pop currnet dipalay resource ower request from list
1406 * @param [in] request compare requset
1408 * @return request object on same requeset found, NULL on not found
1410 //--------------------------------------------------------------------------
1411 resource_request_t *
1412 CicoSCResourceManager::popCurDispResOwerReq(resource_request_t *req)
1415 ICO_WRN("invalid argument. req is null");
1418 std::map<unsigned int, resource_request_t*>::iterator itr;
1419 itr = m_curDispResOwerReq.begin();
1420 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1421 CompDisplayResourceRequest comp(req);
1422 if (true == comp(itr->second)) {
1423 ICO_DBG("Dequeue current display resource ower request"
1424 "(req=0x%08x zoneid=%d appid=%s)",
1425 itr->second, itr->first, itr->second->appid);
1426 resource_request_t *findreq = itr->second;
1429 dumpCurDispResOwerReq();
1437 //--------------------------------------------------------------------------
1439 * @brief dump currnet dipalay resource ower request
1441 //--------------------------------------------------------------------------
1443 CicoSCResourceManager::dumpCurDispResOwerReq(void)
1445 std::map<unsigned int, resource_request_t*>::iterator itr;
1446 itr = m_curDispResOwerReq.begin();
1447 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1448 if (NULL == itr->second) {
1449 ICO_DBG("current req=0x%08x zone=%02d:(null) appid=(null)",
1450 itr->second, itr->first);
1453 ICO_DBG("current req=0x%08x zone=%02d:%s appid=%s",
1454 itr->second, itr->first, itr->second->dispzone,
1455 itr->second->appid);
1460 //--------------------------------------------------------------------------
1462 * @brief find waiting dipalay resource request
1464 * @param [in] request compare requset
1466 * @return request object on same requeset found, NULL on not found
1468 //--------------------------------------------------------------------------
1469 resource_request_t *
1470 CicoSCResourceManager::findWaitingDispResReq(resource_request_t *req)
1473 ICO_WRN("invalid argument. req is null");
1476 CompDisplayResourceRequest comp(req);
1477 std::list<resource_request_t*>::iterator itr;
1478 itr = find_if(m_waitingDispResReq.begin(), m_waitingDispResReq.end(), comp);
1479 if (m_waitingDispResReq.end() != itr) {
1485 //--------------------------------------------------------------------------
1487 * @brief pop waiting dipalay resource request from waiting 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::popWaitingDispResReq(resource_request_t *req)
1498 ICO_WRN("invalid argument. req is null");
1501 CompDisplayResourceRequest comp(req);
1502 std::list<resource_request_t*>::iterator itr;
1503 itr = find_if(m_waitingDispResReq.begin(), m_waitingDispResReq.end(), comp);
1504 if (m_waitingDispResReq.end() != itr) {
1505 ICO_DBG("Dequeue waiting display resource request"
1506 "(req=0x%08x zone:%02d:%s appid=%s)",
1507 *itr, (*itr)->dispzoneid, (*itr)->dispzone, (*itr)->appid);
1508 resource_request_t *findreq = *itr;
1509 m_waitingDispResReq.erase(itr);
1511 dumpWaitingDispResReq();
1518 //--------------------------------------------------------------------------
1520 * @brief dump waiting dipalay resource request
1522 //--------------------------------------------------------------------------
1524 CicoSCResourceManager::dumpWaitingDispResReq(void)
1526 std::list<resource_request_t*>::iterator itr;
1527 itr = m_waitingDispResReq.begin();
1528 for (; itr != m_waitingDispResReq.end(); ++itr) {
1530 ICO_DBG("waiting req=null");
1533 ICO_DBG("waiting req=0x%08x zone=%02d:%s appid=%s",
1534 *itr, (*itr)->dispzoneid, (*itr)->dispzone, (*itr)->appid);
1539 //--------------------------------------------------------------------------
1541 * @brief update display request for regulation pre-process
1543 //--------------------------------------------------------------------------
1545 CicoSCResourceManager::updateDispResRegulationPreProc(resource_request_t *req)
1547 ICO_DBG("CicoSCResourceManager::updateDispResRegulationPreProc Enter");
1549 dumpCurDispResOwerReq();
1550 dumpWaitingDispResReq();
1554 ICO_DBG("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1558 if (false == m_policyMgr->getRegulation()) {
1559 ICO_DBG("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1563 CicoSCSystemConfig *sysConf = CicoSCSystemConfig::getInstance();
1564 const CicoSCAppKindConf *appKindConf = NULL;
1565 appKindConf = sysConf->findAppKindConfbyId(req->appkind);
1566 if (NULL == appKindConf) {
1567 ICO_ERR("not found CicoSCAppKindConf instance");
1568 ICO_DBG("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1572 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
1573 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
1574 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_VISIBLE)) {
1576 if (NULL != m_winCtrl) {
1577 m_winCtrl->show(req->surfaceid,
1579 req->animationTime);
1581 delResourceRequest(req);
1583 ICO_DBG("kind of system application");
1584 ICO_DBG("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1588 int surfaceid = req->surfaceid;
1589 if (NULL != m_winCtrl) {
1590 surfaceid = m_winCtrl->getDisplayedWindow(req->dispzoneid);
1591 if (-1 == surfaceid) {
1592 ICO_WRN("displayed surface id is invalid.");
1593 surfaceid = req->surfaceid;
1597 if (req->surfaceid != surfaceid) {
1598 ICO_WRN("req->surfaceid(0x%08X) != displayedsurfaceid(0x%08X)",
1599 req->surfaceid, surfaceid);
1602 resource_request_t *curreq = NULL;
1603 int min = ICO_DISPLAY0_ZONEID_MIN;
1604 int max = ICO_DISPLAY0_ZONEID_MAX;
1605 if ((req->dispzoneid >= min) && (req->dispzoneid <= max)) {
1606 for (int i = min; i <= max; ++i) {
1607 std::map<unsigned int, resource_request_t*>::iterator itr;
1608 itr = m_curDispResOwerReq.find(i);
1609 if (itr != m_curDispResOwerReq.end()) {
1610 if (NULL != itr->second) {
1611 curreq = itr->second;
1618 min = ICO_DISPLAY1_ZONEID_MIN;
1619 max = ICO_DISPLAY1_ZONEID_MAX;
1620 if ((NULL == curreq) &&
1621 (req->dispzoneid >= min) && (req->dispzoneid <= max)) {
1622 for (int i = min; i <= max; ++i) {
1623 std::map<unsigned int, resource_request_t*>::iterator itr;
1624 itr = m_curDispResOwerReq.find(i);
1625 if (itr != m_curDispResOwerReq.end()) {
1626 if (NULL != itr->second) {
1627 curreq = itr->second;
1635 resource_request_t *curreq = NULL;
1636 std::map<unsigned int, resource_request_t*>::iterator itr;
1637 itr = m_curDispResOwerReq.find(req->dispzoneid);
1638 if (itr != m_curDispResOwerReq.end()) {
1639 curreq = itr->second;
1643 if (NULL != curreq) {
1644 ICO_DBG("Dequeue current display resource request"
1645 "(req=0x%08x zone:%02d:%s appid=%s)",
1646 curreq, curreq->dispzoneid, curreq->dispzone, curreq->appid);
1647 m_curDispResOwerReq[curreq->dispzoneid] = NULL;
1649 if (curreq->surfaceid != req->surfaceid) {
1650 resource_request_t *waitreq = popWaitingDispResReq(req);
1651 ICO_DBG("Enqueue waiting display resource request"
1652 "(req=0x%08x zone:%02d:%s appid=%s)",
1653 curreq, curreq->dispzoneid,
1654 curreq->dispzone, curreq->appid);
1655 m_waitingDispResReq.push_front(curreq);
1657 if (NULL != waitreq) {
1658 ICO_DBG("Enqueue current display resource request"
1659 "(req=0x%08x zone:%02d:%s appid=%s)",
1660 waitreq, waitreq->dispzoneid,
1661 waitreq->dispzone, waitreq->appid);
1662 m_curDispResOwerReq[waitreq->dispzoneid] = waitreq;
1666 ICO_DBG("Enqueue current display resource request"
1667 "(req=0x%08x zone:%02d:%s appid=%s)",
1668 curreq, curreq->dispzoneid,
1669 curreq->dispzone, curreq->appid);
1670 m_curDispResOwerReq[curreq->dispzoneid] = curreq;
1673 delResourceRequest(req);
1676 dumpCurDispResOwerReq();
1677 dumpWaitingDispResReq();
1679 ICO_DBG("CicoSCResourceManager::updateDispResRegulationPreProc Leave");
1682 //--------------------------------------------------------------------------
1684 * @brief update sound request for regulation pre-process
1686 //--------------------------------------------------------------------------
1688 CicoSCResourceManager::updateSoundResRegulationPreProc(resource_request_t *req)
1694 if (false == m_policyMgr->getRegulation()) {
1698 CicoSCSystemConfig *sysConf = CicoSCSystemConfig::getInstance();
1699 const CicoSCAppKindConf *appKindConf = NULL;
1700 appKindConf = sysConf->findAppKindConfbyId(req->appkind);
1701 if (NULL == appKindConf) {
1702 ICO_ERR("not found CicoSCAppKindConf instance");
1703 ICO_DBG("CicoSCResourceManager::acquireSoundResource Leave(false)");
1707 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
1708 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
1709 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_AUDIO)) {
1711 delResourceRequest(req);
1713 ICO_DBG("kind of system application");
1714 ICO_DBG("CicoSCResourceManager::acquireSoundResource Leave(true)");
1718 resource_request_t *curreq = NULL;
1719 std::map<int, resource_request_t*>::iterator itr;
1720 itr = m_curSoundResReq.find(req->soundzoneid);
1721 if (itr != m_curSoundResReq.end()) {
1722 curreq = itr->second;
1725 if (NULL != curreq) {
1726 ICO_DBG("Dequeue current sound resource request"
1727 "(req=0x%08x zone:%02d appid=%s)",
1728 curreq, curreq->soundzoneid, curreq->appid);
1729 m_curSoundResReq[curreq->soundzoneid] = NULL;
1731 if (0 != strcmp(curreq->appid, req->appid)) {
1732 resource_request_t *waitreq = popSoundResReq(req);
1733 ICO_DBG("Enqueue waiting sound resource request"
1734 "(req=0x%08x zone:%02d appid=%s)",
1735 curreq, curreq->soundzoneid, curreq->appid);
1736 m_soundReqQueue[curreq->soundzoneid].push_front(curreq);
1738 if (NULL != waitreq) {
1739 ICO_DBG("Enqueue current sound resource request"
1740 "(req=0x%08x zone:%02d appid=%s)",
1741 waitreq, waitreq->soundzoneid, waitreq->appid);
1742 m_curSoundResReq[curreq->soundzoneid] = waitreq;
1746 ICO_DBG("Enqueue current sound resource request"
1747 "(req=0x%08x zone:%02d appid=%s)",
1748 curreq, curreq->soundzoneid, curreq->appid);
1749 m_curSoundResReq[curreq->soundzoneid] = curreq;
1752 delResourceRequest(req);
1755 //--------------------------------------------------------------------------
1757 * @brief update input request for regulation pre-process
1759 //--------------------------------------------------------------------------
1761 CicoSCResourceManager::updateInputResRegulationPreProc(resource_request_t *req)
1767 if (false == m_policyMgr->getRegulation()) {
1771 resource_request_t *curreq = NULL;
1772 std::map<int, resource_request_t*>::iterator itr;
1773 itr = m_curInputResReq.find(req->input);
1774 if (itr != m_curInputResReq.end()) {
1775 curreq = itr->second;
1778 if (NULL != curreq) {
1779 ICO_DBG("Dequeue current input resource request"
1780 "(req=0x%08x zone:%02d appid=%s)",
1781 curreq, curreq->input, curreq->appid);
1782 m_curInputResReq[curreq->input] = NULL;
1784 if (0 != strcmp(curreq->appid, req->appid)) {
1785 resource_request_t *waitreq = popInputResReq(req);
1786 ICO_DBG("Enqueue waiting input resource request"
1787 "(req=0x%08x zone:%02d appid=%s)",
1788 curreq, curreq->input, curreq->appid);
1789 m_inputReqQueue[curreq->input].push_front(curreq);
1791 if (NULL != waitreq) {
1792 ICO_DBG("Enqueue current input resource request"
1793 "(req=0x%08x zone:%02d appid=%s)",
1794 waitreq, waitreq->input, waitreq->appid);
1795 m_curInputResReq[curreq->input] = waitreq;
1799 ICO_DBG("Enqueue current input resource request"
1800 "(req=0x%08x zone:%02d appid=%s)",
1801 curreq, curreq->input, curreq->appid);
1802 m_curInputResReq[curreq->input] = curreq;
1805 delResourceRequest(req);
1808 //--------------------------------------------------------------------------
1810 * @brief compare displayed surface and ower surface
1812 //--------------------------------------------------------------------------
1814 CicoSCResourceManager::isMatchDisplayed(void)
1817 std::map<unsigned int, resource_request_t*>::iterator itr;
1818 itr = m_curDispResOwerReq.begin();
1819 for (; itr != m_curDispResOwerReq.end(); ++itr) {
1820 if (NULL == itr->second) {
1823 if (NULL != m_winCtrl) {
1824 int surfaceid = m_winCtrl->getDisplayedWindow(
1825 itr->second->dispzoneid);
1826 std::map<unsigned int, resource_request_t*>::iterator itr2;
1827 itr2 = m_curDispResOwerReq.begin();
1828 for (; itr2 != m_curDispResOwerReq.end(); ++itr2) {
1829 if (NULL == itr2->second) {
1832 if ((itr2->second->surfaceid == surfaceid)) {
1841 // vim:set expandtab ts=4 sw=4: