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 }