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_hid.h"
13 #include "ux_host_class_hid_keyboard.h"
14 #include "ux_host_class_hid_mouse.h"
15 #include "ux_host_class_hid_remote_control.h"
16
17 #include "ux_test.h"
18
19 /* Define USBX test constants. */
20
21 #define UX_TEST_STACK_SIZE 4096
22 #define UX_TEST_BUFFER_SIZE 2048
23 #define UX_TEST_MEMORY_SIZE (64*1024)
24
25
26 /* Define the counters used in the test application... */
27
28 static ULONG thread_0_counter;
29 static ULONG thread_1_counter;
30 static ULONG error_counter;
31
32 static UCHAR error_callback_ignore = UX_FALSE;
33 static ULONG error_callback_counter;
34
35
36 /* Define USBX test global variables. */
37
38
39 /* Define prototypes for external Host Controller's (HCDs), classes and clients. */
40
41 static TX_THREAD ux_test_thread_simulation_0;
42 static TX_THREAD ux_test_thread_simulation_1;
43 static void ux_test_thread_simulation_0_entry(ULONG);
44 static void ux_test_thread_simulation_1_entry(ULONG);
45
46
47 /* Prototype for test control return. */
48
49 void test_control_return(UINT status);
50
51
52 /* Define what the initial system looks like. */
53
54 #ifdef CTEST
test_application_define(void * first_unused_memory)55 void test_application_define(void *first_unused_memory)
56 #else
57 void usbx_uxe_device_hid_test_application_define(void *first_unused_memory)
58 #endif
59 {
60
61 UINT status;
62 CHAR *stack_pointer;
63 CHAR *memory_pointer;
64
65 /* Inform user. */
66 printf("Running uxe_device_hid APIs Test.................................... ");
67 #if !defined(UX_DEVICE_CLASS_HID_ENABLE_ERROR_CHECKING) ||\
68 !defined(UX_DEVICE_CLASS_HID_KEYBOARD_ENABLE_ERROR_CHECKING) ||\
69 !defined(UX_DEVICE_CLASS_HID_MOUSE_ENABLE_ERROR_CHECKING) ||\
70 !defined(UX_DEVICE_CLASS_HID_REMOTE_CONTROL_ENABLE_ERROR_CHECKING)
71 #warning Tests skipped due to compile option!
72 printf("SKIP SUCCESS!\n");
73 test_control_return(0);
74 return;
75 #endif
76
77 /* Initialize the free memory pointer. */
78 stack_pointer = (CHAR *) first_unused_memory;
79 memory_pointer = stack_pointer + (UX_TEST_STACK_SIZE * 2);
80
81 /* Initialize USBX Memory. */
82 status = ux_system_initialize(memory_pointer, UX_TEST_MEMORY_SIZE, UX_NULL, 0);
83
84 /* Check for error. */
85 if (status != UX_SUCCESS)
86 {
87
88 printf("ERROR #%d\n", __LINE__);
89 test_control_return(1);
90 }
91
92 /* Create the simulation thread. */
93 status = tx_thread_create(&ux_test_thread_simulation_0, "test simulation", ux_test_thread_simulation_0_entry, 0,
94 stack_pointer, UX_TEST_STACK_SIZE,
95 20, 20, 1, TX_AUTO_START);
96
97 /* Check for error. */
98 if (status != TX_SUCCESS)
99 {
100
101 printf("ERROR #%d\n", __LINE__);
102 test_control_return(1);
103 }
104 }
105
106
ux_test_thread_simulation_0_entry(ULONG arg)107 static void ux_test_thread_simulation_0_entry(ULONG arg)
108 {
109 UINT status;
110 UCHAR *dummy_name = "dummy";
111 UX_HOST_CLASS_HID dummy_hid;
112 UX_HOST_CLASS_HID_KEYBOARD dummy_keyboard;
113 UX_HOST_CLASS_HID_MOUSE dummy_mouse;
114 UX_HOST_CLASS_HID_REMOTE_CONTROL dummy_remote_control;
115
116 UX_HOST_CLASS_HID_REPORT_CALLBACK dummy_hid_report_callback;
117 UX_HOST_CLASS_HID_REPORT_GET_ID dummy_get_id;
118 UX_HOST_CLASS_HID_CLIENT_REPORT dummy_client_report;
119 USHORT dummy_word;
120 ULONG dummy_dw1, dummy_dw2;
121 SLONG dummy_sl1, dummy_sl2;
122
123
124 /* ux_host_class_hid_client_register() */
125 status = ux_host_class_hid_client_register(UX_NULL, ux_host_class_hid_keyboard_entry);
126 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
127 status = ux_host_class_hid_client_register(dummy_name, UX_NULL);
128 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
129
130 /* ux_host_class_hid_idle_get() */
131 status = ux_host_class_hid_idle_get(UX_NULL, &dummy_word, 0);
132 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
133 status = ux_host_class_hid_idle_get(&dummy_hid, UX_NULL, 0);
134 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
135
136 /* ux_host_class_hid_idle_set() */
137 status = ux_host_class_hid_idle_set(UX_NULL, 0, 0);
138 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
139
140 /* ux_host_class_hid_periodic_report_start() */
141 status = ux_host_class_hid_periodic_report_start(UX_NULL);
142 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
143
144 /* ux_host_class_hid_periodic_report_stop() */
145 status = ux_host_class_hid_periodic_report_stop(UX_NULL);
146 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
147
148 /* ux_host_class_hid_report_callback_register() */
149 status = ux_host_class_hid_report_callback_register(UX_NULL, &dummy_hid_report_callback);
150 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
151 status = ux_host_class_hid_report_callback_register(&dummy_hid, UX_NULL);
152 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
153
154 /* ux_host_class_hid_report_id_get() */
155 status = ux_host_class_hid_report_id_get(UX_NULL, &dummy_get_id);
156 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
157 status = ux_host_class_hid_report_id_get(&dummy_hid, UX_NULL);
158 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
159
160 /* ux_host_class_hid_report_get() */
161 status = ux_host_class_hid_report_get(UX_NULL, &dummy_client_report);
162 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
163 status = ux_host_class_hid_report_get(&dummy_hid, UX_NULL);
164 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
165
166 /* ux_host_class_hid_report_set() */
167 status = ux_host_class_hid_report_set(UX_NULL, &dummy_client_report);
168 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
169 status = ux_host_class_hid_report_set(&dummy_hid, UX_NULL);
170 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
171
172 #if 0//defined(UX_HOST_STANDALONE)
173
174 /* ux_host_class_hid_idle_set_run() */
175 status = ux_host_class_hid_idle_set_run(UX_NULL, 0, 0);
176 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
177
178 /* ux_host_class_hid_report_set_run() */
179 status = ux_host_class_hid_report_set_run(UX_NULL, &dummy_client_report);
180 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
181 status = ux_host_class_hid_report_set_run(&dummy_hid, UX_NULL);
182 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
183 #endif
184
185
186 /* ux_host_class_hid_keyboard_key_get() */
187 status = ux_host_class_hid_keyboard_key_get(UX_NULL, &dummy_dw1, &dummy_dw2);
188 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
189 status = ux_host_class_hid_keyboard_key_get(&dummy_keyboard, UX_NULL, &dummy_dw2);
190 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
191 status = ux_host_class_hid_keyboard_key_get(&dummy_keyboard, &dummy_dw1, UX_NULL);
192 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
193 status = ux_host_class_hid_keyboard_key_get(&dummy_keyboard, &dummy_dw1, &dummy_dw1);
194 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
195
196 /* ux_host_class_hid_keyboard_ioctl() */
197 status = ux_host_class_hid_keyboard_ioctl(UX_NULL, 0, UX_NULL);
198 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
199
200
201 /* ux_host_class_hid_mouse_buttons_get() */
202 status = ux_host_class_hid_mouse_buttons_get(UX_NULL, &dummy_dw1);
203 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
204 status = ux_host_class_hid_mouse_buttons_get(&dummy_mouse, UX_NULL);
205 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
206
207 /* _uxe_host_class_hid_mouse_position_get() */
208 status = _uxe_host_class_hid_mouse_position_get(UX_NULL, &dummy_sl1, &dummy_sl2);
209 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
210 status = _uxe_host_class_hid_mouse_position_get(&dummy_mouse, UX_NULL, &dummy_sl2);
211 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
212 status = _uxe_host_class_hid_mouse_position_get(&dummy_mouse, &dummy_sl1, UX_NULL);
213 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
214 status = _uxe_host_class_hid_mouse_position_get(&dummy_mouse, &dummy_sl1, &dummy_sl1);
215 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
216
217 /* ux_host_class_hid_mouse_wheel_get() */
218 status = ux_host_class_hid_mouse_wheel_get(UX_NULL, &dummy_sl1);
219 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
220 status = ux_host_class_hid_mouse_wheel_get(&dummy_mouse, UX_NULL);
221 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
222
223
224 /* ux_host_class_hid_remote_control_usage_get() */
225 status = ux_host_class_hid_remote_control_usage_get(UX_NULL, &dummy_dw1, &dummy_dw2);
226 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
227 status = ux_host_class_hid_remote_control_usage_get(&dummy_remote_control, UX_NULL, &dummy_dw2);
228 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
229 status = ux_host_class_hid_remote_control_usage_get(&dummy_remote_control, &dummy_dw1, UX_NULL);
230 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
231 status = ux_host_class_hid_remote_control_usage_get(&dummy_remote_control, &dummy_dw1, &dummy_dw1);
232 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
233
234
235 /* Sleep for a tick to make sure everything is complete. */
236 tx_thread_sleep(1);
237
238 /* Check for errors from other threads. */
239 if (error_counter)
240 {
241
242 /* Test error. */
243 printf("ERROR #%d: total %ld errors\n", __LINE__, error_counter);
244 test_control_return(1);
245 }
246 else
247 {
248
249 /* Successful test. */
250 printf("SUCCESS!\n");
251 test_control_return(0);
252 }
253 }
254