Skip to content

Commit 35ba543

Browse files
authored
Merge pull request #248 from ayedm1/cdc_acm_device_break_req
Added break request support to Device CDC ACM
2 parents 7e76808 + 7f5c6b2 commit 35ba543

5 files changed

Lines changed: 62 additions & 9 deletions

File tree

common/usbx_device_classes/inc/ux_device_class_cdc_acm.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,16 +9,19 @@
99
* SPDX-License-Identifier: MIT
1010
**************************************************************************/
1111

12+
1213
/**************************************************************************/
1314
/**************************************************************************/
1415
/** */
1516
/** USBX Component */
1617
/** */
17-
/** CDC Class */
18+
/** Device CDC ACM Class */
1819
/** */
1920
/**************************************************************************/
2021
/**************************************************************************/
2122

23+
24+
/**************************************************************************/
2225
/**************************************************************************/
2326
/* */
2427
/* COMPONENT DEFINITION RELEASE */
@@ -221,6 +224,7 @@ typedef struct UX_SLAVE_CLASS_CDC_ACM_STRUCT
221224
UCHAR ux_slave_class_cdc_acm_data_bit;
222225
UCHAR ux_slave_class_cdc_acm_data_dtr_state;
223226
UCHAR ux_slave_class_cdc_acm_data_rts_state;
227+
ULONG ux_slave_class_cdc_acm_break_duration;
224228
UCHAR reserved[3];
225229

226230
#ifndef UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE

common/usbx_device_classes/src/ux_device_class_cdc_acm_control_request.c

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99
* SPDX-License-Identifier: MIT
1010
**************************************************************************/
1111

12+
1213
/**************************************************************************/
1314
/**************************************************************************/
1415
/** */
1516
/** USBX Component */
1617
/** */
17-
/** Device CDC Class */
18+
/** Device CDC ACM Class */
1819
/** */
1920
/**************************************************************************/
2021
/**************************************************************************/
@@ -161,6 +162,20 @@ ULONG transmit_length;
161162

162163
break ;
163164

165+
case UX_SLAVE_CLASS_CDC_ACM_SEND_BREAK:
166+
167+
/* SEND_BREAK has no data stage, wValue contains break duration in ms.
168+
0x0000 means stop break.
169+
0x0001-0xFFFE means break signal duration in ms.
170+
0xFFFF means indefinite break. */
171+
cdc_acm -> ux_slave_class_cdc_acm_break_duration = (ULONG) value;
172+
173+
/* If there is a parameter change function call it. */
174+
if (cdc_acm -> ux_slave_class_cdc_acm_parameter.ux_slave_class_cdc_acm_parameter_change != UX_NULL)
175+
cdc_acm -> ux_slave_class_cdc_acm_parameter.ux_slave_class_cdc_acm_parameter_change(cdc_acm);
176+
177+
break;
178+
164179
default:
165180

166181
/* Unknown function. It's not handled. */
@@ -170,4 +185,3 @@ ULONG transmit_length;
170185
/* It's handled. */
171186
return(UX_SUCCESS);
172187
}
173-

common/usbx_device_classes/src/ux_device_class_cdc_acm_deactivate.c

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,12 +9,13 @@
99
* SPDX-License-Identifier: MIT
1010
**************************************************************************/
1111

12+
1213
/**************************************************************************/
1314
/**************************************************************************/
1415
/** */
1516
/** USBX Component */
1617
/** */
17-
/** Device CDC Class */
18+
/** Device CDC ACM Class */
1819
/** */
1920
/**************************************************************************/
2021
/**************************************************************************/
@@ -119,6 +120,8 @@ UX_SLAVE_ENDPOINT *endpoint_out;
119120
cdc_acm -> ux_slave_class_cdc_acm_data_dtr_state = 0;
120121
cdc_acm -> ux_slave_class_cdc_acm_data_rts_state = 0;
121122

123+
cdc_acm -> ux_slave_class_cdc_acm_break_duration = 0;
124+
122125
/* If trace is enabled, insert this event into the trace buffer. */
123126
UX_TRACE_IN_LINE_INSERT(UX_TRACE_DEVICE_CLASS_CDC_ACM_DEACTIVATE, cdc_acm, 0, 0, 0, UX_TRACE_DEVICE_CLASS_EVENTS, 0, 0)
124127

common/usbx_device_classes/src/ux_device_class_cdc_acm_initialize.c

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,11 +9,13 @@
99
* SPDX-License-Identifier: MIT
1010
**************************************************************************/
1111

12+
13+
/**************************************************************************/
1214
/**************************************************************************/
1315
/** */
1416
/** USBX Component */
1517
/** */
16-
/** Device CDC Class */
18+
/** Device CDC ACM Class */
1719
/** */
1820
/**************************************************************************/
1921
/**************************************************************************/
@@ -48,7 +50,7 @@
4850
/* */
4951
/* INPUT */
5052
/* */
51-
/* command Pointer to cdc_acm command */
53+
/* command Pointer to cdc acm command */
5254
/* */
5355
/* OUTPUT */
5456
/* */
@@ -161,6 +163,9 @@ UINT status;
161163
cdc_acm -> ux_slave_class_cdc_acm_parity = UX_SLAVE_CLASS_CDC_ACM_LINE_CODING_PARITY;
162164
cdc_acm -> ux_slave_class_cdc_acm_data_bit = UX_SLAVE_CLASS_CDC_ACM_LINE_CODING_DATA_BIT;
163165

166+
/* Initialize break duration. */
167+
cdc_acm -> ux_slave_class_cdc_acm_break_duration = 0;
168+
164169
#ifndef UX_DEVICE_CLASS_CDC_ACM_TRANSMISSION_DISABLE
165170

166171
#if defined(UX_DEVICE_STANDALONE)

test/regression/usbx_cdc_acm_basic_test.c

Lines changed: 30 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1177,6 +1177,7 @@ ULONG test_n;
11771177
UX_HOST_CLASS_COMMAND command;
11781178
UX_HOST_CLASS_COMMAND command1;
11791179
ULONG mem_free;
1180+
USHORT break_ms;
11801181

11811182
stepinfo("\n");
11821183

@@ -2100,10 +2101,36 @@ ULONG mem_free;
21002101
}
21012102

21022103
/* Try IOCTRL UX_HOST_CLASS_CDC_ACM_IOCTL_SEND_BREAK */
2104+
21032105
stepinfo(">>>>>>>>>>>> IOCTRL UX_HOST_CLASS_CDC_ACM_IOCTL_SEND_BREAK\n");
2104-
status = ux_host_class_cdc_acm_ioctl(cdc_acm_host_control, UX_HOST_CLASS_CDC_ACM_IOCTL_SEND_BREAK, &test_n);
2105-
/* Not supported by simulator */
2106-
if (status == UX_SUCCESS)
2106+
2107+
break_ms = 0xFFFF;
2108+
2109+
status = ux_host_class_cdc_acm_ioctl(cdc_acm_host_control, UX_HOST_CLASS_CDC_ACM_IOCTL_SEND_BREAK, &break_ms);
2110+
2111+
if ((status != UX_SUCCESS) || (cdc_acm_slave -> ux_slave_class_cdc_acm_break_duration != break_ms))
2112+
{
2113+
2114+
printf("ERROR #78: IOCTRL UX_HOST_CLASS_CDC_ACM_IOCTL_SEND_BREAK should fail\n");
2115+
test_control_return(1);
2116+
}
2117+
2118+
break_ms = 1000;
2119+
2120+
status = ux_host_class_cdc_acm_ioctl(cdc_acm_host_control, UX_HOST_CLASS_CDC_ACM_IOCTL_SEND_BREAK, &break_ms);
2121+
2122+
if ((status != UX_SUCCESS) || (cdc_acm_slave -> ux_slave_class_cdc_acm_break_duration != break_ms))
2123+
{
2124+
2125+
printf("ERROR #78: IOCTRL UX_HOST_CLASS_CDC_ACM_IOCTL_SEND_BREAK should fail\n");
2126+
test_control_return(1);
2127+
}
2128+
2129+
break_ms = 0x0000;
2130+
2131+
status = ux_host_class_cdc_acm_ioctl(cdc_acm_host_control, UX_HOST_CLASS_CDC_ACM_IOCTL_SEND_BREAK, &break_ms);
2132+
2133+
if ((status != UX_SUCCESS) || (cdc_acm_slave -> ux_slave_class_cdc_acm_break_duration != break_ms))
21072134
{
21082135

21092136
printf("ERROR #78: IOCTRL UX_HOST_CLASS_CDC_ACM_IOCTL_SEND_BREAK should fail\n");

0 commit comments

Comments
 (0)