FreeCalypso > hg > fc-tourmaline
comparison src/ui/bmi/mmiBlkManager.c @ 3:67bfe9f274f6
src/ui: import of src/ui3 from Magnetite
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 16 Oct 2020 06:33:10 +0000 |
parents | |
children | c0052fe355d3 |
comparison
equal
deleted
inserted
replaced
2:3a14ee9a9843 | 3:67bfe9f274f6 |
---|---|
1 /******************************************************************************* | |
2 | |
3 CONDAT (UK) | |
4 | |
5 ******************************************************************************** | |
6 | |
7 This software product is the property of Condat (UK) Ltd and may not be | |
8 disclosed to any third party without the express permission of the owner. | |
9 | |
10 ******************************************************************************** | |
11 | |
12 $Project name: Basic MMI | |
13 $Project code: BMI (6349) | |
14 $Module: PhoneBook | |
15 $File: MmiBlkManager.c | |
16 $Revision: 1.0 | |
17 | |
18 $Author: Condat(UK) | |
19 $Date: 25/10/00 | |
20 | |
21 ******************************************************************************** | |
22 | |
23 Description: | |
24 | |
25 This module, in conjunction with the MmiBlkResources module, | |
26 provides the access to block resources for the MMI. | |
27 | |
28 The block manager is responsible for creating and initialising | |
29 the structures and tables to allow access to the strings, icons | |
30 sounds and vibrations required by the MMI. | |
31 | |
32 Each of these items is effectively a contiguous block of memory, | |
33 which is accessed via a block resource. Each of the block resources | |
34 are provided by this package | |
35 | |
36 ******************************************************************************** | |
37 | |
38 $History: MmiBlkManager.c | |
39 | |
40 25/10/00 Original Condat(UK) BMI version. | |
41 | |
42 $End | |
43 | |
44 *******************************************************************************/ | |
45 | |
46 | |
47 /******************************************************************************* | |
48 | |
49 Include Files | |
50 | |
51 *******************************************************************************/ | |
52 | |
53 #define ENTITY_MFW | |
54 | |
55 /* includes */ | |
56 #include <string.h> | |
57 #include <stdio.h> | |
58 #include <stdlib.h> | |
59 | |
60 #if defined (NEW_FRAME) | |
61 | |
62 #include "typedefs.h" | |
63 #include "vsi.h" | |
64 #include "pei.h" | |
65 #include "custom.h" | |
66 #include "gsm.h" | |
67 | |
68 #else | |
69 | |
70 #include "STDDEFS.H" | |
71 #include "custom.h" | |
72 #include "gsm.h" | |
73 #include "vsi.h" | |
74 | |
75 #endif | |
76 // #include <malloc.h> | |
77 | |
78 #include "MmiBlkManager.h" | |
79 | |
80 | |
81 /******************************************************************************* | |
82 | |
83 Local structures and definitions | |
84 | |
85 *******************************************************************************/ | |
86 | |
87 /* Define a type for the manager control block, this contains | |
88 an array identifying each of the resource manager handles | |
89 which are populated as part of the initialisation sequence | |
90 */ | |
91 #define BLOCK_MANAGER_KEY 0x00BABE01L | |
92 #define BLOCK_MANAGER_ENTRY_COUNT 0x00000010L | |
93 | |
94 typedef struct _tManagerEntry_ | |
95 { | |
96 tBlkId Id; | |
97 int NumEntries; | |
98 tBlkHandle EntryBase; | |
99 } tManagerEntry, *pManagerEntry; | |
100 | |
101 typedef struct _tManagerControl_ | |
102 { | |
103 long int BlkKey; | |
104 tBlkHandle BaseAddress; | |
105 int BlkLength; | |
106 tBlkHandle RsrcList[BLOCK_MANAGER_ENTRY_COUNT]; | |
107 pManagerEntry EntryPtr; | |
108 } tManagerControl, *pManagerControl; | |
109 | |
110 | |
111 /******************************************************************************* | |
112 | |
113 Local routines | |
114 | |
115 *******************************************************************************/ | |
116 | |
117 /******************************************************************************* | |
118 | |
119 $Function: ValidManagerResource | |
120 | |
121 $Description: Determines if the resource indicated by the handle is valid | |
122 | |
123 $Returns: Zero if failure, non-zero if valid resource | |
124 | |
125 $Arguments: ManagerRsrc, handle of resource manager | |
126 | |
127 *******************************************************************************/ | |
128 | |
129 static int ValidManagerResource( tBlkHandle ManagerRsrc ) | |
130 { | |
131 pManagerControl ManagerControl = (pManagerControl) ManagerRsrc; | |
132 | |
133 if ( ManagerControl == NULL ) | |
134 return 0; | |
135 | |
136 return ( ManagerControl->BlkKey == BLOCK_MANAGER_KEY ); | |
137 } | |
138 | |
139 | |
140 /******************************************************************************* | |
141 | |
142 Public routines | |
143 | |
144 *******************************************************************************/ | |
145 | |
146 | |
147 /******************************************************************************* | |
148 | |
149 $Function: mmibm_Initialise | |
150 | |
151 $Description: Initialise a block manager object | |
152 | |
153 $Returns: Handle of block manager object, NULL if failure | |
154 | |
155 $Arguments: BlkBase, base address of the block manager data | |
156 NumEntries, number of entries to be dealt with by the | |
157 block manager | |
158 | |
159 *******************************************************************************/ | |
160 | |
161 tBlkHandle mmibm_Initialise( tBlkHandle BlkBase, int NumEntries ) | |
162 { | |
163 pManagerControl MyControl; | |
164 tBlkId Entry; | |
165 int i; | |
166 | |
167 if ( ( MyControl = (pManagerControl) ALLOC_MEMORY( sizeof(tManagerControl) ) ) != NULL ) | |
168 { | |
169 /* Fill in the bits we know are pretty constant | |
170 */ | |
171 MyControl->BlkKey = BLOCK_MANAGER_KEY; | |
172 MyControl->BaseAddress = BlkBase; | |
173 MyControl->BlkLength = NumEntries; | |
174 MyControl->EntryPtr = (pManagerEntry) BlkBase; | |
175 | |
176 /* Initialise the handle array to empty initially | |
177 */ | |
178 for ( i = 0; i < BLOCK_MANAGER_ENTRY_COUNT; i++ ) | |
179 MyControl->RsrcList[i] = NULL; | |
180 | |
181 /* Now for each entry in the incoming block list we can create | |
182 a handler instance | |
183 */ | |
184 for ( i = 0; i < NumEntries; i++ ) | |
185 if ( ( Entry = MyControl->EntryPtr[i].Id ) < BLOCK_MANAGER_ENTRY_COUNT ) | |
186 MyControl->RsrcList[ Entry ] = mmibr_Initialise( | |
187 MyControl->EntryPtr[i].EntryBase, MyControl->EntryPtr[i].NumEntries ); | |
188 } | |
189 | |
190 return MyControl; | |
191 } | |
192 | |
193 | |
194 /******************************************************************************* | |
195 | |
196 $Function: mmibm_ShutDown | |
197 | |
198 $Description: Shutdown routine to deallocate resources ina controlled manner | |
199 | |
200 $Returns: none. | |
201 | |
202 $Arguments: *BlkHandle, pointer to resource manager handle | |
203 | |
204 *******************************************************************************/ | |
205 | |
206 void mmibm_ShutDown( tBlkHandle *BlkHandle ) | |
207 { | |
208 /* Convert and verify the incoming handle | |
209 */ | |
210 pManagerControl MyControl = (pManagerControl) *BlkHandle; | |
211 int i; | |
212 | |
213 if ( ValidManagerResource( *BlkHandle ) ) | |
214 { | |
215 /* Clear down the allocated resource managers | |
216 */ | |
217 for ( i = 0; i < BLOCK_MANAGER_ENTRY_COUNT; i++ ) | |
218 if ( MyControl->RsrcList[i] != NULL ) | |
219 mmibr_ShutDown( &MyControl->RsrcList[i] ); | |
220 | |
221 /* and free the resource manager handle | |
222 */ | |
223 free( *BlkHandle ); | |
224 *BlkHandle = NULL; | |
225 } | |
226 } | |
227 | |
228 | |
229 /******************************************************************************* | |
230 | |
231 $Function: mmibm_SupplyResourceHandler | |
232 | |
233 $Description: | |
234 | |
235 Since this module will be managing each of the block handlers | |
236 for each of the resources, we need to be able to supply the | |
237 appropriate handle for any given type to the calling routine. | |
238 | |
239 $Returns: Handle to requesteb block resource handler, NULL if failure | |
240 | |
241 $Arguments: ManagerHandle, handle of the block manager | |
242 Id, identifier of the resource table for which the resource | |
243 handler is required | |
244 | |
245 *******************************************************************************/ | |
246 | |
247 tBlkHandle mmibm_SupplyResourceHandler( tBlkHandle ManagerHandle, tBlkId Id ) | |
248 { | |
249 /* Convert and verify the incoming handle | |
250 */ | |
251 pManagerControl MyControl = (pManagerControl) ManagerHandle; | |
252 if ( ! ValidManagerResource( ManagerHandle ) ) | |
253 return NULL; | |
254 | |
255 /* Verify the id is within the range we expect | |
256 */ | |
257 if ( ( Id >= 0 ) && ( Id < BLOCK_MANAGER_ENTRY_COUNT ) ) | |
258 return MyControl->RsrcList[Id]; | |
259 | |
260 /* Okay, we have something invalid, so return NULL | |
261 */ | |
262 return NULL; | |
263 } | |
264 | |
265 | |
266 | |
267 /******************************************************************************* | |
268 | |
269 End of File | |
270 | |
271 *******************************************************************************/ | |
272 |