vmresmng.h
10.6 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
#ifndef _VM_RES_MNG_
#define _VM_RES_MNG_
#include "vmswitch.h"
#ifdef __MRE_CORE_RESOURCE_MANAGE__
#include "vmsys.h"
#include "vmpromng.h"
typedef void (*vm_res_release_callback_t)(VM_P_HANDLE process_handle, VMINT sys_state);
typedef struct vm_res_node_t {
VM_P_HANDLE phandle; /*资源所处的进程句柄*/
VMINT res_id; /*资源句柄*/
void* res_callback; /*资源的回调函数指针*/
VMINT mtk_res_id; /*和资源对应的mtk资源句柄*/
void* data_content; /*资源相关数据块首地址指针*/
VMINT data_size; /*资源相关数据块大小*/
VMINT state; /*资源有关的一些状态。*/
/*(此状态不是资源占用情况,只是方便用户自己记录资源的一些使用情况。由用户自己定义使用。)*/
} vm_res_node_t ;
/**
* 进程资源分为2种模式,一种是独占资源,另一种为非独占资源。
* 每一种独占资源的包含1个handle,非独占式的handle的数量由系统决定
* 每一个资源的handle有3个属性:状态,归属进程及设置的资源。
*/
typedef enum{
VM_RES_TYPE_START = 0,
VM_RES_TYPE_FILE ,
VM_RES_TYPE_FILE_FIND,
VM_RES_TYPE_TIMER,
VM_RES_TYPE_TIMER_EX,
VM_RES_TYPE_SMS_HANDLE,
VM_RES_TYPE_MMS_HANDLE,
VM_RES_TYPE_MMS_INTERRUPT,
VM_RES_TYPE_CAMERA,
VM_RES_TYPE_CALLOUT,
VM_RES_TYPE_IVR,
VM_RES_TYPE_PHONE_BOOK,
VM_RES_TYPE_INPUT_SYS,
VM_RES_TYPE_INPUT_KEY,
VM_RES_TYPE_INPUT_PEN,
VM_RES_TYPE_IME,
VM_RES_TYPE_TCP_HANDLE,
VM_RES_TYPE_HTTP_HANDLE,
VM_RES_TYPE_WPS_HANDLE,
VM_RES_TYPE_PROCESS_PARAM,
VM_RES_TYPE_VIDEO_HANDLE,
VM_RES_TYPE_AUDIO_HANDLE,
VM_RES_TYPE_AUDIO_BIT_HANDLE,
VM_RES_TYPE_MIDI_HANDLE,
VM_RES_TYPE_RECORD_HANDLE,
VM_RES_TYPE_GPS,
VM_RES_TYPE_CELL,
VM_RES_TYPE_LAYER_HANDLE,
VM_RES_TYPE_GRAPHIC_CXT,
VM_RES_TYPE_STATUS_BAR,
VM_RES_TYPE_PAYMENT,
VM_RES_TYPE_MD5,
VM_RES_TYPE_SHA1,
VM_RES_TYPE_SENSOR,
VM_RES_TYPE_EBOOK,
VM_RES_TYPE_SMS_INTERRUPT,
VM_RES_TYPE_SMS_INTERRUPT_EX,
VM_RES_TYPE_DAEMON,
VM_RES_TYPE_DLA,
VM_RES_TYPE_VRT,
VM_RES_TYPE_FONT,
VM_RES_TYPE_VENUS_IME,
VM_RES_TYPE_VFX,
VM_RES_TYPE_SELECTOR,
VM_RES_TYPE_WLAN_LOC,
VM_RES_TYPE_BTCM,
VM_RES_TYPE_BTSPP,
VM_RES_TYPE_PRELOAD,
VM_RES_TYPE_UDP_HANDLE,
VM_RES_TYPE_MULTI_TOUCH,
VM_RES_TYPE_FS_ASYNC,
VM_RES_TYPE_APPMGR,
VM_RES_TYPE_DA,
VM_RES_TYPE_GET_SERVICE,
VM_RES_TYPE_ALARM,
VM_RES_TYPE_AUDIO_INTERRUPT,
VM_RES_TYPE_FOLDER_BROWSER,
VM_RES_TYPE_TLS,
VM_RES_TYPE_COMMON_UI,
VM_RES_TYPE_FOLDER_SELECTOR,
VM_RES_TYPE_SSL,
VM_RES_TYPE_TOTAL
} vm_res_type_enum;
#define VM_RES_TYPE_MEMORY 200
#define VM_RES_TYPE_APP_NAME 2010
#define VM_RES_APP_ID_TOTAL 2011
#define VM_RES_VALUE_NOT_AVAILABLE -1
#define VM_RES_MONITOR_LOG_INTERVAL 50
typedef struct vm_res_monitor_init_struct
{
VM_P_HANDLE p_handle; //process handle needed to init in resource monitor
VMINT res_type; //next resource type;
struct vm_res_monitor_init_struct * next_app; //next process node
}vm_res_monitor_init_struct;
typedef enum{
VM_RES_ATTRIBUTE_CONCURRENT = 0,
VM_RES_ATTRIBUTE_EXCLUSIVE,
VM_RES_ATTRIBUTE_TOTAL
} vm_res_attribute_enum;
typedef enum{
VM_RES_STATE_USED = 0,
VM_RES_STATE_IDLE,
VM_RES_STATE_TOTAL
} vm_res_state_enum;
typedef enum{
//vm_res_find
VM_RES_NOT_FIND = -9,
//vm_res_init
VM_RES_INIT_FAIL,
//vm_res_save_data & vm_res_get_data
VM_RES_INVALID_TYPE,
VM_RES_INVALID_DATA,
VM_RES_OUT_OF_RESOURCE,
VM_RES_INVALID_BUFFER,
VM_RES_INSUFFICIENT_BUFFER,
VM_RES_INVALID_HANDLE,
VM_RES_INTERNAL_ERROR,
VM_RES_OK
} vm_res_retcode_enum;
/**
* 初始化内核资源管理模块。
*
* @param
*
* @return 如果证书系统初始化成功,返回值为0,失败返回错误码。
*/
VMINT vm_res_initialize( void );
/**
* 结束内核资源管理模块。
*
* @param
*
* @return
*/
void vm_res_finialize( void );
/**
* 保存资源。
*
* @param data_type 资源类型。
* @param data_content 与资源类型对应的资源内容。
* @param process_handle 归属进程ID,VM_PMNG_CUR_HANDLE 表示当前进程ID。。
*
* @return 存储资源的句柄(非负值),如果资源存储失败,返回错误码。
*/
VMINT vm_res_save_data( VMINT data_type, void * data_content, VMINT data_size, void* callback, VM_P_HANDLE process_handle );
/**
* 向资源列表注册mtk资源句柄,形成mre资源句柄和mtk资源句柄映射关系。
* 如果该资源没有mtk资源句柄,可不使用。
*
* @param data_type 资源类型。
* @param data_handle 资源的存储句柄。
* @param reshandle mtk资源句柄。
*
* @return 获取资源成功返回0,否则返回负数的错误码。
*/
VMINT vm_res_set_mtk_reshandle(VMINT data_type, VMINT data_handle, VMINT mtk_res_handle);
/**
* 获取对应的mtk资源句柄。
*
* @param data_type 资源类型。
* @param data_handle 资源的存储句柄。
* @param reshandle mtk资源句柄。
*
* @return 获取资源成功返回0,否则返回负数的错误码。
*/
VMINT vm_res_get_mtk_reshandle(VMINT data_type, VMINT data_handle, VMINT * mtk_res_handle);
/**
* 设置资源数据。
*
* @param data_type 资源类型。
* @param data_handle 资源的存储句柄。
* @param data_buffer 接受资源数据的缓存。
* @param data_size 资源缓存数据的大小。
*
* @return 获取资源成功返回0,否则返回负数的错误码。
*/
VMINT vm_res_set_data( VMINT data_type, VMINT data_handle, void * data_buffer, VMINT buffer_size );
/**
* 获取资源数据。
*
* @param data_type 资源类型。
* @param data_handle 资源的存储句柄。
* @param data_buffer 接受资源数据的缓存。
* @param data_size 资源缓存数据的大小()。
*
* @return 获取资源成功返回0,否则返回负数的错误码。
*/
VMINT vm_res_get_data( VMINT data_type, VMINT data_handle, void ** data_buffer, VMINT * buffer_size );
/**
* 设置回调。
*
* @param data_type 资源类型。
* @param data_handle 资源的存储句柄。
* @param callback 资源回调函数(此资源回调为app调用某接口所注册的回调),可为空。
*
* @return 获取资源成功返回0,否则返回负数的错误码。
*/
VMINT vm_res_set_callback( VMINT data_type, VMINT data_handle, void* callback );
/**
* 获取回调。
*
* @param data_type 资源类型。
* @param data_handle 资源的存储句柄。
* @param callback 资源回调函数(此资源回调为app调用某接口所注册的回调),可为空。
*
* @return 获取资源成功返回0,否则返回负数的错误码。
*/
VMINT vm_res_get_callback( VMINT data_type, VMINT data_handle, void** callback );
/**
* 获取资源对应的进程句柄。
*
* @param data_type 资源类型。
* @param data_handle 资源资源句柄。
*
* @return 成功返回进程句柄,否则返回负数。
*/
VM_P_HANDLE vm_res_get_process_handle( VMINT data_type, VMINT data_handle );
/**
* 释放资源。
*
* @param data_type 资源类型。
* @param data_handle 资源的存储句柄。
*
* @return 释放资源时,同时释放资源handle
*/
VMINT vm_res_release_data( VMINT data_type, VMINT data_handle );
/**
* 查询资源类型的属性。
*
* @param data_type 资源类型。
*
* @return 获取资源类型的属性,独占式或非独占式。
*/
VMINT vm_res_type_attribute( VMINT data_type );
/**
* 查询资源类型的容量。
*
* @param data_type 资源类型。
*
* @return 获取资源类型的容量。
*/
VMINT vm_res_type_max_handle( VMINT data_type );
/**
* 注册通知关闭资源回调函数指针。
*
*
* @param data_type 资源类型。
* @param release_function_ptr 关闭资源回调函数指针。
*
* @return 成功返回0,否则返回负数的错误码。
*
*/
VMINT vm_res_type_set_notify_callback(VMINT data_type, vm_res_release_callback_t notify_function_ptr);
/**
* 获取关闭资源回调函数指针
*
* @param data_type 资源类型。
*
* @return 成功返回资源回调函数指针,否则返回NULL。
*/
vm_res_release_callback_t vm_res_type_get_notify_callback(VMINT data_type);
/**
* 查询资源类型的可用数量(还未使用)。
*
* @param data_type 资源类型。
*
* @return 获取资源类型的可用数量(还未使用)。
*/
VMINT vm_res_type_avaliable_handle( VMINT data_type, VM_P_HANDLE process_handle);
/**
* 查询资源的状态,此状态由用户自己定义和使用。和资源本身占用情况无关。
*
*
* @param data_type 资源类型。
* @param data_handle 资源句柄。
*
* @return 资源的状态。
*/
VMINT vm_res_get_handle_state( VMINT data_type, VMINT data_handle );
/**
* 设置资源的状态,此状态由用户自己定义和使用。和资源本身占用情况无关。
*
* @param data_type 资源类型。
* @param data_handle 资源句柄。
* @param data_state 资源的状态。
*
* @return 设置成功返回0,失败返回负数的错误码。
*/
VMINT vm_res_set_handle_state( VMINT data_type, VMINT data_handle, VMINT data_state );
/**
* 获取进程已经占用资源的数量。
*
* @param process_handle 进程句柄。
* @param data_type 资源类型。类型说明请参照vm_res_type_enum。
* 如果需要获取所有类型资源,请输入VM_RES_TYPE_TOTAL。
*
* @return 进程已经占用资源的数量
*/
VMINT vm_res_get_data_list_count_by_proecss(VM_P_HANDLE process_handle, VMINT data_type);
/**
* 获取进程已经占用资源列表
*
* @param process_handle 进程句柄。
* @param data_type 资源类型。类型说明请参照vm_res_type_enum。
* 如果需要获取所有类型资源,请输入VM_RES_TYPE_TOTAL。
* @param data_list 资源列表数组首地址。(该列表空间由用户申请)
* @param data_list_count 资源列表数组的长度。
*
* @return 进程已经占用资源的数量
*/
VMINT vm_res_get_data_list_by_proecss(VM_P_HANDLE process_handle, VMINT data_type, vm_res_node_t* data_list, VMINT data_list_count);
/**
* 获取指定资源类型已经占用资源的数量。
*
* @param data_type 资源类型。类型说明请参照vm_res_type_enum。
* 取值范围小于VM_RES_TYPE_TOTAL。
*
* @return 进程已经占用资源的数量
*/
VMINT vm_res_get_data_list_count_by_type(VMINT data_type);
/**
* 获取指定资源类型已经占用资源列表
*
* @param data_type 资源类型。类型说明请参照vm_res_type_enum。
* 取值范围小于VM_RES_TYPE_TOTAL。
* @param data_list 资源列表数组首地址。(该列表空间由用户申请)
* @param data_list_count 资源列表数组的长度。
*
* @return 进程已经占用资源的数量
*/
VMINT vm_res_get_data_list_by_type(VMINT data_type, vm_res_node_t* data_list, VMINT data_list_count);
/**
* 系统通知资源管理做退出保护
*/
VMINT vm_res_notify_data_by_process(VM_P_HANDLE process_handle, VMINT process_state);
/**
* vm_res_findfirst, vm_res_findnext, vm_res_close三个函数提供一组资源查找的方法。
* @param process_handle 检索和该进程相关的资源(如果为-1,说明检索该类所有资源)。
* @param data_type 资源类型。
*
* @return 检索成功返回资源的句柄,失败返回VM_RES_NOT_FIND。
*
* 注如果该资源发生变化,例如增加删减,请重新findfirst。
*
* vm_res_findfirst使用例程
* VMINT i;
* i = vm_res_findfirst(phandle, VM_RES_TYPE_TIMER);
* vm_log_debug("vm_timer_proc : vm_res_findfirst timerid=%d", i);
* while ( i != VM_RES_NOT_FIND)
* {
* i = vm_res_findnext(phandle, VM_RES_TYPE_TIMER);
* vm_log_debug("vm_timer_proc : vm_res_findnext timerid=%d", i);
* }
* vm_res_findclose(VM_RES_TYPE_TIMER);
*
*/
VMINT vm_res_findfirst(VM_P_HANDLE process_handle, VMINT data_type);
VMINT vm_res_findnext(VM_P_HANDLE process_handle, VMINT data_type);
void vm_res_findclose(VMINT data_type);
void vm_print_res_table(VMINT type);
void vm_res_print_monitor_log(VM_P_HANDLE p, VMINT res_type);
#endif
#endif