2 * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #ifndef _MTP_PROPERTY_H_
18 #define _MTP_PROPERTY_H_
25 #include "mtp_object.h"
27 #define MAX_SIZE_IN_BYTES_OF_PROP_VALUE 16000
28 #define ELEMENT_NOT_FOUND -1
29 #define INITIAL_ARRAY_SIZE 100
30 #define NUM_OBJECT_PROP_DESC 38
31 #define NUM_OBJECT_PROP_DESC_DEFAULT 13
32 #define NUM_OBJECT_PROP_DESC_MP3 14
33 #define NUM_OBJECT_PROP_DESC_WMA 14
34 #define MTP_HEAP_CAL_INTERVAL 100
36 #ifdef MTP_SUPPORT_PROPERTY_SAMPLE
37 #define NUM_OBJECT_PROP_DESC_WMV 28
38 #else /* MTP_SUPPORT_PROPERTY_SAMPLE */
39 #define NUM_OBJECT_PROP_DESC_WMV 22
40 #endif /* MTP_SUPPORT_PROPERTY_SAMPLE */
42 #ifdef MTP_SUPPORT_PROPERTY_SAMPLE
43 #define NUM_OBJECT_PROP_DESC_ALBUM 8
44 #else /* MTP_SUPPORT_PROPERTY_SAMPLE */
45 #define NUM_OBJECT_PROP_DESC_ALBUM 2
46 #endif /* MTP_SUPPORT_PROPERTY_SAMPLE */
48 typedef struct _interdep_prop_config {
49 mtp_uint32 format_code;
50 slist_t propdesc_list;
51 } interdep_prop_config_t;
54 * brief The property form flag.
55 * This enumerated type defines what kind of data the structure contains.
61 DATE_TIME_FORM = 0x03,
62 REGULAR_EXPRESSION_FORM = 0x04,
63 BYTE_ARRAY_FORM = 0x05,
64 LONG_STRING_FORM = 0xFF,
68 GROUP_CODE_NONE = 0x00000000,
69 GROUP_CODE_SYNC_PROPS = 0x00000001,
70 GROUP_CODE_UI_PROPS = 0x00000002,
71 GROUP_CODE_OBJ_Info = 0x00000004,
72 GROUP_CODE_OFTEN_USED = 0x00000008,
73 GROUP_CODE_SUPPLEMENTAL = 0x00000100,
74 GROUP_CODE_UNKNOWN_PROP = 0x00010000,
75 GROUP_CODE_SLOW = 0x00FF0000,
76 GROUP_CODE_ALL = 0xFFFFFFFF
79 #define MTP_PROP_GROUPCODE_GENERAL GROUP_CODE_OFTEN_USED
80 #define MTP_PROP_GROUPCODE_OBJECT GROUP_CODE_OFTEN_USED
81 #define MTP_PROP_GROUPCODE_ALBUMART GROUP_CODE_OFTEN_USED
83 #define node_alloc_and_append()\
86 ret = _util_add_node(&(obj->propval_list), (void *)prop_val);\
88 _prop_destroy_obj_propval(prop_val);\
89 ERR("_util_add_node() Fail");\
94 #define propvalue_alloc_and_check(prop_val)\
96 prop_val = _prop_alloc_obj_propval(prop);\
97 if (prop_val == NULL) {\
98 ERR("prop_val == NULL");\
103 #define init_default_value(value)\
105 memset(&default_val, 0, sizeof(default_val));\
106 default_val = value;\
110 mtp_uint32 min_val; /* Minimum value */
111 mtp_uint32 max_val; /* Maximum value */
112 mtp_uint32 step_size; /* Step value */
115 /* This structure contains property info */
117 mtp_uint16 prop_code; /* Property code */
118 mtp_uint16 data_type; /* type of the data */
119 mtp_uint32 dts_size; /* Count of Byte Size of the
120 Data-Type-Specific value (DTS) */
121 mtp_uchar get_set; /* Set possible or not */
122 mtp_uchar form_flag; /* Indicates the form of the valid values */
123 range_form_t range; /* Range Values */
124 slist_t supp_value_list; /*Enum Values */
126 mtp_uchar integer[16]; /* Default value for any integer value
127 type (UINT8, mtp_uint16, mtp_uint32) */
128 ptp_string_t *str; /* Default value for String type */
129 ptp_array_t *array; /* Default array */
130 } default_val; /* Default value */
133 /* This structure contains device property description dataset */
135 prop_info_t propinfo;
137 mtp_uchar integer[16]; /* Current value for any integer value
138 type (UINT8, mtp_uint16, mtp_uint32) */
139 ptp_string_t *str; /* Current value for String type */
140 ptp_array_t *array; /* Current value for array data type
142 } current_val; /*Current value */
143 } device_prop_desc_t;
145 /* This structure contains object property description dataset */
147 prop_info_t propinfo;
148 mtp_uint32 group_code; /* Identifies the group of this property */
150 ptp_string_t *reg_exp; /* Regular Expression Form */
151 mtp_uint32 max_len; /* LongString Form */
152 } prop_forms; /*Object property-specific forms */
155 /* This structure contains current value of a object property */
157 obj_prop_desc_t *prop;
159 mtp_uchar integer[16]; /* Current value for any integer */
160 ptp_string_t *str; /* Current value for String type */
165 /* This structure defines ObjectPropQuad for GetObjectPropList */
167 mtp_uint32 obj_handle;
168 mtp_uint16 prop_code;
169 mtp_uint16 data_type;
171 mtp_uint32 val_size; /* a useful helper,
172 not part of the Object Property Quadruple */
175 /* This structure contains a list of MTP Object properties */
177 slist_t prop_quad_list;
180 /* This structure contains a list of InterdependentProperties */
183 } obj_interdep_proplist_t ;
188 void _prop_init_ptparray(ptp_array_t *parray, data_type_t type);
189 ptp_array_t *_prop_alloc_ptparray(data_type_t type);
190 mtp_uint32 _prop_get_size_ptparray(ptp_array_t *parray);
191 mtp_uint32 _prop_get_size_ptparray_without_elemsize(ptp_array_t *parray);
192 mtp_bool _prop_grow_ptparray(ptp_array_t *parray, mtp_uint32 new_size);
193 mtp_int32 _prop_find_ele_ptparray(ptp_array_t *parray, mtp_uint32 element);
194 mtp_bool _prop_get_ele_ptparray(ptp_array_t *parray, mtp_uint32 index, void *ele);
195 mtp_bool _prop_append_ele_ptparray(ptp_array_t *parray, mtp_uint32 element);
196 mtp_bool _prop_append_ele128_ptparray(ptp_array_t *parray, mtp_uint64 *element);
197 mtp_bool _prop_copy_ptparray(ptp_array_t *dst, ptp_array_t *src);
198 mtp_uint32 _prop_pack_ptparray(ptp_array_t *parray, mtp_uchar *buf,
200 mtp_uint32 _prop_pack_ptparray_without_elemsize(ptp_array_t *parray,
201 mtp_uchar *buf, mtp_uint32 bufsize);
202 mtp_bool _prop_rem_elem_ptparray(ptp_array_t *parray, mtp_uint32 element);
203 void _prop_deinit_ptparray(ptp_array_t *parray);
204 void _prop_destroy_ptparray(ptp_array_t *parray);
207 * PtpString Functions
209 void _prop_init_ptpstring(ptp_string_t *pstring);
210 void _prop_init_ptptimestring(ptp_time_string_t *pstring);
211 void _prop_copy_time_to_ptptimestring(ptp_time_string_t *pString,
212 system_time_t *sys_time);
213 void _prop_copy_ptpstring(ptp_string_t *dst, ptp_string_t *src);
214 void _prop_copy_ptptimestring(ptp_time_string_t *dst, ptp_time_string_t *src);
215 void _prop_copy_char_to_ptpstring(ptp_string_t *pstring, void *str,
217 mtp_uint32 _prop_size_ptpstring(ptp_string_t *pstring);
218 mtp_uint32 _prop_size_ptptimestring(ptp_time_string_t *pstring);
219 mtp_uint32 _prop_pack_ptpstring(ptp_string_t *pstring, mtp_uchar *buf,
221 mtp_uint32 _prop_pack_ptptimestring(ptp_time_string_t *pstring, mtp_uchar *buf,
223 mtp_uint32 _prop_parse_rawstring(ptp_string_t *pstring, mtp_uchar *buf,
225 void _prop_destroy_ptpstring(ptp_string_t *pstring);
228 * DevicePropDesc Functions
230 void _prop_init_device_property_desc(device_prop_desc_t *prop,
231 mtp_uint16 propcode, mtp_uint16 data_type, mtp_uchar get_set,
232 mtp_uchar form_flag);
233 mtp_uint32 _prop_size_device_prop_desc(device_prop_desc_t *prop);
234 mtp_uint32 _prop_pack_device_prop_desc(device_prop_desc_t *prop,
235 mtp_uchar *buf, mtp_uint32 size);
236 mtp_uint32 _prop_pack_curval_device_prop_desc(device_prop_desc_t *prop,
237 mtp_uchar *buf, mtp_uint32 size);
238 void _prop_reset_device_prop_desc(device_prop_desc_t *prop);
241 * ObjectPropVal Functions
243 obj_prop_val_t *_prop_alloc_obj_propval(obj_prop_desc_t *prop);
244 obj_prop_val_t *_prop_get_prop_val(mtp_obj_t *obj, mtp_uint32 prop_code);
245 mtp_uint32 _prop_pack_obj_propval(obj_prop_val_t *val, mtp_uchar *buf,
247 mtp_uint32 _prop_size_obj_propval(obj_prop_val_t *val);
248 void _prop_destroy_obj_propval(obj_prop_val_t *pval);
249 mtp_bool _prop_set_default_integer(prop_info_t *prop_info, mtp_uchar *value);
250 mtp_bool _prop_set_default_string(prop_info_t *prop_info, mtp_wchar *val);
251 mtp_bool _prop_set_range_integer(prop_info_t *prop_info, mtp_uint32 min,
252 mtp_uint32 max, mtp_uint32 step);
253 mtp_bool _prop_set_maxlen(obj_prop_desc_t *prop, mtp_uint32 max);
254 mtp_bool _prop_set_default_array(prop_info_t *prop_info, mtp_uchar *parray,
256 mtp_bool _prop_add_supp_integer_val(prop_info_t *prop_info, mtp_uint32 val);
257 mtp_bool _prop_add_supp_string_val(prop_info_t *prop_info, mtp_wchar *val);
258 mtp_bool _prop_is_valid_integer(prop_info_t *prop_info, mtp_uint64 value);
259 mtp_bool _prop_is_valid_string(prop_info_t *prop, ptp_string_t *str);
260 mtp_bool _prop_is_equal_ptpstring(ptp_string_t *dst, ptp_string_t *src);
261 mtp_bool _prop_set_current_integer(device_prop_desc_t *prop, mtp_uint32 val);
262 mtp_bool _prop_set_current_string(device_prop_desc_t *prop, ptp_string_t *str);
263 mtp_bool _prop_set_current_array(device_prop_desc_t *prop, mtp_uchar *arr);
264 mtp_bool _prop_set_current_device_prop(device_prop_desc_t *prop, mtp_uchar *val,
266 mtp_bool _prop_set_current_integer_val(obj_prop_val_t *propval, mtp_uint64 val);
267 mtp_bool _prop_set_current_string_val(obj_prop_val_t *propval, ptp_string_t *str);
268 mtp_bool _prop_set_current_array_val(obj_prop_val_t *propval, mtp_uchar *arr,
270 #ifdef __BIG_ENDIAN__
271 mtp_bool _prop_set_current_array_val_usbrawdata(obj_prop_val_t *val,
272 mtp_uchar *arr, mtp_uint32 size);
273 #endif /* __BIG_ENDIAN__ */
274 mtp_bool _prop_set_regexp(obj_prop_desc_t *prop, mtp_wchar *regex);
277 * ObjectPropDesc Functions
279 mtp_uint32 _prop_size_obj_prop_desc(obj_prop_desc_t *prop);
280 mtp_uint32 _prop_pack_obj_prop_desc(obj_prop_desc_t *prop, mtp_uchar *buf,
282 mtp_uint32 _prop_pack_default_val_obj_prop_desc(obj_prop_desc_t *prop,
283 mtp_uchar *buf, mtp_uint32 size);
284 obj_prop_desc_t *_prop_get_obj_prop_desc(mtp_uint32 format_code,
285 mtp_uint32 prop_code);
288 * ObjectProplist Functions
290 mtp_bool _prop_update_property_values_list(mtp_obj_t *obj);
291 mtp_uint32 _prop_size_obj_proplist(obj_proplist_t *prop_list);
292 mtp_uint32 _prop_get_obj_proplist(mtp_obj_t *pObject, mtp_uint32 prop_code,
293 mtp_uint32 group_code, obj_proplist_t *prop_list);
294 mtp_uint32 _prop_pack_obj_proplist(obj_proplist_t *prop_list, mtp_uchar *buf,
296 void _prop_destroy_obj_proplist(obj_proplist_t *prop_list);
299 * ObjectProp Functions
301 mtp_uint32 _prop_get_supp_obj_props(mtp_uint32 format_code,
302 ptp_array_t *supp_props);
303 mtp_bool _prop_build_supp_props_mp3(void);
304 mtp_bool _prop_build_supp_props_wma(void);
305 mtp_bool _prop_build_supp_props_wmv(void);
306 mtp_bool _prop_build_supp_props_album(void);
307 mtp_bool _prop_build_supp_props_default(void);
308 void _prop_destroy_supp_obj_props(void);
311 *Interdependent Prop Functions
313 mtp_uint32 _prop_get_size_interdep_prop(interdep_prop_config_t *prop);
314 mtp_uint32 _prop_pack_interdep_prop(interdep_prop_config_t *prop, mtp_uchar *buf,
316 mtp_uint32 _prop_get_size_interdep_proplist(obj_interdep_proplist_t *config_list,
317 mtp_uint32 format_code);
318 mtp_uint32 _prop_pack_interdep_proplist(obj_interdep_proplist_t *config_list,
319 mtp_uint32 format_code, mtp_uchar *buf, mtp_uint32 size);
320 mtp_bool _get_oma_drm_status(void);
326 #endif /* _MTP_PROPERTY_H_ */