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