1 /**************************************************************************/
2 /*                                                                        */
3 /*       Copyright (c) Microsoft Corporation. All rights reserved.        */
4 /*                                                                        */
5 /*       This software is licensed under the Microsoft Software License   */
6 /*       Terms for Microsoft Azure RTOS. Full text of the license can be  */
7 /*       found in the LICENSE file at https://aka.ms/AzureRTOS_EULA       */
8 /*       and in the root directory of this software.                      */
9 /*                                                                        */
10 /**************************************************************************/
11 
12 
13 /**************************************************************************/
14 /**************************************************************************/
15 /**                                                                       */
16 /** USBX Component                                                        */
17 /**                                                                       */
18 /**   PIMA Class                                                          */
19 /**                                                                       */
20 /**************************************************************************/
21 /**************************************************************************/
22 
23 
24 /**************************************************************************/
25 /*                                                                        */
26 /*  COMPONENT DEFINITION                                   RELEASE        */
27 /*                                                                        */
28 /*    ux_device_class_pima.h                              PORTABLE C      */
29 /*                                                           6.3.0        */
30 /*  AUTHOR                                                                */
31 /*                                                                        */
32 /*    Chaoqiong Xiao, Microsoft Corporation                               */
33 /*                                                                        */
34 /*  DESCRIPTION                                                           */
35 /*                                                                        */
36 /*    This file contains all the header and extern functions used by the  */
37 /*    USBX PIMA class.                                                    */
38 /*                                                                        */
39 /*  RELEASE HISTORY                                                       */
40 /*                                                                        */
41 /*    DATE              NAME                      DESCRIPTION             */
42 /*                                                                        */
43 /*  05-19-2020     Chaoqiong Xiao           Initial Version 6.0           */
44 /*  09-30-2020     Chaoqiong Xiao           Modified comment(s),          */
45 /*                                            used UX prefix to refer to  */
46 /*                                            TX symbols instead of using */
47 /*                                            them directly,              */
48 /*                                            resulting in version 6.1    */
49 /*  08-02-2021     Wen Wang                 Modified comment(s),          */
50 /*                                            added extern "C" keyword    */
51 /*                                            for compatibility with C++, */
52 /*                                            resulting in version 6.1.8  */
53 /*  01-31-2022     Chaoqiong Xiao           Modified comment(s),          */
54 /*                                            updated definitions,        */
55 /*                                            improved internal function, */
56 /*                                            added cancel callback,      */
57 /*                                            resulting in version 6.1.10 */
58 /*  04-25-2022     Chaoqiong Xiao           Modified comment(s),          */
59 /*                                            fixed standalone compile,   */
60 /*                                            resulting in version 6.1.11 */
61 /*  10-31-2023     Chaoqiong Xiao           Modified comment(s),          */
62 /*                                            optimized PIMA data sets,   */
63 /*                                            added a new mode to manage  */
64 /*                                            endpoint buffer in classes, */
65 /*                                            added error checks support, */
66 /*                                            resulting in version 6.3.0  */
67 /*                                                                        */
68 /**************************************************************************/
69 
70 #ifndef UX_DEVICE_CLASS_PIMA_H
71 #define UX_DEVICE_CLASS_PIMA_H
72 
73 /* Determine if a C++ compiler is being used.  If so, ensure that standard
74    C is used to process the API information.  */
75 
76 #ifdef   __cplusplus
77 
78 /* Yes, C++ compiler is present.  Use standard C.  */
79 extern   "C" {
80 
81 #endif
82 
83 
84 /* Internal option: enable the basic USBX error checking. This define is typically used
85    while debugging application.  */
86 #if defined(UX_ENABLE_ERROR_CHECKING) && !defined(UX_DEVICE_CLASS_PIMA_ENABLE_ERROR_CHECKING)
87 #define UX_DEVICE_CLASS_PIMA_ENABLE_ERROR_CHECKING
88 #endif
89 
90 #define UX_DEVICE_CLASS_PIMA_BULK_BUFFER_LENGTH                                     UX_DEVICE_CLASS_PIMA_TRANSFER_BUFFER_LENGTH
91 #define UX_DEVICE_CLASS_PIMA_INTERRUPT_BUFFER_LENGTH                                32 /* >=UX_DEVICE_CLASS_PIMA_AEI_MAX_LENGTH  */
92 
93 
94 /* Define PIMA Class constants.  */
95 
96 #ifndef UX_DEVICE_CLASS_PIMA_TRANSFER_BUFFER_LENGTH
97 #define UX_DEVICE_CLASS_PIMA_TRANSFER_BUFFER_LENGTH                                 UX_SLAVE_REQUEST_DATA_MAX_LENGTH
98 #endif
99 #define UX_DEVICE_CLASS_PIMA_MAX_PAYLOAD                                            (UX_DEVICE_CLASS_PIMA_TRANSFER_BUFFER_LENGTH - UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE)
100 #define UX_DEVICE_CLASS_PIMA_OBJECT_INFO_BUFFER_SIZE                                (UX_DEVICE_CLASS_PIMA_MAX_PAYLOAD)
101 #define UX_DEVICE_CLASS_PIMA_DEVICE_INFO_BUFFER_SIZE                                (UX_DEVICE_CLASS_PIMA_MAX_PAYLOAD)
102 #define UX_DEVICE_CLASS_PIMA_STORAGE_INFO_BUFFER_SIZE                               (UX_DEVICE_CLASS_PIMA_MAX_PAYLOAD)
103 #define UX_DEVICE_CLASS_PIMA_ARRAY_BUFFER_SIZE                                      (UX_DEVICE_CLASS_PIMA_MAX_PAYLOAD)
104 #define UX_DEVICE_CLASS_PIMA_DEVICE_PROP_VALUE_BUFFER_SIZE                          (UX_DEVICE_CLASS_PIMA_MAX_PAYLOAD)
105 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_VALUE_BUFFER_SIZE                          (UX_DEVICE_CLASS_PIMA_MAX_PAYLOAD)
106 
107 #define UX_DEVICE_CLASS_PIMA_CLASS_TRANSFER_TIMEOUT                                 300000
108 #define UX_DEVICE_CLASS_PIMA_CLASS                                                  0x06
109 #define UX_DEVICE_CLASS_PIMA_SUBCLASS                                               0X01
110 #define UX_DEVICE_CLASS_PIMA_PROTOCOL                                               0X01
111 #define UX_DEVICE_CLASS_PIMA_MAGIC_NUMBER                                           0x50494D41
112 #define UX_DEVICE_CLASS_PIMA_UNICODE_MAX_LENGTH                                     256
113 #define UX_DEVICE_CLASS_PIMA_DATE_TIME_STRING_MAX_LENGTH                            64
114 #define UX_DEVICE_CLASS_PIMA_MAX_EVENTS_QUEUE                                       16
115 #define UX_DEVICE_CLASS_PIMA_MAX_STORAGE_IDS                                        1
116 #define UX_DEVICE_CLASS_PIMA_ARRAY_MAX_LENGTH                                       256
117 #define UX_DEVICE_CLASS_PIMA_DEVICE_PROPERTIES_ARRAY_MAX_ITEMS                      32
118 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROPERTIES_ARRAY_MAX_ITEMS                      128
119 #define UX_DEVICE_CLASS_PIMA_PROP_VALUE_SIZE                                        256
120 #define UX_DEVICE_CLASS_PIMA_MICROSOFT_VENDOR_COMMAND_CODE                          0x54
121 
122 /* Define PIMA versions.  */
123 #define UX_DEVICE_CLASS_PIMA_STANDARD_VERSION                                       100
124 #define UX_DEVICE_CLASS_PIMA_VENDOR_EXTENSION_ID                                    6
125 #define UX_DEVICE_CLASS_PIMA_EXTENSION_VERSION                                      100
126 #define UX_DEVICE_CLASS_PIMA_STANDARD_MODE                                          0
127 
128 
129 /* Define PIMA phases.  */
130 
131 #define UX_DEVICE_CLASS_PIMA_PHASE_IDLE                                             0
132 #define UX_DEVICE_CLASS_PIMA_PHASE_COMMAND                                          1
133 #define UX_DEVICE_CLASS_PIMA_PHASE_RESPONSE                                         2
134 #define UX_DEVICE_CLASS_PIMA_PHASE_DATA_IN                                          3
135 #define UX_DEVICE_CLASS_PIMA_PHASE_DATA_OUT                                         4
136 
137 /* Define PIMA data phases.  */
138 
139 #define UX_DEVICE_CLASS_PIMA_DATA_PHASE_NONE                                        0
140 #define UX_DEVICE_CLASS_PIMA_DATA_PHASE_IN                                          1
141 #define UX_DEVICE_CLASS_PIMA_DATA_PHASE_OUT                                         2
142 
143 /* Define PIMA session states.  */
144 
145 #define UX_DEVICE_CLASS_PIMA_SESSION_STATE_CLOSED                                   0
146 #define UX_DEVICE_CLASS_PIMA_SESSION_STATE_OPENED                                   1
147 
148 /* Define PIMA object and thumb states.  */
149 
150 #define UX_DEVICE_CLASS_PIMA_OBJECT_STATE_CLOSED                                    0
151 #define UX_DEVICE_CLASS_PIMA_OBJECT_STATE_OPENED                                    1
152 
153 /* Define PIMA object and thumb transfer status.  */
154 
155 #define UX_DEVICE_CLASS_PIMA_OBJECT_TRANSFER_STATUS_INACTIVE                        0
156 #define UX_DEVICE_CLASS_PIMA_OBJECT_TRANSFER_STATUS_ACTIVE                          1
157 #define UX_DEVICE_CLASS_PIMA_OBJECT_TRANSFER_STATUS_COMPLETED                       2
158 #define UX_DEVICE_CLASS_PIMA_OBJECT_TRANSFER_STATUS_ABORTED                         3
159 
160 /* Define PIMA object and thumb transfer phase.  */
161 
162 #define UX_DEVICE_CLASS_PIMA_OBJECT_TRANSFER_PHASE_ACTIVE                           0
163 #define UX_DEVICE_CLASS_PIMA_OBJECT_TRANSFER_PHASE_COMPLETED                        1
164 #define UX_DEVICE_CLASS_PIMA_OBJECT_TRANSFER_PHASE_COMPLETED_ERROR                  2
165 
166 
167 /* Define PIMA Cancel Request equivalences.  */
168 
169 #define UX_DEVICE_CLASS_PIMA_REQUEST_CANCEL_COMMAND                                 0x64
170 #define UX_DEVICE_CLASS_PIMA_REQUEST_CANCEL_DATA_LENGTH                             0x06
171 #define UX_DEVICE_CLASS_PIMA_REQUEST_CANCEL_CODE                                    0x04001
172 #define UX_DEVICE_CLASS_PIMA_REQUEST_CANCEL_OFFSET_CODE                             0x00
173 #define UX_DEVICE_CLASS_PIMA_REQUEST_CANCEL_OFFSET_TRANSACTION_ID                   0x02
174 
175 /* Define PIMA Reset Request equivalences.  */
176 
177 #define UX_DEVICE_CLASS_PIMA_REQUEST_RESET_DEVICE                                   0x66
178 
179 /* Define PIMA Status Request equivalences.  */
180 
181 #define UX_DEVICE_CLASS_PIMA_REQUEST_STATUS_COMMAND                                 0x67
182 #define UX_DEVICE_CLASS_PIMA_REQUEST_STATUS_DATA_LENGTH                             0x40
183 #define UX_DEVICE_CLASS_PIMA_REQUEST_STATUS_OFFSET_LENGTH                           0x00
184 #define UX_DEVICE_CLASS_PIMA_REQUEST_STATUS_OFFSET_CODE                             0x02
185 #define UX_DEVICE_CLASS_PIMA_REQUEST_STATUS_COMMAND_COUNTER                         16
186 #define UX_DEVICE_CLASS_PIMA_REQUEST_STATUS_COMMAND_DELAY                           (1 * UX_PERIODIC_RATE)
187 
188 /* Define PIMA command container type.  */
189 
190 #define UX_DEVICE_CLASS_PIMA_CT_UNDEFINED                                           0x00
191 #define UX_DEVICE_CLASS_PIMA_CT_COMMAND_BLOCK                                       0x01
192 #define UX_DEVICE_CLASS_PIMA_CT_DATA_BLOCK                                          0x02
193 #define UX_DEVICE_CLASS_PIMA_CT_RESPONSE_BLOCK                                      0x03
194 #define UX_DEVICE_CLASS_PIMA_CT_EVENT_BLOCK                                         0x04
195 
196 /* Define PIMA Extended Event Data Request payload Format.  */
197 
198 #define UX_DEVICE_CLASS_PIMA_EEDR_EVENT_CODE                                        0x00
199 #define UX_DEVICE_CLASS_PIMA_EEDR_TRANSACTION_ID                                    0x02
200 #define UX_DEVICE_CLASS_PIMA_EEDR_NUMBER_PARAMETERS                                 0x06
201 #define UX_DEVICE_CLASS_PIMA_EEDR_SIZE_PARAMETER                                    0x08
202 
203 /* Define PIMA Device Status Data Format.  */
204 
205 #define UX_DEVICE_CLASS_PIMA_DSD_LENGTH                                             0x00
206 #define UX_DEVICE_CLASS_PIMA_DSD_CODE                                               0x02
207 #define UX_DEVICE_CLASS_PIMA_DSD_PARAMETER                                          0x04
208 
209 /* Define PIMA Command Header Format.  */
210 
211 #define UX_DEVICE_CLASS_PIMA_COMMAND_HEADER_LENGTH                                  0x00
212 #define UX_DEVICE_CLASS_PIMA_COMMAND_HEADER_TYPE                                    0x04
213 #define UX_DEVICE_CLASS_PIMA_COMMAND_HEADER_CODE                                    0x06
214 #define UX_DEVICE_CLASS_PIMA_COMMAND_HEADER_TRANSACTION_ID                          0x08
215 #define UX_DEVICE_CLASS_PIMA_COMMAND_HEADER_PARAMETER_1                             0x0C
216 #define UX_DEVICE_CLASS_PIMA_COMMAND_HEADER_PARAMETER_2                             0x10
217 #define UX_DEVICE_CLASS_PIMA_COMMAND_HEADER_PARAMETER_3                             0x14
218 #define UX_DEVICE_CLASS_PIMA_COMMAND_HEADER_PARAMETER_4                             0x18
219 #define UX_DEVICE_CLASS_PIMA_COMMAND_HEADER_PARAMETER_5                             0x1C
220 
221 #define UX_DEVICE_CLASS_PIMA_COMMAND_HEADER_SIZE                                    0x0C
222 #define UX_DEVICE_CLASS_PIMA_CONTAINER_SIZE                                         0x40
223 #define UX_DEVICE_CLASS_PIMA_ALL_HEADER_SIZE                                        0x20
224 
225 /* Define PIMA Data Header Format.  */
226 
227 #define UX_DEVICE_CLASS_PIMA_DATA_HEADER_LENGTH                                     0x00
228 #define UX_DEVICE_CLASS_PIMA_DATA_HEADER_TYPE                                       0x04
229 #define UX_DEVICE_CLASS_PIMA_DATA_HEADER_CODE                                       0x06
230 #define UX_DEVICE_CLASS_PIMA_DATA_HEADER_TRANSACTION_ID                             0x08
231 #define UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE                                       0x0C
232 
233 
234 /* Define PIMA Response Header Format.  */
235 
236 #define UX_DEVICE_CLASS_PIMA_RESPONSE_HEADER_LENGTH                                 0x00
237 #define UX_DEVICE_CLASS_PIMA_RESPONSE_HEADER_TYPE                                   0x04
238 #define UX_DEVICE_CLASS_PIMA_RESPONSE_HEADER_CODE                                   0x06
239 #define UX_DEVICE_CLASS_PIMA_RESPONSE_HEADER_TRANSACTION_ID                         0x08
240 #define UX_DEVICE_CLASS_PIMA_RESPONSE_HEADER_PARAMETERS                             0x0C
241 #define UX_DEVICE_CLASS_PIMA_RESPONSE_HEADER_SIZE                                   0x0C
242 
243 /* Define PIMA Asynchronous Event Interrupt Data Format.  */
244 
245 #define UX_DEVICE_CLASS_PIMA_AEI_DATA_LENGTH                                        0x00
246 #define UX_DEVICE_CLASS_PIMA_AEI_TYPE                                               0x04
247 #define UX_DEVICE_CLASS_PIMA_AEI_EVENT_CODE                                         0x06
248 #define UX_DEVICE_CLASS_PIMA_AEI_TRANSACTION_ID                                     0x08
249 #define UX_DEVICE_CLASS_PIMA_AEI_PARAMETER_1                                        0x0C
250 #define UX_DEVICE_CLASS_PIMA_AEI_PARAMETER_2                                        0x10
251 #define UX_DEVICE_CLASS_PIMA_AEI_PARAMETER_3                                        0x14
252 #define UX_DEVICE_CLASS_PIMA_AEI_MAX_LENGTH                                         0x18
253 
254 /* Define PIMA Operation Commands.  */
255 
256 #define UX_DEVICE_CLASS_PIMA_OC_UNDEFINED                                           0x1000
257 #define UX_DEVICE_CLASS_PIMA_OC_GET_DEVICE_INFO                                     0x1001
258 #define UX_DEVICE_CLASS_PIMA_OC_OPEN_SESSION                                        0x1002
259 #define UX_DEVICE_CLASS_PIMA_OC_CLOSE_SESSION                                       0x1003
260 #define UX_DEVICE_CLASS_PIMA_OC_GET_STORAGE_IDS                                     0x1004
261 #define UX_DEVICE_CLASS_PIMA_OC_GET_STORAGE_INFO                                    0x1005
262 #define UX_DEVICE_CLASS_PIMA_OC_GET_NUM_OBJECTS                                     0x1006
263 #define UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT_HANDLES                                  0x1007
264 #define UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT_INFO                                     0x1008
265 #define UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT                                          0x1009
266 #define UX_DEVICE_CLASS_PIMA_OC_GET_THUMB                                           0x100A
267 #define UX_DEVICE_CLASS_PIMA_OC_DELETE_OBJECT                                       0x100B
268 #define UX_DEVICE_CLASS_PIMA_OC_SEND_OBJECT_INFO                                    0x100C
269 #define UX_DEVICE_CLASS_PIMA_OC_SEND_OBJECT                                         0x100D
270 #define UX_DEVICE_CLASS_PIMA_OC_INITIATE_CAPTURE                                    0x100E
271 #define UX_DEVICE_CLASS_PIMA_OC_FORMAT_STORE                                        0x100F
272 #define UX_DEVICE_CLASS_PIMA_OC_RESET_DEVICE                                        0x1010
273 #define UX_DEVICE_CLASS_PIMA_OC_SELF_TEST                                           0x1011
274 #define UX_DEVICE_CLASS_PIMA_OC_SET_OBJECT_PROTECTION                               0x1012
275 #define UX_DEVICE_CLASS_PIMA_OC_POWER_DOWN                                          0x1013
276 #define UX_DEVICE_CLASS_PIMA_OC_GET_DEVICE_PROP_DESC                                0x1014
277 #define UX_DEVICE_CLASS_PIMA_OC_GET_DEVICE_PROP_VALUE                               0x1015
278 #define UX_DEVICE_CLASS_PIMA_OC_SET_DEVICE_PROP_VALUE                               0x1016
279 #define UX_DEVICE_CLASS_PIMA_OC_RESET_DEVICE_PROP_VALUE                             0x1017
280 #define UX_DEVICE_CLASS_PIMA_OC_TERMINATE_OPEN_CAPTURE                              0x1018
281 #define UX_DEVICE_CLASS_PIMA_OC_MOVE_OBJECT                                         0x1019
282 #define UX_DEVICE_CLASS_PIMA_OC_COPY_OBJECT                                         0x101A
283 #define UX_DEVICE_CLASS_PIMA_OC_GET_PARTIAL_OBJECT                                  0x101B
284 #define UX_DEVICE_CLASS_PIMA_OC_INITIATE_OPEN_CAPTURE                               0x101C
285 #define UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT_PROPS_SUPPORTED                          0x9801
286 #define UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT_PROP_DESC                                0x9802
287 #define UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT_PROP_VALUE                               0x9803
288 #define UX_DEVICE_CLASS_PIMA_OC_SET_OBJECT_PROP_VALUE                               0x9804
289 #define UX_DEVICE_CLASS_PIMA_OC_GET_OBJECT_REFERENCES                               0x9810
290 #define UX_DEVICE_CLASS_PIMA_OC_SET_OBJECT_REFERENCES                               0x9811
291 
292 /* Define PIMA Response Codes.  */
293 
294 #define UX_DEVICE_CLASS_PIMA_RC_UNDEFINED                                           0x2000
295 #define UX_DEVICE_CLASS_PIMA_RC_OK                                                  0x2001
296 #define UX_DEVICE_CLASS_PIMA_RC_GENERAL_ERROR                                       0x2002
297 #define UX_DEVICE_CLASS_PIMA_RC_SESSION_NOT_OPEN                                    0x2003
298 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_TRANSACTION_ID                              0x2004
299 #define UX_DEVICE_CLASS_PIMA_RC_OPERATION_NOT_SUPPORTED                             0x2005
300 #define UX_DEVICE_CLASS_PIMA_RC_PARAMETER_NOT_SUPPORTED                             0x2006
301 #define UX_DEVICE_CLASS_PIMA_RC_INCOMPLETE_TRANSFER                                 0x2007
302 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_STORAGE_ID                                  0x2008
303 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_OBJECT_HANDLE                               0x2009
304 #define UX_DEVICE_CLASS_PIMA_RC_DEVICE_PROP_NOT_SUPPORTED                           0x200A
305 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_OBJECT_FORMAT_CODE                          0x200B
306 #define UX_DEVICE_CLASS_PIMA_RC_STORE_FULL                                          0x200C
307 #define UX_DEVICE_CLASS_PIMA_RC_OBJECT_WRITE_PROTECTED                              0x200D
308 #define UX_DEVICE_CLASS_PIMA_RC_STORE_READ_ONLY                                     0x200E
309 #define UX_DEVICE_CLASS_PIMA_RC_ACCESS_DENIED                                       0x200F
310 #define UX_DEVICE_CLASS_PIMA_RC_NO_THUMBNAIL_PRESENT                                0x2010
311 #define UX_DEVICE_CLASS_PIMA_RC_SELF_TEST_FAILED                                    0x2011
312 #define UX_DEVICE_CLASS_PIMA_RC_PARTIAL_DELETION                                    0x2012
313 #define UX_DEVICE_CLASS_PIMA_RC_STORE_NOT_AVAILABLE                                 0x2013
314 #define UX_DEVICE_CLASS_PIMA_RC_FORMAT_UNSUPPORTED                                  0x2014
315 #define UX_DEVICE_CLASS_PIMA_RC_NO_VALID_OBJECT_INFO                                0x2015
316 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_CODE_FORMAT                                 0x2016
317 #define UX_DEVICE_CLASS_PIMA_RC_UNKNOWN_VENDOR_CODE                                 0x2017
318 #define UX_DEVICE_CLASS_PIMA_RC_CAPTURE_ALREADY_TERMINATED                          0x2018
319 #define UX_DEVICE_CLASS_PIMA_RC_DEVICE_BUSY                                         0x2019
320 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_PARENT_OBJECT                               0x201A
321 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_DEVICE_PROP_FORMAT                          0x201B
322 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_DEVICE_PROP_VALUE                           0x201C
323 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_PARAMETER                                   0x201D
324 #define UX_DEVICE_CLASS_PIMA_RC_SESSION_ALREADY_OPENED                              0x201E
325 #define UX_DEVICE_CLASS_PIMA_RC_TRANSACTION_CANCELED                                0x201F
326 #define UX_DEVICE_CLASS_PIMA_RC_DESTINATION_UNSUPPORTED                             0x2020
327 #define UX_DEVICE_CLASS_PIMA_RC_OBJECT_ALREADY_OPENED                               0x2021
328 #define UX_DEVICE_CLASS_PIMA_RC_OBJECT_ALREADY_CLOSED                               0x2022
329 #define UX_DEVICE_CLASS_PIMA_RC_OBJECT_NOT_OPENED                                   0x2023
330 
331 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_OBJECT_PROP_CODE                            0xA801
332 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_OBJECT_PROP_FORMAT                          0xA802
333 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_OBJECT_PROP_VALUE                           0xA803
334 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_OBJECT_REFERENCE                            0xA804
335 #define UX_DEVICE_CLASS_PIMA_RC_INVALID_DATASET                                     0xA806
336 #define UX_DEVICE_CLASS_PIMA_RC_SPECIFICATION_BY_GROUP_UNSUPPORTED                  0xA807
337 #define UX_DEVICE_CLASS_PIMA_RC_SPECIFICATION_BY_DEPTH_UNSUPPORTED                  0xA808
338 #define UX_DEVICE_CLASS_PIMA_RC_OBJECT_TOO_LARGE                                    0xA809
339 #define UX_DEVICE_CLASS_PIMA_RC_OBJECT_PROP_NOT_SUPPORTED                           0xA80A
340 
341 /* Define PIMA Event Codes.  */
342 
343 #define UX_DEVICE_CLASS_PIMA_EC_UNDEFINED                                           0x4000
344 #define UX_DEVICE_CLASS_PIMA_EC_CANCEL_TRANSACTION                                  0x4001
345 #define UX_DEVICE_CLASS_PIMA_EC_OBJECT_ADDED                                        0x4002
346 #define UX_DEVICE_CLASS_PIMA_EC_OBJECT_REMOVED                                      0x4003
347 #define UX_DEVICE_CLASS_PIMA_EC_STORE_ADDED                                         0x4004
348 #define UX_DEVICE_CLASS_PIMA_EC_STORE_REMOVED                                       0x4005
349 #define UX_DEVICE_CLASS_PIMA_EC_DEVICE_PROP_CHANGED                                 0x4006
350 #define UX_DEVICE_CLASS_PIMA_EC_OBJECT_INFO_CHANGED                                 0x4007
351 #define UX_DEVICE_CLASS_PIMA_EC_DEVICE_INFO_CHANGED                                 0x4008
352 #define UX_DEVICE_CLASS_PIMA_EC_REQUEST_OBJECT_TRANSFER                             0x4009
353 #define UX_DEVICE_CLASS_PIMA_EC_STORE_FULL                                          0x400A
354 #define UX_DEVICE_CLASS_PIMA_EC_DEVICE_RESET                                        0x400B
355 #define UX_DEVICE_CLASS_PIMA_EC_STORAGE_INFO_CHANGED                                0x400C
356 #define UX_DEVICE_CLASS_PIMA_EC_CAPTURE_COMPLETE                                    0x400D
357 #define UX_DEVICE_CLASS_PIMA_EC_UNREPORTED_STATUS                                   0x400E
358 
359 /* Define PIMA Object Format Codes.  */
360 
361 #define UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED                                          0x3000
362 #define UX_DEVICE_CLASS_PIMA_OFC_ASSOCIATION                                        0x3001
363 #define UX_DEVICE_CLASS_PIMA_OFC_SCRIPT                                             0x3002
364 #define UX_DEVICE_CLASS_PIMA_OFC_EXECUTABLE                                         0x3003
365 #define UX_DEVICE_CLASS_PIMA_OFC_TEXT                                               0x3004
366 #define UX_DEVICE_CLASS_PIMA_OFC_HTML                                               0x3005
367 #define UX_DEVICE_CLASS_PIMA_OFC_DPOF                                               0x3006
368 #define UX_DEVICE_CLASS_PIMA_OFC_AIFF                                               0x3007
369 #define UX_DEVICE_CLASS_PIMA_OFC_WAV                                                0x3008
370 #define UX_DEVICE_CLASS_PIMA_OFC_MP3                                                0x3009
371 #define UX_DEVICE_CLASS_PIMA_OFC_AVI                                                0x300A
372 #define UX_DEVICE_CLASS_PIMA_OFC_MPEG                                               0x300B
373 #define UX_DEVICE_CLASS_PIMA_OFC_ASF                                                0x300C
374 #define UX_DEVICE_CLASS_PIMA_OFC_DEFINED                                            0x3800
375 #define UX_DEVICE_CLASS_PIMA_OFC_EXIF_JPEG                                          0x3801
376 #define UX_DEVICE_CLASS_PIMA_OFC_TIFF_EP                                            0x3802
377 #define UX_DEVICE_CLASS_PIMA_OFC_FLASHPIX                                           0x3803
378 #define UX_DEVICE_CLASS_PIMA_OFC_BMP                                                0x3804
379 #define UX_DEVICE_CLASS_PIMA_OFC_CIFF                                               0x3805
380 #define UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_2                                        0x3806
381 #define UX_DEVICE_CLASS_PIMA_OFC_GIF                                                0x3807
382 #define UX_DEVICE_CLASS_PIMA_OFC_JFIF                                               0x3808
383 #define UX_DEVICE_CLASS_PIMA_OFC_CD                                                 0x3809
384 #define UX_DEVICE_CLASS_PIMA_OFC_PICT                                               0x380A
385 #define UX_DEVICE_CLASS_PIMA_OFC_PNG                                                0x380B
386 #define UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_3                                        0x380C
387 #define UX_DEVICE_CLASS_PIMA_OFC_TIFF                                               0x380D
388 #define UX_DEVICE_CLASS_PIMA_OFC_TIFF_IT                                            0x380E
389 #define UX_DEVICE_CLASS_PIMA_OFC_JP2                                                0x380F
390 #define UX_DEVICE_CLASS_PIMA_OFC_JPX                                                0x3810
391 #define UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_FIRMWARE                                 0xB802
392 #define UX_DEVICE_CLASS_PIMA_OFC_WINDOWS_IMAGE_FORMAT                               0xB881
393 #define UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_AUDIO                                    0xB900
394 #define UX_DEVICE_CLASS_PIMA_OFC_WMA                                                0xB901
395 #define UX_DEVICE_CLASS_PIMA_OFC_OGG                                                0xB902
396 #define UX_DEVICE_CLASS_PIMA_OFC_AAC                                                0xB903
397 #define UX_DEVICE_CLASS_PIMA_OFC_AUDIBLE                                            0xB904
398 #define UX_DEVICE_CLASS_PIMA_OFC_FLAC                                               0xB906
399 #define UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_VIDEO                                    0xB980
400 #define UX_DEVICE_CLASS_PIMA_OFC_WMV                                                0xB981
401 #define UX_DEVICE_CLASS_PIMA_OFC_MP4_CONTAINER                                      0xB982
402 #define UX_DEVICE_CLASS_PIMA_OFC_MP2                                                0xB983
403 #define UX_DEVICE_CLASS_PIMA_OFC_3GP_CONTAINER                                      0xB984
404 #define UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_COLLECTION                               0xBA00
405 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_MULTIMEDIA_ALBUM                          0xBA01
406 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_IMAGE_ALBUM                               0xBA02
407 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_AUDIO_ALBUM                               0xBA03
408 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_VIDEO_ALBUM                               0xBA04
409 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_AUDIO_AND_VIDEO_PLAYLIST                  0xBA05
410 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_CONTACT_GROUP                             0xBA06
411 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_MESSAGE_FOLDER                            0xBA07
412 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_CHAPTERED_PRODUCTION                      0xBA08
413 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_AUDIO_PLAYLIST                            0xBA09
414 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_VIDEO_PLAYLIST                            0xBA0A
415 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_MEDIACAST                                 0xBA0B
416 #define UX_DEVICE_CLASS_PIMA_OFC_WPL_PLAYLIST                                       0xBA10
417 #define UX_DEVICE_CLASS_PIMA_OFC_M3U_PLAYLIST                                       0xBA11
418 #define UX_DEVICE_CLASS_PIMA_OFC_MPL_PLAYLIST                                       0xBA12
419 #define UX_DEVICE_CLASS_PIMA_OFC_ASX_PLAYLIST                                       0xBA13
420 #define UX_DEVICE_CLASS_PIMA_OFC_PLS_PLAYLIST                                       0xBA14
421 #define UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_DOCUMENT                                 0xBA80
422 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_DOCUMENT                                  0xBA81
423 #define UX_DEVICE_CLASS_PIMA_OFC_XML_DOCUMENT                                       0xBA82
424 #define UX_DEVICE_CLASS_PIMA_OFC_MICROSOFT_WORD_DOCUMENT                            0xBA83
425 #define UX_DEVICE_CLASS_PIMA_OFC_MHT_COMPILED_HTML_DOCUMENT                         0xBA84
426 #define UX_DEVICE_CLASS_PIMA_OFC_MICROSOFT_EXCEL_SPREADSHEET                        0xBA85
427 #define UX_DEVICE_CLASS_PIMA_OFC_MICROSOFT_POWERPOINT_PRESENTATION                  0xBA86
428 #define UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_MESSAGE                                  0xBB00
429 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_MESSAGE                                   0xBB01
430 #define UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_CONTACT                                  0xBB80
431 #define UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_CONTACT                                   0xBB81
432 #define UX_DEVICE_CLASS_PIMA_OFC_VCARD2                                             0xBB82
433 
434 /* Define PIMA Device Format Codes.  */
435 
436 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_UNDEFINED                                     0x5000
437 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_BATTERY_LEVEL                                 0x5001
438 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_FUNCTIONAL_MODE                               0x5002
439 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_IMAGE_SIZE                                    0x5003
440 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_COMPRESSION_SETTING                           0x5004
441 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_WHITE_BALANCE                                 0x5005
442 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_RGB_GAIN                                      0x5006
443 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_F_NUMBER                                      0x5007
444 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_FOCAL_LENGTH                                  0x5008
445 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_FOCUS_DISTANCE                                0x5009
446 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_FOCUS_MODE                                    0x500A
447 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_METERING_MODE                        0x500B
448 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_FLASH_MODE                                    0x500C
449 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_TIME                                 0x500D
450 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_PROGRAM_MODE                         0x500E
451 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_INDEX                                0x500F
452 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_BIAS_COMPENSATION                    0x5010
453 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_DATE_TIME                                     0x5011
454 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_CAPTURE_DELAY                                 0x5012
455 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_STILL_CAPTURE_MODE                            0x5013
456 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_CONTRAST                                      0x5014
457 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_SHARPNESS                                     0x5015
458 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_DIGITAL_ZOOM                                  0x5016
459 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_EFFECT_MODE                                   0x5017
460 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_BURST_NUMBER                                  0x5018
461 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_BURST_INTERVAL                                0x5019
462 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_TIME_LAPSE_NUMBER                             0x501A
463 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_TIME_LAPSE_INTERVAL                           0x501B
464 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_FOCUS_METERING_MODE                           0x501C
465 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_UPLOAD_URL                                    0x501D
466 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_ARTIST                                        0x501E
467 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_COPYRIGHT_INFO                                0x501F
468 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_SYNCHRONIZATION_PARTNER                       0xD401
469 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_DEVICE_FRIENDLY_NAME                          0xD402
470 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_VOLUME                                        0xD403
471 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_SUPPORTED_FORMATS_ORDERED                     0xD404
472 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_DEVICE_ICON                                   0xD405
473 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_PLAYBACK_RATE                                 0xD410
474 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_PLAYBACK_OBJECT                               0xD411
475 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_PLAYBACK_CONTAINER                            0xD412
476 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_SESSION_INITIATOR_VERSION_INFO                0xD406
477 #define UX_DEVICE_CLASS_PIMA_DEV_PROP_PERCEIVED_DEVICE_TYPE                         0xD407
478 
479 /* Define PIMA Object Format Codes.  */
480 
481 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_STORAGEID                                  0xDC01
482 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FORMAT                              0xDC02
483 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PROTECTION_STATUS                          0xDC03
484 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_SIZE                                0xDC04
485 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ASSOCIATION_TYPE                           0xDC05
486 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ASSOCIATION_DESC                           0xDC06
487 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FILE_NAME                           0xDC07
488 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_DATE_CREATED                               0xDC08
489 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_DATE_MODIFIED                              0xDC09
490 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_KEYWORDS                                   0xDC0A
491 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PARENT_OBJECT                              0xDC0B
492 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ALLOWED_FOLDER_CONTENTS                    0xDC0C
493 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_HIDDEN                                     0xDC0D
494 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SYSTEM_OBJECT                              0xDC0E
495 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PERSISTENT_UNIQUE_OBJECT_IDENTIFIER        0xDC41
496 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SYNCID                                     0xDC42
497 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PROPERTY_BAG                               0xDC43
498 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NAME                                       0xDC44
499 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_CREATED_BY                                 0xDC45
500 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ARTIST                                     0xDC46
501 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_DATE_AUTHORED                              0xDC47
502 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_DESCRIPTION                                0xDC48
503 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_URL_REFERENCE                              0xDC49
504 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_LANGUAGE_LOCALE                            0xDC4A
505 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_COPYRIGHT_INFORMATION                      0xDC4B
506 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SOURCE                                     0xDC4C
507 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ORIGIN_LOCATION                            0xDC4D
508 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_DATE_ADDED                                 0xDC4E
509 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NON_CONSUMABLE                             0xDC4F
510 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_CORRUPT_UNPLAYABLE                         0xDC50
511 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PRODUCER_SERIA_LNUMBER                     0xDC51
512 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_REPRESENTATIVE_SAMPLE_FORMAT               0xDC81
513 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_REPRESENTATIVE_SAMPLE_SIZE                 0xDC82
514 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_REPRESENTATIVE_SAMPLE_HEIGHT               0xDC83
515 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_REPRESENTATIVE_SAMPLE_WIDTH                0xDC84
516 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_REPRESENTATIVE_SAMPLE_DURATION             0xDC85
517 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_REPRESENTATIVE_SAMPLE_DATA                 0xDC86
518 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_WIDTH                                      0xDC87
519 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_HEIGHT                                     0xDC88
520 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_DURATION                                   0xDC89
521 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_RATING                                     0xDC8A
522 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_TRACK                                      0xDC8B
523 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_GENRE                                      0xDC8C
524 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_CREDITS                                    0xDC8D
525 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_LYRICS                                     0xDC8E
526 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SUBSCRIPTION_CONTENT_ID                    0xDC8F
527 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PRODUCED_BY                                0xDC90
528 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_USE_COUNT                                  0xDC91
529 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SKIP_COUNT                                 0xDC92
530 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_LAST_ACCESSED                              0xDC93
531 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PARENTAL_RATING                            0xDC94
532 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_META_GENRE                                 0xDC95
533 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_COMPOSER                                   0xDC96
534 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_EFFECTIVE_RATING                           0xDC97
535 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SUBTITLE                                   0xDC98
536 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ORIGINAL_RELEASE_DATE                      0xDC99
537 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ALBUM_NAME                                 0xDC9A
538 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ALBUM_ARTIST                               0xDC9B
539 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_MOOD                                       0xDC9C
540 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_DRM_STATUS                                 0xDC9D
541 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SUB_DESCRIPTION                            0xDC9E
542 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_IS_CROPPED                                 0xDCD1
543 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_IS_COLOUR_CORRECTED                        0xDCD2
544 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_IMAGE_BIT_DEPTH                            0xDCD3
545 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_FNUMBER                                    0xDCD4
546 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_EXPOSURE_TIME                              0xDCD5
547 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_EXPOSURE_INDEX                             0xDCD6
548 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_TOTAL_BITRATE                              0xDE91
549 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_BITRATE_TYPE                               0xDE92
550 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SAMPLE_RATE                                0xDE93
551 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NUMBER_OF_CHANNELS                         0xDE94
552 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_AUDIO_BITDEPTH                             0xDE95
553 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SCAN_TYPE                                  0xDE97
554 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_AUDIO_WAVE_CODEC                           0xDE99
555 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_AUDIO_BITRATE                              0xDE9A
556 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_VIDEO_FOURCC_CODEC                         0xDE9B
557 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_VIDEO_BITRATE                              0xDE9C
558 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_FRAMES_PER_THOUSAND_SECONDS                0xDE9D
559 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_KEYFRAME_DISTANCE                          0xDE9E
560 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_BUFFER_SIZE                                0xDE9F
561 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ENCODING_QUALITY                           0xDEA0
562 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ENCODING_PROFILE                           0xDEA1
563 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_DISPLAY_NAME                               0xDCE0
564 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_BODY_TEXT                                  0xDCE1
565 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SUBJECT                                    0xDCE2
566 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PRIORITY                                   0xDCE3
567 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_GIVEN_NAME                                 0xDD00
568 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_MIDDLE_NAMES                               0xDD01
569 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_FAMILY_NAME                                0xDD02
570 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PREFIX                                     0xDD03
571 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SUFFIX                                     0xDD04
572 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PHONETIC_GIVEN_NAME                        0xDD05
573 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PHONETIC_FAMILY_NAME                       0xDD06
574 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_EMAIL_PRIMARY                              0xDD07
575 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_EMAIL_PERSONAL_1                           0xDD08
576 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_EMAIL_PERSONAL_2                           0xDD09
577 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_EMAIL_BUSINESS_1                           0xDD0A
578 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_EMAIL_BUSINESS_2                           0xDD0B
579 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_EMAIL_OTHERS                               0xDD0C
580 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PHONE_NUMBER_PRIMARY                       0xDD0D
581 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PHONE_NUMBER_PERSONAL                      0xDD0E
582 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PHONE_NUMBER_PERSONAL_2                    0xDD0F
583 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PHONE_NUMBER_BUSINESS                      0xDD10
584 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PHONE_NUMBER_BUSINESS_2                    0xDD11
585 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PHONE_NUMBER_MOBILE                        0xDD12
586 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PHONE_NUMBER_MOBILE_2                      0xDD13
587 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_FAX_NUMBER_PRIMARY                         0xDD14
588 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_FAX_NUMBER_PERSONAL                        0xDD15
589 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_FAX_NUMBER_BUSINESS                        0xDD16
590 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PAGER_NUMBER                               0xDD17
591 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PHONE_NUMBER_OTHERS                        0xDD18
592 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PRIMARY_WEB_ADDRESS                        0xDD19
593 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PERSONAL_WEB_ADDRESS                       0xDD1A
594 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_BUSINESS_WEB_ADDRESS                       0xDD1B
595 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_INSTANT_MESSENGER_ADDRESS                  0xDD1C
596 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_INSTANT_MESSENGER_ADDRESS_2                0xDD1D
597 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_INSTANT_MESSENGER_ADDRESS_3                0xDD1E
598 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_PERSONAL_FULL               0xDD1F
599 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_PERSONAL_LINE_1             0xDD20
600 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_PERSONAL_LINE_2             0xDD21
601 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_PERSONAL_CITY               0xDD22
602 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_PERSONAL_REGION             0xDD23
603 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_PERSONAL_POSTAL_CODE        0xDD24
604 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_PERSONAL_COUNTRY            0xDD25
605 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_BUSINESS_FULL               0xDD26
606 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_BUSINESS_LINE_1             0xDD27
607 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_BUSINESS_LINE_2             0xDD28
608 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_BUSINESS_CITY               0xDD29
609 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_BUSINESS_REGION             0xDD2A
610 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_BUSINESS_POSTAL_CODE        0xDD2B
611 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_BUSINESS_COUNTRY            0xDD2C
612 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_OTHER_FULL                  0xDD2D
613 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_OTHER_LINE_1                0xDD2E
614 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_OTHER_LINE_2                0xDD2F
615 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_OTHER_CITY                  0xDD30
616 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_OTHER_REGION                0xDD31
617 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_OTHER_POSTAL_CODE           0xDD32
618 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_POSTAL_ADDRESS_OTHER_COUNTRY               0xDD33
619 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ORGANIZATION_NAME                          0xDD34
620 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PHONETIC_ORGANIZATION_NAME                 0xDD35
621 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ROLE                                       0xDD36
622 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_BIRTHDATE                                  0xDD37
623 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_MESSAGE_TO                                 0xDD40
624 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_MESSAGE_CC                                 0xDD41
625 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_MESSAGE_BCC                                0xDD42
626 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_MESSAGE_READ                               0xDD43
627 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_MESSAGE_RECEIVED_TIME                      0xDD44
628 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_MESSAGE_SENDER                             0xDD45
629 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ACTIVITY_BEGIN_TIME                        0xDD50
630 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ACTIVITY_END_TIME                          0xDD51
631 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ACTIVITY_LOCATION                          0xDD52
632 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ACTIVITY_REQUIRED_ATTENDEES                0xDD54
633 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ACTIVITY_OPTIONAL_ATTENDEES                0xDD55
634 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ACTIVITY_RESOURCES                         0xDD56
635 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ACTIVITY_ACCEPTED                          0xDD57
636 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OWNER                                      0xDD5D
637 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_EDITOR                                     0xDD5E
638 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_WEBMASTER                                  0xDD5F
639 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_URL_SOURCE                                 0xDD60
640 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_URL_DESTINATION                            0xDD61
641 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_TIME_BOOKMARK                              0xDD62
642 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_BOOKMARK                            0xDD63
643 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_BYTE_BOOKMARK                              0xDD64
644 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_LAST_BUILD_DATE                            0xDD70
645 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_TIME_TO_LIVE                               0xDD71
646 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROP_MEDIA_GUID                                 0xDD72
647 
648 /* Define PIMA Object Protection Status Values.  */
649 
650 #define UX_DEVICE_CLASS_PIMA_OPS_NO_PROTECTION                                      0x0000
651 #define UX_DEVICE_CLASS_PIMA_OPS_READ_ONLY                                          0x0001
652 
653 /* Define PIMA Storage Types Codes.  */
654 
655 #define UX_DEVICE_CLASS_PIMA_STC_UNDEFINED                                          0x0000
656 #define UX_DEVICE_CLASS_PIMA_STC_FIXED_ROM                                          0x0001
657 #define UX_DEVICE_CLASS_PIMA_STC_REMOVABLE_ROM                                      0x0002
658 #define UX_DEVICE_CLASS_PIMA_STC_FIXED_RAM                                          0x0003
659 #define UX_DEVICE_CLASS_PIMA_STC_REMOVABLE_RAM                                      0x0004
660 
661 /* Define PIMA File System Types Codes.  */
662 
663 #define UX_DEVICE_CLASS_PIMA_FSTC_UNDEFINED                                         0x0000
664 #define UX_DEVICE_CLASS_PIMA_FSTC_GENERIC_FLAT                                      0x0001
665 #define UX_DEVICE_CLASS_PIMA_FSTC_GENERIC_HIERARCHICAL                              0x0002
666 #define UX_DEVICE_CLASS_PIMA_FSTC_DCF                                               0x0003
667 
668 /* Define PIMA File System Access Types Codes.  */
669 
670 #define UX_DEVICE_CLASS_PIMA_AC_READ_WRITE                                          0x0000
671 #define UX_DEVICE_CLASS_PIMA_AC_RO_WITHOUT_OBJECT_DELETION                          0x0001
672 #define UX_DEVICE_CLASS_PIMA_AC_RO_WITH_OBJECT_DELETION                             0x0002
673 
674 /* Define PIMA types.  */
675 #define UX_DEVICE_CLASS_PIMA_TYPES_INT8                                             0x0001
676 #define UX_DEVICE_CLASS_PIMA_TYPES_UINT8                                            0x0002
677 #define UX_DEVICE_CLASS_PIMA_TYPES_INT16                                            0x0003
678 #define UX_DEVICE_CLASS_PIMA_TYPES_UINT16                                           0x0004
679 #define UX_DEVICE_CLASS_PIMA_TYPES_INT32                                            0x0005
680 #define UX_DEVICE_CLASS_PIMA_TYPES_UINT32                                           0x0006
681 #define UX_DEVICE_CLASS_PIMA_TYPES_INT64                                            0x0007
682 #define UX_DEVICE_CLASS_PIMA_TYPES_UINT64                                           0x0008
683 #define UX_DEVICE_CLASS_PIMA_TYPES_INT128                                           0x0009
684 #define UX_DEVICE_CLASS_PIMA_TYPES_UINT128                                          0x000A
685 #define UX_DEVICE_CLASS_PIMA_TYPES_AINT8                                            0x4001
686 #define UX_DEVICE_CLASS_PIMA_TYPES_AUINT8                                           0x4002
687 #define UX_DEVICE_CLASS_PIMA_TYPES_AINT16                                           0x4003
688 #define UX_DEVICE_CLASS_PIMA_TYPES_AUINT16                                          0x4004
689 #define UX_DEVICE_CLASS_PIMA_TYPES_AINT32                                           0x4005
690 #define UX_DEVICE_CLASS_PIMA_TYPES_AUINT32                                          0x4006
691 #define UX_DEVICE_CLASS_PIMA_TYPES_AINT64                                           0x4007
692 #define UX_DEVICE_CLASS_PIMA_TYPES_AUINT64                                          0x4008
693 #define UX_DEVICE_CLASS_PIMA_TYPES_AINT128                                          0x4009
694 #define UX_DEVICE_CLASS_PIMA_TYPES_AUINT128                                         0x400A
695 #define UX_DEVICE_CLASS_PIMA_TYPES_STR                                              0xFFFF
696 
697 /* Define PIMA Device Info fields.  */
698 
699 #define UX_DEVICE_CLASS_PIMA_DEVICE_INFO_STANDARD_VERSION               (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 0x0000)
700 #define UX_DEVICE_CLASS_PIMA_DEVICE_INFO_VENDOR_EXTENSION_ID            (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 0x0002)
701 #define UX_DEVICE_CLASS_PIMA_DEVICE_INFO_VENDOR_EXTENSION_VERSION       (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 0x0006)
702 #define UX_DEVICE_CLASS_PIMA_DEVICE_INFO_VENDOR_EXTENSION_DESC          (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 0x0008)
703 
704 /* Define PIMA MTP OBJECT PROPERTY DATASET.  */
705 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROPERTY_DATASET_CODE                           0x0000
706 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROPERTY_DATASET_DATATYPE                       0x0002
707 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROPERTY_DATASET_GETSET                         0x0004
708 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROPERTY_DATASET_VALUE                          0x0005
709 
710 /* Define PIMA Dataset equivalences.  */
711 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROPERTY_DATASET_VALUE_GET                      0x00
712 #define UX_DEVICE_CLASS_PIMA_OBJECT_PROPERTY_DATASET_VALUE_GETSET                   0x01
713 
714 /* Define PIMA event info structure.  */
715 
716 typedef struct UX_SLAVE_CLASS_PIMA_EVENT_STRUCT
717 {
718     ULONG                   ux_device_class_pima_event_code;
719     ULONG                   ux_device_class_pima_event_session_id;
720     ULONG                   ux_device_class_pima_event_transaction_id;
721     ULONG                   ux_device_class_pima_event_parameter_1;
722     ULONG                   ux_device_class_pima_event_parameter_2;
723     ULONG                   ux_device_class_pima_event_parameter_3;
724 
725 } UX_SLAVE_CLASS_PIMA_EVENT;
726 
727 /* Define PIMA object info structure.  */
728 
729 typedef struct UX_SLAVE_CLASS_PIMA_OBJECT_STRUCT
730 {
731 
732     ULONG                   ux_device_class_pima_object_storage_id;
733     USHORT                  ux_device_class_pima_object_format;
734     USHORT                  ux_device_class_pima_object_protection_status;
735     ULONG                   ux_device_class_pima_object_compressed_size;
736     USHORT                  ux_device_class_pima_object_thumb_format;
737     USHORT                  _align_thumb_compressed_size;
738     ULONG                   ux_device_class_pima_object_thumb_compressed_size;
739     ULONG                   ux_device_class_pima_object_thumb_pix_width;
740     ULONG                   ux_device_class_pima_object_thumb_pix_height;
741     ULONG                   ux_device_class_pima_object_image_pix_width;
742     ULONG                   ux_device_class_pima_object_image_pix_height;
743     ULONG                   ux_device_class_pima_object_image_bit_depth;
744     ULONG                   ux_device_class_pima_object_parent_object;
745     USHORT                  ux_device_class_pima_object_association_type;
746     USHORT                  _align_association_desc;
747     ULONG                   ux_device_class_pima_object_association_desc;
748     ULONG                   ux_device_class_pima_object_sequence_number;
749     UCHAR                   ux_device_class_pima_object_filename[UX_DEVICE_CLASS_PIMA_UNICODE_MAX_LENGTH];
750     UCHAR                   ux_device_class_pima_object_capture_date[UX_DEVICE_CLASS_PIMA_DATE_TIME_STRING_MAX_LENGTH];
751     UCHAR                   ux_device_class_pima_object_modification_date[UX_DEVICE_CLASS_PIMA_DATE_TIME_STRING_MAX_LENGTH];
752     UCHAR                   ux_device_class_pima_object_keywords[UX_DEVICE_CLASS_PIMA_UNICODE_MAX_LENGTH];
753     ULONG                   ux_device_class_pima_object_state;
754     ULONG                   ux_device_class_pima_object_offset;
755     ULONG                   ux_device_class_pima_object_transfer_status;
756     ULONG                   ux_device_class_pima_object_handle_id;
757     ULONG                   ux_device_class_pima_object_length;
758     UCHAR                   *ux_device_class_pima_object_buffer;
759 
760 } UX_SLAVE_CLASS_PIMA_OBJECT;
761 
762 #define UX_SLAVE_CLASS_PIMA_OBJECT_DATA_LENGTH ((15 * sizeof(ULONG)) + \
763                                                     UX_DEVICE_CLASS_PIMA_UNICODE_MAX_LENGTH + \
764                                                     UX_DEVICE_CLASS_PIMA_DATE_TIME_STRING_MAX_LENGTH + \
765                                                     UX_DEVICE_CLASS_PIMA_DATE_TIME_STRING_MAX_LENGTH + \
766                                                     UX_DEVICE_CLASS_PIMA_UNICODE_MAX_LENGTH)
767 
768 /* Define PIMA session info structure.  Not used in the device. Here for structure compatibility. */
769 
770 typedef struct UX_SLAVE_CLASS_PIMA_SESSION_STRUCT
771 {
772 
773     ULONG                   ux_device_class_pima_session_id;
774 
775 } UX_SLAVE_CLASS_PIMA_SESSION;
776 
777 /* Define PIMA device info structure.  */
778 
779 typedef struct UX_SLAVE_CLASS_PIMA_DEVICE_STRUCT
780 {
781 
782     ULONG                   ux_device_class_pima_device_standard_version;
783     ULONG                   ux_device_class_pima_device_vendor_extension_id;
784     ULONG                   ux_device_class_pima_device_vendor_extension_version;
785     UCHAR                   ux_device_class_pima_device_vendor_extension_desc[UX_DEVICE_CLASS_PIMA_UNICODE_MAX_LENGTH];
786     ULONG                   ux_device_class_pima_device_functional_mode;
787     UCHAR                   ux_device_class_pima_device_operations_supported[UX_DEVICE_CLASS_PIMA_ARRAY_MAX_LENGTH];
788     UCHAR                   ux_device_class_pima_device_events_supported[UX_DEVICE_CLASS_PIMA_ARRAY_MAX_LENGTH];
789     UCHAR                   ux_device_class_pima_device_properties_supported[UX_DEVICE_CLASS_PIMA_ARRAY_MAX_LENGTH];
790     UCHAR                   ux_device_class_pima_device_capture_formats[UX_DEVICE_CLASS_PIMA_ARRAY_MAX_LENGTH];
791     UCHAR                   ux_device_class_pima_device_image_formats[UX_DEVICE_CLASS_PIMA_ARRAY_MAX_LENGTH];
792     UCHAR                   ux_device_class_pima_device_manufacturer[UX_DEVICE_CLASS_PIMA_UNICODE_MAX_LENGTH];
793     UCHAR                   ux_device_class_pima_device_model[UX_DEVICE_CLASS_PIMA_DATE_TIME_STRING_MAX_LENGTH];
794     UCHAR                   ux_device_class_pima_device_version[UX_DEVICE_CLASS_PIMA_DATE_TIME_STRING_MAX_LENGTH];
795     UCHAR                   ux_device_class_pima_device_serial_number[UX_DEVICE_CLASS_PIMA_UNICODE_MAX_LENGTH];
796 
797 } UX_SLAVE_CLASS_PIMA_DEVICE;
798 
799 /* Define PIMA storage info structure.  */
800 
801 typedef struct UX_SLAVE_CLASS_PIMA_STORAGE_STRUCT
802 {
803 
804     USHORT                  ux_device_class_pima_storage_type;
805     USHORT                  ux_device_class_pima_storage_file_system_type;
806     USHORT                  ux_device_class_pima_storage_access_capability;
807     USHORT                  _align_max_capacity_low;
808     ULONG                   ux_device_class_pima_storage_max_capacity_low;
809     ULONG                   ux_device_class_pima_storage_max_capacity_high;
810     ULONG                   ux_device_class_pima_storage_free_space_bytes_low;
811     ULONG                   ux_device_class_pima_storage_free_space_bytes_high;
812     ULONG                   ux_device_class_pima_storage_free_space_images;
813     UCHAR                   ux_device_class_pima_storage_description[UX_DEVICE_CLASS_PIMA_UNICODE_MAX_LENGTH];
814     UCHAR                   ux__class_pima_storage_volume_label[UX_DEVICE_CLASS_PIMA_UNICODE_MAX_LENGTH];
815 
816 } UX_SLAVE_CLASS_PIMA_STORAGE;
817 
818 /* Define PIMA structure.  */
819 
820 typedef struct UX_SLAVE_CLASS_PIMA_STRUCT
821 {
822 
823     UX_SLAVE_INTERFACE      *ux_slave_class_pima_interface;
824     UX_SLAVE_ENDPOINT       *ux_device_class_pima_bulk_in_endpoint;
825     UX_SLAVE_ENDPOINT       *ux_device_class_pima_bulk_out_endpoint;
826     UX_SLAVE_ENDPOINT       *ux_device_class_pima_interrupt_endpoint;
827 #if UX_DEVICE_ENDPOINT_BUFFER_OWNER == 1
828     UCHAR                   *ux_device_class_pima_endpoint_buffer;
829 #endif
830     UINT                    ux_device_class_pima_state;
831     USHORT                  ux_device_class_pima_device_status;
832     ULONG                   ux_device_class_pima_session_id;
833     ULONG                   ux_device_class_pima_current_object_handle;
834     ULONG                   ux_device_class_pima_transaction_id;
835     UCHAR                   *ux_device_class_pima_manufacturer;
836     UCHAR                   *ux_device_class_pima_model;
837     UCHAR                   *ux_device_class_pima_device_version;
838     UCHAR                   *ux_device_class_pima_serial_number;
839     ULONG                   ux_device_class_pima_storage_id;
840     ULONG                   ux_device_class_pima_storage_type;
841     ULONG                   ux_device_class_pima_storage_file_system_type;
842     ULONG                   ux_device_class_pima_storage_access_capability;
843     ULONG                   ux_device_class_pima_storage_max_capacity_low;
844     ULONG                   ux_device_class_pima_storage_max_capacity_high;
845     ULONG                   ux_device_class_pima_storage_free_space_low;
846     ULONG                   ux_device_class_pima_storage_free_space_high;
847     ULONG                   ux_device_class_pima_storage_free_space_image;
848     UCHAR                   *ux_device_class_pima_storage_description;
849     UCHAR                   *ux_device_class_pima_storage_volume_label;
850 #if !defined(UX_DEVICE_STANDALONE)
851     UX_SEMAPHORE            ux_device_class_pima_semaphore;
852     UX_THREAD               ux_device_class_pima_interrupt_thread;
853     UCHAR                   *ux_device_class_pima_interrupt_thread_stack;
854     UX_SEMAPHORE            ux_device_class_pima_interrupt_thread_semaphore;
855 #endif
856     UX_SLAVE_CLASS_PIMA_EVENT
857                             *ux_device_class_pima_event_array;
858     UX_SLAVE_CLASS_PIMA_EVENT
859                             *ux_device_class_pima_event_array_head;
860     UX_SLAVE_CLASS_PIMA_EVENT
861                             *ux_device_class_pima_event_array_tail;
862     UX_SLAVE_CLASS_PIMA_EVENT
863                             *ux_device_class_pima_event_array_end;
864     USHORT                  *ux_device_class_pima_device_properties_list;
865     USHORT                  *ux_device_class_pima_supported_capture_formats_list;
866     USHORT                  *ux_device_class_pima_supported_image_formats_list;
867     USHORT                  *ux_device_class_pima_object_properties_list;
868     UINT                    (*ux_device_class_pima_cancel)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima);
869     UINT                    (*ux_device_class_pima_device_reset)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima);
870 
871     UINT                    (*ux_device_class_pima_device_prop_desc_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG device_property, UCHAR **device_prop_dataset, ULONG *device_prop_dataset_length);
872     UINT                    (*ux_device_class_pima_device_prop_value_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG device_property, UCHAR **device_prop_value, ULONG *device_prop_value_length);
873     UINT                    (*ux_device_class_pima_device_prop_value_set)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG device_property, UCHAR *device_prop_value, ULONG device_prop_value_length);
874 
875     UINT                    (*ux_device_class_pima_storage_format)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG storage_id);
876     UINT                    (*ux_device_class_pima_storage_info_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG storage_id);
877     UINT                    (*ux_device_class_pima_object_number_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_format_code, ULONG object_association, ULONG *object_number);
878     UINT                    (*ux_device_class_pima_object_handles_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handles_format_code,
879                                                                         ULONG object_handles_association,
880                                                                         ULONG *object_handles_array,
881                                                                         ULONG object_handles_max_number);
882     UINT                    (*ux_device_class_pima_object_info_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, UX_SLAVE_CLASS_PIMA_OBJECT **object);
883     UINT                    (*ux_device_class_pima_object_data_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, UCHAR *object_buffer, ULONG object_offset,
884                                                                 ULONG object_length_requested, ULONG *object_actual_length);
885     UINT                    (*ux_device_class_pima_object_info_send)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, UX_SLAVE_CLASS_PIMA_OBJECT *object, ULONG storage_id, ULONG parent_object_handle, ULONG *object_handle);
886     UINT                    (*ux_device_class_pima_object_data_send)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, ULONG phase, UCHAR *object_buffer, ULONG object_offset,
887                                                                 ULONG object_length);
888     UINT                    (*ux_device_class_pima_object_delete)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle);
889     UINT                    (*ux_device_class_pima_object_prop_desc_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_property, ULONG object_format_code, UCHAR **object_prop_value_dataset, ULONG *object_prop_value_dataset_length);
890     UINT                    (*ux_device_class_pima_object_prop_value_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, ULONG object_property, UCHAR **object_prop_value, ULONG *object_prop_value_length);
891     UINT                    (*ux_device_class_pima_object_prop_value_set)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, ULONG object_property, UCHAR *object_prop_value, ULONG object_prop_value_length);
892     UINT                    (*ux_device_class_pima_object_references_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, UCHAR **object_handle_array, ULONG *object_handle_array_length);
893     UINT                    (*ux_device_class_pima_object_references_set)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, UCHAR *object_handle_array, ULONG object_handle_array_length);
894     VOID                    *ux_device_class_pima_application;
895     VOID                    (*ux_device_class_pima_instance_activate)(VOID *);
896     VOID                    (*ux_device_class_pima_instance_deactivate)(VOID *);
897 
898 
899 } UX_SLAVE_CLASS_PIMA;
900 
901 /* Define PIMA endpoint buffer settings (when PIMA owns buffer).  */
902 #define UX_DEVICE_CLASS_PIMA_ENDPOINT_BUFFER_SIZE_CALC_OVERFLOW                 \
903     (UX_OVERFLOW_CHECK_MULC_ULONG(UX_DEVICE_CLASS_PIMA_BULK_BUFFER_LENGTH, 2) ||\
904      UX_OVERFLOW_CHECK_ADD_ULONG(UX_DEVICE_CLASS_PIMA_BULK_BUFFER_LENGTH * 2,   \
905                                  UX_DEVICE_CLASS_PIMA_INTERRUPT_BUFFER_LENGTH))
906 #define UX_DEVICE_CLASS_PIMA_ENDPOINT_BUFFER_SIZE       (UX_DEVICE_CLASS_PIMA_BULK_BUFFER_LENGTH * 2 + UX_DEVICE_CLASS_PIMA_INTERRUPT_BUFFER_LENGTH)
907 #define UX_DEVICE_CLASS_PIMA_BULKOUT_BUFFER(pima)       ((pima)->ux_device_class_pima_endpoint_buffer)
908 #define UX_DEVICE_CLASS_PIMA_BULKIN_BUFFER(pima)        (UX_DEVICE_CLASS_PIMA_BULKOUT_BUFFER(pima) + UX_DEVICE_CLASS_PIMA_BULK_BUFFER_LENGTH)
909 #define UX_DEVICE_CLASS_PIMA_INTERRUPTIN_BUFFER(pima)   (UX_DEVICE_CLASS_PIMA_BULKIN_BUFFER(pima) + UX_DEVICE_CLASS_PIMA_BULK_BUFFER_LENGTH)
910 
911 
912 /* Define PIMA initialization command structure.  */
913 
914 typedef struct UX_SLAVE_CLASS_PIMA_PARAMETER_STRUCT
915 {
916 
917     VOID                    (*ux_device_class_pima_instance_activate)(VOID *);
918     VOID                    (*ux_device_class_pima_instance_deactivate)(VOID *);
919     UCHAR                   *ux_device_class_pima_parameter_manufacturer;
920     UCHAR                   *ux_device_class_pima_parameter_model;
921     UCHAR                   *ux_device_class_pima_parameter_device_version;
922     UCHAR                   *ux_device_class_pima_parameter_serial_number;
923     ULONG                   ux_device_class_pima_parameter_storage_id;
924     ULONG                   ux_device_class_pima_parameter_storage_type;
925     ULONG                   ux_device_class_pima_parameter_storage_file_system_type;
926     ULONG                   ux_device_class_pima_parameter_storage_access_capability;
927     ULONG                   ux_device_class_pima_parameter_storage_max_capacity_low;
928     ULONG                   ux_device_class_pima_parameter_storage_max_capacity_high;
929     ULONG                   ux_device_class_pima_parameter_storage_free_space_low;
930     ULONG                   ux_device_class_pima_parameter_storage_free_space_high;
931     ULONG                   ux_device_class_pima_parameter_storage_free_space_image;
932     UCHAR                   *ux_device_class_pima_parameter_storage_description;
933     UCHAR                   *ux_device_class_pima_parameter_storage_volume_label;
934     USHORT                  *ux_device_class_pima_parameter_device_properties_list;
935     USHORT                  *ux_device_class_pima_parameter_supported_capture_formats_list;
936     USHORT                  *ux_device_class_pima_parameter_supported_image_formats_list;
937     USHORT                  *ux_device_class_pima_parameter_object_properties_list;
938 
939     /* PIMA callbacks, return UX success, or PIMA RC code.  */
940     UINT                    (*ux_device_class_pima_parameter_cancel)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima);
941     UINT                    (*ux_device_class_pima_parameter_device_reset)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima);
942     UINT                    (*ux_device_class_pima_parameter_device_prop_desc_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG device_property, UCHAR **device_prop_dataset, ULONG *device_prop_dataset_length);
943     UINT                    (*ux_device_class_pima_parameter_device_prop_value_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG device_property, UCHAR **device_prop_value, ULONG *device_prop_value_length);
944     UINT                    (*ux_device_class_pima_parameter_device_prop_value_set)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG device_property, UCHAR *device_prop_value, ULONG device_prop_value_length);
945     UINT                    (*ux_device_class_pima_parameter_storage_format)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG storage_id);
946     UINT                    (*ux_device_class_pima_parameter_storage_info_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG storage_id);
947     UINT                    (*ux_device_class_pima_parameter_object_number_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_format_code, ULONG object_association, ULONG *object_number);
948     UINT                    (*ux_device_class_pima_parameter_object_handles_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handles_format_code,
949                                                                         ULONG object_handles_association,
950                                                                         ULONG *object_handles_array,
951                                                                         ULONG object_handles_max_number);
952     UINT                    (*ux_device_class_pima_parameter_object_info_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, UX_SLAVE_CLASS_PIMA_OBJECT **object);
953     UINT                    (*ux_device_class_pima_parameter_object_data_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, UCHAR *object_buffer, ULONG object_offset,
954                                                                 ULONG object_length_requested, ULONG *object_actual_length);
955 
956     UINT                    (*ux_device_class_pima_parameter_object_info_send)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, UX_SLAVE_CLASS_PIMA_OBJECT *object, ULONG storage_id, ULONG parent_object_handle, ULONG *object_handle);
957     UINT                    (*ux_device_class_pima_parameter_object_data_send)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, ULONG phase ,UCHAR *object_buffer, ULONG object_offset,
958                                                                 ULONG object_length);
959     UINT                    (*ux_device_class_pima_parameter_object_delete)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle);
960     UINT                    (*ux_device_class_pima_parameter_object_prop_desc_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, ULONG object_property, UCHAR **object_prop_dataset, ULONG *object_prop_dataset_length);
961     UINT                    (*ux_device_class_pima_parameter_object_prop_value_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, ULONG object_property, UCHAR **object_prop_value, ULONG *object_prop_value_length);
962     UINT                    (*ux_device_class_pima_parameter_object_prop_value_set)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, ULONG object_property, UCHAR *object_prop_value, ULONG object_prop_value_length);
963     UINT                    (*ux_device_class_pima_parameter_object_references_get)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, UCHAR **object_handle_array, ULONG *object_handle_array_length);
964     UINT                    (*ux_device_class_pima_parameter_object_references_set)(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, UCHAR *object_handle_array, ULONG object_handle_array_length);
965     VOID                    *ux_device_class_pima_parameter_application;
966 
967 
968 } UX_SLAVE_CLASS_PIMA_PARAMETER;
969 
970 
971 /* Define PIMA Object decompaction structure.  */
972 
973 #define UX_DEVICE_CLASS_PIMA_OBJECT_MAX_LENGTH                              512
974 #define UX_DEVICE_CLASS_PIMA_OBJECT_VARIABLE_OFFSET                         52
975 #define UX_DEVICE_CLASS_PIMA_OBJECT_ENTRIES                                 15
976 
977 
978 /* Define PIMA storage decompaction structure.  */
979 
980 #define UX_DEVICE_CLASS_PIMA_STORAGE_TYPE                                   (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 0 )
981 #define UX_DEVICE_CLASS_PIMA_STORAGE_FILE_SYSTEM_TYPE                       (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 2 )
982 #define UX_DEVICE_CLASS_PIMA_STORAGE_ACCESS_CAPABILITY                      (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 4 )
983 #define UX_DEVICE_CLASS_PIMA_STORAGE_MAX_CAPACITY_LOW                       (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 6 )
984 #define UX_DEVICE_CLASS_PIMA_STORAGE_MAX_CAPACITY_HIGH                      (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 10)
985 #define UX_DEVICE_CLASS_PIMA_STORAGE_FREE_SPACE_LOW                         (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 14)
986 #define UX_DEVICE_CLASS_PIMA_STORAGE_FREE_SPACE_HIGH                        (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 18)
987 #define UX_DEVICE_CLASS_PIMA_STORAGE_FREE_SPACE_IMAGE                       (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 22)
988 #define UX_DEVICE_CLASS_PIMA_STORAGE_FREE_STORAGE_DESCRIPTION               (UX_DEVICE_CLASS_PIMA_DATA_HEADER_SIZE + 26)
989 
990 /* Define Pima Class function prototypes.  */
991 UINT  _ux_device_class_pima_initialize(UX_SLAVE_CLASS_COMMAND *command);
992 UINT  _ux_device_class_pima_activate(UX_SLAVE_CLASS_COMMAND *command);
993 UINT  _ux_device_class_pima_deactivate(UX_SLAVE_CLASS_COMMAND *command);
994 UINT  _ux_device_class_pima_control_request(UX_SLAVE_CLASS_COMMAND *command);
995 UINT  _ux_device_class_pima_device_info_send(UX_SLAVE_CLASS_PIMA *pima);
996 UINT  _ux_device_class_pima_entry(UX_SLAVE_CLASS_COMMAND *command);
997 UINT  _ux_device_class_pima_event_get(UX_SLAVE_CLASS_PIMA *pima,
998                                       UX_SLAVE_CLASS_PIMA_EVENT *pima_event);
999 UINT  _ux_device_class_pima_event_set(UX_SLAVE_CLASS_PIMA *pima,
1000                                       UX_SLAVE_CLASS_PIMA_EVENT *pima_event);
1001 VOID  _ux_device_class_pima_interrupt_thread(ULONG pima_class);
1002 UINT  _ux_device_class_pima_response_send(UX_SLAVE_CLASS_PIMA *pima, ULONG response_code,
1003                                             ULONG number_parameters,
1004                                             ULONG parameter_1, ULONG parameter_2, ULONG paramater_3);
1005 VOID  _ux_device_class_pima_thread(ULONG pima_class);
1006 UINT  _ux_device_class_pima_object_handles_send(UX_SLAVE_CLASS_PIMA *pima,
1007                                                     ULONG storage_id,
1008                                                     ULONG object_format_code,
1009                                                     ULONG object_association);
1010 UINT  _ux_device_class_pima_objects_number_send(UX_SLAVE_CLASS_PIMA *pima,
1011                                                     ULONG storage_id,
1012                                                     ULONG object_format_code,
1013                                                     ULONG object_association);
1014 
1015 UINT  _ux_device_class_pima_device_prop_desc_get(UX_SLAVE_CLASS_PIMA *pima, ULONG device_property_code);
1016 UINT  _ux_device_class_pima_device_prop_value_get(UX_SLAVE_CLASS_PIMA *pima, ULONG device_property_code);
1017 UINT  _ux_device_class_pima_device_prop_value_set(UX_SLAVE_CLASS_PIMA *pima, ULONG device_property_code);
1018 UINT  _ux_device_class_pima_object_info_get(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle);
1019 UINT  _ux_device_class_pima_object_info_send(UX_SLAVE_CLASS_PIMA *pima, ULONG storage_id, ULONG parent_object_handle);
1020 UINT  _ux_device_class_pima_object_data_get(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle);
1021 UINT  _ux_device_class_pima_object_data_send(UX_SLAVE_CLASS_PIMA *pima);
1022 UINT  _ux_device_class_pima_object_delete(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle, ULONG object_format);
1023 UINT  _ux_device_class_pima_object_add(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle);
1024 UINT  _ux_device_class_pima_partial_object_data_get(UX_SLAVE_CLASS_PIMA *pima,
1025                                                     ULONG object_handle,
1026                                                     ULONG offset_requested,
1027                                                     ULONG length_requested);
1028 
1029 UINT  _ux_device_class_pima_storage_id_send(UX_SLAVE_CLASS_PIMA *pima);
1030 UINT  _ux_device_class_pima_storage_info_get(UX_SLAVE_CLASS_PIMA *pima, ULONG storage_id);
1031 UINT  _ux_device_class_pima_object_props_supported_get(UX_SLAVE_CLASS_PIMA *pima,
1032                                                     ULONG object_format_code);
1033 UINT  _ux_device_class_pima_object_prop_value_get(UX_SLAVE_CLASS_PIMA *pima,
1034                                                     ULONG object_handle,
1035                                                     ULONG object_property_code);
1036 UINT  _ux_device_class_pima_object_prop_value_set(UX_SLAVE_CLASS_PIMA *pima,
1037                                                     ULONG object_handle,
1038                                                     ULONG object_property_code);
1039 UINT  _ux_device_class_pima_object_prop_desc_get(UX_SLAVE_CLASS_PIMA *pima,
1040                                                     ULONG object_property,
1041                                                     ULONG object_format_code);
1042 UINT  _ux_device_class_pima_object_references_get(UX_SLAVE_CLASS_PIMA *pima,
1043                                                     ULONG object_handle);
1044 UINT  _ux_device_class_pima_object_references_set(UX_SLAVE_CLASS_PIMA *pima,
1045                                                     ULONG object_handle);
1046 UINT  _ux_device_class_pima_object_prop_value_get(UX_SLAVE_CLASS_PIMA *pima,
1047                                                     ULONG object_handle,
1048                                                     ULONG object_property_code);
1049 UINT  _ux_device_class_pima_object_prop_value_set(UX_SLAVE_CLASS_PIMA *pima,
1050                                                     ULONG object_handle,
1051                                                     ULONG object_property_code);
1052 UINT  _ux_device_class_pima_storage_format(UX_SLAVE_CLASS_PIMA *pima, ULONG storage_id);
1053 UINT  _ux_device_class_pima_device_reset(UX_SLAVE_CLASS_PIMA *pima);
1054 
1055 
1056 UINT  _uxe_device_class_pima_initialize(UX_SLAVE_CLASS_COMMAND *command);
1057 
1058 
1059 /* Define Device PIMA Class API prototypes.  */
1060 
1061 #define ux_device_class_pima_initialize         _ux_device_class_pima_initialize
1062 #define ux_device_class_pima_activate           _ux_device_class_pima_activate
1063 #define ux_device_class_pima_dectivate          _ux_device_class_pima_dectivate
1064 #define ux_device_class_pima_entry              _ux_device_class_pima_entry
1065 #define ux_device_class_pima_control_request    _ux_device_class_pima_control_request
1066 #define ux_device_class_pima_object_add         _ux_device_class_pima_object_add
1067 
1068 /* Define Pima Class data prototypes.  */
1069 
1070 extern UCHAR  _ux_device_class_pima_vendor_extension_descriptor[];
1071 extern USHORT _ux_device_class_pima_supported_operations[];
1072 extern USHORT _ux_device_class_pima_supported_events[];
1073 extern USHORT _ux_device_class_pima_supported_capture_formats[];
1074 extern USHORT _ux_device_class_pima_supported_image_formats[];
1075 extern USHORT _ux_device_class_pima_device_prop_supported[];
1076 
1077 
1078 
1079 /* Determine if a C++ compiler is being used.  If so, complete the standard
1080    C conditional started above.  */
1081 #ifdef __cplusplus
1082 }
1083 #endif
1084 
1085 #endif
1086