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 /**   Pictbridge Application                                              */
19 /**                                                                       */
20 /**************************************************************************/
21 /**************************************************************************/
22 
23 
24 /**************************************************************************/
25 /*                                                                        */
26 /*  COMPONENT DEFINITION                                   RELEASE        */
27 /*                                                                        */
28 /*    ux_pictbridge.h                                     PORTABLE C      */
29 /*                                                           6.1.12       */
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 Pictbridge application                                         */
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 /*  07-29-2022     Chaoqiong Xiao           Modified comment(s),          */
54 /*                                            added magic number defines, */
55 /*                                            resulting in version 6.1.12 */
56 /*                                                                        */
57 /**************************************************************************/
58 
59 #ifndef UX_PICTBRIDGE_H
60 #define UX_PICTBRIDGE_H
61 
62 /* Determine if a C++ compiler is being used.  If so, ensure that standard
63    C is used to process the API information.  */
64 
65 #ifdef   __cplusplus
66 
67 /* Yes, C++ compiler is present.  Use standard C.  */
68 extern   "C" {
69 
70 #endif
71 
72 struct UX_PICTBRIDGE_STRUCT;
73 
74 /* Define the behaviour of this Pictbridge device : DPSHOST or DPSCLIENT.
75    This should be done in the project management tool. */
76 #ifndef UX_PICTBRIDGE_DPSHOST_NO
77 #define UX_PICTBRIDGE_DPSHOST
78 #endif
79 
80 #ifndef UX_PICTBRIDGE_DPSCLIENT_NO
81 #define UX_PICTBRIDGE_DPSCLIENT
82 #endif
83 
84 #ifdef UX_PICTBRIDGE_DPSHOST
85 #include "ux_host_class_pima.h"
86 #endif
87 
88 #ifdef UX_PICTBRIDGE_DPSCLIENT
89 #include "ux_device_class_pima.h"
90 #endif
91 
92 
93 /* Define PICTBRIDGE main equivalences.  */
94 
95 #define UX_PICTBRIDGE_MAX_FILE_NAME_SIZE                    63
96 #define UX_PICTBRIDGE_MAX_TAG_SIZE                          64
97 #define UX_PICTBRIDGE_MAX_ELEMENT_SIZE                      128
98 #define UX_PICTBRIDGE_MAX_TAG_DEPTH                         16
99 #define UX_PICTBRIDGE_MAX_VARIABLE_SIZE                     128
100 #define UX_PICTBRIDGE_MAX_STRING_SIZE                       128
101 #define UX_PICTBRIDGE_MAX_PIMA_OBJECT_BUFFER                1024
102 #define UX_PICTBRIDGE_MAX_EVENT_NUMBER                      8
103 #define UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE                16
104 #define UX_PICTBRIDGE_MAX_NUMBER_STORAGE_IDS                64
105 #define UX_PICTBRIDGE_MAX_NUMBER_OBJECT_HANDLES             64
106 #define UX_PICTBRIDGE_OBJECT_SCRIPT                         0x3002
107 #define UX_PICTBRIDGE_THREAD_STACK_SIZE                     2048
108 #define UX_PICTBRIDGE_THREAD_PRIORITY_CLASS                 20
109 #define UX_PICTBRIDGE_LEADING_ZERO_ON                       1
110 #define UX_PICTBRIDGE_LEADING_ZERO_OFF                      2
111 #define UX_PICTBRIDGE_REQUEST                               1
112 #define UX_PICTBRIDGE_RESPONSE                              2
113 #define UX_PICTBRIDGE_ALL_CONTAINERS                        0xFFFFFFFF
114 
115 #define UX_PICTBRIDGE_XML_LEAF                              ((void*)(ALIGN_TYPE)0xFFFFFFFF)
116 #define UX_PICTBRIDGE_EVENT_TIMEOUT                         (30 * UX_PERIODIC_RATE)
117 
118 /* Define PICTBRIDGE OBJECT HANDLES.  */
119 
120 #define UX_PICTBRIDGE_OBJECT_HANDLE_HOST_REQUEST            1
121 #define UX_PICTBRIDGE_OBJECT_HANDLE_HOST_RESPONSE           1
122 #define UX_PICTBRIDGE_OBJECT_HANDLE_CLIENT_REQUEST          2
123 #define UX_PICTBRIDGE_OBJECT_HANDLE_PRINT                   3
124 
125 /* Define PICTBRIDGE HOST\CLIENT state machine flags.  */
126 
127 #define UX_PICTBRIDGE_STATE_MACHINE_IDLE                    0x00000001
128 #define UX_PICTBRIDGE_STATE_MACHINE_CLIENT_REQUEST_PENDING  0x00000002
129 #define UX_PICTBRIDGE_STATE_MACHINE_CLIENT_REQUEST          0x00000004
130 #define UX_PICTBRIDGE_STATE_MACHINE_HOST_REQUEST_PENDING    0x00000008
131 #define UX_PICTBRIDGE_STATE_MACHINE_HOST_REQUEST            0x00000010
132 
133 /* Define PICTBRIDGE event flags.  */
134 
135 #define UX_PICTBRIDGE_EVENT_FLAG_CONFIGURE_PRINT_SERVICE    0x00000001
136 #define UX_PICTBRIDGE_EVENT_FLAG_CAPABILITY                 0x00000002
137 #define UX_PICTBRIDGE_EVENT_FLAG_JOB_STATUS                 0x00000004
138 #define UX_PICTBRIDGE_EVENT_FLAG_DEVICE_STATUS              0x00000008
139 #define UX_PICTBRIDGE_EVENT_FLAG_START_JOB                  0x00000010
140 #define UX_PICTBRIDGE_EVENT_FLAG_ABORT_JOB                  0x00000020
141 #define UX_PICTBRIDGE_EVENT_FLAG_CONTINUE_JOB               0x00000040
142 #define UX_PICTBRIDGE_EVENT_FLAG_NOTIFY_JOB_STATUS          0x00000080
143 #define UX_PICTBRIDGE_EVENT_FLAG_NOTIFY_DEVICE_STATUS       0x00000100
144 
145 #define UX_PICTBRIDGE_EVENT_FLAG_APPLICATION_1              0x00100000
146 #define UX_PICTBRIDGE_EVENT_FLAG_APPLICATION_2              0x00200000
147 #define UX_PICTBRIDGE_EVENT_FLAG_APPLICATION_3              0x00400000
148 #define UX_PICTBRIDGE_EVENT_FLAG_APPLICATION_4              0x00800000
149 
150 #define UX_PICTBRIDGE_EVENT_FLAG_DISCOVERY                  0x00010000
151 #define UX_PICTBRIDGE_EVENT_FLAG_ERROR                      0x80000000
152 #define UX_PICTBRIDGE_EVENT_FLAG_STATE_MACHINE_READY        0x40000000
153 
154 /* Define PICTBRIDGE QUALITY API equivalences.  */
155 
156 #define UX_PICTBRIDGE_API_QUALITIES                         0x00000001
157 #define UX_PICTBRIDGE_API_PAPER_SIZES                       0x00000002
158 #define UX_PICTBRIDGE_API_PAPER_TYPES                       0x00000004
159 #define UX_PICTBRIDGE_API_PAPER_TYPES_SIZE                  0x00000008
160 #define UX_PICTBRIDGE_API_FILE_TYPES                        0x00000010
161 #define UX_PICTBRIDGE_API_DATE_PRINTS                       0x00000020
162 #define UX_PICTBRIDGE_API_FILE_NAME_PRINTS                  0x00000040
163 #define UX_PICTBRIDGE_API_IMAGE_OPTIMIZES                   0x00000080
164 #define UX_PICTBRIDGE_API_LAYOUTS                           0x00000100
165 #define UX_PICTBRIDGE_API_LAYOUTS_SIZE                      0x00000200
166 #define UX_PICTBRIDGE_API_FIXED_SIZES                       0x00000400
167 #define UX_PICTBRIDGE_API_CROPPINGS                         0x00000800
168 #define UX_PICTBRIDGE_API_CHAR_REPERTOIRES                  0x00001000
169 
170 /* Define PICTBRIDGE tag characters.  */
171 
172 #define UX_PICTBRIDGE_TAG_CHAR_SPACE                        0x20
173 #define UX_PICTBRIDGE_TAG_CHAR_START_BRACKET                0x3C
174 #define UX_PICTBRIDGE_TAG_CHAR_END_BRACKET                  0x3E
175 #define UX_PICTBRIDGE_TAG_CHAR_EQUAL                        0x3D
176 #define UX_PICTBRIDGE_TAG_CHAR_QUOTE                        0x22
177 #define UX_PICTBRIDGE_TAG_CHAR_CR                           0x0d
178 #define UX_PICTBRIDGE_TAG_CHAR_LF                           0x0a
179 #define UX_PICTBRIDGE_TAG_CHAR_SLASH                        0x2f
180 #define UX_PICTBRIDGE_TAG_CHAR_QUESTION_MARK                0x3f
181 
182 /* Define PICTBRIDGE tag flags.  */
183 
184 #define UX_PICTBRIDGE_TAG_FLAG_BEGIN                        0x00000001
185 #define UX_PICTBRIDGE_TAG_FLAG_END                          0x00000002
186 #define UX_PICTBRIDGE_TAG_FLAG_TRAILING_SPACE               0x00000004
187 #define UX_PICTBRIDGE_TAG_FLAG_CLOSING                      0x00000008
188 #define UX_PICTBRIDGE_TAG_FLAG_SELF_CLOSING                 0x00000010
189 #define UX_PICTBRIDGE_TAG_FLAG_CHAR_BEGIN                   0x00000020
190 #define UX_PICTBRIDGE_TAG_FLAG_QUOTE                        0x00000040
191 #define UX_PICTBRIDGE_TAG_FLAG_COMMENT                      0x00000080
192 #define UX_PICTBRIDGE_TAG_FLAG_VARIABLE_HEXA                0x00000100
193 #define UX_PICTBRIDGE_TAG_FLAG_VARIABLE_DECIMAL             0x00000200
194 #define UX_PICTBRIDGE_TAG_FLAG_VARIABLE_MAJOR_MINOR         0x00000400
195 #define UX_PICTBRIDGE_TAG_FLAG_VARIABLE_STRING              0x00000800
196 #define UX_PICTBRIDGE_TAG_FLAG_VARIABLE_ARRAY_HEXA          0x00001000
197 #define UX_PICTBRIDGE_TAG_FLAG_VARIABLE_ARRAY_DECIMAL       0x00002000
198 #define UX_PICTBRIDGE_TAG_FLAG_VARIABLE_ARRAY_MAJOR_MINOR   0x00004000
199 #define UX_PICTBRIDGE_TAG_FLAG_VARIABLE_ARRAY_STRING        0x00008000
200 #define UX_PICTBRIDGE_TAG_FLAG_FORCE_LF                     0x00010000
201 #define UX_PICTBRIDGE_TAG_FLAG_IN_TAG                       0x00020000
202 #define UX_PICTBRIDGE_TAG_FLAG_IN_VARIABLE                  0x00040000
203 #define UX_PICTBRIDGE_TAG_FLAG_EXPECTING_STRING             0x00080000
204 #define UX_PICTBRIDGE_TAG_FLAG_IN_STRING                    0x00100000
205 #define UX_PICTBRIDGE_TAG_FLAG_VARIABLE_DECIMAL_3DIGITS     0x00200000
206 #define UX_PICTBRIDGE_TAG_FLAG_FORCE_SLASH_AT_END           0x00400000
207 
208 #define UX_PICTBRIDGE_TAG_FLAG_VARIABLE                     (UX_PICTBRIDGE_TAG_FLAG_VARIABLE_HEXA             | \
209                                                             UX_PICTBRIDGE_TAG_FLAG_VARIABLE_DECIMAL           | \
210                                                             UX_PICTBRIDGE_TAG_FLAG_VARIABLE_MAJOR_MINOR       | \
211                                                             UX_PICTBRIDGE_TAG_FLAG_VARIABLE_STRING            | \
212                                                             UX_PICTBRIDGE_TAG_FLAG_VARIABLE_DECIMAL_3DIGITS)
213 
214 #define UX_PICTBRIDGE_TAG_FLAG_VARIABLE_ARRAY               (UX_PICTBRIDGE_TAG_FLAG_VARIABLE_ARRAY_HEXA       | \
215                                                             UX_PICTBRIDGE_TAG_FLAG_VARIABLE_ARRAY_DECIMAL     | \
216                                                             UX_PICTBRIDGE_TAG_FLAG_VARIABLE_ARRAY_MAJOR_MINOR | \
217                                                             UX_PICTBRIDGE_TAG_FLAG_VARIABLE_ARRAY_STRING)
218 
219 /* Define PICTBRIDGE error codes.  */
220 
221 #define UX_PICTBRIDGE_ERROR_UNDEFINED                       0x00002000
222 #define UX_PICTBRIDGE_ERROR_GENERAL_ERROR                   0x00002002
223 #define UX_PICTBRIDGE_ERROR_SESSION_NOT_OPEN                0x00002003
224 #define UX_PICTBRIDGE_ERROR_INVALID_TRANSACTION_ID          0x00002004
225 #define UX_PICTBRIDGE_ERROR_OPERATION_NOT_SUPPORTED         0x00002005
226 #define UX_PICTBRIDGE_ERROR_PARAMETER_NOT_SUPPORTED         0x00002006
227 #define UX_PICTBRIDGE_ERROR_INCOMPLETE_TRANSFER             0x00002007
228 #define UX_PICTBRIDGE_ERROR_INVALID_STORAGE_ID              0x00002008
229 #define UX_PICTBRIDGE_ERROR_INVALID_OBJECT_HANDLE           0x00002009
230 #define UX_PICTBRIDGE_ERROR_DEVICE_PROP_NOT_SUPPORTED       0x0000200A
231 #define UX_PICTBRIDGE_ERROR_INVALID_OBJECT_FORMAT_CODE      0x0000200B
232 #define UX_PICTBRIDGE_ERROR_STORE_FULL                      0x0000200C
233 #define UX_PICTBRIDGE_ERROR_OBJECT_WRITE_PROTECTED          0x0000200D
234 #define UX_PICTBRIDGE_ERROR_STORE_READ_ONLY                 0x0000200E
235 #define UX_PICTBRIDGE_ERROR_ACCESS_DENIED                   0x0000200F
236 #define UX_PICTBRIDGE_ERROR_NO_THUMBNAIL_PRESENT            0x00002010
237 #define UX_PICTBRIDGE_ERROR_SELF_TEST_FAILED                0x00002011
238 #define UX_PICTBRIDGE_ERROR_PARTIAL_DELETION                0x00002012
239 #define UX_PICTBRIDGE_ERROR_STORE_NOT_AVAILABLE             0x00002013
240 #define UX_PICTBRIDGE_ERROR_FORMAT_UNSUPPORTED              0x00002014
241 #define UX_PICTBRIDGE_ERROR_NO_VALID_OBJECT_INFO            0x00002015
242 #define UX_PICTBRIDGE_ERROR_INVALID_CODE_FORMAT             0x00002016
243 #define UX_PICTBRIDGE_ERROR_UNKNOWN_VENDOR_CODE             0x00002017
244 #define UX_PICTBRIDGE_ERROR_CAPTURE_ALREADY_TERMINATED      0x00002018
245 #define UX_PICTBRIDGE_ERROR_DEVICE_BUSY                     0x00002019
246 #define UX_PICTBRIDGE_ERROR_INVALID_PARENT_OBJECT           0x0000201A
247 #define UX_PICTBRIDGE_ERROR_INVALID_DEVICE_PROP_FORMAT      0x0000201B
248 #define UX_PICTBRIDGE_ERROR_INVALID_DEVICE_PROP_VALUE       0x0000201C
249 #define UX_PICTBRIDGE_ERROR_INVALID_PARAMETER               0x0000201D
250 #define UX_PICTBRIDGE_ERROR_SESSION_ALREADY_OPENED          0x0000201E
251 #define UX_PICTBRIDGE_ERROR_TRANSACTION_CANCELED            0x0000201F
252 #define UX_PICTBRIDGE_ERROR_DESTINATION_UNSUPPORTED         0x00002020
253 #define UX_PICTBRIDGE_ERROR_OBJECT_ALREADY_OPENED           0x00002021
254 #define UX_PICTBRIDGE_ERROR_OBJECT_ALREADY_CLOSED           0x00002022
255 #define UX_PICTBRIDGE_ERROR_OBJECT_NOT_OPENED               0x00002023
256 #define UX_PICTBRIDGE_ERROR_NO_DISCOVERY_SCRIPT             0x00002024
257 #define UX_PICTBRIDGE_ERROR_SCRIPT_BUFFER_OVERFLOW          0x00002025
258 #define UX_PICTBRIDGE_ERROR_SCRIPT_SYNTAX_ERROR             0x00002026
259 #define UX_PICTBRIDGE_ERROR_PARAMETER_UNKNOWN               0x00002027
260 #define UX_PICTBRIDGE_ERROR_PARAMETER_MISSING               0x00002028
261 #define UX_PICTBRIDGE_ERROR_EMPTY_LINE                      0x00002029
262 
263 /* Define Pictbridge Event Codes.  */
264 
265 #define UX_PICTBRIDGE_EC_UNDEFINED                          0x00004000
266 #define UX_PICTBRIDGE_EC_CANCEL_TRANSACTION                 0x00004001
267 #define UX_PICTBRIDGE_EC_OBJECT_ADDED                       0x00004002
268 #define UX_PICTBRIDGE_EC_OBJECT_REMOVED                     0x00004003
269 #define UX_PICTBRIDGE_EC_STORE_ADDED                        0x00004004
270 #define UX_PICTBRIDGE_EC_STORE_REMOVED                      0x00004005
271 #define UX_PICTBRIDGE_EC_DEVICE_PROP_CHANGED                0x00004006
272 #define UX_PICTBRIDGE_EC_OBJECT_INFO_CHANGED                0x00004007
273 #define UX_PICTBRIDGE_EC_DEVICE_INFO_CHANGED                0x00004008
274 #define UX_PICTBRIDGE_EC_REQUEST_OBJECT_TRANSFER            0x00004009
275 #define UX_PICTBRIDGE_EC_STORE_FULL                         0x0000400A
276 #define UX_PICTBRIDGE_EC_DEVICE_RESET                       0x0000400B
277 #define UX_PICTBRIDGE_EC_STORAGE_INFO_CHANGED               0x0000400C
278 #define UX_PICTBRIDGE_EC_CAPTURE_COMPLETE                   0x0000400D
279 #define UX_PICTBRIDGE_EC_UNREPORTED_STATUS                  0x0000400E
280 
281 /* Define Pictbridge Internal Event Codes.  */
282 
283 #define UX_PICTBRIDGE_EC_START_JOB                          0x00004100
284 
285 /* Define Pictbridge state machine.  */
286 #define UX_PICTBRIDGE_DPSCLIENT_DISCOVERY_PENDING           0x00000000
287 #define UX_PICTBRIDGE_DPSCLIENT_DISCOVERY_COMPLETE          0x00000001
288 
289 
290 /* Define Pictbridge XML Object input\output direction flags.  */
291 #define UX_PICTBRIDGE_OBJECT_DIRECTION_INPUT                0x00000001
292 #define UX_PICTBRIDGE_OBJECT_DIRECTION_OUTPUT               0x00000002
293 
294 /* Define Pictbridge output request codes.  */
295 
296 #define UX_PICTBRIDGE_OR_CONFIGURE_PRINT_SERVICE            0x00000001
297 #define UX_PICTBRIDGE_OR_GET_CAPABILITY                     0x00000002
298 #define UX_PICTBRIDGE_OR_GET_JOB_STATUS                     0x00000003
299 #define UX_PICTBRIDGE_OR_GET_DEVICE_STATUS                  0x00000004
300 #define UX_PICTBRIDGE_OR_START_JOB                          0x00000005
301 #define UX_PICTBRIDGE_OR_ABORT_JOB                          0x00000006
302 #define UX_PICTBRIDGE_OR_CONTINUE_JOB                       0x00000007
303 #define UX_PICTBRIDGE_OR_NOTIFY_JOB_STATUS                  0x00000008
304 #define UX_PICTBRIDGE_OR_NOTIFY_DEVICE_STATUS               0x00000009
305 
306 /* Define Pictbridge input request codes.  */
307 
308 #define UX_PICTBRIDGE_IR_CONFIGURE_PRINT_SERVICE            0x00000001
309 #define UX_PICTBRIDGE_IR_GET_CAPABILITY                     0x00000002
310 #define UX_PICTBRIDGE_IR_GET_JOB_STATUS                     0x00000003
311 #define UX_PICTBRIDGE_IR_GET_DEVICE_STATUS                  0x00000004
312 #define UX_PICTBRIDGE_IR_START_JOB                          0x00000005
313 #define UX_PICTBRIDGE_IR_ABORT_JOB                          0x00000006
314 #define UX_PICTBRIDGE_IR_CONTINUE_JOB                       0x00000007
315 #define UX_PICTBRIDGE_IR_NOTIFY_JOB_STATUS                  0x00000008
316 #define UX_PICTBRIDGE_IR_NOTIFY_DEVICE_STATUS               0x00000009
317 
318 /* Define Pictbridge input request subfunction flags.  */
319 
320 #define UX_PICTBRIDGE_IR_CPS_DPS_VERSIONS                   0x00000001
321 #define UX_PICTBRIDGE_IR_CPS_VENDOR_NAME                    0x00000002
322 #define UX_PICTBRIDGE_IR_CPS_VENDOR_SPECIFIC_VERSION        0x00000004
323 #define UX_PICTBRIDGE_IR_CPS_PRODUCT_NAME                   0x00000008
324 #define UX_PICTBRIDGE_IR_CPS_SERIAL_NO                      0x00000010
325 
326 #define UX_PICTBRIDGE_IR_GC_QUALITIES                       0x00000001
327 #define UX_PICTBRIDGE_IR_GC_PAPER_SIZES                     0x00000002
328 #define UX_PICTBRIDGE_IR_GC_PAPER_TYPES                     0x00000004
329 #define UX_PICTBRIDGE_IR_GC_PAPER_TYPES_SIZE                0x00000008
330 #define UX_PICTBRIDGE_IR_GC_FILE_TYPES                      0x00000010
331 #define UX_PICTBRIDGE_IR_GC_DATE_PRINTS                     0x00000020
332 #define UX_PICTBRIDGE_IR_GC_FILE_NAME_PRINTS                0x00000040
333 #define UX_PICTBRIDGE_IR_GC_IMAGE_OPTIMIZES                 0x00000080
334 #define UX_PICTBRIDGE_IR_GC_LAYOUTS                         0x00000100
335 #define UX_PICTBRIDGE_IR_GC_LAYOUTS_SIZE                    0x00000200
336 #define UX_PICTBRIDGE_IR_GC_FIXED_SIZES                     0x00000400
337 #define UX_PICTBRIDGE_IR_GC_CROPPINGS                       0x00000800
338 #define UX_PICTBRIDGE_IR_GC_CHAR_REPERTOIRES                0x00001000
339 
340 #define UX_PICTBRIDGE_IR_SJJC_QUALITY                       0x00000001
341 #define UX_PICTBRIDGE_IR_SJJC_PAPER_TYPE                    0x00000002
342 #define UX_PICTBRIDGE_IR_SJJC_PAPER_SIZE                    0x00000004
343 #define UX_PICTBRIDGE_IR_SJJC_FILE_TYPE                     0x00000008
344 #define UX_PICTBRIDGE_IR_SJJC_DATE_PRINT                    0x00000010
345 #define UX_PICTBRIDGE_IR_SJJC_FILE_NAME_PRINT               0x00000020
346 #define UX_PICTBRIDGE_IR_SJJC_IMAGE_OPTIMIZE                0x00000040
347 #define UX_PICTBRIDGE_IR_SJJC_LAYOUT                        0x00000080
348 #define UX_PICTBRIDGE_IR_SJJC_FIXED_SIZE                    0x00000100
349 #define UX_PICTBRIDGE_IR_SJJC_CROPPINGS                     0x00000200
350 
351 #define UX_PICTBRIDGE_IR_SJPI_CROPPING_AREA                 0x00000400
352 #define UX_PICTBRIDGE_IR_SJPI_FILE_ID                       0x00000800
353 #define UX_PICTBRIDGE_IR_SJPI_FILE_NAME                     0x00001000
354 #define UX_PICTBRIDGE_IR_SJPI_DATE                          0x00002000
355 #define UX_PICTBRIDGE_IR_SJPI_COPIES                        0x00004000
356 #define UX_PICTBRIDGE_IR_SJPI_PRT_PID                       0x00008000
357 #define UX_PICTBRIDGE_IR_SJPI_FILE_PATH                     0x00010000
358 #define UX_PICTBRIDGE_IR_SJPI_COPY_ID                       0x00020000
359 
360 #define UX_PICTBRIDGE_IR_NJS_PRT_PID                        0x00000001
361 #define UX_PICTBRIDGE_IR_NJS_FILE_PATH                      0x00000002
362 #define UX_PICTBRIDGE_IR_NJS_COPY_ID                        0x00000004
363 #define UX_PICTBRIDGE_IR_NJS_PROGRESS                       0x00000008
364 #define UX_PICTBRIDGE_IR_NJS_IMAGES_PRINTED                 0x00000010
365 
366 
367 /* Define parameter format masks.  */
368 #define UX_PICTBRIDGE_PARAMETER_MAJOR_CODE_MASK             0xFFFF0000
369 #define UX_PICTBRIDGE_PARAMETER_MINOR_CODE_MASK             0x0000FFFF
370 #define UX_PICTBRIDGE_ERROR_REASON_MINOR_CODE_MASK          0x0000FF00
371 #define UX_PICTBRIDGE_ERROR_REASON_DETAIL_CODE_MASK         0x000000FF
372 
373 /* Define Pictbridge Qualities Codes.  */
374 
375 #define UX_PICTBRIDGE_QUALITIES_DEFAULT                     0x50000000
376 #define UX_PICTBRIDGE_QUALITIES_NORMAL                      0x50010000
377 #define UX_PICTBRIDGE_QUALITIES_DRAFT                       0x50020000
378 #define UX_PICTBRIDGE_QUALITIES_FINE                        0x50030000
379 
380 /* Define Pictbridge PaperSizes Codes.  */
381 
382 #define UX_PICTBRIDGE_PAPER_SIZES_DEFAULT                   0x51000000
383 #define UX_PICTBRIDGE_PAPER_SIZES_L                         0x51010000
384 #define UX_PICTBRIDGE_PAPER_SIZES_2L                        0x51020000
385 #define UX_PICTBRIDGE_PAPER_SIZES_HAGAKI_POSTCARD           0x51030000
386 #define UX_PICTBRIDGE_PAPER_SIZES_CARD_SIZE                 0x51040000
387 #define UX_PICTBRIDGE_PAPER_SIZES_100X150                   0x51050000
388 #define UX_PICTBRIDGE_PAPER_SIZES_4IX6I                     0x51060000
389 #define UX_PICTBRIDGE_PAPER_SIZES_8IX10I                    0x51070000
390 #define UX_PICTBRIDGE_PAPER_SIZES_LETTER                    0x51080000
391 #define UX_PICTBRIDGE_PAPER_SIZES_11IX17I                   0x510A0000
392 
393 /* Define Pictbridge PaperTypes Codes.  */
394 
395 #define UX_PICTBRIDGE_PAPER_TYPES_DEFAULT                   0x52000000
396 #define UX_PICTBRIDGE_PAPER_TYPES_PLAIN                     0x52010000
397 #define UX_PICTBRIDGE_PAPER_TYPES_PHOTO                     0x52020000
398 #define UX_PICTBRIDGE_PAPER_TYPES_FAST_PHOTO                0x52030000
399 
400 /* Define Pictbridge FileTypes Codes.  */
401 
402 #define UX_PICTBRIDGE_FILE_TYPES_DEFAULT                    0x53000000
403 #define UX_PICTBRIDGE_FILE_TYPES_EXIF_JPEG                  0x53010000
404 #define UX_PICTBRIDGE_FILE_TYPES_OTHER_EXIF                 0x53020000
405 #define UX_PICTBRIDGE_FILE_TYPES_JPEG                       0x53030000
406 #define UX_PICTBRIDGE_FILE_TYPES_TIFF_EP                    0x53040000
407 #define UX_PICTBRIDGE_FILE_TYPES_FLASHPIX                   0x53050000
408 #define UX_PICTBRIDGE_FILE_TYPES_BMP                        0x53060000
409 #define UX_PICTBRIDGE_FILE_TYPES_CIFF                       0x53070000
410 #define UX_PICTBRIDGE_FILE_TYPES_GIF                        0x53080000
411 #define UX_PICTBRIDGE_FILE_TYPES_JFIF                       0x53090000
412 #define UX_PICTBRIDGE_FILE_TYPES_PCD                        0x530A0000
413 #define UX_PICTBRIDGE_FILE_TYPES_PICT                       0x530B0000
414 #define UX_PICTBRIDGE_FILE_TYPES_PNG                        0x530C0000
415 #define UX_PICTBRIDGE_FILE_TYPES_TIFF                       0x530D0000
416 #define UX_PICTBRIDGE_FILE_TYPES_TIFF_IT                    0x530E0000
417 #define UX_PICTBRIDGE_FILE_TYPES_JP2                        0x530F0000
418 #define UX_PICTBRIDGE_FILE_TYPES_JPX                        0x53110000
419 #define UX_PICTBRIDGE_FILE_TYPES_UNDEFINED                  0x53120000
420 #define UX_PICTBRIDGE_FILE_TYPES_ASSOCIATION                0x53130000
421 #define UX_PICTBRIDGE_FILE_TYPES_SCRIPT                     0x53140000
422 #define UX_PICTBRIDGE_FILE_TYPES_EXECUTABLE                 0x53150000
423 #define UX_PICTBRIDGE_FILE_TYPES_TEXT                       0x53160000
424 #define UX_PICTBRIDGE_FILE_TYPES_HTML                       0x53170000
425 #define UX_PICTBRIDGE_FILE_TYPES_DPOF                       0x53180000
426 #define UX_PICTBRIDGE_FILE_TYPES_AIFF                       0x53190000
427 #define UX_PICTBRIDGE_FILE_TYPES_WAV                        0x531A0000
428 #define UX_PICTBRIDGE_FILE_TYPES_MP3                        0x531B0000
429 #define UX_PICTBRIDGE_FILE_TYPES_AVI                        0x531C0000
430 #define UX_PICTBRIDGE_FILE_TYPES_MPEG                       0x531D0000
431 #define UX_PICTBRIDGE_FILE_TYPES_ASF                        0x531E0000
432 
433 /* Define Pictbridge action result codes.  */
434 
435 #define UX_PICTBRIDGE_ACTION_RESULT_OK                      0x10000000
436 #define UX_PICTBRIDGE_ACTION_RESULT_NOT_EXECUTED            0x10010000
437 #define UX_PICTBRIDGE_ACTION_RESULT_NOT_SUPPORTED_DEFAULT   0x10020000
438 #define UX_PICTBRIDGE_ACTION_RESULT_NOT_SUPPORTED_UP        0x10020001
439 #define UX_PICTBRIDGE_ACTION_RESULT_NOT_SUPPORTED_IP        0x10020002
440 #define UX_PICTBRIDGE_ACTION_RESULT_NOT_SUPPORTED_MP        0x10020003
441 #define UX_PICTBRIDGE_ACTION_RESULT_NOT_SUPPORTED_BO        0x10020004
442 #define UX_PICTBRIDGE_ACTION_RESULT_NOT_RECOGNIZED          0x10030000
443 
444 /* Define Pictbridge DatePrints Codes.  */
445 
446 #define UX_PICTBRIDGE_DATE_PRINTS_DEFAULT                   0x54000000
447 #define UX_PICTBRIDGE_DATE_PRINTS_OFF                       0x54010000
448 #define UX_PICTBRIDGE_DATE_PRINTS_ON                        0x54020000
449 
450 /* Define Pictbridge FileNamePrints Codes.  */
451 
452 #define UX_PICTBRIDGE_FILE_NAME_PRINTS_DEFAULT              0x55000000
453 #define UX_PICTBRIDGE_FILE_NAME_PRINTS_OFF                  0x55010000
454 #define UX_PICTBRIDGE_FILE_NAME_PRINTS_ON                   0x55020000
455 
456 /* Define Pictbridge ImageOptimizes Codes.  */
457 
458 #define UX_PICTBRIDGE_IMAGE_OPTIMIZES_DEFAULT               0x56000000
459 #define UX_PICTBRIDGE_IMAGE_OPTIMIZES_OFF                   0x56010000
460 #define UX_PICTBRIDGE_IMAGE_OPTIMIZES_ON                    0x56020000
461 
462 /* Define Pictbridge Layouts Codes.  */
463 
464 #define UX_PICTBRIDGE_LAYOUTS_DEFAULT                       0x57000000
465 #define UX_PICTBRIDGE_LAYOUTS_1_UP_BORDER                   0x57010000
466 #define UX_PICTBRIDGE_LAYOUTS_1_UP_LAYOUT                   0x57020000
467 #define UX_PICTBRIDGE_LAYOUTS_2_UP_LAYOUT                   0x57030000
468 #define UX_PICTBRIDGE_LAYOUTS_3_UP_LAYOUT                   0x57040000
469 #define UX_PICTBRIDGE_LAYOUTS_4_UP_LAYOUT                   0x57050000
470 #define UX_PICTBRIDGE_LAYOUTS_5_UP_LAYOUT                   0x57060000
471 #define UX_PICTBRIDGE_LAYOUTS_6_UP_LAYOUT                   0x57070000
472 #define UX_PICTBRIDGE_LAYOUTS_7_UP_LAYOUT                   0x57080000
473 #define UX_PICTBRIDGE_LAYOUTS_8_UP_LAYOUT                   0x57090000
474 #define UX_PICTBRIDGE_LAYOUTS_INDEX_PRINT                   0x57FE0000
475 #define UX_PICTBRIDGE_LAYOUTS_1_UP_BORDERLESS               0x57FF0000
476 
477 /* Define Pictbridge FixedSizes Codes.  */
478 
479 #define UX_PICTBRIDGE_FIXED_SIZE_DEFAULT                    0x58000000
480 #define UX_PICTBRIDGE_FIXED_SIZE_2IX3I                      0x58010000
481 #define UX_PICTBRIDGE_FIXED_SIZE_35IX5I                     0x58020000
482 #define UX_PICTBRIDGE_FIXED_SIZE_4IX6I                      0x58030000
483 #define UX_PICTBRIDGE_FIXED_SIZE_5IX7I                      0x58040000
484 #define UX_PICTBRIDGE_FIXED_SIZE_8IX10I                     0x58050000
485 #define UX_PICTBRIDGE_FIXED_SIZE_254MMX178MM                0x58060000
486 #define UX_PICTBRIDGE_FIXED_SIZE_110MMX74MM                 0x58070000
487 #define UX_PICTBRIDGE_FIXED_SIZE_6CMX8CM                    0x58080000
488 #define UX_PICTBRIDGE_FIXED_SIZE_7CMX10CM                   0x58090000
489 #define UX_PICTBRIDGE_FIXED_SIZE_9CMX13CM                   0x580A0000
490 #define UX_PICTBRIDGE_FIXED_SIZE_10CMX13CM                  0x580B0000
491 #define UX_PICTBRIDGE_FIXED_SIZE_15CMX21CM                  0x580C0000
492 #define UX_PICTBRIDGE_FIXED_SIZE_18CMX24CM                  0x580D0000
493 #define UX_PICTBRIDGE_FIXED_SIZE_A4                         0x580E0000
494 #define UX_PICTBRIDGE_FIXED_SIZE_LETTER                     0x580F0000
495 
496 /* Define Pictbridge Croppings Codes.  */
497 
498 #define UX_PICTBRIDGE_CROPPINGS_DEFAULT                     0x59000000
499 #define UX_PICTBRIDGE_CROPPINGS_OFF                         0x59010000
500 #define UX_PICTBRIDGE_CROPPINGS_ON                          0x59020000
501 
502 /* Define Pictbridge Abort Style Codes.  */
503 
504 #define UX_PICTBRIDGE_ABORT_STYLE_IMMEDIATELY               0x90000000
505 #define UX_PICTBRIDGE_ABORT_STYLE_AFTER_CURRENT_PAGE        0x90010000
506 
507 /* Define Pictbridge Print Service Status Codes.  */
508 
509 #define UX_PICTBRIDGE_DPS_PRINTSERVICE_STATUS_ACTIVE        0x70000000
510 #define UX_PICTBRIDGE_DPS_PRINTSERVICE_STATUS_IDLE          0x70010000
511 #define UX_PICTBRIDGE_DPS_PRINTSERVICE_STATUS_PAUSED        0x70020000
512 
513 /* Define Pictbridge Print Service Status Codes.  */
514 
515 #define UX_PICTBRIDGE_JOB_END_REASON_NOT_ENDED              0x71000000
516 #define UX_PICTBRIDGE_JOB_END_REASON_NORMAL                 0x71010000
517 #define UX_PICTBRIDGE_JOB_END_REASON_ABORTED_9000000        0x71020000
518 #define UX_PICTBRIDGE_JOB_END_REASON_ABORTED_9001000        0x71030000
519 #define UX_PICTBRIDGE_JOB_END_REASON_ABORTED_OTHER          0x71040000
520 
521 /* Define Pictbridge Error Status Codes.  */
522 
523 #define UX_PICTBRIDGE_ERROR_STATUS_NO_ERROR                 0x72000000
524 #define UX_PICTBRIDGE_ERROR_STATUS_WARNING                  0x72010000
525 #define UX_PICTBRIDGE_ERROR_STATUS_FATAL                    0x72020000
526 
527 /* Define Pictbridge Error REASON Status Codes.  */
528 
529 #define UX_PICTBRIDGE_ERROR_REASON_NO_REASON                0x73000000
530 #define UX_PICTBRIDGE_ERROR_REASON_PAPER_RELATED            0x73010000
531 #define UX_PICTBRIDGE_ERROR_REASON_INK_RELATED              0x73020000
532 #define UX_PICTBRIDGE_ERROR_REASON_HARDWARE_RELATED         0x73030000
533 #define UX_PICTBRIDGE_ERROR_REASON_FILE_RELATED             0x73040000
534 
535 /* Define Pictbridge Disconnect Enable Status Codes.  */
536 
537 #define UX_PICTBRIDGE_DISCONNECT_ENABLE_FALSE               0x74000000
538 #define UX_PICTBRIDGE_DISCONNECT_ENABLE_TRUE                0x74010000
539 
540 /* Define Pictbridge Capability Changed Status Codes.  */
541 
542 #define UX_PICTBRIDGE_CAPABILITY_CHANGED_FALSE              0x75000000
543 #define UX_PICTBRIDGE_CAPABILITY_CHANGED_TRUE               0x75010000
544 
545 /* Define Pictbridge New Job Status Codes.  */
546 
547 #define UX_PICTBRIDGE_NEW_JOB_FALSE                         0x76000000
548 #define UX_PICTBRIDGE_NEW_JOB_TRUE                          0x76010000
549 
550 /* Define Pictbridge Print Info structure.  */
551 typedef struct UX_PICTBRIDGE_PRINTINFO_STRUCT
552 {
553 
554     struct UX_PICTBRIDGE_PRINTINFO_STRUCT                   *ux_pictbridge_printinfo_next;
555     ULONG                                                   ux_pictbridge_printinfo_croppingarea_xcoordinate;
556     ULONG                                                   ux_pictbridge_printinfo_croppingarea_ycoordinate;
557     ULONG                                                   ux_pictbridge_printinfo_croppingarea_width;
558     ULONG                                                   ux_pictbridge_printinfo_croppingarea_height;
559     ULONG                                                   ux_pictbridge_printinfo_fileid;
560     UCHAR                                                   ux_pictbridge_printinfo_filename[UX_PICTBRIDGE_MAX_STRING_SIZE];
561     UCHAR                                                   ux_pictbridge_printinfo_date[UX_PICTBRIDGE_MAX_STRING_SIZE];
562     ULONG                                                   ux_pictbridge_printinfo_copies;
563     ULONG                                                   ux_pictbridge_printinfo_prtpid;
564     UCHAR                                                   ux_pictbridge_printinfo_filepath[UX_PICTBRIDGE_MAX_STRING_SIZE];
565     ULONG                                                   ux_pictbridge_printinfo_copyid;
566     ULONG                                                   ux_pictbridge_printinfo_current_page;
567     ULONG                                                   ux_pictbridge_printinfo_total_page;
568     ULONG                                                   ux_pictbridge_printinfo_images_printed;
569 } UX_PICTBRIDGE_PRINTINFO;
570 
571 /* Define Pictbridge Job Info structure.  */
572 typedef struct UX_PICTBRIDGE_JOBINFO_STRUCT
573 {
574 
575     ULONG                                                   ux_pictbridge_jobinfo_status;
576     ULONG                                                   ux_pictbridge_jobinfo_quality;
577     ULONG                                                   ux_pictbridge_jobinfo_papertype;
578     ULONG                                                   ux_pictbridge_jobinfo_papersize;
579     ULONG                                                   ux_pictbridge_jobinfo_filetype;
580     ULONG                                                   ux_pictbridge_jobinfo_dateprint;
581     ULONG                                                   ux_pictbridge_jobinfo_filenameprint;
582     ULONG                                                   ux_pictbridge_jobinfo_imageoptimize;
583     ULONG                                                   ux_pictbridge_jobinfo_layout;
584     ULONG                                                   ux_pictbridge_jobinfo_fixedsize;
585     ULONG                                                   ux_pictbridge_jobinfo_cropping;
586     ULONG                                                   ux_pictbridge_jobinfo_abort_style;
587     VOID                                                    *ux_pictbridge_jobinfo_object;
588     UINT                                                    (*ux_pictbridge_jobinfo_object_data_read)(struct UX_PICTBRIDGE_STRUCT *pictbridge, ULONG object_handle, UCHAR *buffer,  ULONG offset, ULONG length, ULONG *actual_length);
589     UINT                                                    (*ux_pictbridge_jobinfo_object_info_get) (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima, ULONG object_handle, UX_SLAVE_CLASS_PIMA_OBJECT **object);
590     struct UX_PICTBRIDGE_PRINTINFO_STRUCT                   *ux_pictbridge_jobinfo_printinfo_start;
591     struct UX_PICTBRIDGE_PRINTINFO_STRUCT                   *ux_pictbridge_jobinfo_printinfo_current;
592 } UX_PICTBRIDGE_JOBINFO;
593 
594 /* Define Pictbridge Device Info structure.  */
595 typedef struct UX_PICTBRIDGE_DEVINFO_STRUCT
596 {
597 
598     UCHAR                                                   ux_pictbridge_devinfo_vendor_name[UX_PICTBRIDGE_MAX_STRING_SIZE];
599     UCHAR                                                   ux_pictbridge_devinfo_product_name[UX_PICTBRIDGE_MAX_STRING_SIZE];
600     UCHAR                                                   ux_pictbridge_devinfo_serial_no[UX_PICTBRIDGE_MAX_STRING_SIZE];
601     ULONG                                                   ux_pictbridge_devinfo_dpsversions[UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE];
602     ULONG                                                   ux_pictbridge_devinfo_vendor_specific_version;
603     ULONG                                                   ux_pictbridge_devinfo_print_service_available;
604     ULONG                                                   ux_pictbridge_devinfo_qualities[UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE];
605     ULONG                                                   ux_pictbridge_devinfo_papersizes[UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE];
606     ULONG                                                   ux_pictbridge_devinfo_papertypes[UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE];
607     ULONG                                                   ux_pictbridge_devinfo_papertypes_papersize;
608     ULONG                                                   ux_pictbridge_devinfo_filetypes[UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE];
609     ULONG                                                   ux_pictbridge_devinfo_dateprints[UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE];
610     ULONG                                                   ux_pictbridge_devinfo_filenameprints[UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE];
611     ULONG                                                   ux_pictbridge_devinfo_imageoptimizes[UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE];
612     ULONG                                                   ux_pictbridge_devinfo_layouts[UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE];
613     ULONG                                                   ux_pictbridge_devinfo_layouts_papersize;
614     ULONG                                                   ux_pictbridge_devinfo_fixedsizes[UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE];
615     ULONG                                                   ux_pictbridge_devinfo_croppings[UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE];
616     ULONG                                                   ux_pictbridge_devinfo_charrepertoires[UX_PICTBRIDGE_MAX_DEVINFO_ARRAY_SIZE];
617     ULONG                                                   ux_pictbridge_devinfo_dpsprintservicestatus;
618     ULONG                                                   ux_pictbridge_devinfo_jobendreason;
619     ULONG                                                   ux_pictbridge_devinfo_errorstatus;
620     ULONG                                                   ux_pictbridge_devinfo_errorreason;
621     ULONG                                                   ux_pictbridge_devinfo_disconnectenable;
622     ULONG                                                   ux_pictbridge_devinfo_capabilitychanged;
623     ULONG                                                   ux_pictbridge_devinfo_newjobok;
624     ULONG                                                   ux_pictbridge_devinfo_storage_size;
625 
626 } UX_PICTBRIDGE_DEVINFO;
627 
628 
629 /* Define Pictbridge event structure.  */
630 typedef struct UX_PICTBRIDGE_EVENT_STRUCT
631 {
632     ULONG                                                   ux_pictbridge_event_code;
633     ULONG                                                   ux_pictbridge_event_parameter_1;
634     ULONG                                                   ux_pictbridge_event_parameter_2;
635     ULONG                                                   ux_pictbridge_event_parameter_3;
636 
637 } UX_PICTBRIDGE_EVENT;
638 
639 /* Define Pictbridge structure.  */
640 typedef struct UX_PICTBRIDGE_STRUCT
641 {
642 
643     VOID                                                    *ux_pictbridge_pima;
644     ULONG                                                   ux_pictbridge_storage_ids[UX_PICTBRIDGE_MAX_NUMBER_STORAGE_IDS];
645     ULONG                                                   ux_pictbridge_object_handles_array[UX_PICTBRIDGE_MAX_NUMBER_OBJECT_HANDLES];
646     UX_PICTBRIDGE_EVENT                                     ux_pictbridge_event_array[UX_PICTBRIDGE_MAX_EVENT_NUMBER];
647     UX_PICTBRIDGE_EVENT                                     *ux_pictbridge_event_array_head;
648     UX_PICTBRIDGE_EVENT                                     *ux_pictbridge_event_array_tail;
649     UX_PICTBRIDGE_EVENT                                     *ux_pictbridge_event_array_end;
650     UX_SEMAPHORE                                            ux_pictbridge_notification_semaphore;
651     UCHAR                                                   *ux_pictbridge_thread_stack;
652     UX_THREAD                                               ux_pictbridge_thread;
653     UX_EVENT_FLAGS_GROUP                                    ux_pictbridge_event_flags_group;
654     ULONG                                                   ux_pictbridge_operation_result;
655     ULONG                                                   ux_pictbridge_output_result;
656     ULONG                                                   ux_pictbridge_xml_report_direction;
657     ULONG                                                   ux_pictbridge_request_response;
658     ULONG                                                   ux_pictbridge_input_tags;
659     ULONG                                                   ux_pictbridge_input_request;
660     ULONG                                                   ux_pictbridge_discovery_state;
661     ULONG                                                   ux_pictbridge_host_client_state_machine;
662     UX_PICTBRIDGE_DEVINFO                                   ux_pictbridge_dpslocal;
663     UX_PICTBRIDGE_DEVINFO                                   ux_pictbridge_dpsclient;
664     UX_PICTBRIDGE_JOBINFO                                   ux_pictbridge_jobinfo;
665     VOID                                                    *ux_pictbridge_storage;
666     VOID                                                    *ux_pictbridge_object_host;
667     VOID                                                    *ux_pictbridge_object_client;
668     VOID                                                    *ux_pictbridge_session;
669     VOID                                                    *ux_pictbridge_device;
670     UINT                                                    (*ux_pictbridge_application_object_data_write)(struct UX_PICTBRIDGE_STRUCT *pictbridge, UCHAR *buffer,  ULONG offset, ULONG total_length, ULONG length);
671 #ifdef UX_PICTBRIDGE_DPSCLIENT
672     UX_SLAVE_CLASS_PIMA_PARAMETER                           ux_pictbridge_pima_parameter;
673     UINT                                                    (*ux_pictbridge_dps_event_callback_function)(struct UX_PICTBRIDGE_STRUCT *pictbridge, UINT event_flag);
674 #endif
675 
676 } UX_PICTBRIDGE;
677 
678 /* Define PICTBRIDGE XML Item structure.  */
679 
680 typedef struct UX_PICTBRIDGE_XML_ITEM_STRUCT
681 {
682     UCHAR                                                   ux_pictbridge_xml_item_tag_name[UX_PICTBRIDGE_MAX_TAG_SIZE];
683     ULONG                                                   ux_pictbridge_xml_item_tag_code;
684     struct UX_PICTBRIDGE_XML_ITEM_STRUCT                    *ux_pictbridge_xml_item_child;
685     struct UX_PICTBRIDGE_XML_ITEM_STRUCT                    *ux_pictbridge_xml_item_parent;
686     UINT                                                    (*ux_pictbridge_xml_item_function)(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
687 } UX_PICTBRIDGE_XML_ITEM;
688 
689 
690 
691 
692 
693 UINT  _ux_pictbridge_xml_function_root_xml(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
694 UINT  _ux_pictbridge_xml_function_root_dps(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
695 UINT  _ux_pictbridge_xml_function_root_input(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
696 UINT  _ux_pictbridge_xml_function_root_output(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
697 UINT  _ux_pictbridge_xml_function_null(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
698 UINT  _ux_pictbridge_xml_function_input_getcapability_capability_layouts(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
699 UINT  _ux_pictbridge_xml_function_input_getcapability_capability_papertypes(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
700 UINT  _ux_pictbridge_xml_function_input_startjob(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
701 UINT  _ux_pictbridge_xml_function_input_startjob_printinfo(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
702 UINT  _ux_pictbridge_xml_function_input_startjob_jobconfig_quality(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
703 UINT  _ux_pictbridge_xml_function_input_startjob_jobconfig_papersize(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
704 UINT  _ux_pictbridge_xml_function_input_startjob_jobconfig_papertype(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
705 UINT  _ux_pictbridge_xml_function_input_startjob_jobconfig_filetype(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
706 UINT  _ux_pictbridge_xml_function_input_startjob_jobconfig_dateprint(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
707 UINT  _ux_pictbridge_xml_function_input_startjob_jobconfig_filenameprint(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
708 UINT  _ux_pictbridge_xml_function_input_startjob_jobconfig_imageoptimize(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
709 UINT  _ux_pictbridge_xml_function_input_startjob_jobconfig_layout(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
710 UINT  _ux_pictbridge_xml_function_input_startjob_jobconfig_fixedsize(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
711 UINT  _ux_pictbridge_xml_function_input_startjob_jobconfig_cropping(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
712 UINT  _ux_pictbridge_xml_function_input_startjob_printinfo_croppingarea(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
713 UINT  _ux_pictbridge_xml_function_input_startjob_printinfo_fileid(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
714 UINT  _ux_pictbridge_xml_function_input_startjob_printinfo_filename(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
715 UINT  _ux_pictbridge_xml_function_input_startjob_printinfo_date(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
716 UINT  _ux_pictbridge_xml_function_input_startjob_printinfo_copies(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
717 UINT  _ux_pictbridge_xml_function_input_startjob_printinfo_prtpid(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
718 UINT  _ux_pictbridge_xml_function_input_startjob_printinfo_filepath(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
719 UINT  _ux_pictbridge_xml_function_input_startjob_printinfo_copyid(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
720 UINT  _ux_pictbridge_xml_function_input_notifydevicestatus_dpsprintservicestatus(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
721 UINT  _ux_pictbridge_xml_function_input_notifydevicestatus_jobendreason(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
722 UINT  _ux_pictbridge_xml_function_input_notifydevicestatus_errorstatus(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
723 UINT  _ux_pictbridge_xml_function_input_notifydevicestatus_errorreason(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
724 UINT  _ux_pictbridge_xml_function_input_notifydevicestatus_capabilitychanged(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
725 UINT  _ux_pictbridge_xml_function_input_notifydevicestatus_disconnectenable(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
726 UINT  _ux_pictbridge_xml_function_input_notifydevicestatus_newjobok(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
727 UINT  _ux_pictbridge_xml_function_output_result(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
728 UINT  _ux_pictbridge_xml_function_output_getcapability_capability_qualities(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
729 UINT  _ux_pictbridge_xml_function_output_getcapability_capability_papersizes(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
730 UINT  _ux_pictbridge_xml_function_output_getcapability_capability_filetypes(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
731 UINT  _ux_pictbridge_xml_function_output_getcapability_capability_dateprints(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
732 UINT  _ux_pictbridge_xml_function_output_getcapability_capability_filenameprints(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
733 UINT  _ux_pictbridge_xml_function_output_getcapability_capability_imageoptimizes(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
734 UINT  _ux_pictbridge_xml_function_output_getcapability_capability_fixedsizes(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
735 UINT  _ux_pictbridge_xml_function_output_getcapability_capability_croppings(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
736 UINT  _ux_pictbridge_xml_function_output_getcapability_capability_papertypes(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
737 UINT  _ux_pictbridge_xml_function_output_getcapability_capability_layouts(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
738 UINT  _ux_pictbridge_xml_function_output_getdevicestatus_dpsprintservicestatus(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
739 UINT  _ux_pictbridge_xml_function_output_getdevicestatus_jobendreason(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
740 UINT  _ux_pictbridge_xml_function_output_getdevicestatus_errorstatus(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
741 UINT  _ux_pictbridge_xml_function_output_getdevicestatus_errorreason(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
742 UINT  _ux_pictbridge_xml_function_output_getdevicestatus_disconnectenable(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
743 UINT  _ux_pictbridge_xml_function_output_getdevicestatus_capabilitychanged(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
744 UINT  _ux_pictbridge_xml_function_output_getdevicestatus_newjobok(UX_PICTBRIDGE *pictbridge, UCHAR *input_variable, UCHAR *input_string, UCHAR *xml_parameter);
745 
746 /* Remapping of pictbridge functions that point to a NULL function..  */
747 
748 #define        _ux_pictbridge_xml_function_input_getfilelist_filetype                               _ux_pictbridge_xml_function_null
749 #define        _ux_pictbridge_xml_function_input_getfilelist_parentfileid                           _ux_pictbridge_xml_function_null
750 #define        _ux_pictbridge_xml_function_input_getfilelist_maxnumids                              _ux_pictbridge_xml_function_null
751 #define        _ux_pictbridge_xml_function_output_getfilelist_fileids                               _ux_pictbridge_xml_function_null
752 #define        _ux_pictbridge_xml_function_output_getfilelist_numids                                _ux_pictbridge_xml_function_null
753 #define        _ux_pictbridge_xml_function_input_getpartialfile_fileid                              _ux_pictbridge_xml_function_null
754 #define        _ux_pictbridge_xml_function_input_getpartialfile_offset                              _ux_pictbridge_xml_function_null
755 #define        _ux_pictbridge_xml_function_input_getpartialfile_maxsize                             _ux_pictbridge_xml_function_null
756 #define        _ux_pictbridge_xml_function_output_getpartialfile_bytesread                          _ux_pictbridge_xml_function_null
757 #define        _ux_pictbridge_xml_function_input_getfile_fileid                                     _ux_pictbridge_xml_function_null
758 #define        _ux_pictbridge_xml_function_output_getfile_bytesread                                 _ux_pictbridge_xml_function_null
759 #define        _ux_pictbridge_xml_function_input_getthumb_fileid                                    _ux_pictbridge_xml_function_null
760 #define        _ux_pictbridge_xml_function_output_getthumb_bytesread                                _ux_pictbridge_xml_function_null
761 #define        _ux_pictbridge_xml_function_input_getfileid_fileid                                   _ux_pictbridge_xml_function_null
762 #define        _ux_pictbridge_xml_function_output_getfileinfo_filetype                              _ux_pictbridge_xml_function_null
763 #define        _ux_pictbridge_xml_function_output_getfileinfo_filesize                              _ux_pictbridge_xml_function_null
764 #define        _ux_pictbridge_xml_function_output_getfileinfo_thumbformat                           _ux_pictbridge_xml_function_null
765 #define        _ux_pictbridge_xml_function_output_getfileinfo_thumbsize                             _ux_pictbridge_xml_function_null
766 #define        _ux_pictbridge_xml_function_input_getfileid_basepathid                               _ux_pictbridge_xml_function_null
767 #define        _ux_pictbridge_xml_function_input_getfileid_filepath                                 _ux_pictbridge_xml_function_null
768 #define        _ux_pictbridge_xml_function_output_getfileid_basepathid                              _ux_pictbridge_xml_function_null
769 #define        _ux_pictbridge_xml_function_output_getfileid_filepath                                _ux_pictbridge_xml_function_null
770 #define        _ux_pictbridge_xml_function_input_notifydevicestatus                                 _ux_pictbridge_xml_function_null
771 #define        _ux_pictbridge_xml_function_input_notifyjobstatus                                    _ux_pictbridge_xml_function_null
772 #define        _ux_pictbridge_xml_function_input_notifyjobstatus_prtpid                             _ux_pictbridge_xml_function_null
773 #define        _ux_pictbridge_xml_function_input_notifyjobstatus_filepath                           _ux_pictbridge_xml_function_null
774 #define        _ux_pictbridge_xml_function_input_notifyjobstatus_copyid                             _ux_pictbridge_xml_function_null
775 #define        _ux_pictbridge_xml_function_input_notifyjobstatus_progress                           _ux_pictbridge_xml_function_null
776 #define        _ux_pictbridge_xml_function_output_notifyjobstatus_imagesprinted                     _ux_pictbridge_xml_function_null
777 #define        _ux_pictbridge_xml_function_input_getdevicestatus                                    _ux_pictbridge_xml_function_null
778 #define        _ux_pictbridge_xml_function_input_abortjob                                           _ux_pictbridge_xml_function_null
779 #define        _ux_pictbridge_xml_function_output_getjobstatus_prtpid                               _ux_pictbridge_xml_function_null
780 #define        _ux_pictbridge_xml_function_output_getjobstatus_filepath                             _ux_pictbridge_xml_function_null
781 #define        _ux_pictbridge_xml_function_output_getjobstatus_copyid                               _ux_pictbridge_xml_function_null
782 #define        _ux_pictbridge_xml_function_output_getjobstatus_progress                             _ux_pictbridge_xml_function_null
783 #define        _ux_pictbridge_xml_function_output_getjobstatus_imagesprinted                        _ux_pictbridge_xml_function_null
784 #define        _ux_pictbridge_xml_function_output_printserviceavailable                             _ux_pictbridge_xml_function_null
785 #define        _ux_pictbridge_xml_function_output_dpsversion                                        _ux_pictbridge_xml_function_null
786 #define        _ux_pictbridge_xml_function_output_vendorname                                        _ux_pictbridge_xml_function_null
787 #define        _ux_pictbridge_xml_function_output_vendorspecificversion                             _ux_pictbridge_xml_function_null
788 #define        _ux_pictbridge_xml_function_output_productname                                       _ux_pictbridge_xml_function_null
789 #define        _ux_pictbridge_xml_function_output_serialno                                          _ux_pictbridge_xml_function_null
790 #define        _ux_pictbridge_xml_function_output_startjob                                          _ux_pictbridge_xml_function_null
791 #define        _ux_pictbridge_xml_function_output_abortjob                                          _ux_pictbridge_xml_function_null
792 #define        _ux_pictbridge_xml_function_output_continuejob                                       _ux_pictbridge_xml_function_null
793 #define        _ux_pictbridge_xml_function_output_notifyjobstatus                                   _ux_pictbridge_xml_function_null
794 #define        _ux_pictbridge_xml_function_output_notifydevicestatus                                _ux_pictbridge_xml_function_null
795 #define        _ux_pictbridge_xml_function_output_getcapability_capability                          _ux_pictbridge_xml_function_null
796 #define        _ux_pictbridge_xml_function_input_getcapability_capability_qualities                 _ux_pictbridge_xml_function_null
797 #define        _ux_pictbridge_xml_function_input_getcapability_capability_papersizes                _ux_pictbridge_xml_function_null
798 #define        _ux_pictbridge_xml_function_input_getcapability_capability_filetypes                 _ux_pictbridge_xml_function_null
799 #define        _ux_pictbridge_xml_function_input_getcapability_capability_dateprints                _ux_pictbridge_xml_function_null
800 #define        _ux_pictbridge_xml_function_input_getcapability_capability_filenameprints            _ux_pictbridge_xml_function_null
801 #define        _ux_pictbridge_xml_function_input_getcapability_capability_imageoptimizes            _ux_pictbridge_xml_function_null
802 #define        _ux_pictbridge_xml_function_input_getcapability_capability_fixedsizes                _ux_pictbridge_xml_function_null
803 #define        _ux_pictbridge_xml_function_input_getcapability_capability_croppings                 _ux_pictbridge_xml_function_null
804 #define        _ux_pictbridge_xml_function_input_getcapability_capability_charrepertoires           _ux_pictbridge_xml_function_null
805 #define        _ux_pictbridge_xml_function_input_getjobstatus                                       _ux_pictbridge_xml_function_null
806 #define        _ux_pictbridge_xml_function_input_continuejob                                        _ux_pictbridge_xml_function_null
807 #define        _ux_pictbridge_xml_function_input_dpsversion                                         _ux_pictbridge_xml_function_null
808 #define        _ux_pictbridge_xml_function_input_vendorname                                         _ux_pictbridge_xml_function_null
809 #define        _ux_pictbridge_xml_function_input_vendorspecificversion                              _ux_pictbridge_xml_function_null
810 #define        _ux_pictbridge_xml_function_input_productname                                        _ux_pictbridge_xml_function_null
811 #define        _ux_pictbridge_xml_function_input_serialno                                           _ux_pictbridge_xml_function_null
812 #define        _ux_pictbridge_xml_function_output_getcapability_capability_charrepertoires          _ux_pictbridge_xml_function_null
813 
814 #ifdef UX_PICTBRIDGE_DPSCLIENT
815 
816 VOID  _ux_pictbridge_dpsclient_thread(ULONG parameter);
817 UINT  _ux_pictbridge_dpsclient_object_data_get(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle, UCHAR *object_buffer, ULONG object_offset,
818                                                                 ULONG object_length_requested, ULONG *object_actual_length);
819 UINT  _ux_pictbridge_dpsclient_object_data_send(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle, ULONG phase,
820                                                 UCHAR *object_buffer, ULONG object_offset,
821                                                 ULONG object_length);
822 UINT  _ux_pictbridge_dpsclient_object_number_get(UX_SLAVE_CLASS_PIMA *pima, ULONG object_format_code, ULONG object_association, ULONG *number_objects);
823 UINT  _ux_pictbridge_dpsclient_object_info_get(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle,
824                                                 UX_SLAVE_CLASS_PIMA_OBJECT **object);
825 UINT  _ux_pictbridge_dpsclient_object_info_send(UX_SLAVE_CLASS_PIMA *pima, UX_SLAVE_CLASS_PIMA_OBJECT *object,
826                                                 ULONG storage_id, ULONG parent_object_handle, ULONG *object_handle);
827 UINT  _ux_pictbridge_dpsclient_object_delete(UX_SLAVE_CLASS_PIMA *pima, ULONG object_handle);
828 UINT  _ux_pictbridge_dpsclient_object_handles_get(UX_SLAVE_CLASS_PIMA *pima,
829                                                     ULONG object_handles_format_code,
830                                                     ULONG object_handles_association,
831                                                     ULONG *object_handles_array,
832                                                     ULONG object_handles_max_number);
833 UINT  _ux_pictbridge_dpsclient_input_object_prepare(UX_PICTBRIDGE *pictbridge,
834                                                     ULONG input_function,
835                                                     ULONG input_subfunction,
836                                                     ULONG input_parameter);
837 UINT _ux_pictbridge_dpsclient_input_object_configure_print_service(UX_PICTBRIDGE *pictbridge,
838                                                             UCHAR *pima_object_buffer,
839                                                             ULONG object_length,
840                                                             UCHAR **pima_object_buffer_updated,
841                                                             ULONG *object_length_updated);
842 UINT _ux_pictbridge_dpsclient_input_object_get_capability(UX_PICTBRIDGE *pictbridge,
843                                                             ULONG input_subcode,
844                                                             ULONG input_parameter,
845                                                             UCHAR *pima_object_buffer,
846                                                             ULONG object_length,
847                                                             UCHAR **pima_object_buffer_updated,
848                                                             ULONG *object_length_updated);
849 UINT _ux_pictbridge_dpsclient_input_object_startjob(UX_PICTBRIDGE *pictbridge,
850                                                             ULONG input_subcode,
851                                                             ULONG input_parameter,
852                                                             UCHAR *pima_object_buffer,
853                                                             ULONG object_length,
854                                                             UCHAR **pima_object_buffer_updated,
855                                                             ULONG *object_length_updated);
856 UINT _ux_pictbridge_dpsclient_input_object_abortjob(UX_PICTBRIDGE *pictbridge,
857                                                             ULONG input_subcode,
858                                                             ULONG input_parameter,
859                                                             UCHAR *pima_object_buffer,
860                                                             ULONG object_length,
861                                                             UCHAR **pima_object_buffer_updated,
862                                                             ULONG *object_length_updated);
863 UINT _ux_pictbridge_dpsclient_input_object_continuejob(UX_PICTBRIDGE *pictbridge,
864                                                             ULONG input_subcode,
865                                                             ULONG input_parameter,
866                                                             UCHAR *pima_object_buffer,
867                                                             ULONG object_length,
868                                                             UCHAR **pima_object_buffer_updated,
869                                                             ULONG *object_length_updated);
870 UINT _ux_pictbridge_dpsclient_start(UX_PICTBRIDGE *pictbridge);
871 UINT _ux_pictbridge_dpsclient_api_configure_print_service(UX_PICTBRIDGE *pictbridge);
872 UINT _ux_pictbridge_dpsclient_api_capability(UX_PICTBRIDGE *pictbridge, ULONG capability_code,
873                                              ULONG capability_parameter);
874 UINT _ux_pictbridge_dpsclient_api_device_status(UX_PICTBRIDGE *pictbridge);
875 UINT _ux_pictbridge_dpsclient_api_start_job(UX_PICTBRIDGE *pictbridge);
876 UINT _ux_pictbridge_dpsclient_api_abort_job(UX_PICTBRIDGE *pictbridge);
877 UINT _ux_pictbridge_dpsclient_api_continue_job(UX_PICTBRIDGE *pictbridge);
878 UINT _ux_pictbridge_dpsclient_register_event_callback_function(UX_PICTBRIDGE *pictbridge,
879                                                                UINT (*event_callback_function)(struct UX_PICTBRIDGE_STRUCT *pictbridge, UINT event_flag));
880 
881 
882 /* Define Pictbridge Client API prototypes.  */
883 
884 #define ux_pictbridge_dpsclient_object_data_get                                    _ux_pictbridge_dpsclient_object_data_get
885 #define ux_pictbridge_dpsclient_object_data_send                                   _ux_pictbridge_dpsclient_object_data_send
886 #define ux_pictbridge_dpsclient_object_number_get                                  _ux_pictbridge_dpsclient_object_number_get
887 #define ux_pictbridge_dpsclient_object_info_get                                    _ux_pictbridge_dpsclient_object_info_get
888 #define ux_pictbridge_dpsclient_object_info_send                                   _ux_pictbridge_dpsclient_object_info_send
889 #define ux_pictbridge_dpsclient_object_delete                                      _ux_pictbridge_dpsclient_object_delete
890 #define ux_pictbridge_dpsclient_object_handles_get                                 _ux_pictbridge_dpsclient_object_handles_get
891 #define ux_pictbridge_dpsclient_input_object_prepare                               _ux_pictbridge_dpsclient_input_object_prepare
892 #define ux_pictbridge_dpsclient_input_object_configure_print_service               _ux_pictbridge_dpsclient_input_object_configure_print_service
893 #define ux_pictbridge_dpsclient_input_object_get_capability                        _ux_pictbridge_dpsclient_input_object_get_capability
894 #define ux_pictbridge_dpsclient_input_object_startjob                              _ux_pictbridge_dpsclient_input_object_startjob
895 #define ux_pictbridge_dpsclient_input_object_abortjob                              _ux_pictbridge_dpsclient_input_object_abortjob
896 #define ux_pictbridge_dpsclient_input_object_continuejob                           _ux_pictbridge_dpsclient_input_object_continuejob
897 #define ux_pictbridge_dpsclient_start                                              _ux_pictbridge_dpsclient_start
898 #define ux_pictbridge_dpsclient_api_configure_print_service                        _ux_pictbridge_dpsclient_api_configure_print_service
899 #define ux_pictbridge_dpsclient_api_capability                                     _ux_pictbridge_dpsclient_api_capability
900 #define ux_pictbridge_dpsclient_api_device_status                                  _ux_pictbridge_dpsclient_api_device_status
901 #define ux_pictbridge_dpsclient_api_start_job                                      _ux_pictbridge_dpsclient_api_start_job
902 #define ux_pictbridge_dpsclient_api_abort_job                                      _ux_pictbridge_dpsclient_api_abort_job
903 #define ux_pictbridge_dpsclient_api_continue_job                                   _ux_pictbridge_dpsclient_api_continue_job
904 #define ux_pictbridge_dpsclient_register_event_callback_function                   _ux_pictbridge_dpsclient_register_event_callback_function
905 
906 
907 #endif
908 #ifdef UX_PICTBRIDGE_DPSHOST
909 UINT  _ux_pictbridge_dpshost_start(UX_PICTBRIDGE *pictbridge, UX_HOST_CLASS_PIMA *pima);
910 UINT  _ux_pictbridge_dpshost_startjob(UX_PICTBRIDGE *pictbridge);
911 VOID  _ux_pictbridge_dpshost_thread(ULONG parameter);
912 VOID  _ux_pictbridge_dpshost_notification_callback(UX_HOST_CLASS_PIMA_EVENT *pima_event);
913 UINT  _ux_pictbridge_dpshost_object_get(UX_PICTBRIDGE *pictbridge, ULONG object_handle);
914 UINT  _ux_pictbridge_dpshost_response_get(UX_PICTBRIDGE *pictbridge);
915 UINT  _ux_pictbridge_dpshost_input_object_send(UX_PICTBRIDGE *pictbridge, ULONG input_function);
916 UINT  _ux_pictbridge_dpshost_output_object_create(UX_PICTBRIDGE *pictbridge);
917 UINT  _ux_pictbridge_dpshost_output_object_configure_print_service(UX_PICTBRIDGE *pictbridge,
918                                                             UCHAR *pima_object_buffer,
919                                                             ULONG object_length,
920                                                             UCHAR **pima_object_buffer_updated,
921                                                             ULONG *object_length_updated);
922 
923 UINT  _ux_pictbridge_dpshost_input_object_notify_job_status(UX_PICTBRIDGE *pictbridge,
924                                                             UCHAR *pima_object_buffer,
925                                                             ULONG object_length,
926                                                             UCHAR **pima_object_buffer_updated,
927                                                             ULONG *object_length_updated);
928 
929 UINT  _ux_pictbridge_dpshost_input_object_notify_device_status(UX_PICTBRIDGE *pictbridge,
930                                                             UCHAR *pima_object_buffer,
931                                                             ULONG object_length,
932                                                             UCHAR **pima_object_buffer_updated,
933                                                             ULONG *object_length_updated);
934 
935 UINT  _ux_pictbridge_dpshost_output_object_get_capability(UX_PICTBRIDGE *pictbridge,
936                                                             UCHAR *pima_object_buffer,
937                                                             ULONG object_length,
938                                                             UCHAR **pima_object_buffer_updated,
939                                                             ULONG *object_length_updated);
940 
941 UINT  _ux_pictbridge_dpshost_output_object_get_device_status(UX_PICTBRIDGE *pictbridge,
942                                                             UCHAR *pima_object_buffer,
943                                                             ULONG object_length,
944                                                             UCHAR **pima_object_buffer_updated,
945                                                             ULONG *object_length_updated);
946 
947 /* Define Pictbridge Client API prototypes.  */
948 
949 #endif
950 
951 /* Define the XML schema root prototype.  */
952 extern UX_PICTBRIDGE_XML_ITEM  _ux_pictbridge_xml_item_root[];
953 
954 /* Define pictbridge permanent function.  */
955 UINT  _ux_pictbridge_object_parse(UX_PICTBRIDGE *pictbridge, UCHAR *xml_object_buffer,
956                                     ULONG xml_object_length);
957 UINT  _ux_pictbridge_array_element_to_array_hexa(UCHAR *element, ULONG *hexa_array);
958 UINT  _ux_pictbridge_element_to_decimal(UCHAR *element, ULONG *decimal_value);
959 UINT  _ux_pictbridge_element_to_hexa(UCHAR *element, ULONG *hexa_value);
960 UINT  _ux_pictbridge_hexa_to_element(ULONG hexa_value, UCHAR *element);
961 UINT  _ux_pictbridge_tag_name_get(UCHAR *input_buffer, ULONG input_length,
962                                   UCHAR *tag_name,
963                                   UCHAR *variable_name,
964                                   UCHAR *variable_string,
965                                   UCHAR *xml_parameter,
966                                   UCHAR **output_buffer, ULONG *output_length,
967                                   ULONG *tag_flag);
968 UINT  _ux_pictbridge_tag_name_scan(UX_PICTBRIDGE_XML_ITEM *tag_item,
969                                   UCHAR *tag_name,
970                                   UX_PICTBRIDGE_XML_ITEM **tag_entry);
971 UINT  _ux_pictbridge_hexa_to_major_minor(ULONG hexa_value, UCHAR *output_buffer);
972 UINT  _ux_pictbridge_hexa_to_decimal_string(ULONG hexa_value, UCHAR *decimal_string,
973                                             ULONG leading_zero_flag, ULONG max_digit_string_size);
974 UINT  _ux_pictbridge_object_tag_line_add(UCHAR *pima_object_buffer,
975                                                  ULONG object_length,
976                                                  UCHAR *tag_element_string,
977                                                  ULONG tag_flag,
978                                                  UCHAR *tag_variable,
979                                                  ULONG  tag_variable_value,
980                                                  VOID  *tag_element,
981                                                  UCHAR **pima_object_buffer_updated,
982                                                  ULONG *object_length_updated);
983 
984 UINT  _ux_pictbridge_input_object_create(UX_PICTBRIDGE *pictbridge, ULONG input_function);
985 
986 
987 
988 /* Define external strings and xml tag lines.  */
989 extern UCHAR _ux_pictbridge_volume_description[];
990 extern UCHAR _ux_pictbridge_volume_label[];
991 extern UCHAR _ux_pictbridge_ddiscovery_name[];
992 extern UCHAR _ux_pictbridge_hdiscovery_name[];
993 extern UCHAR _ux_pictbridge_hrequest_name[];
994 extern UCHAR _ux_pictbridge_hrsponse_name[];
995 extern UCHAR _ux_pictbridge_drequest_name[];
996 extern UCHAR _ux_pictbridge_drsponse_name[];
997 extern UCHAR _ux_pictbridge_xml_tag_line_xmlversion[];
998 extern UCHAR _ux_pictbridge_xml_tag_line_dpsxmlns[];
999 extern UCHAR _ux_pictbridge_xml_tag_line_dps[];
1000 extern UCHAR _ux_pictbridge_xml_tag_line_output[];
1001 extern UCHAR _ux_pictbridge_xml_tag_line_input[];
1002 extern UCHAR _ux_pictbridge_xml_tag_line_result[];
1003 extern UCHAR _ux_pictbridge_xml_tag_line_configureprintservice[];
1004 extern UCHAR _ux_pictbridge_xml_tag_line_printserviceavailable[];
1005 extern UCHAR _ux_pictbridge_xml_tag_line_dpsversions[];
1006 extern UCHAR _ux_pictbridge_xml_tag_line_vendorname[];
1007 extern UCHAR _ux_pictbridge_xml_tag_line_vendorspecificversion[];
1008 extern UCHAR _ux_pictbridge_xml_tag_line_productname[];
1009 extern UCHAR _ux_pictbridge_xml_tag_line_serialno[];
1010 extern UCHAR _ux_pictbridge_xml_tag_line_capability[];
1011 extern UCHAR _ux_pictbridge_xml_tag_line_getcapability[];
1012 extern UCHAR _ux_pictbridge_xml_tag_line_qualities[];
1013 extern UCHAR _ux_pictbridge_xml_tag_line_papersizes[];
1014 extern UCHAR _ux_pictbridge_xml_tag_line_papertypes[];
1015 extern UCHAR _ux_pictbridge_xml_tag_line_filetypes[];
1016 extern UCHAR _ux_pictbridge_xml_tag_line_dateprints[];
1017 extern UCHAR _ux_pictbridge_xml_tag_line_filenameprints[];
1018 extern UCHAR _ux_pictbridge_xml_tag_line_imageoptimizes[];
1019 extern UCHAR _ux_pictbridge_xml_tag_line_layouts[];
1020 extern UCHAR _ux_pictbridge_xml_tag_line_fixedsizes[];
1021 extern UCHAR _ux_pictbridge_xml_tag_line_croppings[];
1022 extern UCHAR _ux_pictbridge_xml_tag_line_charrepertoires[];
1023 extern UCHAR _ux_pictbridge_xml_variable_papersize[];
1024 extern UCHAR _ux_pictbridge_xml_variable_version[];
1025 extern UCHAR _ux_pictbridge_xml_variable_xmlns[];
1026 extern UCHAR _ux_pictbridge_xml_string_xmlns[];
1027 extern UCHAR _ux_pictbridge_xml_tag_line_getdevicestatus[];
1028 extern UCHAR _ux_pictbridge_xml_tag_line_dpsprintservicestatus[];
1029 extern UCHAR _ux_pictbridge_xml_tag_line_jobendreason[];
1030 extern UCHAR _ux_pictbridge_xml_tag_line_errorstatus[];
1031 extern UCHAR _ux_pictbridge_xml_tag_line_errorreason[];
1032 extern UCHAR _ux_pictbridge_xml_tag_line_disconnectenable[];
1033 extern UCHAR _ux_pictbridge_xml_tag_line_capabilitychanged[];
1034 extern UCHAR _ux_pictbridge_xml_tag_line_newjobok[];
1035 extern UCHAR _ux_pictbridge_xml_tag_line_notifydevicestatus[];
1036 extern UCHAR _ux_pictbridge_xml_tag_line_notifyjobstatus[];
1037 extern UCHAR _ux_pictbridge_xml_tag_line_progress[];
1038 extern UCHAR _ux_pictbridge_xml_tag_line_imagesprinted[];
1039 extern UCHAR _ux_pictbridge_xml_tag_line_startjob[];
1040 extern UCHAR _ux_pictbridge_xml_tag_line_abortjob[];
1041 extern UCHAR _ux_pictbridge_xml_tag_line_abortstyle[];
1042 extern UCHAR _ux_pictbridge_xml_tag_line_continuejob[];
1043 
1044 extern UCHAR _ux_pictbridge_xml_tag_line_quality[];
1045 extern UCHAR _ux_pictbridge_xml_tag_line_papersize[];
1046 extern UCHAR _ux_pictbridge_xml_tag_line_papertype[];
1047 extern UCHAR _ux_pictbridge_xml_tag_line_filetype[];
1048 extern UCHAR _ux_pictbridge_xml_tag_line_dateprint[];
1049 extern UCHAR _ux_pictbridge_xml_tag_line_filenameprint[];
1050 extern UCHAR _ux_pictbridge_xml_tag_line_imageoptimize[];
1051 extern UCHAR _ux_pictbridge_xml_tag_line_layout[];
1052 extern UCHAR _ux_pictbridge_xml_tag_line_fixedsize[];
1053 extern UCHAR _ux_pictbridge_xml_tag_line_cropping[];
1054 extern UCHAR _ux_pictbridge_xml_tag_line_jobconfig[];
1055 extern UCHAR _ux_pictbridge_xml_tag_line_printinfo[];
1056 extern UCHAR _ux_pictbridge_xml_tag_line_fileid[];
1057 extern UCHAR _ux_pictbridge_xml_tag_line_filename[];
1058 extern UCHAR _ux_pictbridge_xml_tag_line_date[];
1059 
1060 /* Determine if a C++ compiler is being used.  If so, complete the standard
1061    C conditional started above.  */
1062 #ifdef __cplusplus
1063 }
1064 #endif
1065 
1066 #endif
1067 
1068 
1069 
1070 
1071