Sync code with Tizen 3.0 branch
[platform/core/connectivity/mtp-responder.git] / include / entity / mtp_property.h
1 /*
2  * Copyright (c) 2012, 2013 Samsung Electronics Co., Ltd.
3  *
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
7  *
8  * http://www.apache.org/licenses/LICENSE-2.0
9  *
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.
15  */
16
17 #ifndef _MTP_PROPERTY_H_
18 #define _MTP_PROPERTY_H_
19
20 #include "mtp_list.h"
21 #include "mtp_object.h"
22
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
31
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 */
37
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 */
43
44 typedef struct _interdep_prop_config {
45         mtp_uint32 format_code;
46         slist_t propdesc_list;
47 } interdep_prop_config_t;
48
49 /*
50  * brief The property form flag.
51  * This enumerated type defines what kind of data the structure contains.
52  */
53 typedef enum {
54         NONE = 0x00,
55         RANGE_FORM = 0x01,
56         ENUM_FORM = 0x02,
57         DATE_TIME_FORM = 0x03,
58         REGULAR_EXPRESSION_FORM = 0x04,
59         BYTE_ARRAY_FORM = 0x05,
60         LONG_STRING_FORM = 0xFF,
61 } form_flag_t;
62
63 enum {
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
73 };
74
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
78
79 #define node_alloc_and_append()\
80         do {\
81                 mtp_bool ret;\
82                 ret = _util_add_node(&(obj->propval_list), (void *)prop_val);\
83                 if (FALSE == ret) {\
84                         _prop_destroy_obj_propval(prop_val);\
85                         ERR("_util_add_node() Fail");\
86                         return (FALSE);\
87                 } \
88         } while (0);
89
90 #define propvalue_alloc_and_check(prop_val)\
91         do {\
92                 prop_val = _prop_alloc_obj_propval(prop);\
93                 if (prop_val == NULL) {\
94                         ERR("prop_val == NULL");\
95                         return (FALSE);\
96                 } \
97         } while (0);
98
99 #define init_default_value(value)\
100         do {\
101                 memset(&default_val, 0, sizeof(default_val));\
102                 default_val = value;\
103         } while (0);
104
105 typedef struct {
106         mtp_uint32 min_val;     /* Minimum value */
107         mtp_uint32 max_val;     /* Maximum value */
108         mtp_uint32 step_size;   /* Step value */
109 } range_form_t;
110
111 /* This structure contains property info */
112 typedef struct {
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 */
121         union {
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 */
127 } prop_info_t;
128
129 /* This structure contains device property description dataset */
130 typedef struct {
131         prop_info_t propinfo;
132         union {
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
137                                                            (AINT8, AUINT8) */
138         } current_val;                      /*Current value */
139 } device_prop_desc_t;
140
141 /* This structure contains object property description dataset */
142 typedef struct {
143         prop_info_t propinfo;
144         mtp_uint32 group_code;  /* Identifies the group of this property */
145         union {
146                 ptp_string_t *reg_exp;  /* Regular Expression Form */
147                 mtp_uint32 max_len; /* LongString Form */
148         } prop_forms;            /*Object property-specific forms */
149 } obj_prop_desc_t;
150
151 /* This structure contains current value of a object property */
152 typedef struct {
153         obj_prop_desc_t *prop;
154         union {
155                 mtp_uchar integer[16];  /* Current value for any integer */
156                 ptp_string_t *str;      /* Current value for String type */
157                 ptp_array_t *array;
158         } current_val;
159 } obj_prop_val_t;
160
161 /* This structure defines ObjectPropQuad for GetObjectPropList */
162 typedef struct {
163         mtp_uint32 obj_handle;
164         mtp_uint16 prop_code;
165         mtp_uint16 data_type;
166         mtp_uchar *pval;
167         mtp_uint32 val_size;    /* a useful helper,
168                                                            not part of the Object Property Quadruple */
169 } prop_quad_t;
170
171 /* This structure contains a list of MTP Object properties */
172 typedef struct {
173         slist_t prop_quad_list;
174 } obj_proplist_t;
175
176 /* This structure contains a list of InterdependentProperties  */
177 typedef struct {
178         slist_t plist;
179 } obj_interdep_proplist_t ;
180
181 /*
182  * Ptparray functions
183  */
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,
195                 mtp_uint32 bufsize);
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);
201
202 /*
203  * PtpString Functions
204  */
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,
212                 char_mode_t cmode);
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,
216                 mtp_uint32 size);
217 mtp_uint32 _prop_pack_ptptimestring(ptp_time_string_t *pstring, mtp_uchar *buf,
218                 mtp_uint32 size);
219 mtp_uint32 _prop_parse_rawstring(ptp_string_t *pstring, mtp_uchar *buf,
220                 mtp_uint32 size);
221 void _prop_destroy_ptpstring(ptp_string_t *pstring);
222
223 /*
224  * DevicePropDesc Functions
225  */
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);
235
236 /*
237  * ObjectPropVal Functions
238  */
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,
242                 mtp_uint32 size);
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,
251                 mtp_uint32 num_ele);
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,
261                 mtp_uint32 size);
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,
265                 mtp_uint32 size);
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);
271
272 /*
273  * ObjectPropDesc Functions
274  */
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,
277                 mtp_uint32 size);
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);
282
283 /*
284  * ObjectProplist Functions
285  */
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,
291                 mtp_uint32 size);
292 void _prop_destroy_obj_proplist(obj_proplist_t *prop_list);
293
294 /*
295  * ObjectProp Functions
296  */
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);
305
306 /*
307  *Interdependent Prop Functions
308  */
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,
311                 mtp_uint32 size);
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);
317
318 #endif /* _MTP_PROPERTY_H_ */