Version 0.10
[gnuk/gnuk.git] / src / usb-cdc-vport.c
1 /*
2  * This file is included by usb_prop.c to provide Virtual COM port feature
3  */
4
5 /* Original is ../Virtual_COM_Port/usb_prop.c by STMicroelectronics */
6 /* Chopped and modified for Gnuk */
7
8 #include "usb-cdc.h"
9
10 /* Original copyright notice is following: */
11 /******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
12 * File Name          : usb_prop.c
13 * Author             : MCD Application Team
14 * Version            : V3.1.1
15 * Date               : 04/07/2010
16 * Description        : All processing related to Virtual Com Port Demo
17 ********************************************************************************
18 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
19 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
20 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
21 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
22 * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
23 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
24 *******************************************************************************/
25
26 typedef struct
27 {
28   uint32_t bitrate;
29   uint8_t format;
30   uint8_t paritytype;
31   uint8_t datatype;
32 } LINE_CODING;
33
34 static LINE_CODING linecoding = {
35   115200, /* baud rate*/
36   0x00,   /* stop bits-1*/
37   0x00,   /* parity - none*/
38   0x08    /* no. of bits 8*/
39 };
40
41 static uint8_t *Virtual_Com_Port_GetLineCoding(uint16_t Length)
42 {
43   if (Length == 0)
44     {
45       pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
46       return NULL;
47     }
48
49   return (uint8_t *)&linecoding;
50 }
51
52 static uint8_t *Virtual_Com_Port_SetLineCoding(uint16_t Length)
53 {
54   if (Length == 0)
55     {
56       pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
57       return NULL;
58     }
59
60   return (uint8_t *)&linecoding;
61 }
62
63 static RESULT
64 Virtual_Com_Port_Data_Setup (uint8_t RequestNo)
65 {
66   uint8_t    *(*CopyRoutine)(uint16_t);
67
68   CopyRoutine = NULL;
69
70   if (RequestNo == USB_CDC_REQ_GET_LINE_CODING)
71     CopyRoutine = Virtual_Com_Port_GetLineCoding;
72   else if (RequestNo == USB_CDC_REQ_SET_LINE_CODING)
73     CopyRoutine = Virtual_Com_Port_SetLineCoding;
74
75   if (CopyRoutine == NULL)
76     return USB_UNSUPPORT;
77
78   pInformation->Ctrl_Info.CopyData = CopyRoutine;
79   pInformation->Ctrl_Info.Usb_wOffset = 0;
80   (*CopyRoutine) (0);           /* Set Ctrl_Info.Usb_wLength */
81
82   return USB_SUCCESS;
83 }
84
85 static RESULT
86 Virtual_Com_Port_NoData_Setup (uint8_t RequestNo)
87 {
88   if (RequestNo == USB_CDC_REQ_SET_CONTROL_LINE_STATE)
89     /* Do nothing and success  */
90     return USB_SUCCESS;
91
92   return USB_UNSUPPORT;
93 }