Bug Fix for : TIVI-1843, TIVI-1820, TIVI-1786.
[profile/ivi/ico-uxf-homescreen.git] / lib / system-controller / CicoSCResourceManager.h
1 /*
2  * Copyright (c) 2013, TOYOTA MOTOR CORPORATION.
3  *
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
7  *
8  */
9
10 //==========================================================================
11 /**
12  *  @file   CicoSCResourceManager.h
13  *
14  *  @brief  This file is definition of CicoSCResourceManager class
15  */
16 //==========================================================================
17 #ifndef __CICO_SC_RESOURCE_MANAGER_H__
18 #define __CICO_SC_RESOURCE_MANAGER_H__
19
20 #include <list>
21 #include <vector>
22 #include <map>
23 using namespace std;
24
25 #include "ico_syc_mrp_resource_private.h"
26
27 //==========================================================================
28 //  Forward declaration
29 //==========================================================================
30 class CicoSCCommand;
31 class CicoSCPolicyManager;
32 class CicoSCWindowController;
33 class CicoSCInputController;
34
35 //==========================================================================
36 /*
37  *  @brief  This class manages resources
38  */
39 //==========================================================================
40 class CicoSCResourceManager
41 {
42 public:
43     // default constructor
44     CicoSCResourceManager();
45
46     // destructor
47     ~CicoSCResourceManager();
48
49     // initialize resource manager
50     int initialize(void);
51
52     // terminate resource manager
53     void terminate(void);
54
55     // handling command
56     void handleCommand(const CicoSCCommand &cmd, bool internal=false);
57
58     // set CicoSCWindowController instance
59     void setWindowController(CicoSCWindowController *winCtrl);
60
61     // set CicoSCInputController instance
62     void setInputController(CicoSCInputController *inputCtrl);
63
64     // receive changed state
65     void receiveChangedState(int state);
66
67 private:
68     // assignment operator
69     CicoSCResourceManager& operator=(const CicoSCResourceManager &object);
70
71     // copy constructor
72     CicoSCResourceManager(const CicoSCResourceManager &object);
73
74     bool acquireDisplayResource(resource_request_t *newreq,
75                                 bool control = true);
76     void releaseDisplayResource(resource_request_t *newreq);
77
78     bool acquireSoundResource(resource_request_t *newreq);
79     void releaseSoundResource(resource_request_t *newreq);
80
81     bool acquireInputResource(resource_request_t *newreq);
82     void releaseInputResource(resource_request_t *newreq);
83
84     resource_request_t* newResourceRequest(int resid,
85                                            int reqtype,
86                                            const CicoSCCommand &cmd);
87
88     void delResourceRequest(resource_request_t *req);
89
90     static void enforceSound(unsigned short state,
91                              resource_request_t *req,
92                              void *user_data);
93
94     resource_request_t * popDispResReq(resource_request_t *req);
95
96     resource_request_t * popSoundResReq(resource_request_t *req);
97
98     resource_request_t * popInputResReq(resource_request_t *req);
99
100     void updateDisplayResource(resource_request_t *req, int chgzoneid=-1);
101     void updateSoundResource(resource_request_t *req);
102     void updateInputResource(resource_request_t *req);
103
104     void updateDisplayResourceRegulation(int state);
105     void updateSoundResourceRegulation(int state);
106     void updateInputResourceRegulation(int state);
107
108     resource_request_t * findCurDispResOwerReq(resource_request_t *req);
109     resource_request_t * popCurDispResOwerReq(resource_request_t *req);
110     void dumpCurDispResOwerReq(void);
111
112     resource_request_t * findWaitingDispResReq(resource_request_t *req);
113     resource_request_t * popWaitingDispResReq(resource_request_t *req);
114     void dumpWaitingDispResReq(void);
115
116 private:
117     CicoSCPolicyManager       *m_policyMgr;
118     CicoSCWindowController    *m_winCtrl;
119     CicoSCInputController     *m_inputCtrl;
120
121     // pair zoneid and request
122     std::map<unsigned int, resource_request_t*> m_curDispResOwerReq;
123     std::map<int, resource_request_t*> m_curSoundResReq;
124     std::map<int, resource_request_t*> m_curInputResReq;
125
126     std::list<resource_request_t*> m_waitingDispResReq;
127     map<int, list<resource_request_t*> > m_soundReqQueue;
128     map<int, list<resource_request_t*> > m_inputReqQueue;
129 };
130 #endif  // __CICO_SC_RESOURCE_MANAGER_H__
131 // vim:set expandtab ts=4 sw=4: