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