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_host_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 /* Prototype for test control return.  */
37 
38 void  test_control_return(UINT status);
39 
40 /* Define what the initial system looks like.  */
41 
42 #ifdef CTEST
test_application_define(void * first_unused_memory)43 void test_application_define(void *first_unused_memory)
44 #else
45 void usbx_uxe_host_pima_test_application_define(void *first_unused_memory)
46 #endif
47 {
48 
49 UINT status;
50 CHAR                            *stack_pointer;
51 CHAR                            *memory_pointer;
52 
53     /* Inform user.  */
54     printf("Running uxe_host_pima APIs Test.................................... ");
55 #if !defined(UX_HOST_CLASS_PIMA_ENABLE_ERROR_CHECKING)
56 #warning Tests skipped due to compile option!
57     printf("SKIP SUCCESS!\n");
58     test_control_return(0);
59     return;
60 #endif
61 
62     /* Initialize the free memory pointer.  */
63     stack_pointer = (CHAR *) first_unused_memory;
64     memory_pointer = stack_pointer + (UX_TEST_STACK_SIZE * 2);
65 
66     /* Initialize USBX Memory.  */
67     status =  ux_system_initialize(memory_pointer, UX_TEST_MEMORY_SIZE, UX_NULL, 0);
68 
69     /* Check for error.  */
70     if (status != UX_SUCCESS)
71     {
72 
73         printf("ERROR #%d\n", __LINE__);
74         test_control_return(1);
75     }
76 
77     /* Create the simulation thread.  */
78     status =  tx_thread_create(&ux_test_thread_simulation_0, "test simulation", ux_test_thread_simulation_0_entry, 0,
79             stack_pointer, UX_TEST_STACK_SIZE,
80             20, 20, 1, TX_AUTO_START);
81 
82     /* Check for error.  */
83     if (status != TX_SUCCESS)
84     {
85 
86         printf("ERROR #%d\n", __LINE__);
87         test_control_return(1);
88     }
89 }
90 
ux_test_thread_simulation_0_entry(ULONG arg)91 static void  ux_test_thread_simulation_0_entry(ULONG arg)
92 {
93 UINT                                            status;
94 UX_HOST_CLASS_PIMA                              dummy_pima_inst;
95 UX_HOST_CLASS_PIMA                             *dummy_pima = &dummy_pima_inst;
96 UX_HOST_CLASS_PIMA_SESSION                      pima_session;
97 UCHAR                                           object_buffer[64];
98 UX_HOST_CLASS_PIMA_OBJECT                       object;
99 ULONG                                           object_actual_length;
100 ULONG                                           storage_ids_array[32];
101 UX_HOST_CLASS_PIMA_STORAGE                      storage;
102 ULONG                                           object_handles_array[32];
103 
104     /* Unit test for function ux_host_class_pima_device_info_get() */
105     status = ux_host_class_pima_device_info_get(NX_NULL, &pima_session);
106     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
107 
108     status = ux_host_class_pima_device_info_get(dummy_pima, NX_NULL);
109     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
110 
111     /* Unit test for function ux_host_class_pima_object_info_send() */
112     status = ux_host_class_pima_object_info_send(NX_NULL, &pima_session, 0, 0, &object);
113     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
114 
115     status = ux_host_class_pima_object_info_send(dummy_pima, NX_NULL, 0, 0, &object);
116     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
117 
118     status = ux_host_class_pima_object_info_send(dummy_pima, &pima_session, 0, 0, NX_NULL);
119     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
120 
121     /* Malloc fail test */
122     pima_session.ux_host_class_pima_session_magic = UX_HOST_CLASS_PIMA_MAGIC_NUMBER;
123     pima_session.ux_host_class_pima_session_state = UX_HOST_CLASS_PIMA_SESSION_STATE_OPENED;
124     _ux_system -> ux_system_memory_byte_pool[UX_MEMORY_BYTE_POOL_REGULAR] -> ux_byte_pool_start = UX_NULL;
125     _ux_system -> ux_system_memory_byte_pool[UX_MEMORY_BYTE_POOL_CACHE_SAFE] -> ux_byte_pool_start = UX_NULL;
126     status = ux_host_class_pima_object_info_send(dummy_pima, &pima_session, 0, 0, &object);
127     UX_TEST_CHECK_CODE(UX_MEMORY_INSUFFICIENT ,status);
128 
129     /* Unit test for function ux_host_class_pima_object_info_get() */
130     status = ux_host_class_pima_object_info_get(NX_NULL, &pima_session, 0, &object);
131     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
132 
133     status = ux_host_class_pima_object_info_get(dummy_pima, NX_NULL, 0, &object);
134     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
135 
136     status = ux_host_class_pima_object_info_get(dummy_pima, &pima_session, 0, NX_NULL);
137     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
138 
139     /* Malloc fail test */
140     pima_session.ux_host_class_pima_session_magic = UX_HOST_CLASS_PIMA_MAGIC_NUMBER;
141     pima_session.ux_host_class_pima_session_state = UX_HOST_CLASS_PIMA_SESSION_STATE_OPENED;
142     _ux_system -> ux_system_memory_byte_pool[UX_MEMORY_BYTE_POOL_REGULAR] -> ux_byte_pool_start = UX_NULL;
143     _ux_system -> ux_system_memory_byte_pool[UX_MEMORY_BYTE_POOL_CACHE_SAFE] -> ux_byte_pool_start = UX_NULL;
144     status = ux_host_class_pima_object_info_get(dummy_pima, &pima_session, 0, &object);
145     UX_TEST_CHECK_CODE(UX_MEMORY_INSUFFICIENT ,status);
146 
147     /* Unit test for function ux_host_class_pima_object_open() */
148     status = ux_host_class_pima_object_open(NX_NULL, &pima_session, 0, &object);
149     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
150 
151     status = ux_host_class_pima_object_open(dummy_pima, NX_NULL, 0, &object);
152     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
153 
154     status = ux_host_class_pima_object_open(dummy_pima, &pima_session, 0, NX_NULL);
155     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
156 
157     /* Unit test for function ux_host_class_pima_object_get() */
158     status = ux_host_class_pima_object_get(NX_NULL, &pima_session, 0, &object, object_buffer, 64, &object_actual_length);
159     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
160 
161     status = ux_host_class_pima_object_get(dummy_pima, NX_NULL, 0, &object, object_buffer, 64, &object_actual_length);
162     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
163 
164     status = ux_host_class_pima_object_get(dummy_pima, &pima_session, 0, NX_NULL, object_buffer, 64, &object_actual_length);
165     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
166 
167     status = ux_host_class_pima_object_get(dummy_pima, &pima_session, 0, &object, NX_NULL, 64, &object_actual_length);
168     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
169 
170     status = ux_host_class_pima_object_get(dummy_pima, &pima_session, 0, &object, object_buffer, 64, NX_NULL);
171     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
172 
173     /* Unit test for function ux_host_class_pima_object_get() */
174     status = ux_host_class_pima_object_get(NX_NULL, &pima_session, 0, &object, object_buffer, 64, &object_actual_length);
175     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
176 
177     status = ux_host_class_pima_object_get(dummy_pima, NX_NULL, 0, &object, object_buffer, 64, &object_actual_length);
178     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
179 
180     status = ux_host_class_pima_object_get(dummy_pima, &pima_session, 0, NX_NULL, object_buffer, 64, &object_actual_length);
181     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
182 
183     status = ux_host_class_pima_object_get(dummy_pima, &pima_session, 0, &object, NX_NULL, 64, &object_actual_length);
184     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
185 
186     status = ux_host_class_pima_object_get(dummy_pima, &pima_session, 0, &object, object_buffer, 64, NX_NULL);
187     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
188 
189     /* Unit test for function ux_host_class_pima_thumb_get() */
190     status = ux_host_class_pima_thumb_get(NX_NULL, &pima_session, 0, &object, object_buffer, 64, &object_actual_length);
191     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
192 
193     status = ux_host_class_pima_thumb_get(dummy_pima, NX_NULL, 0, &object, object_buffer, 64, &object_actual_length);
194     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
195 
196     status = ux_host_class_pima_thumb_get(dummy_pima, &pima_session, 0, NX_NULL, object_buffer, 64, &object_actual_length);
197     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
198 
199     status = ux_host_class_pima_thumb_get(dummy_pima, &pima_session, 0, &object, NX_NULL, 64, &object_actual_length);
200     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
201 
202     status = ux_host_class_pima_thumb_get(dummy_pima, &pima_session, 0, &object, object_buffer, 64, NX_NULL);
203     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
204 
205     /* Unit test for function ux_host_class_pima_object_send() */
206     status = ux_host_class_pima_object_send(NX_NULL, &pima_session, &object, object_buffer, 64);
207     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
208 
209     status = ux_host_class_pima_object_send(dummy_pima, NX_NULL, &object, object_buffer, 64);
210     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
211 
212     status = ux_host_class_pima_object_send(dummy_pima, &pima_session, NX_NULL, object_buffer, 64);
213     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
214 
215     status = ux_host_class_pima_object_send(dummy_pima, &pima_session, &object, NX_NULL, 64);
216     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
217 
218     /* Unit test for function ux_host_class_pima_object_delete() */
219     status = ux_host_class_pima_object_delete(NX_NULL, &pima_session, 0);
220     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
221 
222     status = ux_host_class_pima_object_delete(dummy_pima, NX_NULL, 0);
223     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
224 
225     /* Unit test for function ux_host_class_pima_object_transfer_abort() */
226     status = ux_host_class_pima_object_transfer_abort(NX_NULL, &pima_session, 0, &object);
227     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
228 
229     status = ux_host_class_pima_object_transfer_abort(dummy_pima, NX_NULL, 0, &object);
230     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
231 
232     status = ux_host_class_pima_object_transfer_abort(dummy_pima, &pima_session, 0, NX_NULL);
233     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
234 
235     /* Unit test for function ux_host_class_pima_object_close() */
236     status = ux_host_class_pima_object_close(NX_NULL, &pima_session, 0, &object);
237     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
238 
239     status = ux_host_class_pima_object_close(dummy_pima, NX_NULL, 0, &object);
240     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
241 
242     status = ux_host_class_pima_object_close(dummy_pima, &pima_session, 0, NX_NULL);
243     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
244 
245     /* Unit test for function ux_host_class_pima_session_open() */
246     status = ux_host_class_pima_session_open(NX_NULL, &pima_session);
247     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
248 
249     status = ux_host_class_pima_session_open(dummy_pima, NX_NULL);
250     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
251 
252     /* Unit test for function ux_host_class_pima_session_close() */
253     status = ux_host_class_pima_session_close(NX_NULL, &pima_session);
254     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
255 
256     status = ux_host_class_pima_session_close(dummy_pima, NX_NULL);
257     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
258 
259     /* Unit test for function ux_host_class_pima_storage_ids_get() */
260     status = ux_host_class_pima_storage_ids_get(NX_NULL, &pima_session, storage_ids_array, 32);
261     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
262 
263     status = ux_host_class_pima_storage_ids_get(dummy_pima, NX_NULL, storage_ids_array, 32);
264     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
265 
266     status = ux_host_class_pima_storage_ids_get(dummy_pima, &pima_session, NX_NULL, 32);
267     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
268 
269     /* Unit test for function ux_host_class_pima_storage_info_get() */
270     status = ux_host_class_pima_storage_info_get(NX_NULL, &pima_session, 0, &storage);
271     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
272 
273     status = ux_host_class_pima_storage_info_get(dummy_pima, NX_NULL, 0, &storage);
274     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
275 
276     status = ux_host_class_pima_storage_info_get(dummy_pima, &pima_session, 0, NX_NULL);
277     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
278 
279     /* Unit test for function ux_host_class_pima_object_handles_get() */
280     status = ux_host_class_pima_object_handles_get(NX_NULL, &pima_session, object_handles_array, 32, 0, 0, 0);
281     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
282 
283     status = ux_host_class_pima_object_handles_get(dummy_pima, NX_NULL, object_handles_array, 32, 0, 0, 0);
284     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
285 
286     status = ux_host_class_pima_object_handles_get(dummy_pima, &pima_session, NX_NULL, 32, 0, 0, 0);
287     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
288 
289     status = ux_host_class_pima_object_handles_get(dummy_pima, &pima_session, object_handles_array, 0, 0, 0, 0);
290     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
291 
292     /* Unit test for function ux_host_class_pima_num_objects_get() */
293     status = ux_host_class_pima_num_objects_get(NX_NULL, &pima_session, 0, 0);
294     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
295 
296     status = ux_host_class_pima_num_objects_get(dummy_pima, NX_NULL, 0, 0);
297     UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER ,status);
298 
299     /* Sleep for a tick to make sure everything is complete.  */
300     tx_thread_sleep(1);
301 
302     /* Check for errors from other threads.  */
303     if (error_counter)
304     {
305 
306         /* Test error.  */
307         printf("ERROR #%d: total %ld errors\n", __LINE__, error_counter);
308         test_control_return(1);
309     }
310     else
311     {
312 
313         /* Successful test.  */
314         printf("SUCCESS!\n");
315         test_control_return(0);
316     }
317 }
318