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_audio.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
41 /* Define what the initial system looks like. */
42
43 #ifdef CTEST
test_application_define(void * first_unused_memory)44 void test_application_define(void *first_unused_memory)
45 #else
46 void usbx_uxe_host_audio_test_application_define(void *first_unused_memory)
47 #endif
48 {
49
50 UINT status;
51 CHAR *stack_pointer;
52 CHAR *memory_pointer;
53
54 /* Inform user. */
55 printf("Running uxe_host_audio APIs Test.................................... ");
56 #if !defined(UX_HOST_CLASS_AUDIO_ENABLE_ERROR_CHECKING)
57 #warning Tests skipped due to compile option!
58 printf("SKIP SUCCESS!\n");
59 test_control_return(0);
60 return;
61 #endif
62
63 /* Initialize the free memory pointer. */
64 stack_pointer = (CHAR *) first_unused_memory;
65 memory_pointer = stack_pointer + (UX_TEST_STACK_SIZE * 2);
66
67 /* Initialize USBX Memory. */
68 status = ux_system_initialize(memory_pointer, UX_TEST_MEMORY_SIZE, UX_NULL, 0);
69
70 /* Check for error. */
71 if (status != UX_SUCCESS)
72 {
73
74 printf("ERROR #%d\n", __LINE__);
75 test_control_return(1);
76 }
77
78 /* Create the simulation thread. */
79 status = tx_thread_create(&ux_test_thread_simulation_0, "test simulation", ux_test_thread_simulation_0_entry, 0,
80 stack_pointer, UX_TEST_STACK_SIZE,
81 20, 20, 1, TX_AUTO_START);
82
83 /* Check for error. */
84 if (status != TX_SUCCESS)
85 {
86
87 printf("ERROR #%d\n", __LINE__);
88 test_control_return(1);
89 }
90 }
91
_dummy_desc_parse_func(VOID * arg,UCHAR * packed_interface_descriptor,UCHAR * packed_endpoint_descriptor,UCHAR * packed_audio_descriptor)92 static UINT _dummy_desc_parse_func(VOID *arg,
93 UCHAR *packed_interface_descriptor,
94 UCHAR *packed_endpoint_descriptor,
95 UCHAR *packed_audio_descriptor)
96 {
97 return(0);
98 }
99
_dummy_sampling_parse_func(VOID * arg,UCHAR * packed_interface_descriptor,UX_HOST_CLASS_AUDIO_SAMPLING_CHARACTERISTICS * sam_attr)100 static UINT _dummy_sampling_parse_func(VOID *arg,
101 UCHAR *packed_interface_descriptor,
102 UX_HOST_CLASS_AUDIO_SAMPLING_CHARACTERISTICS *sam_attr)
103 {
104 return(0);
105 }
106
_dummy_int_callback_func(UX_HOST_CLASS_AUDIO_AC * audio,UCHAR * message,ULONG length,VOID * arg)107 static VOID _dummy_int_callback_func(UX_HOST_CLASS_AUDIO_AC *audio,
108 UCHAR *message, ULONG length,
109 VOID *arg)
110 {
111 }
112
ux_test_thread_simulation_0_entry(ULONG arg)113 static void ux_test_thread_simulation_0_entry(ULONG arg)
114 {
115 UINT status;
116 UX_HOST_CLASS_AUDIO dummy_audio_inst;
117 UX_HOST_CLASS_AUDIO *dummy_audio = &dummy_audio_inst;
118 UX_HOST_CLASS_AUDIO_CONTROL dummy_audio_control;
119 UX_HOST_CLASS_AUDIO_TRANSFER_REQUEST dummy_audio_request;
120 UX_HOST_CLASS_AUDIO_SAMPLING_CHARACTERISTICS dummy_audio_sampling_prop;
121 UX_HOST_CLASS_AUDIO_SAMPLING dummy_audio_sampling;
122 UCHAR dummy_buffer[64];
123
124
125 /* ux_host_class_audio_control_get() */
126 status = ux_host_class_audio_control_get(UX_NULL, &dummy_audio_control);
127 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
128 status = ux_host_class_audio_control_get(dummy_audio, UX_NULL);
129 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
130
131 /* ux_host_class_audio_control_value_get() */
132 status = ux_host_class_audio_control_value_get(UX_NULL, &dummy_audio_control);
133 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
134 status = ux_host_class_audio_control_value_get(dummy_audio, UX_NULL);
135 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
136
137 /* ux_host_class_audio_control_value_set() */
138 status = ux_host_class_audio_control_value_set(UX_NULL, &dummy_audio_control);
139 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
140 status = ux_host_class_audio_control_value_set(dummy_audio, UX_NULL);
141 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
142
143 /* ux_host_class_audio_read() */
144 status = ux_host_class_audio_read(UX_NULL, &dummy_audio_request);
145 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
146 status = ux_host_class_audio_read(dummy_audio, UX_NULL);
147 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
148
149 /* _uxe_host_class_audio_streaming_sampling_get() */
150 status = _uxe_host_class_audio_streaming_sampling_get(UX_NULL, &dummy_audio_sampling_prop);
151 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
152 status = _uxe_host_class_audio_streaming_sampling_get(dummy_audio, UX_NULL);
153 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
154
155 /* _uxe_host_class_audio_streaming_sampling_set() */
156 status = _uxe_host_class_audio_streaming_sampling_set(UX_NULL, &dummy_audio_sampling);
157 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
158 status = _uxe_host_class_audio_streaming_sampling_set(dummy_audio, UX_NULL);
159 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
160
161 /* _uxe_host_class_audio_write() */
162 status = _uxe_host_class_audio_write(UX_NULL, &dummy_audio_request);
163 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
164 status = _uxe_host_class_audio_write(dummy_audio, UX_NULL);
165 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
166
167 /* ux_host_class_audio_feedback_get() */
168 status = ux_host_class_audio_feedback_get(UX_NULL, dummy_buffer);
169 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
170 status = ux_host_class_audio_feedback_get(dummy_audio, UX_NULL);
171 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
172
173 /* ux_host_class_audio_feedback_set() */
174 status = ux_host_class_audio_feedback_set(UX_NULL, dummy_buffer);
175 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
176 status = ux_host_class_audio_feedback_set(dummy_audio, UX_NULL);
177 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
178
179 /* ux_host_class_audio_control_request() */
180 status = ux_host_class_audio_control_request(UX_NULL, 0, 0, 0, 0, 0, UX_NULL, 0, UX_NULL);
181 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
182
183 /* ux_host_class_audio_descriptors_parse() */
184 status = ux_host_class_audio_descriptors_parse(UX_NULL, _dummy_desc_parse_func, UX_NULL);
185 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
186 status = ux_host_class_audio_descriptors_parse(dummy_audio, UX_NULL, UX_NULL);
187 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
188
189 /* ux_host_class_audio_entity_control_get() */
190 status = ux_host_class_audio_entity_control_get(UX_NULL, &dummy_audio_control);
191 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
192 status = ux_host_class_audio_entity_control_get(dummy_audio, UX_NULL);
193 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
194
195 /* ux_host_class_audio_entity_control_value_get() */
196 status = ux_host_class_audio_entity_control_value_get(UX_NULL, &dummy_audio_control);
197 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
198 status = ux_host_class_audio_entity_control_value_get(dummy_audio, UX_NULL);
199 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
200
201 /* ux_host_class_audio_entity_control_value_set() */
202 status = ux_host_class_audio_entity_control_value_set(UX_NULL, &dummy_audio_control);
203 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
204 status = ux_host_class_audio_entity_control_value_set(dummy_audio, UX_NULL);
205 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
206
207 /* ux_host_class_audio_raw_sampling_parse() */
208 status = ux_host_class_audio_raw_sampling_parse(UX_NULL, _dummy_sampling_parse_func, UX_NULL);
209 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
210 status = ux_host_class_audio_raw_sampling_parse(dummy_audio, UX_NULL, UX_NULL);
211 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
212
213 /* ux_host_class_audio_raw_sampling_start() */
214 status = ux_host_class_audio_raw_sampling_start(UX_NULL, &dummy_audio_sampling);
215 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
216 status = ux_host_class_audio_raw_sampling_start(dummy_audio, UX_NULL);
217 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
218
219 /* ux_host_class_audio_stop() */
220 status = ux_host_class_audio_stop(UX_NULL);
221 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
222
223 /* ux_host_class_audio_interrupt_start() */
224 status = ux_host_class_audio_interrupt_start(UX_NULL, _dummy_int_callback_func, UX_NULL);
225 UX_TEST_CHECK_CODE(UX_INVALID_PARAMETER, status);
226
227 /* Sleep for a tick to make sure everything is complete. */
228 tx_thread_sleep(1);
229
230 /* Check for errors from other threads. */
231 if (error_counter)
232 {
233
234 /* Test error. */
235 printf("ERROR #%d: total %ld errors\n", __LINE__, error_counter);
236 test_control_return(1);
237 }
238 else
239 {
240
241 /* Successful test. */
242 printf("SUCCESS!\n");
243 test_control_return(0);
244 }
245 }
246