1 /* Include necessary system files. */
2
3 #include "usbx_ux_test_cdc_ecm.h"
4
5 static ULONG error_callback_counter;
6 static UCHAR buffer[64];
7
count_error_callback(struct UX_TEST_ACTION_STRUCT * action,VOID * params)8 static void count_error_callback(struct UX_TEST_ACTION_STRUCT *action, VOID *params)
9 {
10 UX_TEST_ERROR_CALLBACK_PARAMS *error = (UX_TEST_ERROR_CALLBACK_PARAMS *)params;
11
12 // printf("error trap #%d: 0x%x, 0x%x, 0x%x\n", __LINE__, error->system_level, error->system_context, error->error_code);
13 error_callback_counter ++;
14 }
15
16 static UX_TEST_HCD_SIM_ACTION count_on_error_trap[] = {
17 { .usbx_function = UX_TEST_OVERRIDE_ERROR_CALLBACK,
18 .action_func = count_error_callback,
19 },
20 { 0 }
21 };
22
23 /* Define what the initial system looks like. */
24 #ifdef CTEST
test_application_define(void * first_unused_memory)25 void test_application_define(void *first_unused_memory)
26 #else
27 void usbx_ux_device_class_cdc_ecm_control_request_test_application_define(void *first_unused_memory)
28 #endif
29 {
30
31 /* Inform user. */
32 printf("Running ux_device_class_cdc_ecm_control_request Test................ ");
33
34 stepinfo("\n");
35
36 /* Override error trap. */
37 ux_test_link_hooks_from_array(count_on_error_trap);
38
39 ux_test_cdc_ecm_initialize(first_unused_memory);
40 }
41
post_init_host()42 static void post_init_host()
43 {
44
45 UINT status;
46 UX_DEVICE *device;
47 UX_ENDPOINT *control_endpoint;
48 UX_TRANSFER *transfer_request;
49
50
51 stepinfo(">>>>>>>>>>>>>>>>>>> Test activate check\n");
52 UX_TEST_ASSERT(cdc_ecm_device != UX_NULL);
53
54 UX_TEST_CHECK_SUCCESS(ux_host_stack_device_get(0, &device));
55 control_endpoint = &device->ux_device_control_endpoint;
56 transfer_request = &control_endpoint->ux_endpoint_transfer_request;
57
58 transfer_request -> ux_transfer_request_data_pointer = buffer;
59 transfer_request -> ux_transfer_request_index = 0;
60
61 stepinfo(">>>>>>>>>>>>>>>>>>> Test UX_DEVICE_CLASS_CDC_ECM_SET_ETHERNET_MULTICAST_FILTER\n");
62 transfer_request -> ux_transfer_request_requested_length = 0;
63 transfer_request -> ux_transfer_request_function = UX_DEVICE_CLASS_CDC_ECM_SET_ETHERNET_MULTICAST_FILTER;
64 transfer_request -> ux_transfer_request_type = UX_REQUEST_OUT | UX_REQUEST_TYPE_CLASS | UX_REQUEST_TARGET_INTERFACE;
65 transfer_request -> ux_transfer_request_value = 1;
66 UX_TEST_CHECK_SUCCESS(ux_host_stack_transfer_request(transfer_request));
67
68 transfer_request -> ux_transfer_request_requested_length = 0;
69 transfer_request -> ux_transfer_request_function = UX_DEVICE_CLASS_CDC_ECM_SET_ETHERNET_MULTICAST_FILTER;
70 transfer_request -> ux_transfer_request_type = UX_REQUEST_OUT | UX_REQUEST_TYPE_CLASS | UX_REQUEST_TARGET_INTERFACE;
71 transfer_request -> ux_transfer_request_value = 0;
72 UX_TEST_CHECK_SUCCESS(ux_host_stack_transfer_request(transfer_request));
73
74 stepinfo(">>>>>>>>>>>>>>>>>>> Test UX_DEVICE_CLASS_CDC_ECM_SET_ETHERNET_POWER_MANAGEMENT_FILTER\n");
75 transfer_request -> ux_transfer_request_requested_length = 0;
76 transfer_request -> ux_transfer_request_function = UX_DEVICE_CLASS_CDC_ECM_SET_ETHERNET_POWER_MANAGEMENT_FILTER;
77 transfer_request -> ux_transfer_request_type = UX_REQUEST_OUT | UX_REQUEST_TYPE_CLASS | UX_REQUEST_TARGET_INTERFACE;
78 transfer_request -> ux_transfer_request_value = 1;
79 UX_TEST_CHECK_SUCCESS(ux_host_stack_transfer_request(transfer_request));
80
81 stepinfo(">>>>>>>>>>>>>>>>>>> Test UX_DEVICE_CLASS_CDC_ECM_GET_ETHERNET_POWER_MANAGEMENT_FILTER\n");
82 transfer_request -> ux_transfer_request_requested_length = 2;
83 transfer_request -> ux_transfer_request_function = UX_DEVICE_CLASS_CDC_ECM_GET_ETHERNET_POWER_MANAGEMENT_FILTER;
84 transfer_request -> ux_transfer_request_type = UX_REQUEST_IN | UX_REQUEST_TYPE_CLASS | UX_REQUEST_TARGET_INTERFACE;
85 transfer_request -> ux_transfer_request_value = 0;
86 status = (ux_host_stack_transfer_request(transfer_request));
87 if (status == UX_SUCCESS)
88 {
89 UX_TEST_ASSERT(buffer[0] == 1);
90 }
91 else
92 {
93 UX_TEST_CHECK_CODE(UX_TRANSFER_STALLED, status);
94 }
95
96 transfer_request -> ux_transfer_request_requested_length = 0;
97 transfer_request -> ux_transfer_request_function = UX_DEVICE_CLASS_CDC_ECM_SET_ETHERNET_POWER_MANAGEMENT_FILTER;
98 transfer_request -> ux_transfer_request_type = UX_REQUEST_OUT | UX_REQUEST_TYPE_CLASS | UX_REQUEST_TARGET_INTERFACE;
99 transfer_request -> ux_transfer_request_value = 0;
100 UX_TEST_CHECK_SUCCESS(ux_host_stack_transfer_request(transfer_request));
101
102 stepinfo(">>>>>>>>>>>>>>>>>>> Test UX_DEVICE_CLASS_CDC_ECM_SET_ETHERNET_PACKET_FILTER\n");
103 transfer_request -> ux_transfer_request_requested_length = 0;
104 transfer_request -> ux_transfer_request_function = UX_DEVICE_CLASS_CDC_ECM_SET_ETHERNET_PACKET_FILTER;
105 transfer_request -> ux_transfer_request_type = UX_REQUEST_OUT | UX_REQUEST_TYPE_CLASS | UX_REQUEST_TARGET_INTERFACE;
106 transfer_request -> ux_transfer_request_value = 1;
107 UX_TEST_CHECK_SUCCESS(ux_host_stack_transfer_request(transfer_request));
108
109 transfer_request -> ux_transfer_request_requested_length = 0;
110 transfer_request -> ux_transfer_request_function = UX_DEVICE_CLASS_CDC_ECM_SET_ETHERNET_PACKET_FILTER;
111 transfer_request -> ux_transfer_request_type = UX_REQUEST_OUT | UX_REQUEST_TYPE_CLASS | UX_REQUEST_TARGET_INTERFACE;
112 transfer_request -> ux_transfer_request_value = 0;
113 UX_TEST_CHECK_SUCCESS(ux_host_stack_transfer_request(transfer_request));
114
115 stepinfo(">>>>>>>>>>>>>>>>>>> Test unknown request\n");
116 transfer_request -> ux_transfer_request_requested_length = 0;
117 transfer_request -> ux_transfer_request_function = UX_DEVICE_CLASS_CDC_ECM_SET_ETHERNET_PACKET_FILTER + 7;
118 transfer_request -> ux_transfer_request_type = UX_REQUEST_OUT | UX_REQUEST_TYPE_CLASS | UX_REQUEST_TARGET_INTERFACE;
119 transfer_request -> ux_transfer_request_value = 0;
120 UX_TEST_CHECK_CODE(UX_TRANSFER_STALLED, ux_host_stack_transfer_request(transfer_request));
121
122 // stepinfo(">>>>>>>>>>>>>>>>>>> Test connect to avoid post post operation\n");
123 // /* Connect. */
124 // ux_test_dcd_sim_slave_connect(UX_FULL_SPEED_DEVICE);
125 // ux_test_hcd_sim_host_connect(UX_FULL_SPEED_DEVICE);
126 // class_cdc_ecm_get_host();
127
128 stepinfo(">>>>>>>>>>>>>>>>>>> post_init_host done\n");
129 }
130
post_init_device()131 static void post_init_device()
132 {
133 stepinfo(">>>>>>>>>>>>>>>>>>> post_init_device empty\n");
134 }