1 /* This test is designed to test the ux_utility_descriptor_pack.  */
2 
3 #include <stdio.h>
4 #include "tx_api.h"
5 #include "ux_api.h"
6 #include "ux_system.h"
7 #include "ux_utility.h"
8 
9 #include "ux_host_stack.h"
10 #include "ux_device_stack.h"
11 
12 #include "ux_device_class_pima.h"
13 
14 #include "ux_test.h"
15 
16 /* Define USBX test constants.  */
17 
18 #define UX_TEST_STACK_SIZE      4096
19 #define UX_TEST_BUFFER_SIZE     2048
20 #define UX_TEST_MEMORY_SIZE     (64*1024)
21 
22 
23 /* Define the counters used in the test application...  */
24 
25 static ULONG                           error_counter = 0;
26 
27 /* Define USBX test global variables.  */
28 
29 
30 /* Define prototypes for external Host Controller's (HCDs), classes and clients.  */
31 
32 static TX_THREAD           ux_test_thread_simulation_0;
33 static void                ux_test_thread_simulation_0_entry(ULONG);
34 
35 
36 /* PIMA MTP names ... */
37 UCHAR device_info_vendor_name[]  =      "Microsoft AzureRTOS";
38 UCHAR device_info_product_name[] =      "AzureRTOS MTP Device";
39 UCHAR device_info_serial_no[]    =      "1.1.1.1";
40 UCHAR device_info_version[]      =      "V1.0";
41 
42 /* PIMA MTP storage names.  */
43 UCHAR pima_parameter_volume_description[]        =   "MTP Client Storage Volume";
44 UCHAR pima_parameter_volume_label[]              =   "MTP Client Storage Label";
45 
46 
47 /* Define PIMA supported device properties. The last entry MUST be a zero. The DeviceInfoSet command
48    will parse this array and compute the number of functions supported and return it to the
49    host.  For each declared device property, a dataset must be created in the application.  */
50 USHORT device_prop_supported[] =   {
51 
52     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_UNDEFINED,                                         */
53     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_BATTERY_LEVEL,                                     */
54     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_FUNCTIONALMODE,                                    */
55     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_IMAGE_SIZE,                                        */
56     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_COMPRESSION_SETTING,                               */
57     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_WHITE_BALANCE,                                     */
58     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_RGB_GAIN,                                          */
59     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_F_NUMBER,                                          */
60     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_FOCAL_LENGTH,                                      */
61     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_FOCUS_DISTANCE,                                    */
62     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_FOCUS_MODE,                                        */
63     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_METERING_MODE,                            */
64     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_FLASH_MODE,                                        */
65     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_TIME,                                     */
66     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_PROGRAM_MODE,                             */
67     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_INDEX,                                    */
68     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_EXPOSURE_BIAS_COMPENSATION,                        */
69     UX_DEVICE_CLASS_PIMA_DEV_PROP_DATE_TIME,
70     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_CAPTURE_DELAY,                                     */
71     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_STILL_CAPTURE_MODE,                                */
72     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_CONTRAST,                                          */
73     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_SHARPNESS,                                         */
74     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_DIGITAL_ZOOM,                                      */
75     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_EFFECT_MODE,                                       */
76     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_BURST_NUMBER,                                      */
77     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_BURST_INTERVAL,                                    */
78     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_TIME_LAPSE_NUMBER,                                 */
79     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_TIME_LAPSE_INTERVAL,                               */
80     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_FOCUS_METERING_MODE,                               */
81     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_UPLOAD_URL,                                        */
82     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_ARTIST,                                            */
83     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_COPYRIGHT_INFO,                                    */
84 #ifdef UX_PIMA_WITH_MTP_SUPPORT
85     UX_DEVICE_CLASS_PIMA_DEV_PROP_SYNCHRONIZATION_PARTNER,
86     UX_DEVICE_CLASS_PIMA_DEV_PROP_DEVICE_FRIENDLY_NAME,
87     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_VOLUME,                                            */
88     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_SUPPORTED_FORMATS_ORDERED,                         */
89     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_DEVICE_ICON,                                       */
90     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_PLAYBACK_RATE,                                     */
91     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_PLAYBACK_OBJECT,                                   */
92     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_PLAYBACK_CONTAINER,                                */
93     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_SESSION_INITIATOR_VERSION_INFO,                    */
94     /*UX_DEVICE_CLASS_PIMA_DEV_PROP_PERCEIVED_DEVICE_TYPE,                             */
95 #endif
96     0
97 };
98 
99 /* Define PIMA supported capture formats. The last entry MUST be a zero. The DeviceInfoSet command
100    will parse this array and compute the number of functions supported and return it to the
101    host.  */
102 USHORT device_supported_capture_formats[] =       {
103     0
104 };
105 
106 /* Define PIMA supported image formats. The last entry MUST be a zero. The DeviceInfoSet command
107    will parse this array and compute the number of formats supported and return it to the
108    host.  */
109 USHORT device_supported_image_formats[] =        {
110     UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED,
111     UX_DEVICE_CLASS_PIMA_OFC_ASSOCIATION,
112     /*UX_DEVICE_CLASS_PIMA_OFC_SCRIPT,                                                  */
113     /*UX_DEVICE_CLASS_PIMA_OFC_EXECUTABLE,                                              */
114     /*UX_DEVICE_CLASS_PIMA_OFC_TEXT,                                                    */
115     /*UX_DEVICE_CLASS_PIMA_OFC_HTML,                                                    */
116     /*UX_DEVICE_CLASS_PIMA_OFC_DPOF,                                                    */
117     /*UX_DEVICE_CLASS_PIMA_OFC_AIFF,                                                    */
118     /*UX_DEVICE_CLASS_PIMA_OFC_WAV,*/
119     UX_DEVICE_CLASS_PIMA_OFC_MP3,
120     /*UX_DEVICE_CLASS_PIMA_OFC_AVI,                                                     */
121     /*UX_DEVICE_CLASS_PIMA_OFC_MPEG,                                                    */
122     UX_DEVICE_CLASS_PIMA_OFC_ASF,
123     /*UX_DEVICE_CLASS_PIMA_OFC_DEFINED,                                                 */
124     /*UX_DEVICE_CLASS_PIMA_OFC_EXIF_JPEG,                                               */
125     /*UX_DEVICE_CLASS_PIMA_OFC_TIFF_EP,                                                 */
126     /*UX_DEVICE_CLASS_PIMA_OFC_FLASHPIX,                                                */
127     /*UX_DEVICE_CLASS_PIMA_OFC_BMP,                                                     */
128     /*UX_DEVICE_CLASS_PIMA_OFC_CIFF,                                                    */
129     /*UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED,                                               */
130     /*UX_DEVICE_CLASS_PIMA_OFC_GIF,                                                     */
131     /*UX_DEVICE_CLASS_PIMA_OFC_JFIF,                                                    */
132     /*UX_DEVICE_CLASS_PIMA_OFC_CD,                                                      */
133     /*UX_DEVICE_CLASS_PIMA_OFC_PICT,                                                    */
134     /*UX_DEVICE_CLASS_PIMA_OFC_PNG,                                                     */
135     /*UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED,                                               */
136     /*UX_DEVICE_CLASS_PIMA_OFC_TIFF,                                                    */
137     /*UX_DEVICE_CLASS_PIMA_OFC_TIFF_IT,                                                 */
138     /*UX_DEVICE_CLASS_PIMA_OFC_JP2,                                                     */
139     /*UX_DEVICE_CLASS_PIMA_OFC_JPX,                                                     */
140 #ifdef UX_PIMA_WITH_MTP_SUPPORT
141     /*UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_FIRMWARE,                                      */
142     /*UX_DEVICE_CLASS_PIMA_OFC_WINDOWS_IMAGE_FORMAT,                                    */
143     /*UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_AUDIO,                                         */
144     UX_DEVICE_CLASS_PIMA_OFC_WMA,
145     /*UX_DEVICE_CLASS_PIMA_OFC_OGG,                                                     */
146     /*UX_DEVICE_CLASS_PIMA_OFC_AAC,                                                     */
147     /*UX_DEVICE_CLASS_PIMA_OFC_AUDIBLE,                                                 */
148     /*UX_DEVICE_CLASS_PIMA_OFC_FLAC,                                                    */
149     /*UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_VIDEO,                                         */
150     UX_DEVICE_CLASS_PIMA_OFC_WMV,
151     /*UX_DEVICE_CLASS_PIMA_OFC_MP4_CONTAINER,                                           */
152     /*UX_DEVICE_CLASS_PIMA_OFC_MP2,                                                     */
153     /*UX_DEVICE_CLASS_PIMA_OFC_3GP_CONTAINER,                                           */
154     /*UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_COLLECTION,                                    */
155     /*UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_MULTIMEDIA_ALBUM,                               */
156     /*UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_IMAGE_ALBUM,                                    */
157     UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_AUDIO_ALBUM,
158     /*UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_VIDEO_ALBUM,                                    */
159     UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_AUDIO_AND_VIDEO_PLAYLIST,
160     /*UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_CONTACT_GROUP,                                  */
161     /*UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_MESSAGE_FOLDER,                                 */
162     /*UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_CHAPTERED_PRODUCTION,                           */
163     /*UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_AUDIO_PLAYLIST,                                 */
164     /*UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_VIDEO_PLAYLIST,                                 */
165     /*UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_MEDIACAST,                                      */
166     /*UX_DEVICE_CLASS_PIMA_OFC_WPL_PLAYLIST,                                            */
167     /*UX_DEVICE_CLASS_PIMA_OFC_M3U_PLAYLIST,                                            */
168     /*UX_DEVICE_CLASS_PIMA_OFC_MPL_PLAYLIST,                                            */
169     /*UX_DEVICE_CLASS_PIMA_OFC_ASX_PLAYLIST,                                            */
170     /*UX_DEVICE_CLASS_PIMA_OFC_PLS_PLAYLIST,                                            */
171     /*UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_DOCUMENT,                                      */
172     /*UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_DOCUMENT,                                       */
173     /*UX_DEVICE_CLASS_PIMA_OFC_XML_DOCUMENT,                                            */
174     /*UX_DEVICE_CLASS_PIMA_OFC_MICROSOFT_WORD_DOCUMENT,                                 */
175     /*UX_DEVICE_CLASS_PIMA_OFC_MHT_COMPILED_HTML_DOCUMENT,                              */
176     /*UX_DEVICE_CLASS_PIMA_OFC_MICROSOFT_EXCEL_SPREADSHEET,                             */
177     /*UX_DEVICE_CLASS_PIMA_OFC_MICROSOFT_POWERPOINT_PRESENTATION,                       */
178     /*UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_MESSAGE,                                       */
179     /*UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_MESSAGE,                                        */
180     /*UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED_CONTACT,                                       */
181     /*UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_CONTACT,                                        */
182     /*UX_DEVICE_CLASS_PIMA_OFC_VCARD2,                                                  */
183 #endif
184     0
185 };
186 
187 /* Object property supported.
188  WORD 0      : Object Format Code
189  WORD 1      : Number of Prop codes for this Object format
190  WORD n      : Prop Codes
191  WORD n+2    : Next Object Format code ....
192 
193  This array is in whatever endinaness of the system and will be translated
194  by the PTP class in little endian.
195 
196 */
197 USHORT object_prop_supported[] = {
198 
199         /* Object format code : Undefined.  */
200         UX_DEVICE_CLASS_PIMA_OFC_UNDEFINED,
201 
202         /* NUmber of objects supported for this format.  */
203         9,
204         /* Mandatory objects for all formats.  */
205         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_STORAGEID,
206         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FORMAT,
207         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PROTECTION_STATUS,
208         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_SIZE,
209         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FILE_NAME,
210         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PARENT_OBJECT,
211         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PERSISTENT_UNIQUE_OBJECT_IDENTIFIER,
212         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NAME,
213         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NON_CONSUMABLE,
214 
215         /* Object format code : Association.  */
216         UX_DEVICE_CLASS_PIMA_OFC_ASSOCIATION,
217 
218         /* NUmber of objects supported for this format.  */
219         9,
220         /* Mandatory objects for all formats.  */
221         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_STORAGEID,
222         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FORMAT,
223         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PROTECTION_STATUS,
224         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_SIZE,
225         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FILE_NAME,
226         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PARENT_OBJECT,
227         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PERSISTENT_UNIQUE_OBJECT_IDENTIFIER,
228         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NAME,
229         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NON_CONSUMABLE,
230 
231         /* Object format code : Advanced System Format.  */
232         UX_DEVICE_CLASS_PIMA_OFC_ASF,
233 
234         /* NUmber of objects supported for this format.  */
235         9,
236         /* Mandatory objects for all formats.  */
237         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_STORAGEID,
238         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FORMAT,
239         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PROTECTION_STATUS,
240         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_SIZE,
241         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FILE_NAME,
242         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PARENT_OBJECT,
243         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PERSISTENT_UNIQUE_OBJECT_IDENTIFIER,
244         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NAME,
245         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NON_CONSUMABLE,
246 
247         /* Object format code : Audio Clip.  */
248         UX_DEVICE_CLASS_PIMA_OFC_MP3,
249 
250         /* NUmber of objects supported for this format.  */
251         20,
252         /* Mandatory objects for all formats.  */
253         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_STORAGEID,
254         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FORMAT,
255         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PROTECTION_STATUS,
256         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_SIZE,
257         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FILE_NAME,
258         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PARENT_OBJECT,
259         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PERSISTENT_UNIQUE_OBJECT_IDENTIFIER,
260         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NAME,
261         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NON_CONSUMABLE,
262 
263         /* Mandatory objects for all audio objects.  */
264         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ARTIST,
265            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_TRACK,
266         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_DATE_AUTHORED,
267         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_GENRE,
268            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_USE_COUNT,
269         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ALBUM_NAME,
270            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ALBUM_ARTIST,
271         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SAMPLE_RATE,
272            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NUMBER_OF_CHANNELS,
273            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_AUDIO_WAVE_CODEC,
274         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_AUDIO_BITRATE,
275 
276         /* Object format code : Windows Media Audio Clip.  */
277         UX_DEVICE_CLASS_PIMA_OFC_WMA,
278 
279         /* NUmber of objects supported for this format.  */
280         20,
281         /* Mandatory objects for all formats.  */
282         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_STORAGEID,
283         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FORMAT,
284         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PROTECTION_STATUS,
285         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_SIZE,
286         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FILE_NAME,
287         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PARENT_OBJECT,
288         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PERSISTENT_UNIQUE_OBJECT_IDENTIFIER,
289         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NAME,
290         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NON_CONSUMABLE,
291 
292         /* Mandatory objects for all audio objects.  */
293         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ARTIST,
294            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_TRACK,
295         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_DATE_AUTHORED,
296         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_GENRE,
297            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_USE_COUNT,
298         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ALBUM_NAME,
299            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ALBUM_ARTIST,
300         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SAMPLE_RATE,
301            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NUMBER_OF_CHANNELS,
302            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_AUDIO_WAVE_CODEC,
303         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_AUDIO_BITRATE,
304 
305         /* Object format code : Windows Media Video.  */
306         UX_DEVICE_CLASS_PIMA_OFC_WMV,
307 
308         /* NUmber of objects supported for this format.  */
309         24,
310         /* Mandatory objects for all formats.  */
311         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_STORAGEID,
312         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FORMAT,
313         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PROTECTION_STATUS,
314         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_SIZE,
315         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_OBJECT_FILE_NAME,
316         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PARENT_OBJECT,
317         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_PERSISTENT_UNIQUE_OBJECT_IDENTIFIER,
318         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NAME,
319         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NON_CONSUMABLE,
320 
321         /* Mandatory objects for all video objects.  */
322         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_WIDTH,
323         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_HEIGHT,
324         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_DATE_AUTHORED,
325         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_GENRE,
326            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_USE_COUNT,
327         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SAMPLE_RATE,
328            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_NUMBER_OF_CHANNELS,
329         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_SCAN_TYPE,
330            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_AUDIO_WAVE_CODEC,
331         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_AUDIO_BITRATE,
332         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_VIDEO_FOURCC_CODEC,
333         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_VIDEO_BITRATE,
334         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_FRAMES_PER_THOUSAND_SECONDS,
335         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_KEYFRAME_DISTANCE,
336         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ENCODING_PROFILE,
337 
338         /* Object format code : Abstract Audio Album.  */
339         UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_AUDIO_ALBUM,
340         2,
341         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_GENRE,
342            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ALBUM_ARTIST,
343 
344         /* Object format code : Abstract Audio and Video Playlist.  */
345         UX_DEVICE_CLASS_PIMA_OFC_ABSTRACT_AUDIO_AND_VIDEO_PLAYLIST,
346         2,
347         UX_DEVICE_CLASS_PIMA_OBJECT_PROP_GENRE,
348            UX_DEVICE_CLASS_PIMA_OBJECT_PROP_ALBUM_ARTIST,
349 
350         0
351 };
352 
353 
354 /* Prototype for test control return.  */
355 
356 void  test_control_return(UINT status);
357 
358 
359 UINT demo_device_reset();
360 UINT demo_device_prop_desc_get(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
361                                                 ULONG device_property,
362                                                 UCHAR **device_prop_dataset,
363                                                 ULONG *device_prop_dataset_length);
364 UINT demo_device_prop_value_get(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
365                                                 ULONG device_property,
366                                                 UCHAR **device_prop_value,
367                                                 ULONG *device_prop_value_length);
368 UINT demo_device_prop_value_set(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
369                                                 ULONG device_property,
370                                                 UCHAR *device_prop_value,
371                                                 ULONG device_prop_value_length);
372 UINT demo_storage_format(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
373                                                 ULONG storage_id);
374 UINT demo_storage_info_get(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
375                                                 ULONG storage_id);
376 UINT demo_object_number_get(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
377                                                 ULONG object_format_code,
378                                                 ULONG object_association,
379                                                 ULONG *object_number);
380 UINT demo_object_handles_get (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
381                                                  ULONG object_handles_format_code,
382                                                  ULONG object_handles_association,
383                                                  ULONG *object_handles_array,
384                                                  ULONG object_handles_max_number);
385 UINT demo_object_info_get (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
386                                                 ULONG object_handle,
387                                                 UX_SLAVE_CLASS_PIMA_OBJECT **object);
388 UINT demo_object_data_get (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
389                                                 ULONG object_handle,
390                                                 UCHAR *object_buffer,
391                                                 ULONG object_offset,
392                                                  ULONG object_length_requested,
393                                                 ULONG *object_actual_length);
394 UINT demo_object_info_send (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
395                                                 UX_SLAVE_CLASS_PIMA_OBJECT *object,
396                                                 ULONG storage_id,
397                                                 ULONG parent_object_handle,
398                                                 ULONG *object_handle);
399 UINT demo_object_data_send (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
400                                                 ULONG object_handle,
401                                                 ULONG phase ,
402                                                 UCHAR *object_buffer,
403                                                 ULONG object_offset,
404                                                 ULONG object_length);
405 UINT demo_object_delete(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
406                                                 ULONG object_handle);
407 UINT demo_object_prop_desc_get (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
408                                                 ULONG object_property,
409                                                 ULONG object_format_code,
410                                                 UCHAR **object_prop_dataset,
411                                                 ULONG *object_prop_dataset_length);
412 UINT demo_object_prop_value_get (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
413                                                 ULONG object_handle,
414                                                 ULONG object_property,
415                                                 UCHAR **object_prop_value,
416                                                 ULONG *object_prop_value_length);
417 UINT demo_object_prop_value_set (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
418                                                 ULONG object_handle,
419                                                 ULONG object_property,
420                                                 UCHAR *object_prop_value,
421                                                 ULONG object_prop_value_length);
422 UINT demo_object_references_get (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
423                                                 ULONG object_handle,
424                                                 UCHAR **object_references_array,
425                                                 ULONG *object_references_array_length);
426 UINT demo_object_references_set (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
427                                                 ULONG object_handle,
428                                                 UCHAR *object_references_array,
429                                                 ULONG object_references_array_length);
430 UINT demo_object_handle_check(ULONG object_handle,
431                                                 UX_SLAVE_CLASS_PIMA_OBJECT **object,
432                                                 ULONG *caller_handle_index);
433 UINT demo_device_class_custom_entry(UX_SLAVE_CLASS_COMMAND *command);
434 UINT demo_vendor_request(ULONG request, ULONG request_value, ULONG request_index, ULONG request_length,
435                                                UCHAR *transfer_request_buffer,
436                                                    ULONG *transfer_request_length);
437 
438 
439 /* Define what the initial system looks like.  */
440 
441 #ifdef CTEST
test_application_define(void * first_unused_memory)442 void test_application_define(void *first_unused_memory)
443 #else
444 void usbx_uxe_device_pima_test_application_define(void *first_unused_memory)
445 #endif
446 {
447 
448 UINT status;
449 CHAR                            *stack_pointer;
450 CHAR                            *memory_pointer;
451 
452     /* Inform user.  */
453     printf("Running uxe_device_pima APIs Test................................... ");
454 #if !defined(UX_DEVICE_CLASS_PRINTER_ENABLE_ERROR_CHECKING)
455 #warning Tests skipped due to compile option!
456     printf("SKIP SUCCESS!\n");
457     test_control_return(0);
458     return;
459 #endif
460 
461     /* Initialize the free memory pointer.  */
462     stack_pointer = (CHAR *) first_unused_memory;
463     memory_pointer = stack_pointer + (UX_TEST_STACK_SIZE * 2);
464 
465     /* Initialize USBX Memory.  */
466     status =  ux_system_initialize(memory_pointer, UX_TEST_MEMORY_SIZE, UX_NULL, 0);
467 
468     /* Check for error.  */
469     if (status != UX_SUCCESS)
470     {
471 
472         printf("ERROR #%d\n", __LINE__);
473         test_control_return(1);
474     }
475 
476     /* Create the simulation thread.  */
477     status =  tx_thread_create(&ux_test_thread_simulation_0, "test simulation", ux_test_thread_simulation_0_entry, 0,
478             stack_pointer, UX_TEST_STACK_SIZE,
479             20, 20, 1, TX_AUTO_START);
480 
481     /* Check for error.  */
482     if (status != TX_SUCCESS)
483     {
484 
485         printf("ERROR #%d\n", __LINE__);
486         test_control_return(1);
487     }
488 }
489 
490 
ux_test_thread_simulation_0_entry(ULONG arg)491 static void  ux_test_thread_simulation_0_entry(ULONG arg)
492 {
493 UINT                                    status;
494 UX_SLAVE_CLASS_PIMA                     dummy_pima_inst;
495 UX_SLAVE_CLASS_PIMA                     *dummy_pima = &dummy_pima_inst;
496 UX_SLAVE_CLASS_COMMAND                  dummy_command;
497 UX_SLAVE_CLASS_PIMA_PARAMETER           dummy_pima_parameter;
498 UCHAR                                   *dummy_null_string = "";
499 
500     dummy_pima_parameter.ux_device_class_pima_parameter_manufacturer                  = device_info_vendor_name;
501     dummy_pima_parameter.ux_device_class_pima_parameter_model                         = device_info_product_name;
502     dummy_pima_parameter.ux_device_class_pima_parameter_device_version                = device_info_version;
503     dummy_pima_parameter.ux_device_class_pima_parameter_serial_number                 = device_info_serial_no;
504     dummy_pima_parameter.ux_device_class_pima_parameter_storage_id                    = 1;
505     dummy_pima_parameter.ux_device_class_pima_parameter_storage_type                  = UX_DEVICE_CLASS_PIMA_STC_FIXED_RAM;
506     dummy_pima_parameter.ux_device_class_pima_parameter_storage_file_system_type      = UX_DEVICE_CLASS_PIMA_FSTC_GENERIC_FLAT;
507     dummy_pima_parameter.ux_device_class_pima_parameter_storage_access_capability     = UX_DEVICE_CLASS_PIMA_AC_READ_WRITE;
508     dummy_pima_parameter.ux_device_class_pima_parameter_storage_max_capacity_low      = 1024 * 1024;
509     dummy_pima_parameter.ux_device_class_pima_parameter_storage_max_capacity_high     = 0;
510     dummy_pima_parameter.ux_device_class_pima_parameter_storage_free_space_low        = 800 * 1024;
511     dummy_pima_parameter.ux_device_class_pima_parameter_storage_free_space_high       = 0;
512     dummy_pima_parameter.ux_device_class_pima_parameter_storage_free_space_image      = 0xFFFFFFFF;
513     dummy_pima_parameter.ux_device_class_pima_parameter_storage_description           = pima_parameter_volume_description;
514     dummy_pima_parameter.ux_device_class_pima_parameter_storage_volume_label          = pima_parameter_volume_label;
515     /* Property lists.  */
516     dummy_pima_parameter.ux_device_class_pima_parameter_device_properties_list = device_prop_supported;
517     dummy_pima_parameter.ux_device_class_pima_parameter_supported_capture_formats_list = device_supported_capture_formats;
518     dummy_pima_parameter.ux_device_class_pima_parameter_supported_image_formats_list = device_supported_image_formats;
519     /* Callback functions.  */
520     /* pima_parameter -> ux_device_class_pima_parameter_cancel can be NULL */
521     dummy_pima_parameter.ux_device_class_pima_parameter_device_reset            = demo_device_reset;
522     dummy_pima_parameter.ux_device_class_pima_parameter_device_prop_desc_get    = demo_device_prop_desc_get;
523     dummy_pima_parameter.ux_device_class_pima_parameter_device_prop_value_get   = demo_device_prop_value_get;
524     dummy_pima_parameter.ux_device_class_pima_parameter_device_prop_value_set   = demo_device_prop_value_set;
525     dummy_pima_parameter.ux_device_class_pima_parameter_storage_format          = demo_storage_format;
526     dummy_pima_parameter.ux_device_class_pima_parameter_storage_info_get        = demo_storage_info_get;
527     dummy_pima_parameter.ux_device_class_pima_parameter_object_number_get       = demo_object_number_get;
528     dummy_pima_parameter.ux_device_class_pima_parameter_object_handles_get      = demo_object_handles_get;
529     dummy_pima_parameter.ux_device_class_pima_parameter_object_info_get         = demo_object_info_get;
530     dummy_pima_parameter.ux_device_class_pima_parameter_object_data_get         = demo_object_data_get;
531     dummy_pima_parameter.ux_device_class_pima_parameter_object_info_send        = demo_object_info_send;
532     dummy_pima_parameter.ux_device_class_pima_parameter_object_data_send        = demo_object_data_send;
533     dummy_pima_parameter.ux_device_class_pima_parameter_object_delete           = demo_object_delete;
534 #ifdef UX_PIMA_WITH_MTP_SUPPORT
535     dummy_pima_parameter.ux_device_class_pima_parameter_object_properties_list  = object_prop_supported;
536     dummy_pima_parameter.ux_device_class_pima_parameter_object_prop_desc_get    = demo_object_prop_desc_get;
537     dummy_pima_parameter.ux_device_class_pima_parameter_object_prop_value_get   = demo_object_prop_value_get;
538     dummy_pima_parameter.ux_device_class_pima_parameter_object_prop_value_set   = demo_object_prop_value_set;
539     dummy_pima_parameter.ux_device_class_pima_parameter_object_references_get   = demo_object_references_get;
540     dummy_pima_parameter.ux_device_class_pima_parameter_object_references_set   = demo_object_references_set;
541 #endif
542 
543     dummy_command.ux_slave_class_command_parameter = &dummy_pima_parameter;
544 
545     /* ux_device_class_pima_entry()  */
546     dummy_command.ux_slave_class_command_request = UX_SLAVE_CLASS_COMMAND_INITIALIZE;
547 
548     dummy_pima_parameter.ux_device_class_pima_parameter_device_reset            = UX_NULL;
549     status = ux_device_class_pima_entry(&dummy_command);
550     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
551     dummy_pima_parameter.ux_device_class_pima_parameter_device_reset            = demo_device_reset;
552 
553     dummy_pima_parameter.ux_device_class_pima_parameter_device_prop_desc_get    = UX_NULL;
554     status = ux_device_class_pima_entry(&dummy_command);
555     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
556     dummy_pima_parameter.ux_device_class_pima_parameter_device_prop_desc_get    = demo_device_prop_desc_get;
557 
558     dummy_pima_parameter.ux_device_class_pima_parameter_device_prop_value_get   = UX_NULL;
559     status = ux_device_class_pima_entry(&dummy_command);
560     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
561     dummy_pima_parameter.ux_device_class_pima_parameter_device_prop_value_get   = demo_device_prop_value_get;
562 
563     dummy_pima_parameter.ux_device_class_pima_parameter_device_prop_value_set   = UX_NULL;
564     status = ux_device_class_pima_entry(&dummy_command);
565     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
566     dummy_pima_parameter.ux_device_class_pima_parameter_device_prop_value_set   = demo_device_prop_value_set;
567 
568     dummy_pima_parameter.ux_device_class_pima_parameter_storage_format          = UX_NULL;
569     status = ux_device_class_pima_entry(&dummy_command);
570     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
571     dummy_pima_parameter.ux_device_class_pima_parameter_storage_format          = demo_storage_format;
572 
573     dummy_pima_parameter.ux_device_class_pima_parameter_object_number_get       = UX_NULL;
574     status = ux_device_class_pima_entry(&dummy_command);
575     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
576     dummy_pima_parameter.ux_device_class_pima_parameter_object_number_get       = demo_object_number_get;
577 
578     dummy_pima_parameter.ux_device_class_pima_parameter_object_handles_get      = UX_NULL;
579     status = ux_device_class_pima_entry(&dummy_command);
580     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
581     dummy_pima_parameter.ux_device_class_pima_parameter_object_handles_get      = demo_object_handles_get;
582 
583     dummy_pima_parameter.ux_device_class_pima_parameter_object_info_get         = UX_NULL;
584     status = ux_device_class_pima_entry(&dummy_command);
585     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
586     dummy_pima_parameter.ux_device_class_pima_parameter_object_info_get         = demo_object_info_get;
587 
588     dummy_pima_parameter.ux_device_class_pima_parameter_object_data_get         = UX_NULL;
589     status = ux_device_class_pima_entry(&dummy_command);
590     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
591     dummy_pima_parameter.ux_device_class_pima_parameter_object_data_get         = demo_object_data_get;
592 
593     dummy_pima_parameter.ux_device_class_pima_parameter_object_info_send        = UX_NULL;
594     status = ux_device_class_pima_entry(&dummy_command);
595     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
596     dummy_pima_parameter.ux_device_class_pima_parameter_object_info_send        = demo_object_info_send;
597 
598     dummy_pima_parameter.ux_device_class_pima_parameter_object_data_send        = UX_NULL;
599     status = ux_device_class_pima_entry(&dummy_command);
600     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
601     dummy_pima_parameter.ux_device_class_pima_parameter_object_data_send        = demo_object_data_send;
602 
603     dummy_pima_parameter.ux_device_class_pima_parameter_object_delete           = UX_NULL;
604     status = ux_device_class_pima_entry(&dummy_command);
605     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
606     dummy_pima_parameter.ux_device_class_pima_parameter_object_delete           = demo_object_delete;
607 
608 #ifdef UX_PIMA_WITH_MTP_SUPPORT
609     dummy_pima_parameter.ux_device_class_pima_parameter_object_properties_list  = UX_NULL;
610     status = ux_device_class_pima_entry(&dummy_command);
611     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
612     dummy_pima_parameter.ux_device_class_pima_parameter_object_properties_list  = object_prop_supported;
613 
614     dummy_pima_parameter.ux_device_class_pima_parameter_object_prop_desc_get    = UX_NULL;
615     status = ux_device_class_pima_entry(&dummy_command);
616     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
617     dummy_pima_parameter.ux_device_class_pima_parameter_object_prop_desc_get    = demo_object_prop_desc_get;
618 
619     dummy_pima_parameter.ux_device_class_pima_parameter_object_prop_value_get   = UX_NULL;
620     status = ux_device_class_pima_entry(&dummy_command);
621     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
622     dummy_pima_parameter.ux_device_class_pima_parameter_object_prop_value_get   = demo_object_prop_value_get;
623 
624     dummy_pima_parameter.ux_device_class_pima_parameter_object_prop_value_set   = UX_NULL;
625     status = ux_device_class_pima_entry(&dummy_command);
626     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
627     dummy_pima_parameter.ux_device_class_pima_parameter_object_prop_value_set   = demo_object_prop_value_set;
628 
629     dummy_pima_parameter.ux_device_class_pima_parameter_object_references_get   = UX_NULL;
630     status = ux_device_class_pima_entry(&dummy_command);
631     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
632     dummy_pima_parameter.ux_device_class_pima_parameter_object_references_get   = demo_object_references_get;
633 
634     dummy_pima_parameter.ux_device_class_pima_parameter_object_references_set   = UX_NULL;
635     status = ux_device_class_pima_entry(&dummy_command);
636     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
637     dummy_pima_parameter.ux_device_class_pima_parameter_object_references_set   = demo_object_references_set;
638 #endif
639 
640 
641     /* Sleep for a tick to make sure everything is complete.  */
642     tx_thread_sleep(1);
643 
644     /* Check for errors from other threads.  */
645     if (error_counter)
646     {
647 
648         /* Test error.  */
649         printf("ERROR #%d: total %ld errors\n", __LINE__, error_counter);
650         test_control_return(1);
651     }
652     else
653     {
654 
655         /* Successful test.  */
656         printf("SUCCESS!\n");
657         test_control_return(0);
658     }
659 }
660 
demo_device_reset()661 UINT    demo_device_reset()
662 {
663     return(UX_SUCCESS);
664 }
665 
demo_device_prop_desc_get(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG device_property,UCHAR ** device_prop_dataset,ULONG * device_prop_dataset_length)666 UINT demo_device_prop_desc_get(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
667                                 ULONG device_property,
668                                 UCHAR **device_prop_dataset,
669                                 ULONG *device_prop_dataset_length)
670 
671 {
672     return(UX_ERROR);
673 }
674 
demo_device_prop_value_get(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG device_property,UCHAR ** device_prop_value,ULONG * device_prop_value_length)675 UINT demo_device_prop_value_get(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
676                                 ULONG device_property,
677                                 UCHAR **device_prop_value,
678                                 ULONG *device_prop_value_length)
679 {
680     return(UX_ERROR);
681 }
682 
demo_device_prop_value_set(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG device_property,UCHAR * device_prop_value,ULONG device_prop_value_length)683 UINT demo_device_prop_value_set(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
684                                 ULONG device_property,
685                                 UCHAR *device_prop_value,
686                                 ULONG device_prop_value_length)
687 {
688     return(UX_ERROR);
689 }
690 
691 
demo_storage_format(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG storage_id)692 UINT demo_storage_format(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
693                                 ULONG storage_id)
694 {
695     return(UX_ERROR);
696 }
697 
698 
demo_storage_info_get(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG storage_id)699 UINT demo_storage_info_get(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
700                                 ULONG storage_id)
701 {
702     return(UX_ERROR);
703 }
704 
demo_object_number_get(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG object_format_code,ULONG object_association,ULONG * object_number)705 UINT demo_object_number_get(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
706                                 ULONG object_format_code,
707                                 ULONG object_association,
708                                 ULONG *object_number)
709 {
710     return(UX_ERROR);
711 }
712 
demo_object_handles_get(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG object_handles_format_code,ULONG object_handles_association,ULONG * object_handles_array,ULONG object_handles_max_number)713 UINT demo_object_handles_get (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
714                                 ULONG object_handles_format_code,
715                                 ULONG object_handles_association,
716                                 ULONG *object_handles_array,
717                                 ULONG object_handles_max_number)
718 {
719     return(UX_ERROR);
720 }
721 
demo_object_info_get(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG object_handle,UX_SLAVE_CLASS_PIMA_OBJECT ** object)722 UINT demo_object_info_get (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
723                                 ULONG object_handle,
724                                 UX_SLAVE_CLASS_PIMA_OBJECT **object)
725 {
726     return(UX_ERROR);
727 }
728 
demo_object_data_get(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG object_handle,UCHAR * object_buffer,ULONG object_offset,ULONG object_length_requested,ULONG * object_actual_length)729 UINT demo_object_data_get (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
730                                 ULONG object_handle,
731                                 UCHAR *object_buffer,
732                                 ULONG object_offset,
733                                 ULONG object_length_requested,
734                                 ULONG *object_actual_length)
735 
736 {
737     return(UX_ERROR);
738 }
739 
demo_object_info_send(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,UX_SLAVE_CLASS_PIMA_OBJECT * object,ULONG storage_id,ULONG parent_object_handle,ULONG * object_handle)740 UINT demo_object_info_send (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
741                                 UX_SLAVE_CLASS_PIMA_OBJECT *object,
742                                 ULONG storage_id,
743                                 ULONG parent_object_handle,
744                                 ULONG *object_handle)
745 {
746     return(UX_ERROR);
747 }
748 
749 
demo_object_data_send(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG object_handle,ULONG phase,UCHAR * object_buffer,ULONG object_offset,ULONG object_length)750 UINT demo_object_data_send (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
751                                 ULONG object_handle,
752                                 ULONG phase ,
753                                 UCHAR *object_buffer,
754                                 ULONG object_offset,
755                                 ULONG object_length)
756 {
757     return(UX_ERROR);
758 }
759 
demo_object_delete(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG object_handle)760 UINT demo_object_delete(struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
761                                 ULONG object_handle)
762 {
763     return(UX_ERROR);
764 }
765 
766 
demo_object_prop_desc_get(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG object_property,ULONG object_format_code,UCHAR ** object_prop_dataset,ULONG * object_prop_dataset_length)767 UINT demo_object_prop_desc_get (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
768                                 ULONG object_property,
769                                 ULONG object_format_code,
770                                 UCHAR **object_prop_dataset,
771                                 ULONG *object_prop_dataset_length)
772 {
773     return(UX_ERROR);
774 }
775 
776 
demo_object_prop_value_get(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG object_handle,ULONG object_property,UCHAR ** object_prop_value,ULONG * object_prop_value_length)777 UINT demo_object_prop_value_get (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
778                                     ULONG object_handle,
779                                     ULONG object_property,
780                                     UCHAR **object_prop_value,
781                                     ULONG *object_prop_value_length)
782 {
783     return(UX_ERROR);
784 }
785 
786 
demo_object_prop_value_set(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG object_handle,ULONG object_property,UCHAR * object_prop_value,ULONG object_prop_value_length)787 UINT demo_object_prop_value_set (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
788                                     ULONG object_handle,
789                                     ULONG object_property,
790                                     UCHAR *object_prop_value,
791                                     ULONG object_prop_value_length)
792 {
793     return(UX_ERROR);
794 }
795 
796 
demo_object_references_get(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG object_handle,UCHAR ** object_references_array,ULONG * object_references_array_length)797 UINT demo_object_references_get (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
798                                     ULONG object_handle,
799                                     UCHAR **object_references_array,
800                                     ULONG *object_references_array_length)
801 {
802     return(UX_ERROR);
803 }
804 
805 
demo_object_references_set(struct UX_SLAVE_CLASS_PIMA_STRUCT * pima,ULONG object_handle,UCHAR * object_references_array,ULONG object_references_array_length)806 UINT demo_object_references_set (struct UX_SLAVE_CLASS_PIMA_STRUCT *pima,
807                                     ULONG object_handle,
808                                     UCHAR *object_references_array,
809                                     ULONG object_references_array_length)
810 {
811     return(UX_ERROR);
812 }
813 
814 
demo_object_handle_check(ULONG object_handle,UX_SLAVE_CLASS_PIMA_OBJECT ** object,ULONG * caller_handle_index)815 UINT demo_object_handle_check(ULONG object_handle,
816                                     UX_SLAVE_CLASS_PIMA_OBJECT **object,
817                                     ULONG *caller_handle_index)
818 {
819     return(UX_ERROR);
820 }
821