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