1 /***************************************************************************
2  * Copyright (c) 2024 Microsoft Corporation
3  *
4  * This program and the accompanying materials are made available under the
5  * terms of the MIT License which is available at
6  * https://opensource.org/licenses/MIT.
7  *
8  * SPDX-License-Identifier: MIT
9  **************************************************************************/
10 
11 
12 /**************************************************************************/
13 /**************************************************************************/
14 /**                                                                       */
15 /** USBX Component                                                        */
16 /**                                                                       */
17 /**   PIMA Class                                                          */
18 /**                                                                       */
19 /**************************************************************************/
20 /**************************************************************************/
21 
22 
23 /**************************************************************************/
24 /*                                                                        */
25 /*  COMPONENT DEFINITION                                   RELEASE        */
26 /*                                                                        */
27 /*    ux_host_class_pima.h                                PORTABLE C      */
28 /*                                                           6.3.0        */
29 /*  AUTHOR                                                                */
30 /*                                                                        */
31 /*    Chaoqiong Xiao, Microsoft Corporation                               */
32 /*                                                                        */
33 /*  DESCRIPTION                                                           */
34 /*                                                                        */
35 /*    This file contains all the header and extern functions used by the  */
36 /*    USBX PIMA class.                                                    */
37 /*                                                                        */
38 /*  RELEASE HISTORY                                                       */
39 /*                                                                        */
40 /*    DATE              NAME                      DESCRIPTION             */
41 /*                                                                        */
42 /*  05-19-2020     Chaoqiong Xiao           Initial Version 6.0           */
43 /*  09-30-2020     Chaoqiong Xiao           Modified comment(s),          */
44 /*                                            used UX prefix to refer to  */
45 /*                                            TX symbols instead of using */
46 /*                                            them directly,              */
47 /*                                            resulting in version 6.1    */
48 /*  08-02-2021     Wen Wang                 Modified comment(s),          */
49 /*                                            added extern "C" keyword    */
50 /*                                            for compatibility with C++, */
51 /*                                            resulting in version 6.1.8  */
52 /*  07-29-2022     Chaoqiong Xiao           Modified comment(s),          */
53 /*                                            improved internal checks,   */
54 /*                                            resulting in version 6.1.12 */
55 /*  10-31-2023     Chaoqiong Xiao           Modified comment(s),          */
56 /*                                            removed unused semaphore,   */
57 /*                                            optimized PIMA data sets,   */
58 /*                                            increased default buffer    */
59 /*                                            length to get device info,  */
60 /*                                            added error checks support, */
61 /*                                            resulting in version 6.3.0  */
62 /*                                                                        */
63 /**************************************************************************/
64 
65 #ifndef UX_HOST_CLASS_PIMA_H
66 #define UX_HOST_CLASS_PIMA_H
67 
68 /* Determine if a C++ compiler is being used.  If so, ensure that standard
69    C is used to process the API information.  */
70 
71 #ifdef   __cplusplus
72 
73 /* Yes, C++ compiler is present.  Use standard C.  */
74 extern   "C" {
75 
76 #endif
77 
78 /* Internal option: enable the basic USBX error checking. This define is typically used
79    while debugging application.  */
80 #if defined(UX_ENABLE_ERROR_CHECKING) && !defined(UX_HOST_CLASS_PIMA_ENABLE_ERROR_CHECKING)
81 #define UX_HOST_CLASS_PIMA_ENABLE_ERROR_CHECKING
82 #endif
83 
84 /* Define PIMA Class constants.  */
85 
86 #define UX_HOST_CLASS_PIMA_CLASS_TRANSFER_TIMEOUT               300000
87 #define UX_HOST_CLASS_PIMA_CLASS                                0x06
88 #define UX_HOST_CLASS_PIMA_SUBCLASS                             0X01
89 #define UX_HOST_CLASS_PIMA_PROTOCOL                             0X01
90 #define UX_HOST_CLASS_PIMA_CS_INTERFACE                         0x24
91 #define UX_HOST_CLASS_PIMA_MAGIC_NUMBER                         0x50494D41
92 #define UX_HOST_CLASS_PIMA_UNICODE_MAX_LENGTH                   256
93 #define UX_HOST_CLASS_PIMA_ARRAY_MAX_LENGTH                     256
94 #define UX_HOST_CLASS_PIMA_DATE_TIME_STRING_MAX_LENGTH          64
95 #define UX_HOST_CLASS_PIMA_MAX_STORAGE_IDS                      64
96 #if (UX_OVERFLOW_CHECK_ADD_ULONG(UX_HOST_CLASS_PIMA_MAX_STORAGE_IDS, 1) || \
97     UX_OVERFLOW_CHECK_MULC_ULONG(UX_HOST_CLASS_PIMA_MAX_STORAGE_IDS + 1, 4))
98 #error UX_HOST_CLASS_PIMA_MAX_STORAGE_IDS too large, please decrease
99 #endif
100 #define UX_HOST_CLASS_PIMA_STORAGE_IDS_LENGTH                   ((UX_HOST_CLASS_PIMA_MAX_STORAGE_IDS + 1) * 4)
101 #define UX_HOST_CLASS_PIMA_MAX_PAYLOAD                          1024
102 #define UX_HOST_CLASS_PIMA_ZLP_NONE                             0
103 #define UX_HOST_CLASS_PIMA_ZLP_IN                               1
104 #define UX_HOST_CLASS_PIMA_ZLP_OUT                              2
105 
106 /* Define PIMA data phases.  */
107 
108 #define UX_HOST_CLASS_PIMA_DATA_PHASE_NONE                      0
109 #define UX_HOST_CLASS_PIMA_DATA_PHASE_IN                        1
110 #define UX_HOST_CLASS_PIMA_DATA_PHASE_OUT                       2
111 
112 /* Define PIMA session states.  */
113 
114 #define UX_HOST_CLASS_PIMA_SESSION_STATE_CLOSED                 0
115 #define UX_HOST_CLASS_PIMA_SESSION_STATE_OPENED                 1
116 
117 /* Define PIMA object and thumb states.  */
118 
119 #define UX_HOST_CLASS_PIMA_OBJECT_STATE_CLOSED                  0
120 #define UX_HOST_CLASS_PIMA_OBJECT_STATE_OPENED                  1
121 
122 /* Define PIMA object and thumb transfer status.  */
123 
124 #define UX_HOST_CLASS_PIMA_OBJECT_TRANSFER_STATUS_INACTIVE      0
125 #define UX_HOST_CLASS_PIMA_OBJECT_TRANSFER_STATUS_ACTIVE        1
126 #define UX_HOST_CLASS_PIMA_OBJECT_TRANSFER_STATUS_COMPLETED     2
127 #define UX_HOST_CLASS_PIMA_OBJECT_TRANSFER_STATUS_ABORTED       3
128 
129 /* Define PIMA Cancel Request equivalences.  */
130 
131 #define UX_HOST_CLASS_PIMA_REQUEST_CANCEL_COMMAND               0x64
132 #define UX_HOST_CLASS_PIMA_REQUEST_CANCEL_DATA_LENGTH           0x06
133 #define UX_HOST_CLASS_PIMA_REQUEST_CANCEL_CODE                  0x04001
134 #define UX_HOST_CLASS_PIMA_REQUEST_CANCEL_OFFSET_CODE           0x00
135 #define UX_HOST_CLASS_PIMA_REQUEST_CANCEL_OFFSET_TRANSACTION_ID 0x02
136 
137 /* Define PIMA Reset Request equivalences.  */
138 
139 #define UX_HOST_CLASS_PIMA_REQUEST_RESET_DEVICE                 0x66
140 
141 /* Define PIMA Status Request equivalences.  */
142 
143 #define UX_HOST_CLASS_PIMA_REQUEST_STATUS_COMMAND               0x67
144 #define UX_HOST_CLASS_PIMA_REQUEST_STATUS_DATA_LENGTH           0x40
145 #define UX_HOST_CLASS_PIMA_REQUEST_STATUS_OFFSET_LENGTH         0x00
146 #define UX_HOST_CLASS_PIMA_REQUEST_STATUS_OFFSET_CODE           0x02
147 #define UX_HOST_CLASS_PIMA_REQUEST_STATUS_COMMAND_COUNTER       16
148 #define UX_HOST_CLASS_PIMA_REQUEST_STATUS_COMMAND_DELAY         1000
149 
150 /* Define PIMA command container type.  */
151 
152 #define UX_HOST_CLASS_PIMA_CT_UNDEFINED                         0x00
153 #define UX_HOST_CLASS_PIMA_CT_COMMAND_BLOCK                     0x01
154 #define UX_HOST_CLASS_PIMA_CT_DATA_BLOCK                        0x02
155 #define UX_HOST_CLASS_PIMA_CT_RESPONSE_BLOCK                    0x03
156 #define UX_HOST_CLASS_PIMA_CT_EVENT_BLOCK                       0x04
157 
158 /* Define PIMA Extended Event Data Request payload Format.  */
159 
160 #define UX_HOST_CLASS_PIMA_EEDR_EVENT_CODE                      0x00
161 #define UX_HOST_CLASS_PIMA_EEDR_TRANSACTION_ID                  0x02
162 #define UX_HOST_CLASS_PIMA_EEDR_NUMBER_PARAMETERS               0x06
163 #define UX_HOST_CLASS_PIMA_EEDR_SIZE_PARAMETER                  0x08
164 
165 /* Define PIMA Device Status Data Format.  */
166 
167 #define UX_HOST_CLASS_PIMA_DSD_LENGTH                           0x00
168 #define UX_HOST_CLASS_PIMA_DSD_CODE                             0x02
169 #define UX_HOST_CLASS_PIMA_DSD_PARAMETER                        0x04
170 
171 /* Define PIMA Command Header Format.  */
172 
173 #define UX_HOST_CLASS_PIMA_COMMAND_HEADER_LENGTH                0x00
174 #define UX_HOST_CLASS_PIMA_COMMAND_HEADER_TYPE                  0x04
175 #define UX_HOST_CLASS_PIMA_COMMAND_HEADER_CODE                  0x06
176 #define UX_HOST_CLASS_PIMA_COMMAND_HEADER_TRANSACTION_ID        0x08
177 #define UX_HOST_CLASS_PIMA_COMMAND_HEADER_PARAMETER_1           0x0C
178 #define UX_HOST_CLASS_PIMA_COMMAND_HEADER_PARAMETER_2           0x10
179 #define UX_HOST_CLASS_PIMA_COMMAND_HEADER_PARAMETER_3           0x14
180 #define UX_HOST_CLASS_PIMA_COMMAND_HEADER_PARAMETER_4           0x18
181 #define UX_HOST_CLASS_PIMA_COMMAND_HEADER_PARAMETER_5           0x1C
182 
183 #define UX_HOST_CLASS_PIMA_COMMAND_HEADER_SIZE                  0x0C
184 #define UX_HOST_CLASS_PIMA_CONTAINER_SIZE                       0x40
185 #define UX_HOST_CLASS_PIMA_ALL_HEADER_SIZE                      0x20
186 
187 /* Define PIMA Data Header Format.  */
188 
189 #define UX_HOST_CLASS_PIMA_DATA_HEADER_LENGTH                   0x00
190 #define UX_HOST_CLASS_PIMA_DATA_HEADER_TYPE                     0x04
191 #define UX_HOST_CLASS_PIMA_DATA_HEADER_CODE                     0x06
192 #define UX_HOST_CLASS_PIMA_DATA_HEADER_TRANSACTION_ID           0x08
193 #define UX_HOST_CLASS_PIMA_DATA_HEADER_SIZE                     0x0C
194 
195 
196 /* Define PIMA Response Header Format.  */
197 
198 #define UX_HOST_CLASS_PIMA_RESPONSE_HEADER_LENGTH               0x00
199 #define UX_HOST_CLASS_PIMA_RESPONSE_HEADER_TYPE                 0x04
200 #define UX_HOST_CLASS_PIMA_RESPONSE_HEADER_CODE                 0x06
201 #define UX_HOST_CLASS_PIMA_RESPONSE_HEADER_TRANSACTION_ID       0x08
202 #define UX_HOST_CLASS_PIMA_RESPONSE_HEADER_PARAMETER_1          0x0C
203 #define UX_HOST_CLASS_PIMA_RESPONSE_HEADER_PARAMETER_2          0x10
204 #define UX_HOST_CLASS_PIMA_RESPONSE_HEADER_PARAMETER_3          0x14
205 #define UX_HOST_CLASS_PIMA_RESPONSE_HEADER_PARAMETER_4          0x18
206 #define UX_HOST_CLASS_PIMA_RESPONSE_HEADER_PARAMETER_5          0x1C
207 
208 #define UX_HOST_CLASS_PIMA_RESPONSE_HEADER_SIZE                 0x20
209 
210 /* Define PIMA Asynchronous Event Interrupt Data Format.  */
211 
212 #define UX_HOST_CLASS_PIMA_AEI_DATA_LENGTH                      0x00
213 #define UX_HOST_CLASS_PIMA_AEI_TYPE                             0x04
214 #define UX_HOST_CLASS_PIMA_AEI_EVENT_CODE                       0x06
215 #define UX_HOST_CLASS_PIMA_AEI_TRANSACTION_ID                   0x08
216 #define UX_HOST_CLASS_PIMA_AEI_PARAMETER_1                      0x0C
217 #define UX_HOST_CLASS_PIMA_AEI_PARAMETER_2                      0x10
218 #define UX_HOST_CLASS_PIMA_AEI_PARAMETER_3                      0x14
219 #define UX_HOST_CLASS_PIMA_AEI_MAX_LENGTH                       0x18
220 
221 /* Define PIMA Operation Commands.  */
222 
223 #define UX_HOST_CLASS_PIMA_OC_UNDEFINED                         0x1000
224 #define UX_HOST_CLASS_PIMA_OC_GET_DEVICE_INFO                   0x1001
225 #define UX_HOST_CLASS_PIMA_OC_OPEN_SESSION                      0x1002
226 #define UX_HOST_CLASS_PIMA_OC_CLOSE_SESSION                     0x1003
227 #define UX_HOST_CLASS_PIMA_OC_GET_STORAGE_IDS                   0x1004
228 #define UX_HOST_CLASS_PIMA_OC_GET_STORAGE_INFO                  0x1005
229 #define UX_HOST_CLASS_PIMA_OC_GET_NUM_OBJECTS                   0x1006
230 #define UX_HOST_CLASS_PIMA_OC_GET_OBJECT_HANDLES                0x1007
231 #define UX_HOST_CLASS_PIMA_OC_GET_OBJECT_INFO                   0x1008
232 #define UX_HOST_CLASS_PIMA_OC_GET_OBJECT                        0x1009
233 #define UX_HOST_CLASS_PIMA_OC_GET_THUMB                         0x100A
234 #define UX_HOST_CLASS_PIMA_OC_DELETE_OBJECT                     0x100B
235 #define UX_HOST_CLASS_PIMA_OC_SEND_OBJECT_INFO                  0x100C
236 #define UX_HOST_CLASS_PIMA_OC_SEND_OBJECT                       0x100D
237 #define UX_HOST_CLASS_PIMA_OC_INITIATE_CAPTURE                  0x100E
238 #define UX_HOST_CLASS_PIMA_OC_FORMAT_STORE                      0x100F
239 #define UX_HOST_CLASS_PIMA_OC_RESET_DEVICE                      0x1010
240 #define UX_HOST_CLASS_PIMA_OC_SELF_TEST                         0x1011
241 #define UX_HOST_CLASS_PIMA_OC_SET_OBJECT_PROTECTION             0x1012
242 #define UX_HOST_CLASS_PIMA_OC_POWER_DOWN                        0x1013
243 #define UX_HOST_CLASS_PIMA_OC_GET_DEVICE_PROP_DESC              0x1014
244 #define UX_HOST_CLASS_PIMA_OC_GET_DEVICE_PROP_VALUE             0x1015
245 #define UX_HOST_CLASS_PIMA_OC_SET_DEVICE_PROP_VALUE             0x1016
246 #define UX_HOST_CLASS_PIMA_OC_RESET_DEVICE_PROP_VALUE           0x1017
247 #define UX_HOST_CLASS_PIMA_OC_TERMINATE_OPEN_CAPTURE            0x1018
248 #define UX_HOST_CLASS_PIMA_OC_MOVE_OBJECT                       0x1019
249 #define UX_HOST_CLASS_PIMA_OC_COPY_OBJECT                       0x101A
250 #define UX_HOST_CLASS_PIMA_OC_GET_PARTIAL_OBJECT                0x101B
251 #define UX_HOST_CLASS_PIMA_OC_INITIATE_OPEN_CAPTURE             0x101C
252 
253 /* Define PIMA Response Codes.  */
254 
255 #define UX_HOST_CLASS_PIMA_RC_UNDEFINED                         0x2000
256 #define UX_HOST_CLASS_PIMA_RC_OK                                0x2001
257 #define UX_HOST_CLASS_PIMA_RC_GENERAL_ERROR                     0x2002
258 #define UX_HOST_CLASS_PIMA_RC_SESSION_NOT_OPEN                  0x2003
259 #define UX_HOST_CLASS_PIMA_RC_INVALID_TRANSACTION_ID            0x2004
260 #define UX_HOST_CLASS_PIMA_RC_OPERATION_NOT_SUPPORTED           0x2005
261 #define UX_HOST_CLASS_PIMA_RC_PARAMETER_NOT_SUPPORTED           0x2006
262 #define UX_HOST_CLASS_PIMA_RC_INCOMPLETE_TRANSFER               0x2007
263 #define UX_HOST_CLASS_PIMA_RC_INVALID_STORAGE_ID                0x2008
264 #define UX_HOST_CLASS_PIMA_RC_INVALID_OBJECT_HANDLE             0x2009
265 #define UX_HOST_CLASS_PIMA_RC_DEVICE_PROP_NOT_SUPPORTED         0x200A
266 #define UX_HOST_CLASS_PIMA_RC_INVALID_OBJECT_FORMAT_CODE        0x200B
267 #define UX_HOST_CLASS_PIMA_RC_STORE_FULL                        0x200C
268 #define UX_HOST_CLASS_PIMA_RC_OBJECT_WRITE_PROTECTED            0x200D
269 #define UX_HOST_CLASS_PIMA_RC_STORE_READ_ONLY                   0x200E
270 #define UX_HOST_CLASS_PIMA_RC_ACCESS_DENIED                     0x200F
271 #define UX_HOST_CLASS_PIMA_RC_NO_THUMBNAIL_PRESENT              0x2010
272 #define UX_HOST_CLASS_PIMA_RC_SELF_TEST_FAILED                  0x2011
273 #define UX_HOST_CLASS_PIMA_RC_PARTIAL_DELETION                  0x2012
274 #define UX_HOST_CLASS_PIMA_RC_STORE_NOT_AVAILABLE               0x2013
275 #define UX_HOST_CLASS_PIMA_RC_FORMAT_UNSUPPORTED                0x2014
276 #define UX_HOST_CLASS_PIMA_RC_NO_VALID_OBJECT_INFO              0x2015
277 #define UX_HOST_CLASS_PIMA_RC_INVALID_CODE_FORMAT               0x2016
278 #define UX_HOST_CLASS_PIMA_RC_UNKNOWN_VENDOR_CODE               0x2017
279 #define UX_HOST_CLASS_PIMA_RC_CAPTURE_ALREADY_TERMINATED        0x2018
280 #define UX_HOST_CLASS_PIMA_RC_DEVICE_BUSY                       0x2019
281 #define UX_HOST_CLASS_PIMA_RC_INVALID_PARENT_OBJECT             0x201A
282 #define UX_HOST_CLASS_PIMA_RC_INVALID_DEVICE_PROP_FORMAT        0x201B
283 #define UX_HOST_CLASS_PIMA_RC_INVALID_DEVICE_PROP_VALUE         0x201C
284 #define UX_HOST_CLASS_PIMA_RC_INVALID_PARAMETER                 0x201D
285 #define UX_HOST_CLASS_PIMA_RC_SESSION_ALREADY_OPENED            0x201E
286 #define UX_HOST_CLASS_PIMA_RC_TRANSACTION_CANCELED              0x201F
287 #define UX_HOST_CLASS_PIMA_RC_DESTINATION_UNSUPPORTED           0x2020
288 #define UX_HOST_CLASS_PIMA_RC_OBJECT_ALREADY_OPENED             0x2021
289 #define UX_HOST_CLASS_PIMA_RC_OBJECT_ALREADY_CLOSED             0x2022
290 #define UX_HOST_CLASS_PIMA_RC_OBJECT_NOT_OPENED                 0x2023
291 
292 /* Define PIMA Event Codes.  */
293 
294 #define UX_HOST_CLASS_PIMA_EC_UNDEFINED                         0x4000
295 #define UX_HOST_CLASS_PIMA_EC_CANCEL_TRANSACTION                0x4001
296 #define UX_HOST_CLASS_PIMA_EC_OBJECT_ADDED                      0x4002
297 #define UX_HOST_CLASS_PIMA_EC_OBJECT_REMOVED                    0x4003
298 #define UX_HOST_CLASS_PIMA_EC_STORE_ADDED                       0x4004
299 #define UX_HOST_CLASS_PIMA_EC_STORE_REMOVED                     0x4005
300 #define UX_HOST_CLASS_PIMA_EC_DEVICE_PROP_CHANGED               0x4006
301 #define UX_HOST_CLASS_PIMA_EC_OBJECT_INFO_CHANGED               0x4007
302 #define UX_HOST_CLASS_PIMA_EC_DEVICE_INFO_CHANGED               0x4008
303 #define UX_HOST_CLASS_PIMA_EC_REQUEST_OBJECT_TRANSFER           0x4009
304 #define UX_HOST_CLASS_PIMA_EC_STORE_FULL                        0x400A
305 #define UX_HOST_CLASS_PIMA_EC_DEVICE_RESET                      0x400B
306 #define UX_HOST_CLASS_PIMA_EC_STORAGE_INFO_CHANGED              0x400C
307 #define UX_HOST_CLASS_PIMA_EC_CAPTURE_COMPLETE                  0x400D
308 #define UX_HOST_CLASS_PIMA_EC_UNREPORTED_STATUS                 0x400E
309 
310 /* Define PIMA Object Format Codes.  */
311 
312 #define UX_HOST_CLASS_PIMA_OFC_UNDEFINED                        0x3000
313 #define UX_HOST_CLASS_PIMA_OFC_ASSOCIATION                      0x3001
314 #define UX_HOST_CLASS_PIMA_OFC_SCRIPT                           0x3002
315 #define UX_HOST_CLASS_PIMA_OFC_EXECUTABLE                       0x3003
316 #define UX_HOST_CLASS_PIMA_OFC_TEXT                             0x3004
317 #define UX_HOST_CLASS_PIMA_OFC_HTML                             0x3005
318 #define UX_HOST_CLASS_PIMA_OFC_DPOF                             0x3006
319 #define UX_HOST_CLASS_PIMA_OFC_AIFF                             0x3007
320 #define UX_HOST_CLASS_PIMA_OFC_WAV                              0x3008
321 #define UX_HOST_CLASS_PIMA_OFC_MP3                              0x3009
322 #define UX_HOST_CLASS_PIMA_OFC_AVI                              0x300A
323 #define UX_HOST_CLASS_PIMA_OFC_MPEG                             0x300B
324 #define UX_HOST_CLASS_PIMA_OFC_ASF                              0x300C
325 #define UX_HOST_CLASS_PIMA_OFC_QT                               0x300D
326 #define UX_HOST_CLASS_PIMA_OFC_EXIF_JPEG                        0x3801
327 #define UX_HOST_CLASS_PIMA_OFC_TIFF_EP                          0x3802
328 #define UX_HOST_CLASS_PIMA_OFC_FLASHPIX                         0x3803
329 #define UX_HOST_CLASS_PIMA_OFC_BMP                              0x3804
330 #define UX_HOST_CLASS_PIMA_OFC_CIFF                             0x3805
331 #define UX_HOST_CLASS_PIMA_OFC_GIF                              0x3807
332 #define UX_HOST_CLASS_PIMA_OFC_JFIF                             0x3808
333 #define UX_HOST_CLASS_PIMA_OFC_PCD                              0x3809
334 #define UX_HOST_CLASS_PIMA_OFC_PICT                             0x380A
335 #define UX_HOST_CLASS_PIMA_OFC_PNG                              0x380B
336 #define UX_HOST_CLASS_PIMA_OFC_TIFF                             0x380D
337 #define UX_HOST_CLASS_PIMA_OFC_TIFF_IT                          0x380E
338 #define UX_HOST_CLASS_PIMA_OFC_JP2                              0x380F
339 #define UX_HOST_CLASS_PIMA_OFC_JPX                              0x3810
340 
341 /* Define PIMA Object Protection Status Values.  */
342 
343 #define UX_HOST_CLASS_PIMA_OPS_NO_PROTECTION                    0x0000
344 #define UX_HOST_CLASS_PIMA_OPS_READ_ONLY                        0x0001
345 
346 /* Define PIMA Storage Types Codes.  */
347 
348 #define UX_HOST_CLASS_PIMA_STC_UNDEFINED                        0x0000
349 #define UX_HOST_CLASS_PIMA_STC_FIXED_ROM                        0x0001
350 #define UX_HOST_CLASS_PIMA_STC_REMOVABLE_ROM                    0x0002
351 #define UX_HOST_CLASS_PIMA_STC_FIXED_RAM                        0x0003
352 #define UX_HOST_CLASS_PIMA_STC_REMOVABLE_RAM                    0x0004
353 
354 /* Define PIMA File System Types Codes.  */
355 
356 #define UX_HOST_CLASS_PIMA_FSTC_UNDEFINED                       0x0000
357 #define UX_HOST_CLASS_PIMA_FSTC_GENERIC_FLAT                    0x0001
358 #define UX_HOST_CLASS_PIMA_FSTC_GENERIC_HIERARCHICAL            0x0002
359 #define UX_HOST_CLASS_PIMA_FSTC_DCF                             0x0003
360 
361 /* Define PIMA event info structure.  */
362 
363 typedef struct UX_HOST_CLASS_PIMA_EVENT_STRUCT
364 {
365     struct UX_HOST_CLASS_PIMA_SESSION_STRUCT
366                     *ux_host_class_pima_event_session;
367     struct UX_HOST_CLASS_PIMA_STRUCT
368                     *ux_host_class_pima_event_pima_instance;
369     ULONG           ux_host_class_pima_event_code;
370     ULONG           ux_host_class_pima_event_session_id;
371     ULONG           ux_host_class_pima_event_transaction_id;
372     ULONG           ux_host_class_pima_event_parameter_1;
373     ULONG           ux_host_class_pima_event_parameter_2;
374     ULONG           ux_host_class_pima_event_parameter_3;
375 
376 } UX_HOST_CLASS_PIMA_EVENT;
377 
378 /* Define PIMA structure.  */
379 
380 typedef struct UX_HOST_CLASS_PIMA_STRUCT
381 {
382 
383     struct UX_HOST_CLASS_PIMA_STRUCT
384                     *ux_host_class_pima_next_instance;
385     UX_HOST_CLASS   *ux_host_class_pima_class;
386     UX_DEVICE       *ux_host_class_pima_device;
387     UX_INTERFACE    *ux_host_class_pima_interface;
388     UX_ENDPOINT     *ux_host_class_pima_bulk_out_endpoint;
389     UX_ENDPOINT     *ux_host_class_pima_bulk_in_endpoint;
390     UX_ENDPOINT     *ux_host_class_pima_interrupt_endpoint;
391     UINT            ux_host_class_pima_state;
392     ULONG           ux_host_class_pima_transaction_id;
393     ULONG           ux_host_class_pima_operation_code;
394     ULONG           ux_host_class_pima_event_code;
395     ULONG           ux_host_class_pima_event_transaction_id;
396     ULONG           ux_host_class_pima_event_session;
397     ULONG           ux_host_class_pima_event_parameter_1;
398     ULONG           ux_host_class_pima_event_parameter_2;
399     ULONG           ux_host_class_pima_event_parameter_3;
400     UCHAR           *ux_host_class_pima_event_buffer;
401     UCHAR           *ux_host_class_pima_event_buffer_current_offset;
402     ULONG           ux_host_class_pima_event_buffer_current_length;
403     ULONG           ux_host_class_pima_event_buffer_expected_length;
404     struct UX_HOST_CLASS_PIMA_SESSION_STRUCT
405                     *ux_host_class_pima_session;
406     UCHAR           *ux_host_class_pima_container;
407     VOID            *ux_host_class_pima_application;
408     ULONG           ux_host_class_pima_zlp_flag;
409 
410 } UX_HOST_CLASS_PIMA;
411 
412 /* Define PIMA Session structure.  */
413 
414 typedef struct UX_HOST_CLASS_PIMA_SESSION_STRUCT
415 {
416 
417     ULONG           ux_host_class_pima_session_magic;
418     ALIGN_TYPE      ux_host_class_pima_session_id;
419     ULONG           ux_host_class_pima_session_state;
420     struct UX_HOST_CLASS_PIMA_STRUCT
421                     *ux_host_class_pima_session_pima_instance;
422     ULONG           ux_host_class_pima_session_nb_storage_ids;
423     ULONG           ux_host_class_pima_session_nb_objects;
424     VOID            (*ux_host_class_pima_session_event_callback)(struct UX_HOST_CLASS_PIMA_EVENT_STRUCT *pima_event);
425 
426 } UX_HOST_CLASS_PIMA_SESSION;
427 
428 
429 /* Define PIMA command structure.  */
430 
431 typedef struct UX_HOST_CLASS_PIMA_COMMAND_STRUCT
432 {
433 
434     ULONG           ux_host_class_pima_command_nb_parameters;
435     ULONG           ux_host_class_pima_command_operation_code;
436     ULONG           ux_host_class_pima_command_parameter_1;
437     ULONG           ux_host_class_pima_command_parameter_2;
438     ULONG           ux_host_class_pima_command_parameter_3;
439     ULONG           ux_host_class_pima_command_parameter_4;
440     ULONG           ux_host_class_pima_command_parameter_5;
441 
442 } UX_HOST_CLASS_PIMA_COMMAND;
443 
444 /* Define PIMA object info structure.  */
445 
446 typedef struct UX_HOST_CLASS_PIMA_OBJECT_STRUCT
447 {
448 
449     ULONG           ux_host_class_pima_object_storage_id;
450     USHORT          ux_host_class_pima_object_format;
451     USHORT          ux_host_class_pima_object_protection_status;
452     ULONG           ux_host_class_pima_object_compressed_size;
453     USHORT          ux_host_class_pima_object_thumb_format;
454     USHORT          _align_thumb_compressed_size;
455     ULONG           ux_host_class_pima_object_thumb_compressed_size;
456     ULONG           ux_host_class_pima_object_thumb_pix_width;
457     ULONG           ux_host_class_pima_object_thumb_pix_height;
458     ULONG           ux_host_class_pima_object_image_pix_width;
459     ULONG           ux_host_class_pima_object_image_pix_height;
460     ULONG           ux_host_class_pima_object_image_bit_depth;
461     ULONG           ux_host_class_pima_object_parent_object;
462     USHORT          ux_host_class_pima_object_association_type;
463     USHORT          _align_association_desc;
464     ULONG           ux_host_class_pima_object_association_desc;
465     ULONG           ux_host_class_pima_object_sequence_number;
466     UCHAR           ux_host_class_pima_object_filename[UX_HOST_CLASS_PIMA_UNICODE_MAX_LENGTH]; /* Null terminated unicode string.  */
467     UCHAR           ux_host_class_pima_object_capture_date[UX_HOST_CLASS_PIMA_DATE_TIME_STRING_MAX_LENGTH];
468     UCHAR           ux_host_class_pima_object_modification_date[UX_HOST_CLASS_PIMA_DATE_TIME_STRING_MAX_LENGTH];
469     UCHAR           ux_host_class_pima_object_keywords[UX_HOST_CLASS_PIMA_UNICODE_MAX_LENGTH]; /* Null terminated unicode string.  */
470     ULONG           ux_host_class_pima_object_state;
471     ULONG           ux_host_class_pima_object_offset;
472     ULONG           ux_host_class_pima_object_transfer_status;
473     ULONG           ux_host_class_pima_object_handle_id;
474     ULONG           ux_host_class_pima_object_length;
475     UCHAR           *ux_host_class_pima_object_buffer;
476 
477 } UX_HOST_CLASS_PIMA_OBJECT;
478 
479 /* Define PIMA Object decompaction structure.  */
480 
481 #define UX_HOST_CLASS_PIMA_OBJECT_MAX_LENGTH                                512
482 #define UX_HOST_CLASS_PIMA_OBJECT_VARIABLE_OFFSET                           52
483 #define UX_HOST_CLASS_PIMA_OBJECT_ENTRIES                                   15
484 
485 /* Define PIMA device info structure.  */
486 
487 typedef struct UX_HOST_CLASS_PIMA_DEVICE_STRUCT
488 {
489 
490     ULONG            ux_host_class_pima_device_standard_version;
491     ULONG            ux_host_class_pima_device_vendor_extension_id;
492     ULONG            ux_host_class_pima_device_vendor_extension_version;
493     UCHAR            ux_host_class_pima_device_vendor_extension_desc[UX_HOST_CLASS_PIMA_UNICODE_MAX_LENGTH]; /* Null terminated unicode string.  */
494     ULONG            ux_host_class_pima_device_functional_mode;
495     UCHAR            ux_host_class_pima_device_operations_supported[UX_HOST_CLASS_PIMA_ARRAY_MAX_LENGTH];
496     UCHAR            ux_host_class_pima_device_events_supported[UX_HOST_CLASS_PIMA_ARRAY_MAX_LENGTH];
497     UCHAR            ux_host_class_pima_device_properties_supported[UX_HOST_CLASS_PIMA_ARRAY_MAX_LENGTH];
498     UCHAR            ux_host_class_pima_device_capture_formats[UX_HOST_CLASS_PIMA_ARRAY_MAX_LENGTH];
499     UCHAR            ux_host_class_pima_device_image_formats[UX_HOST_CLASS_PIMA_ARRAY_MAX_LENGTH];
500     UCHAR            ux_host_class_pima_device_manufacturer[UX_HOST_CLASS_PIMA_UNICODE_MAX_LENGTH]; /* Null terminated unicode string.  */
501     UCHAR            ux_host_class_pima_device_model[UX_HOST_CLASS_PIMA_DATE_TIME_STRING_MAX_LENGTH];
502     UCHAR            ux_host_class_pima_device_version[UX_HOST_CLASS_PIMA_DATE_TIME_STRING_MAX_LENGTH];
503     UCHAR            ux_host_class_pima_device_serial_number[UX_HOST_CLASS_PIMA_UNICODE_MAX_LENGTH]; /* Null terminated unicode string.  */
504 
505 } UX_HOST_CLASS_PIMA_DEVICE;
506 
507 /* Define PIMA Device decompaction structure.  */
508 
509 #define UX_HOST_CLASS_PIMA_DEVICE_MAX_LENGTH                                1024
510 #define UX_HOST_CLASS_PIMA_DEVICE_STANDARD_VERSION                          0
511 #define UX_HOST_CLASS_PIMA_DEVICE_VENDOR_EXTENSION_ID                       2
512 #define UX_HOST_CLASS_PIMA_DEVICE_VENDOR_EXTENSION_VERSION                  6
513 #define UX_HOST_CLASS_PIMA_DEVICE_VENDOR_EXTENSION_DESC                     8
514 
515 /* Define PIMA storage info structure.  */
516 
517 typedef struct UX_HOST_CLASS_PIMA_STORAGE_STRUCT
518 {
519 
520     USHORT           ux_host_class_pima_storage_type;
521     USHORT           ux_host_class_pima_storage_file_system_type;
522     USHORT           ux_host_class_pima_storage_access_capability;
523     USHORT           _align_max_capacity_low;
524     ULONG            ux_host_class_pima_storage_max_capacity_low;
525     ULONG            ux_host_class_pima_storage_max_capacity_high;
526     ULONG            ux_host_class_pima_storage_free_space_bytes_low;
527     ULONG            ux_host_class_pima_storage_free_space_bytes_high;
528     ULONG            ux_host_class_pima_storage_free_space_images;
529     UCHAR            ux_host_class_pima_storage_description[UX_HOST_CLASS_PIMA_UNICODE_MAX_LENGTH]; /* Null terminated unicode string.  */
530     UCHAR            ux_host_class_pima_storage_volume_label[UX_HOST_CLASS_PIMA_UNICODE_MAX_LENGTH]; /* Null terminated unicode string.  */
531 
532 } UX_HOST_CLASS_PIMA_STORAGE;
533 
534 /* Define PIMA storage decompaction structure.  */
535 
536 #define UX_HOST_CLASS_PIMA_STORAGE_MAX_LENGTH                             512
537 #define UX_HOST_CLASS_PIMA_STORAGE_VARIABLE_OFFSET                        26
538 #define UX_HOST_CLASS_PIMA_STORAGE_ENTRIES                                8
539 
540 /* Define Pima Class function prototypes.  */
541 
542 UINT  _ux_host_class_pima_activate(UX_HOST_CLASS_COMMAND *command);
543 UINT  _ux_host_class_pima_configure(UX_HOST_CLASS_PIMA *cdc_acm);
544 UINT  _ux_host_class_pima_deactivate(UX_HOST_CLASS_COMMAND *command);
545 UINT  _ux_host_class_pima_endpoints_get(UX_HOST_CLASS_PIMA *cdc_acm);
546 UINT  _ux_host_class_pima_entry(UX_HOST_CLASS_COMMAND *command);
547 VOID  _ux_host_class_pima_notification(UX_TRANSFER *transfer_request);
548 UINT  _ux_host_class_pima_command(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_COMMAND *command,
549                                     ULONG direction, UCHAR *data_buffer, ULONG data_length,
550                                     ULONG max_payload_length);
551 UINT  _ux_host_class_pima_device_reset(UX_HOST_CLASS_PIMA *pima);
552 UINT  _ux_host_class_pima_num_objects_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG storage_id,
553                                         ULONG object_format_code);
554 UINT  _ux_host_class_pima_object_copy(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle,
555                                         ULONG storage_id, ULONG parent_object_handle);
556 UINT  _ux_host_class_pima_object_delete(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle);
557 UINT  _ux_host_class_pima_object_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object,
558                                         UCHAR *object_buffer, ULONG object_buffer_length, ULONG *object_actual_length);
559 UINT  _ux_host_class_pima_object_handles_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session,
560                                     ULONG *object_handles_array, ULONG object_handles_length, ULONG storage_id, ULONG object_format_code, ULONG object_handle_association);
561 UINT  _ux_host_class_pima_object_info_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object);
562 UINT  _ux_host_class_pima_object_info_send(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG storage_id, ULONG parent_object_id,
563                                         UX_HOST_CLASS_PIMA_OBJECT *object);
564 UINT  _ux_host_class_pima_object_move(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle, ULONG storage_id, ULONG parent_object_handle);
565 UINT  _ux_host_class_pima_object_send(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, UX_HOST_CLASS_PIMA_OBJECT *object,
566                                         UCHAR *object_buffer, ULONG object_buffer_length);
567 UINT  _ux_host_class_pima_read(UX_HOST_CLASS_PIMA *pima, UCHAR *data_pointer, ULONG data_length, ULONG max_payload_length);
568 UINT  _ux_host_class_pima_session_close(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session);
569 UINT  _ux_host_class_pima_session_open(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session);
570 UINT  _ux_host_class_pima_storage_ids_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG *storage_ids_array, ULONG storage_id_length);
571 UINT  _ux_host_class_pima_storage_info_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG storage_id, UX_HOST_CLASS_PIMA_STORAGE *storage);
572 UINT  _ux_host_class_pima_thumb_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object,
573                                         UCHAR *thumb_buffer, ULONG thumb_buffer_length, ULONG *thumb_actual_length);
574 UINT  _ux_host_class_pima_write(UX_HOST_CLASS_PIMA *pima, UCHAR *data_pointer, ULONG data_length, ULONG operation_code, ULONG max_payload_length);
575 UINT  _ux_host_class_pima_request_cancel(UX_HOST_CLASS_PIMA *pima);
576 UINT  _ux_host_class_pima_object_transfer_abort(UX_HOST_CLASS_PIMA *pima,
577                                         UX_HOST_CLASS_PIMA_SESSION *pima_session,
578                                         ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object);
579 UINT  _ux_host_class_pima_object_close(UX_HOST_CLASS_PIMA *pima,
580                                         UX_HOST_CLASS_PIMA_SESSION *pima_session,
581                                         ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object);
582 UINT  _ux_host_class_pima_object_open(UX_HOST_CLASS_PIMA *pima,
583                                         UX_HOST_CLASS_PIMA_SESSION *pima_session,
584                                         ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object);
585 UINT  _ux_host_class_pima_device_info_get(UX_HOST_CLASS_PIMA *pima,
586                                         UX_HOST_CLASS_PIMA_DEVICE *pima_device);
587 
588 UINT  _uxe_host_class_pima_num_objects_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG storage_id,
589                                         ULONG object_format_code);
590 
591 UINT  _uxe_host_class_pima_object_delete(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle);
592 UINT  _uxe_host_class_pima_object_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object,
593                                         UCHAR *object_buffer, ULONG object_buffer_length, ULONG *object_actual_length);
594 UINT  _uxe_host_class_pima_object_handles_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session,
595                                     ULONG *object_handles_array, ULONG object_handles_length, ULONG storage_id, ULONG object_format_code, ULONG object_handle_association);
596 UINT  _uxe_host_class_pima_object_info_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object);
597 UINT  _uxe_host_class_pima_object_info_send(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG storage_id, ULONG parent_object_id,
598                                         UX_HOST_CLASS_PIMA_OBJECT *object);
599 UINT  _uxe_host_class_pima_object_send(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, UX_HOST_CLASS_PIMA_OBJECT *object,
600                                         UCHAR *object_buffer, ULONG object_buffer_length);
601 UINT  _uxe_host_class_pima_session_close(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session);
602 UINT  _uxe_host_class_pima_session_open(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session);
603 UINT  _uxe_host_class_pima_storage_ids_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG *storage_ids_array, ULONG storage_id_length);
604 UINT  _uxe_host_class_pima_storage_info_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG storage_id, UX_HOST_CLASS_PIMA_STORAGE *storage);
605 UINT  _uxe_host_class_pima_thumb_get(UX_HOST_CLASS_PIMA *pima, UX_HOST_CLASS_PIMA_SESSION *pima_session, ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object,
606                                         UCHAR *thumb_buffer, ULONG thumb_buffer_length, ULONG *thumb_actual_length);
607 UINT  _uxe_host_class_pima_object_transfer_abort(UX_HOST_CLASS_PIMA *pima,
608                                         UX_HOST_CLASS_PIMA_SESSION *pima_session,
609                                         ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object);
610 UINT  _uxe_host_class_pima_object_close(UX_HOST_CLASS_PIMA *pima,
611                                         UX_HOST_CLASS_PIMA_SESSION *pima_session,
612                                         ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object);
613 UINT  _uxe_host_class_pima_object_open(UX_HOST_CLASS_PIMA *pima,
614                                         UX_HOST_CLASS_PIMA_SESSION *pima_session,
615                                         ULONG object_handle, UX_HOST_CLASS_PIMA_OBJECT *object);
616 UINT  _uxe_host_class_pima_device_info_get(UX_HOST_CLASS_PIMA *pima,
617                                         UX_HOST_CLASS_PIMA_DEVICE *pima_device);
618 
619 /* Define Device PIMA Class API prototypes.  */
620 #if defined(UX_HOST_CLASS_PIMA_ENABLE_ERROR_CHECKING)
621 
622 #define ux_host_class_pima_entry                    _ux_host_class_pima_entry
623 #define ux_host_class_pima_device_info_get          _uxe_host_class_pima_device_info_get
624 #define ux_host_class_pima_object_info_send         _uxe_host_class_pima_object_info_send
625 #define ux_host_class_pima_object_info_get          _uxe_host_class_pima_object_info_get
626 #define ux_host_class_pima_object_open              _uxe_host_class_pima_object_open
627 #define ux_host_class_pima_object_get               _uxe_host_class_pima_object_get
628 #define ux_host_class_pima_thumb_get                _uxe_host_class_pima_thumb_get
629 #define ux_host_class_pima_object_send              _uxe_host_class_pima_object_send
630 #define ux_host_class_pima_object_delete            _uxe_host_class_pima_object_delete
631 #define ux_host_class_pima_object_transfer_abort    _uxe_host_class_pima_object_transfer_abort
632 #define ux_host_class_pima_object_close             _uxe_host_class_pima_object_close
633 #define ux_host_class_pima_session_open             _uxe_host_class_pima_session_open
634 #define ux_host_class_pima_session_close            _uxe_host_class_pima_session_close
635 #define ux_host_class_pima_storage_ids_get          _uxe_host_class_pima_storage_ids_get
636 #define ux_host_class_pima_storage_info_get         _uxe_host_class_pima_storage_info_get
637 #define ux_host_class_pima_object_handles_get       _uxe_host_class_pima_object_handles_get
638 #define ux_host_class_pima_num_objects_get          _uxe_host_class_pima_num_objects_get
639 
640 #else
641 
642 #define ux_host_class_pima_entry                    _ux_host_class_pima_entry
643 #define ux_host_class_pima_device_info_get          _ux_host_class_pima_device_info_get
644 #define ux_host_class_pima_object_info_send         _ux_host_class_pima_object_info_send
645 #define ux_host_class_pima_object_info_get          _ux_host_class_pima_object_info_get
646 #define ux_host_class_pima_object_open              _ux_host_class_pima_object_open
647 #define ux_host_class_pima_object_get               _ux_host_class_pima_object_get
648 #define ux_host_class_pima_thumb_get                _ux_host_class_pima_thumb_get
649 #define ux_host_class_pima_object_send              _ux_host_class_pima_object_send
650 #define ux_host_class_pima_object_delete            _ux_host_class_pima_object_delete
651 #define ux_host_class_pima_object_transfer_abort    _ux_host_class_pima_object_transfer_abort
652 #define ux_host_class_pima_object_close             _ux_host_class_pima_object_close
653 #define ux_host_class_pima_session_open             _ux_host_class_pima_session_open
654 #define ux_host_class_pima_session_close            _ux_host_class_pima_session_close
655 #define ux_host_class_pima_storage_ids_get          _ux_host_class_pima_storage_ids_get
656 #define ux_host_class_pima_storage_info_get         _ux_host_class_pima_storage_info_get
657 #define ux_host_class_pima_object_handles_get       _ux_host_class_pima_object_handles_get
658 #define ux_host_class_pima_num_objects_get          _ux_host_class_pima_num_objects_get
659 
660 #endif
661 
662 /* Determine if a C++ compiler is being used.  If so, complete the standard
663    C conditional started above.  */
664 #ifdef __cplusplus
665 }
666 #endif
667 
668 #endif
669