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_winCtrl(NULL), m_inputCtrl(NULL)
112 m_policyMgr = new CicoSCPolicyManager(this);
114 CicoSCSystemConfig *sysConf = CicoSCSystemConfig::getInstance();
115 list<resource_request_t*> l;
118 // initialize display current request and waiting queue
119 const vector<CicoSCDisplayConf*>& dispConfList
120 = sysConf->getDisplayConfList();
121 vector<CicoSCDisplayConf*>::const_iterator itr;
122 itr = dispConfList.begin();
123 for (; itr != dispConfList.end(); ++itr) {
124 vector<CicoSCDisplayZoneConf*>::iterator itr2;
125 itr2 = (*itr)->zoneConfList.begin();
126 for (; itr2 != (*itr)->zoneConfList.end(); ++itr2) {
127 m_curDispResReq[(*itr2)->id] = NULL;
128 m_dispReqQueue[(*itr2)->id] = l;
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 acquireDisplayResource(req);
229 if (true == opt->soundres) {
230 resource_request_t *req = newResourceRequest(RESID_KIND_SOUND,
233 acquireSoundResource(req);
235 if (true == opt->inputres) {
236 resource_request_t *req = newResourceRequest(RESID_KIND_INPUT,
239 acquireInputResource(req);
242 else if ((MSG_CMD_RELEASE_RES == cmd.cmdid) ||
243 (MSG_CMD_DESTORY_RES == cmd.cmdid)) {
245 if (true == opt->dispres) {
246 resource_request_t *req = newResourceRequest(RESID_KIND_DISPLAY,
249 releaseDisplayResource(req);
251 if (true == opt->soundres) {
252 resource_request_t *req = newResourceRequest(RESID_KIND_SOUND,
255 releaseSoundResource(req);
257 if (true == opt->inputres) {
258 resource_request_t *req = newResourceRequest(RESID_KIND_INPUT,
261 releaseInputResource(req);
265 ICO_WRN("Unknown command");
268 ICO_DBG("CicoSCResourceManager::handleCommand Leave");
272 CicoSCResourceManager::setWindowController(CicoSCWindowController *winCtrl)
278 CicoSCResourceManager::setInputController(CicoSCInputController *inputCtrl)
280 m_inputCtrl = inputCtrl;
284 CicoSCResourceManager::popDispResReq(resource_request_t *req)
286 ICO_DBG("CicoSCResourceManager::popDispResReq Enter");
288 map<int, list<resource_request_t*> >::iterator itr;
289 itr = m_dispReqQueue.begin();
290 CompDisplayResourceRequest comp(req);
291 for (; itr != m_dispReqQueue.end(); ++itr) {
292 list<resource_request_t*>::iterator itr2;
293 itr2 = find_if(itr->second.begin(), itr->second.end(), comp);
294 if (itr->second.end() != itr2) {
295 ICO_DBG("Dequeue waiting display request queue zone=%d req=0x%08x",
297 m_dispReqQueue[req->dispzoneid].erase(itr2);
298 ICO_DBG("CicoSCResourceManager::popDispResReq Leave"
304 ICO_DBG("CicoSCResourceManager::popDispResReq Leave(NULL)");
309 CicoSCResourceManager::popSoundResReq(resource_request_t *req)
311 ICO_DBG("CicoSCResourceManager::popSoundResReq Enter");
313 map<int, list<resource_request_t*> >::iterator itr;
314 itr = m_soundReqQueue.begin();
315 CompSoundResourceRequest comp(req);
316 for (; itr != m_soundReqQueue.end(); ++itr) {
317 list<resource_request_t*>::iterator itr2;
318 itr2 = find_if(itr->second.begin(), itr->second.end(), comp);
319 if (itr->second.end() != itr2) {
320 ICO_DBG("Dequeue waiting sound request queue zone=%d req=0x%08x",
322 m_soundReqQueue[req->soundzoneid].erase(itr2);
323 ICO_DBG("CicoSCResourceManager::popSoundResReq Leave"
328 ICO_DBG("CicoSCResourceManager::popSoundResReq Leave(NULL)");
333 CicoSCResourceManager::popInputResReq(resource_request_t *req)
335 ICO_DBG("CicoSCResourceManager::popInputResReq Enter");
337 map<int, list<resource_request_t*> >::iterator itr;
338 itr = m_inputReqQueue.begin();
339 CompInputResourceRequest comp(req);
340 for (; itr != m_inputReqQueue.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 input request queue input=%d req=0x%08x",
346 m_inputReqQueue[req->input].erase(itr2);
347 ICO_DBG("CicoSCResourceManager::popInputResReq Leave"
353 ICO_DBG("CicoSCResourceManager::popDispResReq Leave(NULL)");
359 CicoSCResourceManager::acquireDisplayResource(resource_request_t *newreq,
362 ICO_DBG("CicoSCResourceManager::acquireDisplayResource Enter");
364 CicoSCSystemConfig *sysConf = CicoSCSystemConfig::getInstance();
365 const CicoSCAppKindConf *appKindConf = NULL;
366 appKindConf = sysConf->findAppKindConfbyId(newreq->appkind);
367 if (NULL == appKindConf) {
368 ICO_ERR("not found CicoSCAppKindConf instance");
369 ICO_DBG("CicoSCResourceManager::acquireDisplayResource Leave(false)");
373 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
374 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
375 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_VISIBLE)) {
377 if ((NULL != m_winCtrl) && (true == control)) {
378 m_winCtrl->show(newreq->surfaceid,
380 newreq->animationTime);
382 delResourceRequest(newreq);
384 ICO_DBG("kind of system application");
385 ICO_DBG("CicoSCResourceManager::acquireDisplayResource Leave(true)");
389 resource_request_t *req = NULL;
390 // equal current request?
391 CompDisplayResourceRequest comp(newreq);
392 resource_request_t *curreq = m_curDispResReq[newreq->dispzoneid];
393 if ((NULL != curreq) && (true == comp(curreq))) {
394 ICO_DBG("already acquired appid=%s pid=%d surfaceid=0x%08X",
395 curreq->appid, curreq->pid, curreq->surfaceid);
396 ICO_DBG("CicoSCResourceManager::acquireDisplayResource Leave(true)");
398 if (newreq->dispzoneid == curreq->dispzoneid) {
400 delResourceRequest(newreq);
404 curreq->dispzoneid = newreq->dispzoneid;
405 delResourceRequest(newreq);
409 req = popDispResReq(newreq);
415 if (false == control) {
416 ICO_DBG("Enqueue waiting display request queue zone=%d req=0x%08x",
417 req->dispzoneid, req);
418 m_dispReqQueue[req->dispzoneid].push_front(req);
422 int type = req->resid & RESID_TYPE_MASK;
423 bool state = m_policyMgr->acquireDisplayResource(type,
427 updateDisplayResource(req);
430 ICO_DBG("Enqueue waiting display request queue zone=%d req=0x%08x",
431 req->dispzoneid, req);
432 m_dispReqQueue[req->dispzoneid].push_front(req);
436 ICO_DBG("CicoSCResourceManager::acquireDisplayResource Leave");
441 CicoSCResourceManager::releaseDisplayResource(resource_request_t *newreq)
443 ICO_DBG("CicoSCResourceManager::releaseDisplayResource Enter");
446 CompDisplayResourceRequest comp(newreq);
447 for (int i = 0; i < (int)m_curDispResReq.size(); ++i) {
448 if (NULL == m_curDispResReq[i]) {
452 if (true == comp(m_curDispResReq[i])) {
453 if (NULL != m_winCtrl) {
454 // hide current window
455 m_winCtrl->hide(m_curDispResReq[i]->surfaceid, NULL, 0);
457 delResourceRequest(newreq);
458 delResourceRequest(m_curDispResReq[i]);
459 m_curDispResReq[i] = NULL;
465 // If current request is not changed,
466 // remove the request from the waiting queue.
467 if (false == curchg) {
468 resource_request_t *req = popDispResReq(newreq);
470 delResourceRequest(req);
473 delResourceRequest(newreq);
474 ICO_DBG("CicoSCResourceManager::releaseDisplayResource Leave");
478 map<int, list<resource_request_t*> >::iterator itr;
479 itr = m_dispReqQueue.begin();
480 for (; itr != m_dispReqQueue.end(); ++itr) {
481 list<resource_request_t*>::iterator itr2;
482 itr2 = itr->second.begin();
483 for (; itr2 != itr->second.end(); ++itr2) {
484 int type = (*itr2)->resid & RESID_TYPE_MASK;
485 bool active = m_policyMgr->acquireDisplayResource(type,
488 if (true == active) {
489 resource_request_t* req = *itr2;
490 ICO_DBG("Dequeue waiting display request queue "
491 "zone=%d req=0x%08x", itr->first, *itr2);
492 itr->second.erase(itr2);
493 updateDisplayResource(req);
499 ICO_DBG("CicoSCResourceManager::releaseDisplayResource Leave");
503 CicoSCResourceManager::acquireSoundResource(resource_request_t *newreq)
505 ICO_DBG("CicoSCResourceManager::acquireSoundResource Enter");
507 CicoSCSystemConfig *sysConf = CicoSCSystemConfig::getInstance();
508 const CicoSCAppKindConf *appKindConf = NULL;
509 appKindConf = sysConf->findAppKindConfbyId(newreq->appkind);
510 if (NULL == appKindConf) {
511 ICO_ERR("not found CicoSCAppKindConf instance");
512 ICO_DBG("CicoSCResourceManager::acquireSoundResource Leave(false)");
516 if ((appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_ALMIGHTY) ||
517 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM) ||
518 (appKindConf->privilege == CicoSCAppKindConf::PRIVILEGE_SYSTEM_AUDIO)) {
520 delResourceRequest(newreq);
522 ICO_DBG("kind of system application");
523 ICO_DBG("CicoSCResourceManager::acquireSoundResource Leave(true)");
527 resource_request_t *req = popSoundResReq(newreq);
533 CompSoundResourceRequest comp(req);
534 if (true == comp(m_curSoundResReq[req->soundzoneid])) {
535 ICO_DBG("already acquired appid=%s pid=%d soundid=0x%08X",
536 req->appid, req->pid, req->soundid);
537 ICO_DBG("CicoSCResourceManager::acquireSoundResource Leave(true)");
539 delResourceRequest(newreq);
543 int type = req->resid & RESID_TYPE_MASK;
544 bool state = m_policyMgr->acquireSoundResource(type,
548 updateSoundResource(req);
551 ICO_DBG("Enqueue waiting sound request queue zone=%d req=0x%08x",
552 req->soundzoneid, req);
553 m_soundReqQueue[req->soundzoneid].push_front(req);
556 ICO_DBG("CicoSCResourceManager::acquireSoundResource Leave");
561 CicoSCResourceManager::releaseSoundResource(resource_request_t *newreq)
563 ICO_DBG("CicoSCResourceManager::releaseSoundResource Enter");
566 CompSoundResourceRequest comp(newreq);
567 for (int i = 0; i < (int)m_curSoundResReq.size(); ++i) {
568 if (NULL == m_curSoundResReq[i]) {
572 if (true == comp(m_curSoundResReq[i])) {
573 ico_syc_mrp_release_sound_resource(m_curSoundResReq[i]);
574 delResourceRequest(newreq);
575 delResourceRequest(m_curSoundResReq[i]);
576 m_curSoundResReq[i] = NULL;
582 // If current request is not changed,
583 // remove the request from the waiting queue.
584 if (false == curchg) {
585 resource_request_t *req = popSoundResReq(newreq);
587 ico_syc_mrp_release_sound_resource(req);
588 delResourceRequest(req);
591 delResourceRequest(newreq);
592 ICO_DBG("CicoSCResourceManager::releaseSoundResource Leave");
596 map<int, list<resource_request_t*> >::iterator itr;
597 itr = m_soundReqQueue.begin();
598 for (; itr != m_soundReqQueue.end(); ++itr) {
599 list<resource_request_t*>::iterator itr2;
600 itr2 = itr->second.begin();
601 for (; itr2 != itr->second.end(); ++itr2) {
602 int type = (*itr2)->resid & RESID_TYPE_MASK;
603 bool active = m_policyMgr->acquireSoundResource(type,
604 (*itr2)->soundzoneid,
606 if (true == active) {
607 resource_request_t* req = *itr2;
608 ICO_DBG("Dequeue waiting sound request queue "
609 "zone=%d req=0x%08x", itr->first, *itr2);
610 itr->second.erase(itr2);
611 updateSoundResource(req);
617 ICO_DBG("CicoSCResourceManager::releaseSoundResource Leave");
621 CicoSCResourceManager::acquireInputResource(resource_request_t *newreq)
623 ICO_DBG("CicoSCResourceManager::acquireInputResource Enter");
625 resource_request_t *req = popInputResReq(newreq);
631 CompInputResourceRequest comp(req);
632 if (true == comp(m_curInputResReq[req->input])) {
633 ICO_DBG("already acquired appid=%s pid=%d input=0x%08X",
634 req->appid, req->pid, req->input);
635 ICO_DBG("CicoSCResourceManager::acquireInputResource Leave(true)");
637 delResourceRequest(newreq);
641 bool state = m_policyMgr->acquireInputResource(req->input, req->prio);
643 updateInputResource(req);
646 ICO_DBG("Enqueue waiting input request queue input=%d req=0x%08x",
648 m_inputReqQueue[req->input].push_front(req);
651 ICO_DBG("CicoSCResourceManager::acquireInputResource Leave");
656 CicoSCResourceManager::releaseInputResource(resource_request_t *newreq)
659 CompInputResourceRequest comp(newreq);
660 for (int i = 0; i < (int)m_curInputResReq.size(); ++i) {
661 if (NULL == m_curInputResReq[i]) {
665 if (true == comp(m_curInputResReq[i])) {
666 if (NULL != m_inputCtrl) {
667 m_inputCtrl->delInputApp(m_curInputResReq[i]->appid,
668 m_curInputResReq[i]->device,
669 m_curInputResReq[i]->input);
671 delResourceRequest(newreq);
672 delResourceRequest(m_curInputResReq[i]);
673 m_curInputResReq[i] = NULL;
679 // If current request is not changed,
680 // remove the request from the waiting queue.
681 if (false == curchg) {
682 resource_request_t *req = popInputResReq(newreq);
684 delResourceRequest(req);
687 delResourceRequest(newreq);
688 ICO_DBG("CicoSCResourceManager::releaseInputResource Leave");
692 map<int, list<resource_request_t*> >::iterator itr;
693 itr = m_inputReqQueue.begin();
694 for (; itr != m_inputReqQueue.end(); ++itr) {
695 list<resource_request_t*>::iterator itr2;
696 itr2 = itr->second.begin();
697 for (; itr2 != itr->second.end(); ++itr2) {
698 bool active = m_policyMgr->acquireInputResource((*itr2)->input,
700 if (true == active) {
701 resource_request_t* req = *itr2;
702 ICO_DBG("Dequeue waiting input request queue "
703 "input=%d req=0x%08x", itr->first, *itr2);
704 itr->second.erase(itr2);
705 updateInputResource(req);
713 CicoSCResourceManager::newResourceRequest(int resid,
715 const CicoSCCommand &cmd)
717 ICO_DBG("CicoSCResourceManager::newResourceRequest Enter");
719 resource_request_t *req = NULL;
720 req = (resource_request_t*)calloc(1, sizeof(resource_request_t));
721 CicoSCCmdResCtrlOpt *opt = (CicoSCCmdResCtrlOpt*)cmd.opt;
722 CicoSCSystemConfig *systemConfig = CicoSCSystemConfig::getInstance();
724 req->reqtype = reqtype;
726 CicoSCLifeCycleController *lifeCycle =
727 CicoSCLifeCycleController::getInstance();
728 const CicoSCAilItems* ailItem = lifeCycle->findAIL(cmd.appid);
729 if (NULL != ailItem) {
730 req->category = ailItem->m_categoryID;
731 req->appkind = ailItem->m_kindID;
734 req->prio = req->category;
738 /* set resource id */
739 req->resid = RESID_TYPE_BASIC;
740 if (1 == opt->type) {
741 req->resid = RESID_TYPE_INTERRUPT;
745 req->resid |= RESID_CMD_RELEASE;
746 if (MSG_CMD_ACQUIRE_RES == cmd.cmdid) {
747 req->resid |= RESID_CMD_ACQUIRE;
750 /* set application information */
751 req->appid = strdup(cmd.appid.c_str());
753 req->state = RES_STATE_WAITING;
755 if (resid == RESID_KIND_DISPLAY) {
756 req->dispzone = strdup(opt->dispzone.c_str());
757 req->dispzoneid = systemConfig->getDizplayZoneIdbyFullName(req->dispzone);
758 req->winname = strdup(opt->winname.c_str());
759 req->surfaceid = opt->surfaceid;
760 req->id = opt->surfaceid;;
761 req->animation = strdup(opt->animation.c_str());
762 req->animationTime = opt->animationTime;
764 else if (resid == RESID_KIND_SOUND) {
765 req->soundzone = strdup(opt->soundzone.c_str());
766 req->soundzoneid = systemConfig->getSoundZoneIdbyFullName(req->soundzone);
767 ICO_DBG("req->soundzoneid=%d", req->soundzoneid);
768 req->soundname = strdup(opt->soundname.c_str());
769 req->soundid = opt->soundid;
770 req->soundadjust = opt->adjust;
771 req->id = opt->soundid;
773 else if (resid == RESID_KIND_INPUT) {
774 req->device = strdup(opt->device.c_str());
775 req->input = opt->input;
776 req->id = opt->input;
779 ICO_DBG("CicoSCResourceManager::newResourceRequest Leave");
784 CicoSCResourceManager::delResourceRequest(resource_request_t *req)
786 if (NULL == req) return;
788 if (NULL != req->appid) free(req->appid);
789 if (NULL != req->dispzone) free(req->dispzone);
790 if (NULL != req->winname) free(req->winname);
791 if (NULL != req->animation) free(req->animation);
792 if (NULL != req->soundzone) free(req->soundzone);
793 if (NULL != req->soundname) free(req->soundname);
794 if (NULL != req->device) free(req->device);
800 CicoSCResourceManager::enforceSound(unsigned short state,
801 resource_request_t *req,
804 ICO_DBG("CicoSCResourceManager::enforceSound Enter");
806 ICO_DBG("CicoSCResourceManager::enforceSound Leave");
809 // receive changed state
811 CicoSCResourceManager::receiveChangedState(int state)
813 ICO_DBG("CicoSCResourceManager::receiveChangedState Enter"
814 "(state=%d)", state);
816 if ((STID_DRVREGULATION_ON == state)||
817 (STID_DRVREGULATION_OFF == state)) {
819 updateDisplayResourceRegulation(state);
820 updateSoundResourceRegulation(state);
821 updateInputResourceRegulation(state);
824 for (int i = 0; i < (int)m_curDispResReq.size(); ++i) {
825 if (NULL == m_curDispResReq[i]) {
828 int type = m_curDispResReq[i]->resid & RESID_TYPE_MASK;
829 bool active = m_policyMgr->acquireDisplayResource(type,
830 m_curDispResReq[i]->dispzoneid,
831 m_curDispResReq[i]->prio);
832 if (false == active) {
833 if (NULL != m_winCtrl) {
834 // hide current window
835 m_winCtrl->hide(m_curDispResReq[i]->surfaceid, NULL, 0);
837 // state change to waiting
838 m_curDispResReq[i]->state = RES_STATE_WAITING;
840 ICO_DBG("Enqueue waiting display request queue "
841 "zone=%d req=0x%08x", i, m_curDispResReq[i]);
842 m_dispReqQueue[i].push_front(m_curDispResReq[i]);
843 // initialize current zone request
844 m_curDispResReq[i] = NULL;
849 if ((false == curchg) && (STID_DRVREGULATION_ON == state)) {
850 ICO_DBG("CicoSCResourceManager::receiveChangedState Leave");
854 map<int, list<resource_request_t*> >::iterator itr;
855 itr = m_dispReqQueue.begin();
856 for (; itr != m_dispReqQueue.end(); ++itr) {
857 list<resource_request_t*>::iterator itr2;
858 itr2 = itr->second.begin();
859 for (; itr2 != itr->second.end(); ++itr2) {
860 if (NULL != m_curDispResReq[itr->first]) {
863 int type = (*itr2)->resid & RESID_TYPE_MASK;
864 bool active = m_policyMgr->acquireDisplayResource(type,
867 if (true == active) {
868 resource_request_t* req = *itr2;
869 ICO_DBG("Dequeue waiting display request queue "
870 "zone=%d req=0x%08x", itr->first, *itr2);
871 itr->second.erase(itr2);
872 updateDisplayResource(req);
880 ICO_DBG("CicoSCResourceManager::receiveChangedState Leave");
884 CicoSCResourceManager::updateDisplayResource(resource_request_t *req)
886 ICO_DBG("CicoSCResourceManager::updateDisplayResource Enter"
887 "(req=0x%08x)", req);
888 for (int i = 0; i < (int)m_curDispResReq.size(); ++i) {
889 ICO_DBG("zoneid=%d active=%d current=0x%08x",
890 i, m_policyMgr->getDispZoneState(i), m_curDispResReq[i]);
892 if (NULL == m_curDispResReq[i]) {
896 if ((i == req->dispzoneid) ||
897 (false == m_policyMgr->getDispZoneState(i))) {
899 if (NULL != m_winCtrl) {
900 // hide current window
901 m_winCtrl->hide(m_curDispResReq[i]->surfaceid, NULL, 0);
903 // state change to waiting
904 m_curDispResReq[i]->state = RES_STATE_WAITING;
906 ICO_DBG("Enqueue waiting display request queue "
907 "zone=%d req=0x%08x", i, m_curDispResReq[i]);
908 m_dispReqQueue[i].push_front(m_curDispResReq[i]);
909 // initialize current zone request
910 m_curDispResReq[i] = NULL;
914 if (req != m_curDispResReq[req->dispzoneid]) {
915 if (NULL != m_winCtrl) {
916 // show request window
917 m_winCtrl->show(req->surfaceid, req->animation,req->animationTime);
919 // state change to acquired
920 req->state = RES_STATE_ACQUIRED;
921 // update current zone request
922 m_curDispResReq[req->dispzoneid] = req;
924 ICO_DBG("CicoSCResourceManager::updateDisplayResource Leave");
928 CicoSCResourceManager::updateSoundResource(resource_request_t *req)
930 ICO_DBG("CicoSCResourceManager::updateSoundResource Enter"
931 "(req=0x%08x)", req);
932 for (int i = 0; i < (int)m_curSoundResReq.size(); ++i) {
933 ICO_DBG("zoneid=%d active=%d current=0x%08x",
934 i, m_policyMgr->getSoundZoneState(i), m_curSoundResReq[i]);
936 if (NULL == m_curSoundResReq[i]) {
940 if ((i == req->soundzoneid) ||
941 (false == m_policyMgr->getSoundZoneState(i))) {
943 // state change to waiting
944 m_curSoundResReq[i]->state = RES_STATE_WAITING;
946 ICO_DBG("Enqueue waiting sound request queue "
947 "zone=%d req=0x%08x", i, m_curSoundResReq[i]);
948 m_soundReqQueue[i].push_front(m_curSoundResReq[i]);
949 // initialize current zone request
950 m_curSoundResReq[i] = NULL;
954 if (req != m_curSoundResReq[req->soundzoneid]) {
955 ico_syc_mrp_acquire_sound_resource(req);
956 ico_syc_mrp_active_app(req->appid);
958 // state change to acquired
959 req->state = RES_STATE_ACQUIRED;
960 // update current zone request
961 m_curSoundResReq[req->soundzoneid] = req;
963 ICO_DBG("CicoSCResourceManager::updateSoundResource Leave");
967 CicoSCResourceManager::updateInputResource(resource_request_t *req)
969 ICO_DBG("CicoSCResourceManager::updateInputResource Enter"
970 "(req=0x%08x)", req);
971 for (int i = 0; i < (int)m_curInputResReq.size(); ++i) {
972 ICO_DBG("input=%d active=%d current=0x%08x",
973 i, m_policyMgr->getInputState(i), m_curInputResReq[i]);
975 if (NULL == m_curInputResReq[i]) {
979 if ((i == req->input) ||
980 (false == m_policyMgr->getInputState(i))) {
982 if (NULL != m_inputCtrl) {
984 m_inputCtrl->delInputApp(req->appid, req->device, req->input);
987 // state change to waiting
988 m_curInputResReq[i]->state = RES_STATE_WAITING;
990 ICO_DBG("Enqueue waiting input request queue "
991 "zone=%d req=0x%08x", i, m_curInputResReq[i]);
992 m_inputReqQueue[i].push_front(m_curInputResReq[i]);
993 // initialize current zone request
994 m_curInputResReq[i] = NULL;
998 if (req != m_curInputResReq[req->input]) {
999 // delete input control
1000 m_inputCtrl->addInputApp(req->appid, req->device, req->input, 0, 0);
1001 // state change to acquired
1002 req->state = RES_STATE_ACQUIRED;
1003 // update current zone request
1004 m_curInputResReq[req->input] = req;
1006 ICO_DBG("CicoSCResourceManager::updateInputResource Leave");
1010 CicoSCResourceManager::updateDisplayResourceRegulation(int state)
1012 ICO_DBG("CicoSCResourceManager::updateDisplayResourceRegulation Enter"
1013 "(state=%d)", state);
1015 bool curchg = false;
1016 for (int i = 0; i < (int)m_curDispResReq.size(); ++i) {
1017 resource_request_t *current = m_curDispResReq[i];
1018 if (NULL == current) {
1022 int type = current->resid & RESID_TYPE_MASK;
1023 bool active = false;
1024 active = m_policyMgr->acquireDisplayResource(type,
1025 current->dispzoneid,
1027 if (false == active) {
1028 if (NULL != m_winCtrl) {
1029 // hide current window
1030 m_winCtrl->hide(current->surfaceid, NULL, 0);
1032 // state change to waiting
1033 current->state = RES_STATE_WAITING;
1035 ICO_DBG("Enqueue waiting display request queue "
1036 "zone=%d req=0x%08x", i, current);
1037 m_dispReqQueue[i].push_front(current);
1038 // initialize current zone request
1039 m_curDispResReq[i] = NULL;
1044 if ((false == curchg) && (STID_DRVREGULATION_ON == state)) {
1045 ICO_DBG("CicoSCResourceManager::updateDisplayResourceRegulation Leave");
1049 map<int, list<resource_request_t*> >::iterator itr;
1050 itr = m_dispReqQueue.begin();
1051 for (; itr != m_dispReqQueue.end(); ++itr) {
1052 if (NULL != m_curDispResReq[itr->first]) {
1056 list<resource_request_t*>::iterator itr2;
1057 itr2 = itr->second.begin();
1058 for (; itr2 != itr->second.end(); ++itr2) {
1059 int type = (*itr2)->resid & RESID_TYPE_MASK;
1060 bool active = false;
1061 active = m_policyMgr->acquireDisplayResource(type,
1062 (*itr2)->dispzoneid,
1064 if (true == active) {
1065 resource_request_t* req = *itr2;
1066 ICO_DBG("Dequeue waiting display request queue "
1067 "zone=%d req=0x%08x", itr->first, *itr2);
1068 itr->second.erase(itr2);
1069 updateDisplayResource(req);
1075 ICO_DBG("CicoSCResourceManager::updateDisplayResourceRegulation Leave");
1079 CicoSCResourceManager::updateSoundResourceRegulation(int state)
1081 ICO_DBG("CicoSCResourceManager::updateSoundResourceRegulation Enter"
1082 "(state=%d)", state);
1084 bool curchg = false;
1085 for (int i = 0; i < (int)m_curSoundResReq.size(); ++i) {
1086 resource_request_t *current = m_curSoundResReq[i];
1087 if (NULL == current) {
1091 int type = current->resid & RESID_TYPE_MASK;
1092 bool active = false;
1093 active = m_policyMgr->acquireSoundResource(type,
1094 current->soundzoneid,
1096 if (false == active) {
1097 // state change to waiting
1098 current->state = RES_STATE_WAITING;
1100 ICO_DBG("Enqueue waiting sound request queue "
1101 "zone=%d req=0x%08x", i, current);
1102 m_soundReqQueue[i].push_front(current);
1103 // initialize current zone request
1104 m_curSoundResReq[i] = NULL;
1109 if ((false == curchg) && (STID_DRVREGULATION_ON == state)) {
1110 ICO_DBG("CicoSCResourceManager::updateSoundResourceRegulation Leave");
1114 map<int, list<resource_request_t*> >::iterator itr;
1115 itr = m_soundReqQueue.begin();
1116 for (; itr != m_soundReqQueue.end(); ++itr) {
1117 if (NULL != m_curSoundResReq[itr->first]) {
1121 list<resource_request_t*>::iterator itr2;
1122 itr2 = itr->second.begin();
1123 for (; itr2 != itr->second.end(); ++itr2) {
1124 int type = (*itr2)->resid & RESID_TYPE_MASK;
1125 bool active = false;
1126 active = m_policyMgr->acquireSoundResource(type,
1127 (*itr2)->soundzoneid,
1129 if (true == active) {
1130 resource_request_t* req = *itr2;
1131 ICO_DBG("Dequeue waiting sound request queue "
1132 "zone=%d req=0x%08x", itr->first, *itr2);
1133 itr->second.erase(itr2);
1134 updateSoundResource(req);
1140 ICO_DBG("CicoSCResourceManager::updateSoundResourceRegulation Leave");
1144 CicoSCResourceManager::updateInputResourceRegulation(int state)
1146 ICO_DBG("CicoSCResourceManager::updateInputResourceRegulation Enter"
1147 "(state=%d)", state);
1149 bool curchg = false;
1150 for (int i = 0; i < (int)m_curInputResReq.size(); ++i) {
1151 resource_request_t *current = m_curInputResReq[i];
1152 if (NULL == current) {
1156 bool active = false;
1157 active = m_policyMgr->acquireInputResource(current->input,
1159 if (false == active) {
1160 if (NULL != m_inputCtrl) {
1161 // hide current window
1162 m_inputCtrl->delInputApp(current->appid,
1166 // state change to waiting
1167 current->state = RES_STATE_WAITING;
1169 ICO_DBG("Enqueue waiting input request queue "
1170 "zone=%d req=0x%08x", i, current);
1171 m_inputReqQueue[i].push_front(current);
1172 // initialize current zone request
1173 m_curInputResReq[i] = NULL;
1178 if ((false == curchg) && (STID_DRVREGULATION_ON == state)) {
1179 ICO_DBG("CicoSCResourceManager::updateInputResourceRegulation Leave");
1183 map<int, list<resource_request_t*> >::iterator itr;
1184 itr = m_inputReqQueue.begin();
1185 for (; itr != m_inputReqQueue.end(); ++itr) {
1186 if (NULL != m_curInputResReq[itr->first]) {
1190 list<resource_request_t*>::iterator itr2;
1191 itr2 = itr->second.begin();
1192 for (; itr2 != itr->second.end(); ++itr2) {
1193 bool active = false;
1194 active = m_policyMgr->acquireInputResource((*itr2)->input,
1196 if (true == active) {
1197 resource_request_t* req = *itr2;
1198 ICO_DBG("Dequeue waiting input request queue "
1199 "zone=%d req=0x%08x", itr->first, *itr2);
1200 itr->second.erase(itr2);
1201 updateInputResource(req);
1207 ICO_DBG("CicoSCResourceManager::updateDisplayResourceRegulation Leave");
1209 // vim:set expandtab ts=4 sw=4: