1 /******************************************************************************************************************************************
2 * 文件名称: usbh_cdc_funct.c
3 * 功能说明:
4 * 技术支持: http://www.synwit.com.cn/e/tool/gbook/?bid=1
5 * 注意事项:
6 * 版本日期: V1.1.0      2020年11月3日
7 * 升级记录:
8 *
9 *
10 *******************************************************************************************************************************************
11 * @attention
12 *
13 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS WITH CODING INFORMATION
14 * REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME. AS A RESULT, SYNWIT SHALL NOT BE HELD LIABLE
15 * FOR ANY DIRECT, INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE CONTENT
16 * OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING INFORMATION CONTAINED HEREIN IN CONN-
17 * -ECTION WITH THEIR PRODUCTS.
18 *
19 * COPYRIGHT 2012 Synwit Technology
20 *******************************************************************************************************************************************/
21 #include "SWM341.h"
22 #include "usbh_core.h"
23 #include "usbh_cdc_core.h"
24 #include "usbh_cdc_funct.h"
25 
26 
27 /* wValue for SetControlLineState */
28 #define CDC_RTS_ACTIVATE        0x0002
29 #define CDC_RTS_DEACTIVATE      0x0000
30 #define CDC_DTR_ACTIVATE        0x0001
31 #define CDC_DTR_DEACTIVATE      0x0000
32 
33 
34 CDC_LineCoding_t CDC_GetLineCode;
35 CDC_LineCoding_t CDC_SetLineCode;
36 
37 
38 /******************************************************************************************************************************************
39 * 函数名称: USBH_CDC_GetLineCoding()
40 * 功能说明:
41 * 输    入: 无
42 * 输    出: 无
43 * 注意事项: 无
44 ******************************************************************************************************************************************/
USBH_CDC_GetLineCoding(USBH_Info_t * phost)45 USBH_Status USBH_CDC_GetLineCoding(USBH_Info_t *phost)
46 {
47     phost->Ctrl.setup.bRequestType = USB_REQ_D2H | USB_REQ_CLASS | USB_REQ_TO_INTERFACE;
48     phost->Ctrl.setup.bRequest = CDC_GET_LINE_CODING;
49     phost->Ctrl.setup.wValue = 0;
50     phost->Ctrl.setup.wIndex = 0;
51     phost->Ctrl.setup.wLength = sizeof(CDC_LineCoding_t);
52 
53     return USBH_CtrlTransfer(phost, (uint8_t *)&CDC_GetLineCode, sizeof(CDC_LineCoding_t));
54 }
55 
56 
57 /******************************************************************************************************************************************
58 * 函数名称: USBH_CDC_SetLineCoding()
59 * 功能说明:
60 * 输    入: 无
61 * 输    出: 无
62 * 注意事项: 无
63 ******************************************************************************************************************************************/
USBH_CDC_SetLineCoding(USBH_Info_t * phost)64 USBH_Status USBH_CDC_SetLineCoding(USBH_Info_t *phost)
65 {
66     phost->Ctrl.setup.bRequestType = USB_REQ_H2D | USB_REQ_CLASS | USB_REQ_TO_INTERFACE;
67     phost->Ctrl.setup.bRequest = CDC_SET_LINE_CODING;
68     phost->Ctrl.setup.wValue = 0;
69     phost->Ctrl.setup.wIndex = 0;
70     phost->Ctrl.setup.wLength = sizeof(CDC_LineCoding_t);
71 
72     return USBH_CtrlTransfer(phost, (uint8_t *)&CDC_SetLineCode , sizeof(CDC_LineCoding_t));
73 }
74 
75 
76 /******************************************************************************************************************************************
77 * 函数名称: USBH_CDC_SetControlLine()
78 * 功能说明:
79 * 输    入: 无
80 * 输    出: 无
81 * 注意事项: 无
82 ******************************************************************************************************************************************/
USBH_CDC_SetControlLine(USBH_Info_t * phost)83 USBH_Status USBH_CDC_SetControlLine(USBH_Info_t *phost)
84 {
85     phost->Ctrl.setup.bRequestType = USB_REQ_H2D | USB_REQ_CLASS | USB_REQ_TO_INTERFACE;
86     phost->Ctrl.setup.bRequest = CDC_SET_CONTROL_LINE;
87     phost->Ctrl.setup.wValue = CDC_RTS_DEACTIVATE | CDC_DTR_DEACTIVATE;
88     phost->Ctrl.setup.wIndex = 0;
89     phost->Ctrl.setup.wLength = 0;
90 
91     return USBH_CtrlTransfer(phost, 0 , 0);
92 }
93 
94 
95 /******************************************************************************************************************************************
96 * 函数名称: USBH_CDC_IssueSetLineCoding()
97 * 功能说明:
98 * 输    入: 无
99 * 输    出: 无
100 * 注意事项: 无
101 ******************************************************************************************************************************************/
USBH_CDC_IssueSetLineCoding(USBH_Info_t * phost)102 void USBH_CDC_IssueSetLineCoding(USBH_Info_t *phost)
103 {
104     USBH_CDC_Info.reqState = CDC_SET_LINE_CODING;
105 
106     phost->StateBkp = phost->State;
107     phost->State = HOST_CLASS_REQUEST;
108 }
109 
110 
111 /******************************************************************************************************************************************
112 * 函数名称: USBH_CDC_IssueGetLineCoding()
113 * 功能说明:
114 * 输    入: 无
115 * 输    出: 无
116 * 注意事项: 无
117 ******************************************************************************************************************************************/
USBH_CDC_IssueGetLineCoding(USBH_Info_t * phost)118 void USBH_CDC_IssueGetLineCoding(USBH_Info_t *phost)
119 {
120     USBH_CDC_Info.reqState = CDC_GET_LINE_CODING;
121 
122     phost->StateBkp =  phost->State;
123     phost->State = HOST_CLASS_REQUEST;
124 }
125