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_dummy.h"
13 #include "ux_host_class_dummy.h"
14 #include "ux_test_hcd_sim_host.h"
15
16 #include "ux_test.h"
17
18 /* Define USBX test constants. */
19
20 #define UX_TEST_STACK_SIZE 4096
21 #define UX_TEST_BUFFER_SIZE 2048
22 #define UX_TEST_MEMORY_SIZE (64*1024)
23
24
25 /* Define the counters used in the test application... */
26
27 static ULONG thread_0_counter;
28 static ULONG thread_1_counter;
29 static ULONG error_counter;
30
31 static UCHAR error_callback_ignore = UX_FALSE;
32 static ULONG error_callback_counter;
33
34
35 /* Define USBX test global variables. */
36
37
38 /* Define prototypes for external Host Controller's (HCDs), classes and clients. */
39
40 static TX_THREAD ux_test_thread_simulation_0;
41 static TX_THREAD ux_test_thread_simulation_1;
42 static void ux_test_thread_simulation_0_entry(ULONG);
43 static void ux_test_thread_simulation_1_entry(ULONG);
44
45
46 /* Prototype for test control return. */
47
48 void test_control_return(UINT status);
49
50
51 /* Define what the initial system looks like. */
52
53 #ifdef CTEST
test_application_define(void * first_unused_memory)54 void test_application_define(void *first_unused_memory)
55 #else
56 void usbx_uxe_system_test_application_define(void *first_unused_memory)
57 #endif
58 {
59
60 UINT status;
61 CHAR *stack_pointer;
62 CHAR *memory_pointer;
63
64 /* Inform user. */
65 printf("Running uxe_system APIs Test........................................ ");
66 #if !defined(UX_DEVICE_CLASS_AUDIO_ENABLE_ERROR_CHECKING)
67 #warning Tests skipped due to compile option!
68 printf("SKIP SUCCESS!\n");
69 test_control_return(0);
70 return;
71 #endif
72
73 /* Initialize the free memory pointer. */
74 stack_pointer = (CHAR *) first_unused_memory;
75 memory_pointer = stack_pointer + (UX_TEST_STACK_SIZE * 2);
76 #if 1
77 /* Initialize USBX Memory. */
78 status = ux_system_initialize(memory_pointer, UX_TEST_MEMORY_SIZE, UX_NULL, 0);
79
80 /* Check for error. */
81 if (status != UX_SUCCESS)
82 {
83
84 printf("ERROR #%d\n", __LINE__);
85 test_control_return(1);
86 }
87 #endif
88 /* Create the simulation thread. */
89 status = tx_thread_create(&ux_test_thread_simulation_0, "test simulation", ux_test_thread_simulation_0_entry, 0,
90 stack_pointer, UX_TEST_STACK_SIZE,
91 20, 20, 1, TX_AUTO_START);
92
93 /* Check for error. */
94 if (status != TX_SUCCESS)
95 {
96
97 printf("ERROR #%d\n", __LINE__);
98 test_control_return(1);
99 }
100 }
101
102
ux_test_thread_simulation_0_entry(ULONG arg)103 static void ux_test_thread_simulation_0_entry(ULONG arg)
104 {
105 UINT status;
106 UCHAR *buffer = (UCHAR *)&status;
107 UX_HOST_CLASS dummy_class;
108 UX_HOST_CLASS *dummy_class_ptr = &dummy_class;
109 UX_DEVICE dummy_device;
110 UX_DEVICE *dummy_device_ptr = &dummy_device;
111 UX_CONFIGURATION dummy_configuration;
112 UX_CONFIGURATION *dummy_configuration_ptr = &dummy_configuration;
113 UX_INTERFACE dummy_interface;
114 UX_INTERFACE *dummy_interface_ptr = &dummy_interface;
115 UX_ENDPOINT dummy_endpoint;
116 UX_ENDPOINT *dummy_endpoint_ptr = &dummy_endpoint;
117 UX_TRANSFER dummy_transfer;
118
119 /* ux_host_stack_class_get() */
120 status = ux_host_stack_class_get(UX_NULL, &dummy_class_ptr);
121 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
122 status = ux_host_stack_class_get("dummy", UX_NULL);
123 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
124
125 /* ux_host_stack_class_instance_get() */
126 status = ux_host_stack_class_instance_get(UX_NULL, 0, (VOID**)buffer);
127 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
128 status = ux_host_stack_class_instance_get(&dummy_class, 0, UX_NULL);
129 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
130
131 /* ux_host_stack_class_register() */
132 status = ux_host_stack_class_register(UX_NULL, _ux_host_class_dummy_entry);
133 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
134 status = ux_host_stack_class_register("dummy", UX_NULL);
135 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
136
137 /* ux_host_stack_configuration_interface_get() */
138 status = ux_host_stack_configuration_interface_get(UX_NULL, 0, 0, &dummy_interface_ptr);
139 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
140 status = ux_host_stack_configuration_interface_get(&dummy_configuration, 0, 0, UX_NULL);
141 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
142
143 /* ux_host_stack_device_configuration_activate() */
144 status = ux_host_stack_device_configuration_activate(UX_NULL);
145 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
146
147 /* ux_host_stack_device_configuration_deactivate() */
148 status = ux_host_stack_device_configuration_deactivate(UX_NULL);
149 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
150
151 /* ux_host_stack_device_configuration_get() */
152 status = ux_host_stack_device_configuration_get(UX_NULL, 0, &dummy_configuration_ptr);
153 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
154 status = ux_host_stack_device_configuration_get(&dummy_device, 0, UX_NULL);
155 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
156
157 /* ux_host_stack_device_get() */
158 status = ux_host_stack_device_get(0, UX_NULL);
159 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
160
161 /* ux_host_stack_device_string_get() */
162 status = ux_host_stack_device_string_get(UX_NULL, buffer, 64, 0x1234, 1);
163 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
164 status = ux_host_stack_device_string_get(&dummy_device, UX_NULL, 64, 0x1234, 1);
165 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
166 status = ux_host_stack_device_string_get(&dummy_device, buffer, 0, 0x1234, 1);
167 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
168
169 /* ux_host_stack_endpoint_transfer_abort() */
170 status = ux_host_stack_endpoint_transfer_abort(UX_NULL);
171 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
172
173 /* ux_host_stack_hcd_register() */
174 status = ux_host_stack_hcd_register(UX_NULL, _ux_test_hcd_sim_host_initialize, 0, 0);
175 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
176 status = ux_host_stack_hcd_register("dummy", UX_NULL, 0, 0);
177 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
178
179 /* ux_host_stack_hcd_unregister() */
180 status = ux_host_stack_hcd_unregister(UX_NULL, 0, 0);
181 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
182
183 /* ux_host_stack_interface_endpoint_get() */
184 status = ux_host_stack_interface_endpoint_get(UX_NULL, 0, &dummy_endpoint_ptr);
185 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
186 status = ux_host_stack_interface_endpoint_get(&dummy_interface, 0, UX_NULL);
187 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
188
189 /* ux_host_stack_interface_setting_select() */
190 status = ux_host_stack_interface_setting_select(UX_NULL);
191 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
192
193 /* ux_host_stack_transfer_request() */
194 status = ux_host_stack_transfer_request(UX_NULL);
195 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
196 dummy_transfer.ux_transfer_request_endpoint = UX_NULL;
197 status = ux_host_stack_transfer_request(&dummy_transfer);
198 UX_TEST_CHECK_CODE(UX_ENDPOINT_HANDLE_UNKNOWN, status);
199 dummy_transfer.ux_transfer_request_endpoint = &dummy_endpoint;
200 dummy_endpoint.ux_endpoint_device = UX_NULL;
201 status = ux_host_stack_transfer_request(&dummy_transfer);
202 UX_TEST_CHECK_CODE(UX_DEVICE_HANDLE_UNKNOWN, status);
203 #if UX_MAX_HCD > 1
204 dummy_endpoint.ux_endpoint_device = &dummy_device;
205 dummy_device.ux_device_hcd = UX_NULL;
206 status = ux_host_stack_transfer_request(&dummy_transfer);
207 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
208 #endif
209
210 #if defined(UX_HOST_STANDALONE)
211
212 /* ux_host_stack_transfer_run() */
213 status = ux_host_stack_transfer_run(UX_NULL);
214 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
215 dummy_transfer.ux_transfer_request_endpoint = UX_NULL;
216 status = ux_host_stack_transfer_run(&dummy_transfer);
217 UX_TEST_CHECK_CODE(UX_ENDPOINT_HANDLE_UNKNOWN, status);
218 dummy_transfer.ux_transfer_request_endpoint = &dummy_endpoint;
219 dummy_endpoint.ux_endpoint_device = UX_NULL;
220 status = ux_host_stack_transfer_run(&dummy_transfer);
221 UX_TEST_CHECK_CODE(UX_DEVICE_HANDLE_UNKNOWN, status);
222 #if UX_MAX_HCD > 1
223 dummy_endpoint.ux_endpoint_device = &dummy_device;
224 dummy_device.ux_device_hcd = UX_NULL;
225 status = ux_host_stack_transfer_run(&dummy_transfer);
226 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
227 #endif
228
229 #endif
230
231 /* Sleep for a tick to make sure everything is complete. */
232 tx_thread_sleep(1);
233
234 /* Check for errors from other threads. */
235 if (error_counter)
236 {
237
238 /* Test error. */
239 printf("ERROR #%d: total %ld errors\n", __LINE__, error_counter);
240 test_control_return(1);
241 }
242 else
243 {
244
245 /* Successful test. */
246 printf("SUCCESS!\n");
247 test_control_return(0);
248 }
249 }
250