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_
21 #include "mtp_object.h"
23 #define MAX_SIZE_IN_BYTES_OF_PROP_VALUE 16000
24 #define ELEMENT_NOT_FOUND -1
25 #define INITIAL_ARRAY_SIZE 100
26 #define NUM_OBJECT_PROP_DESC 38
27 #define NUM_OBJECT_PROP_DESC_DEFAULT 13
28 #define NUM_OBJECT_PROP_DESC_MP3 14
29 #define NUM_OBJECT_PROP_DESC_WMA 14
30 #define MTP_HEAP_CAL_INTERVAL 100
32 #ifdef MTP_SUPPORT_PROPERTY_SAMPLE
33 #define NUM_OBJECT_PROP_DESC_WMV 28
34 #else /* MTP_SUPPORT_PROPERTY_SAMPLE */
35 #define NUM_OBJECT_PROP_DESC_WMV 22
36 #endif /* MTP_SUPPORT_PROPERTY_SAMPLE */
38 #ifdef MTP_SUPPORT_PROPERTY_SAMPLE
39 #define NUM_OBJECT_PROP_DESC_ALBUM 8
40 #else /* MTP_SUPPORT_PROPERTY_SAMPLE */
41 #define NUM_OBJECT_PROP_DESC_ALBUM 2
42 #endif /* MTP_SUPPORT_PROPERTY_SAMPLE */
44 typedef struct _interdep_prop_config {
45 mtp_uint32 format_code;
46 slist_t propdesc_list;
47 } interdep_prop_config_t;
50 * brief The property form flag.
51 * This enumerated type defines what kind of data the structure contains.
57 DATE_TIME_FORM = 0x03,
58 REGULAR_EXPRESSION_FORM = 0x04,
59 BYTE_ARRAY_FORM = 0x05,
60 LONG_STRING_FORM = 0xFF,
64 GROUP_CODE_NONE = 0x00000000,
65 GROUP_CODE_SYNC_PROPS = 0x00000001,
66 GROUP_CODE_UI_PROPS = 0x00000002,
67 GROUP_CODE_OBJ_Info = 0x00000004,
68 GROUP_CODE_OFTEN_USED = 0x00000008,
69 GROUP_CODE_SUPPLEMENTAL = 0x00000100,
70 GROUP_CODE_UNKNOWN_PROP = 0x00010000,
71 GROUP_CODE_SLOW = 0x00FF0000,
72 GROUP_CODE_ALL = 0xFFFFFFFF
75 #define MTP_PROP_GROUPCODE_GENERAL GROUP_CODE_OFTEN_USED
76 #define MTP_PROP_GROUPCODE_OBJECT GROUP_CODE_OFTEN_USED
77 #define MTP_PROP_GROUPCODE_ALBUMART GROUP_CODE_OFTEN_USED
79 #define node_alloc_and_append()\
82 ret = _util_add_node(&(obj->propval_list), (void *)prop_val);\
84 _prop_destroy_obj_propval(prop_val);\
85 ERR("_util_add_node() Fail");\
90 #define propvalue_alloc_and_check(prop_val)\
92 prop_val = _prop_alloc_obj_propval(prop);\
93 if (prop_val == NULL) {\
94 ERR("prop_val == NULL");\
99 #define init_default_value(value)\
101 memset(&default_val, 0, sizeof(default_val));\
102 default_val = value;\
106 mtp_uint32 min_val; /* Minimum value */
107 mtp_uint32 max_val; /* Maximum value */
108 mtp_uint32 step_size; /* Step value */
111 /* This structure contains property info */
113 mtp_uint16 prop_code; /* Property code */
114 mtp_uint16 data_type; /* type of the data */
115 mtp_uint32 dts_size; /* Count of Byte Size of the
116 Data-Type-Specific value (DTS) */
117 mtp_uchar get_set; /* Set possible or not */
118 mtp_uchar form_flag; /* Indicates the form of the valid values */
119 range_form_t range; /* Range Values */
120 slist_t supp_value_list; /*Enum Values */
122 mtp_uchar integer[16]; /* Default value for any integer value
123 type (UINT8, mtp_uint16, mtp_uint32) */
124 ptp_string_t *str; /* Default value for String type */
125 ptp_array_t *array; /* Default array */
126 } default_val; /* Default value */
129 /* This structure contains device property description dataset */
131 prop_info_t propinfo;
133 mtp_uchar integer[16]; /* Current value for any integer value
134 type (UINT8, mtp_uint16, mtp_uint32) */
135 ptp_string_t *str; /* Current value for String type */
136 ptp_array_t *array; /* Current value for array data type
138 } current_val; /*Current value */
139 } device_prop_desc_t;
141 /* This structure contains object property description dataset */
143 prop_info_t propinfo;
144 mtp_uint32 group_code; /* Identifies the group of this property */
146 ptp_string_t *reg_exp; /* Regular Expression Form */
147 mtp_uint32 max_len; /* LongString Form */
148 } prop_forms; /*Object property-specific forms */
151 /* This structure contains current value of a object property */
153 obj_prop_desc_t *prop;
155 mtp_uchar integer[16]; /* Current value for any integer */
156 ptp_string_t *str; /* Current value for String type */
161 /* This structure defines ObjectPropQuad for GetObjectPropList */
163 mtp_uint32 obj_handle;
164 mtp_uint16 prop_code;
165 mtp_uint16 data_type;
167 mtp_uint32 val_size; /* a useful helper,
168 not part of the Object Property Quadruple */
171 /* This structure contains a list of MTP Object properties */
173 slist_t prop_quad_list;
176 /* This structure contains a list of InterdependentProperties */
179 } obj_interdep_proplist_t ;
184 void _prop_init_ptparray(ptp_array_t *parray, data_type_t type);
185 ptp_array_t *_prop_alloc_ptparray(data_type_t type);
186 mtp_uint32 _prop_get_size_ptparray(ptp_array_t *parray);
187 mtp_uint32 _prop_get_size_ptparray_without_elemsize(ptp_array_t *parray);
188 mtp_bool _prop_grow_ptparray(ptp_array_t *parray, mtp_uint32 new_size);
189 mtp_int32 _prop_find_ele_ptparray(ptp_array_t *parray, mtp_uint32 element);
190 mtp_bool _prop_get_ele_ptparray(ptp_array_t *parray, mtp_uint32 index, void *ele);
191 mtp_bool _prop_append_ele_ptparray(ptp_array_t *parray, mtp_uint32 element);
192 mtp_bool _prop_append_ele128_ptparray(ptp_array_t *parray, mtp_uint64 *element);
193 mtp_bool _prop_copy_ptparray(ptp_array_t *dst, ptp_array_t *src);
194 mtp_uint32 _prop_pack_ptparray(ptp_array_t *parray, mtp_uchar *buf,
196 mtp_uint32 _prop_pack_ptparray_without_elemsize(ptp_array_t *parray,
197 mtp_uchar *buf, mtp_uint32 bufsize);
198 mtp_bool _prop_rem_elem_ptparray(ptp_array_t *parray, mtp_uint32 element);
199 void _prop_deinit_ptparray(ptp_array_t *parray);
200 void _prop_destroy_ptparray(ptp_array_t *parray);
203 * PtpString Functions
205 void _prop_init_ptpstring(ptp_string_t *pstring);
206 void _prop_init_ptptimestring(ptp_time_string_t *pstring);
207 void _prop_copy_time_to_ptptimestring(ptp_time_string_t *pString,
208 system_time_t *sys_time);
209 void _prop_copy_ptpstring(ptp_string_t *dst, ptp_string_t *src);
210 void _prop_copy_ptptimestring(ptp_time_string_t *dst, ptp_time_string_t *src);
211 void _prop_copy_char_to_ptpstring(ptp_string_t *pstring, void *str,
213 mtp_uint32 _prop_size_ptpstring(ptp_string_t *pstring);
214 mtp_uint32 _prop_size_ptptimestring(ptp_time_string_t *pstring);
215 mtp_uint32 _prop_pack_ptpstring(ptp_string_t *pstring, mtp_uchar *buf,
217 mtp_uint32 _prop_pack_ptptimestring(ptp_time_string_t *pstring, mtp_uchar *buf,
219 mtp_uint32 _prop_parse_rawstring(ptp_string_t *pstring, mtp_uchar *buf,
221 void _prop_destroy_ptpstring(ptp_string_t *pstring);
224 * DevicePropDesc Functions
226 void _prop_init_device_property_desc(device_prop_desc_t *prop,
227 mtp_uint16 propcode, mtp_uint16 data_type, mtp_uchar get_set,
228 mtp_uchar form_flag);
229 mtp_uint32 _prop_size_device_prop_desc(device_prop_desc_t *prop);
230 mtp_uint32 _prop_pack_device_prop_desc(device_prop_desc_t *prop,
231 mtp_uchar *buf, mtp_uint32 size);
232 mtp_uint32 _prop_pack_curval_device_prop_desc(device_prop_desc_t *prop,
233 mtp_uchar *buf, mtp_uint32 size);
234 void _prop_reset_device_prop_desc(device_prop_desc_t *prop);
237 * ObjectPropVal Functions
239 obj_prop_val_t *_prop_alloc_obj_propval(obj_prop_desc_t *prop);
240 obj_prop_val_t *_prop_get_prop_val(mtp_obj_t *obj, mtp_uint32 prop_code);
241 mtp_uint32 _prop_pack_obj_propval(obj_prop_val_t *val, mtp_uchar *buf,
243 mtp_uint32 _prop_size_obj_propval(obj_prop_val_t *val);
244 void _prop_destroy_obj_propval(obj_prop_val_t *pval);
245 mtp_bool _prop_set_default_integer(prop_info_t *prop_info, mtp_uchar *value);
246 mtp_bool _prop_set_default_string(prop_info_t *prop_info, mtp_wchar *val);
247 mtp_bool _prop_set_range_integer(prop_info_t *prop_info, mtp_uint32 min,
248 mtp_uint32 max, mtp_uint32 step);
249 mtp_bool _prop_set_maxlen(obj_prop_desc_t *prop, mtp_uint32 max);
250 mtp_bool _prop_set_default_array(prop_info_t *prop_info, mtp_uchar *parray,
252 mtp_bool _prop_add_supp_integer_val(prop_info_t *prop_info, mtp_uint32 val);
253 mtp_bool _prop_add_supp_string_val(prop_info_t *prop_info, mtp_wchar *val);
254 mtp_bool _prop_is_valid_integer(prop_info_t *prop_info, mtp_uint64 value);
255 mtp_bool _prop_is_valid_string(prop_info_t *prop, ptp_string_t *str);
256 mtp_bool _prop_is_equal_ptpstring(ptp_string_t *dst, ptp_string_t *src);
257 mtp_bool _prop_set_current_integer(device_prop_desc_t *prop, mtp_uint32 val);
258 mtp_bool _prop_set_current_string(device_prop_desc_t *prop, ptp_string_t *str);
259 mtp_bool _prop_set_current_array(device_prop_desc_t *prop, mtp_uchar *arr);
260 mtp_bool _prop_set_current_device_prop(device_prop_desc_t *prop, mtp_uchar *val,
262 mtp_bool _prop_set_current_integer_val(obj_prop_val_t *propval, mtp_uint64 val);
263 mtp_bool _prop_set_current_string_val(obj_prop_val_t *propval, ptp_string_t *str);
264 mtp_bool _prop_set_current_array_val(obj_prop_val_t *propval, mtp_uchar *arr,
266 #ifdef __BIG_ENDIAN__
267 mtp_bool _prop_set_current_array_val_usbrawdata(obj_prop_val_t *val,
268 mtp_uchar *arr, mtp_uint32 size);
269 #endif /* __BIG_ENDIAN__ */
270 mtp_bool _prop_set_regexp(obj_prop_desc_t *prop, mtp_wchar *regex);
273 * ObjectPropDesc Functions
275 mtp_uint32 _prop_size_obj_prop_desc(obj_prop_desc_t *prop);
276 mtp_uint32 _prop_pack_obj_prop_desc(obj_prop_desc_t *prop, mtp_uchar *buf,
278 mtp_uint32 _prop_pack_default_val_obj_prop_desc(obj_prop_desc_t *prop,
279 mtp_uchar *buf, mtp_uint32 size);
280 obj_prop_desc_t *_prop_get_obj_prop_desc(mtp_uint32 format_code,
281 mtp_uint32 prop_code);
284 * ObjectProplist Functions
286 mtp_bool _prop_update_property_values_list(mtp_obj_t *obj);
287 mtp_uint32 _prop_size_obj_proplist(obj_proplist_t *prop_list);
288 mtp_uint32 _prop_get_obj_proplist(mtp_obj_t *pObject, mtp_uint32 prop_code,
289 mtp_uint32 group_code, obj_proplist_t *prop_list);
290 mtp_uint32 _prop_pack_obj_proplist(obj_proplist_t *prop_list, mtp_uchar *buf,
292 void _prop_destroy_obj_proplist(obj_proplist_t *prop_list);
295 * ObjectProp Functions
297 mtp_uint32 _prop_get_supp_obj_props(mtp_uint32 format_code,
298 ptp_array_t *supp_props);
299 mtp_bool _prop_build_supp_props_mp3(void);
300 mtp_bool _prop_build_supp_props_wma(void);
301 mtp_bool _prop_build_supp_props_wmv(void);
302 mtp_bool _prop_build_supp_props_album(void);
303 mtp_bool _prop_build_supp_props_default(void);
304 void _prop_destroy_supp_obj_props(void);
307 *Interdependent Prop Functions
309 mtp_uint32 _prop_get_size_interdep_prop(interdep_prop_config_t *prop);
310 mtp_uint32 _prop_pack_interdep_prop(interdep_prop_config_t *prop, mtp_uchar *buf,
312 mtp_uint32 _prop_get_size_interdep_proplist(obj_interdep_proplist_t *config_list,
313 mtp_uint32 format_code);
314 mtp_uint32 _prop_pack_interdep_proplist(obj_interdep_proplist_t *config_list,
315 mtp_uint32 format_code, mtp_uchar *buf, mtp_uint32 size);
316 mtp_bool _get_oma_drm_status(void);
318 #endif /* _MTP_PROPERTY_H_ */