Committer:
Sergunb
Date:
Mon Sep 04 12:04:13 2017 +0000
Revision:
0:8f0d870509fe
Initial commit

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Sergunb 0:8f0d870509fe 1 /******************** (C) COPYRIGHT 2011 STMicroelectronics ********************
Sergunb 0:8f0d870509fe 2 * File Name : usb_prop.c
Sergunb 0:8f0d870509fe 3 * Author : MCD Application Team
Sergunb 0:8f0d870509fe 4 * Version : V3.3.0
Sergunb 0:8f0d870509fe 5 * Date : 21-March-2011
Sergunb 0:8f0d870509fe 6 * Description : All processing related to Virtual Com Port Demo
Sergunb 0:8f0d870509fe 7 ********************************************************************************
Sergunb 0:8f0d870509fe 8 * THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
Sergunb 0:8f0d870509fe 9 * WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
Sergunb 0:8f0d870509fe 10 * AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
Sergunb 0:8f0d870509fe 11 * INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
Sergunb 0:8f0d870509fe 12 * CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
Sergunb 0:8f0d870509fe 13 * INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
Sergunb 0:8f0d870509fe 14 *******************************************************************************/
Sergunb 0:8f0d870509fe 15
Sergunb 0:8f0d870509fe 16 /* Includes ------------------------------------------------------------------*/
Sergunb 0:8f0d870509fe 17 #include "usb_lib.h"
Sergunb 0:8f0d870509fe 18 #include "usb_conf.h"
Sergunb 0:8f0d870509fe 19 #include "usb_prop.h"
Sergunb 0:8f0d870509fe 20 #include "usb_desc.h"
Sergunb 0:8f0d870509fe 21 #include "usb_pwr.h"
Sergunb 0:8f0d870509fe 22 #include "hw_config.h"
Sergunb 0:8f0d870509fe 23
Sergunb 0:8f0d870509fe 24 /* Private typedef -----------------------------------------------------------*/
Sergunb 0:8f0d870509fe 25 /* Private define ------------------------------------------------------------*/
Sergunb 0:8f0d870509fe 26 /* Private macro -------------------------------------------------------------*/
Sergunb 0:8f0d870509fe 27 /* Private variables ---------------------------------------------------------*/
Sergunb 0:8f0d870509fe 28 uint8_t Request = 0;
Sergunb 0:8f0d870509fe 29
Sergunb 0:8f0d870509fe 30 LINE_CODING linecoding =
Sergunb 0:8f0d870509fe 31 {
Sergunb 0:8f0d870509fe 32 115200, /* baud rate*/
Sergunb 0:8f0d870509fe 33 0x00, /* stop bits-1*/
Sergunb 0:8f0d870509fe 34 0x00, /* parity - none*/
Sergunb 0:8f0d870509fe 35 0x08 /* no. of bits 8*/
Sergunb 0:8f0d870509fe 36 };
Sergunb 0:8f0d870509fe 37
Sergunb 0:8f0d870509fe 38 /* -------------------------------------------------------------------------- */
Sergunb 0:8f0d870509fe 39 /* Structures initializations */
Sergunb 0:8f0d870509fe 40 /* -------------------------------------------------------------------------- */
Sergunb 0:8f0d870509fe 41
Sergunb 0:8f0d870509fe 42 DEVICE Device_Table =
Sergunb 0:8f0d870509fe 43 {
Sergunb 0:8f0d870509fe 44 EP_NUM,
Sergunb 0:8f0d870509fe 45 1
Sergunb 0:8f0d870509fe 46 };
Sergunb 0:8f0d870509fe 47
Sergunb 0:8f0d870509fe 48 DEVICE_PROP Device_Property =
Sergunb 0:8f0d870509fe 49 {
Sergunb 0:8f0d870509fe 50 Virtual_Com_Port_init,
Sergunb 0:8f0d870509fe 51 Virtual_Com_Port_Reset,
Sergunb 0:8f0d870509fe 52 Virtual_Com_Port_Status_In,
Sergunb 0:8f0d870509fe 53 Virtual_Com_Port_Status_Out,
Sergunb 0:8f0d870509fe 54 Virtual_Com_Port_Data_Setup,
Sergunb 0:8f0d870509fe 55 Virtual_Com_Port_NoData_Setup,
Sergunb 0:8f0d870509fe 56 Virtual_Com_Port_Get_Interface_Setting,
Sergunb 0:8f0d870509fe 57 Virtual_Com_Port_GetDeviceDescriptor,
Sergunb 0:8f0d870509fe 58 Virtual_Com_Port_GetConfigDescriptor,
Sergunb 0:8f0d870509fe 59 Virtual_Com_Port_GetStringDescriptor,
Sergunb 0:8f0d870509fe 60 0,
Sergunb 0:8f0d870509fe 61 0x40 /*MAX PACKET SIZE*/
Sergunb 0:8f0d870509fe 62 };
Sergunb 0:8f0d870509fe 63
Sergunb 0:8f0d870509fe 64 USER_STANDARD_REQUESTS User_Standard_Requests =
Sergunb 0:8f0d870509fe 65 {
Sergunb 0:8f0d870509fe 66 Virtual_Com_Port_GetConfiguration,
Sergunb 0:8f0d870509fe 67 Virtual_Com_Port_SetConfiguration,
Sergunb 0:8f0d870509fe 68 Virtual_Com_Port_GetInterface,
Sergunb 0:8f0d870509fe 69 Virtual_Com_Port_SetInterface,
Sergunb 0:8f0d870509fe 70 Virtual_Com_Port_GetStatus,
Sergunb 0:8f0d870509fe 71 Virtual_Com_Port_ClearFeature,
Sergunb 0:8f0d870509fe 72 Virtual_Com_Port_SetEndPointFeature,
Sergunb 0:8f0d870509fe 73 Virtual_Com_Port_SetDeviceFeature,
Sergunb 0:8f0d870509fe 74 Virtual_Com_Port_SetDeviceAddress
Sergunb 0:8f0d870509fe 75 };
Sergunb 0:8f0d870509fe 76
Sergunb 0:8f0d870509fe 77 ONE_DESCRIPTOR Device_Descriptor =
Sergunb 0:8f0d870509fe 78 {
Sergunb 0:8f0d870509fe 79 (uint8_t*)Virtual_Com_Port_DeviceDescriptor,
Sergunb 0:8f0d870509fe 80 VIRTUAL_COM_PORT_SIZ_DEVICE_DESC
Sergunb 0:8f0d870509fe 81 };
Sergunb 0:8f0d870509fe 82
Sergunb 0:8f0d870509fe 83 ONE_DESCRIPTOR Config_Descriptor =
Sergunb 0:8f0d870509fe 84 {
Sergunb 0:8f0d870509fe 85 (uint8_t*)Virtual_Com_Port_ConfigDescriptor,
Sergunb 0:8f0d870509fe 86 VIRTUAL_COM_PORT_SIZ_CONFIG_DESC
Sergunb 0:8f0d870509fe 87 };
Sergunb 0:8f0d870509fe 88
Sergunb 0:8f0d870509fe 89 ONE_DESCRIPTOR String_Descriptor[4] =
Sergunb 0:8f0d870509fe 90 {
Sergunb 0:8f0d870509fe 91 {(uint8_t*)Virtual_Com_Port_StringLangID, VIRTUAL_COM_PORT_SIZ_STRING_LANGID},
Sergunb 0:8f0d870509fe 92 {(uint8_t*)Virtual_Com_Port_StringVendor, VIRTUAL_COM_PORT_SIZ_STRING_VENDOR},
Sergunb 0:8f0d870509fe 93 {(uint8_t*)Virtual_Com_Port_StringProduct, VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT},
Sergunb 0:8f0d870509fe 94 {(uint8_t*)Virtual_Com_Port_StringSerial, VIRTUAL_COM_PORT_SIZ_STRING_SERIAL}
Sergunb 0:8f0d870509fe 95 };
Sergunb 0:8f0d870509fe 96
Sergunb 0:8f0d870509fe 97 /* Extern variables ----------------------------------------------------------*/
Sergunb 0:8f0d870509fe 98 /* Private function prototypes -----------------------------------------------*/
Sergunb 0:8f0d870509fe 99 /* Extern function prototypes ------------------------------------------------*/
Sergunb 0:8f0d870509fe 100 /* Private functions ---------------------------------------------------------*/
Sergunb 0:8f0d870509fe 101 /*******************************************************************************
Sergunb 0:8f0d870509fe 102 * Function Name : Virtual_Com_Port_init.
Sergunb 0:8f0d870509fe 103 * Description : Virtual COM Port Mouse init routine.
Sergunb 0:8f0d870509fe 104 * Input : None.
Sergunb 0:8f0d870509fe 105 * Output : None.
Sergunb 0:8f0d870509fe 106 * Return : None.
Sergunb 0:8f0d870509fe 107 *******************************************************************************/
Sergunb 0:8f0d870509fe 108 void Virtual_Com_Port_init(void)
Sergunb 0:8f0d870509fe 109 {
Sergunb 0:8f0d870509fe 110
Sergunb 0:8f0d870509fe 111 /* Update the serial number string descriptor with the data from the unique
Sergunb 0:8f0d870509fe 112 ID*/
Sergunb 0:8f0d870509fe 113 Get_SerialNum();
Sergunb 0:8f0d870509fe 114
Sergunb 0:8f0d870509fe 115 pInformation->Current_Configuration = 0;
Sergunb 0:8f0d870509fe 116
Sergunb 0:8f0d870509fe 117 /* Connect the device */
Sergunb 0:8f0d870509fe 118 PowerOn();
Sergunb 0:8f0d870509fe 119
Sergunb 0:8f0d870509fe 120 /* Perform basic device initialization operations */
Sergunb 0:8f0d870509fe 121 USB_SIL_Init();
Sergunb 0:8f0d870509fe 122
Sergunb 0:8f0d870509fe 123 ///* configure the USART to the default settings */
Sergunb 0:8f0d870509fe 124 //USART_Config_Default();
Sergunb 0:8f0d870509fe 125
Sergunb 0:8f0d870509fe 126 bDeviceState = UNCONNECTED;
Sergunb 0:8f0d870509fe 127 }
Sergunb 0:8f0d870509fe 128
Sergunb 0:8f0d870509fe 129 /*******************************************************************************
Sergunb 0:8f0d870509fe 130 * Function Name : Virtual_Com_Port_Reset
Sergunb 0:8f0d870509fe 131 * Description : Virtual_Com_Port Mouse reset routine
Sergunb 0:8f0d870509fe 132 * Input : None.
Sergunb 0:8f0d870509fe 133 * Output : None.
Sergunb 0:8f0d870509fe 134 * Return : None.
Sergunb 0:8f0d870509fe 135 *******************************************************************************/
Sergunb 0:8f0d870509fe 136 void Virtual_Com_Port_Reset(void)
Sergunb 0:8f0d870509fe 137 {
Sergunb 0:8f0d870509fe 138 /* Set Virtual_Com_Port DEVICE as not configured */
Sergunb 0:8f0d870509fe 139 pInformation->Current_Configuration = 0;
Sergunb 0:8f0d870509fe 140
Sergunb 0:8f0d870509fe 141 /* Current Feature initialization */
Sergunb 0:8f0d870509fe 142 pInformation->Current_Feature = Virtual_Com_Port_ConfigDescriptor[7];
Sergunb 0:8f0d870509fe 143
Sergunb 0:8f0d870509fe 144 /* Set Virtual_Com_Port DEVICE with the default Interface*/
Sergunb 0:8f0d870509fe 145 pInformation->Current_Interface = 0;
Sergunb 0:8f0d870509fe 146
Sergunb 0:8f0d870509fe 147 #ifdef STM32F10X_CL
Sergunb 0:8f0d870509fe 148 /* EP0 is already configured by USB_SIL_Init() function */
Sergunb 0:8f0d870509fe 149
Sergunb 0:8f0d870509fe 150 /* Init EP1 IN as Bulk endpoint */
Sergunb 0:8f0d870509fe 151 OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_BULK, VIRTUAL_COM_PORT_DATA_SIZE);
Sergunb 0:8f0d870509fe 152
Sergunb 0:8f0d870509fe 153 /* Init EP2 IN as Interrupt endpoint */
Sergunb 0:8f0d870509fe 154 OTG_DEV_EP_Init(EP2_IN, OTG_DEV_EP_TYPE_INT, VIRTUAL_COM_PORT_INT_SIZE);
Sergunb 0:8f0d870509fe 155
Sergunb 0:8f0d870509fe 156 /* Init EP3 OUT as Bulk endpoint */
Sergunb 0:8f0d870509fe 157 OTG_DEV_EP_Init(EP3_OUT, OTG_DEV_EP_TYPE_BULK, VIRTUAL_COM_PORT_DATA_SIZE);
Sergunb 0:8f0d870509fe 158 #else
Sergunb 0:8f0d870509fe 159
Sergunb 0:8f0d870509fe 160 SetBTABLE(BTABLE_ADDRESS);
Sergunb 0:8f0d870509fe 161
Sergunb 0:8f0d870509fe 162 /* Initialize Endpoint 0 */
Sergunb 0:8f0d870509fe 163 SetEPType(ENDP0, EP_CONTROL);
Sergunb 0:8f0d870509fe 164 SetEPTxStatus(ENDP0, EP_TX_STALL);
Sergunb 0:8f0d870509fe 165 SetEPRxAddr(ENDP0, ENDP0_RXADDR);
Sergunb 0:8f0d870509fe 166 SetEPTxAddr(ENDP0, ENDP0_TXADDR);
Sergunb 0:8f0d870509fe 167 Clear_Status_Out(ENDP0);
Sergunb 0:8f0d870509fe 168 SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
Sergunb 0:8f0d870509fe 169 SetEPRxValid(ENDP0);
Sergunb 0:8f0d870509fe 170
Sergunb 0:8f0d870509fe 171 /* Initialize Endpoint 1 */
Sergunb 0:8f0d870509fe 172 SetEPType(ENDP1, EP_BULK);
Sergunb 0:8f0d870509fe 173 SetEPTxAddr(ENDP1, ENDP1_TXADDR);
Sergunb 0:8f0d870509fe 174 SetEPTxStatus(ENDP1, EP_TX_NAK);
Sergunb 0:8f0d870509fe 175 SetEPRxStatus(ENDP1, EP_RX_DIS);
Sergunb 0:8f0d870509fe 176
Sergunb 0:8f0d870509fe 177 /* Initialize Endpoint 2 */
Sergunb 0:8f0d870509fe 178 SetEPType(ENDP2, EP_INTERRUPT);
Sergunb 0:8f0d870509fe 179 SetEPTxAddr(ENDP2, ENDP2_TXADDR);
Sergunb 0:8f0d870509fe 180 SetEPRxStatus(ENDP2, EP_RX_DIS);
Sergunb 0:8f0d870509fe 181 SetEPTxStatus(ENDP2, EP_TX_NAK);
Sergunb 0:8f0d870509fe 182
Sergunb 0:8f0d870509fe 183 /* Initialize Endpoint 3 */
Sergunb 0:8f0d870509fe 184 SetEPType(ENDP3, EP_BULK);
Sergunb 0:8f0d870509fe 185 SetEPRxAddr(ENDP3, ENDP3_RXADDR);
Sergunb 0:8f0d870509fe 186 SetEPRxCount(ENDP3, VIRTUAL_COM_PORT_DATA_SIZE);
Sergunb 0:8f0d870509fe 187 SetEPRxStatus(ENDP3, EP_RX_VALID);
Sergunb 0:8f0d870509fe 188 SetEPTxStatus(ENDP3, EP_TX_DIS);
Sergunb 0:8f0d870509fe 189
Sergunb 0:8f0d870509fe 190 /* Set this device to response on default address */
Sergunb 0:8f0d870509fe 191 SetDeviceAddress(0);
Sergunb 0:8f0d870509fe 192 #endif /* STM32F10X_CL */
Sergunb 0:8f0d870509fe 193
Sergunb 0:8f0d870509fe 194 bDeviceState = ATTACHED;
Sergunb 0:8f0d870509fe 195 }
Sergunb 0:8f0d870509fe 196
Sergunb 0:8f0d870509fe 197 /*******************************************************************************
Sergunb 0:8f0d870509fe 198 * Function Name : Virtual_Com_Port_SetConfiguration.
Sergunb 0:8f0d870509fe 199 * Description : Update the device state to configured.
Sergunb 0:8f0d870509fe 200 * Input : None.
Sergunb 0:8f0d870509fe 201 * Output : None.
Sergunb 0:8f0d870509fe 202 * Return : None.
Sergunb 0:8f0d870509fe 203 *******************************************************************************/
Sergunb 0:8f0d870509fe 204 void Virtual_Com_Port_SetConfiguration(void)
Sergunb 0:8f0d870509fe 205 {
Sergunb 0:8f0d870509fe 206 DEVICE_INFO *pInfo = &Device_Info;
Sergunb 0:8f0d870509fe 207
Sergunb 0:8f0d870509fe 208 if (pInfo->Current_Configuration != 0)
Sergunb 0:8f0d870509fe 209 {
Sergunb 0:8f0d870509fe 210 /* Device configured */
Sergunb 0:8f0d870509fe 211 bDeviceState = CONFIGURED;
Sergunb 0:8f0d870509fe 212 }
Sergunb 0:8f0d870509fe 213 }
Sergunb 0:8f0d870509fe 214
Sergunb 0:8f0d870509fe 215 /*******************************************************************************
Sergunb 0:8f0d870509fe 216 * Function Name : Virtual_Com_Port_SetConfiguration.
Sergunb 0:8f0d870509fe 217 * Description : Update the device state to addressed.
Sergunb 0:8f0d870509fe 218 * Input : None.
Sergunb 0:8f0d870509fe 219 * Output : None.
Sergunb 0:8f0d870509fe 220 * Return : None.
Sergunb 0:8f0d870509fe 221 *******************************************************************************/
Sergunb 0:8f0d870509fe 222 void Virtual_Com_Port_SetDeviceAddress (void)
Sergunb 0:8f0d870509fe 223 {
Sergunb 0:8f0d870509fe 224 bDeviceState = ADDRESSED;
Sergunb 0:8f0d870509fe 225 }
Sergunb 0:8f0d870509fe 226
Sergunb 0:8f0d870509fe 227 /*******************************************************************************
Sergunb 0:8f0d870509fe 228 * Function Name : Virtual_Com_Port_Status_In.
Sergunb 0:8f0d870509fe 229 * Description : Virtual COM Port Status In Routine.
Sergunb 0:8f0d870509fe 230 * Input : None.
Sergunb 0:8f0d870509fe 231 * Output : None.
Sergunb 0:8f0d870509fe 232 * Return : None.
Sergunb 0:8f0d870509fe 233 *******************************************************************************/
Sergunb 0:8f0d870509fe 234 void Virtual_Com_Port_Status_In(void)
Sergunb 0:8f0d870509fe 235 {
Sergunb 0:8f0d870509fe 236 if (Request == SET_LINE_CODING)
Sergunb 0:8f0d870509fe 237 {
Sergunb 0:8f0d870509fe 238 Request = 0;
Sergunb 0:8f0d870509fe 239 }
Sergunb 0:8f0d870509fe 240 }
Sergunb 0:8f0d870509fe 241
Sergunb 0:8f0d870509fe 242 /*******************************************************************************
Sergunb 0:8f0d870509fe 243 * Function Name : Virtual_Com_Port_Status_Out
Sergunb 0:8f0d870509fe 244 * Description : Virtual COM Port Status OUT Routine.
Sergunb 0:8f0d870509fe 245 * Input : None.
Sergunb 0:8f0d870509fe 246 * Output : None.
Sergunb 0:8f0d870509fe 247 * Return : None.
Sergunb 0:8f0d870509fe 248 *******************************************************************************/
Sergunb 0:8f0d870509fe 249 void Virtual_Com_Port_Status_Out(void)
Sergunb 0:8f0d870509fe 250 {}
Sergunb 0:8f0d870509fe 251
Sergunb 0:8f0d870509fe 252 /*******************************************************************************
Sergunb 0:8f0d870509fe 253 * Function Name : Virtual_Com_Port_Data_Setup
Sergunb 0:8f0d870509fe 254 * Description : handle the data class specific requests
Sergunb 0:8f0d870509fe 255 * Input : Request Nb.
Sergunb 0:8f0d870509fe 256 * Output : None.
Sergunb 0:8f0d870509fe 257 * Return : USB_UNSUPPORT or USB_SUCCESS.
Sergunb 0:8f0d870509fe 258 *******************************************************************************/
Sergunb 0:8f0d870509fe 259 RESULT Virtual_Com_Port_Data_Setup(uint8_t RequestNo)
Sergunb 0:8f0d870509fe 260 {
Sergunb 0:8f0d870509fe 261 uint8_t *(*CopyRoutine)(uint16_t);
Sergunb 0:8f0d870509fe 262
Sergunb 0:8f0d870509fe 263 CopyRoutine = NULL;
Sergunb 0:8f0d870509fe 264
Sergunb 0:8f0d870509fe 265 if (RequestNo == GET_LINE_CODING)
Sergunb 0:8f0d870509fe 266 {
Sergunb 0:8f0d870509fe 267 if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
Sergunb 0:8f0d870509fe 268 {
Sergunb 0:8f0d870509fe 269 CopyRoutine = Virtual_Com_Port_GetLineCoding;
Sergunb 0:8f0d870509fe 270 }
Sergunb 0:8f0d870509fe 271 }
Sergunb 0:8f0d870509fe 272 else if (RequestNo == SET_LINE_CODING)
Sergunb 0:8f0d870509fe 273 {
Sergunb 0:8f0d870509fe 274 if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
Sergunb 0:8f0d870509fe 275 {
Sergunb 0:8f0d870509fe 276 CopyRoutine = Virtual_Com_Port_SetLineCoding;
Sergunb 0:8f0d870509fe 277 }
Sergunb 0:8f0d870509fe 278 Request = SET_LINE_CODING;
Sergunb 0:8f0d870509fe 279 }
Sergunb 0:8f0d870509fe 280
Sergunb 0:8f0d870509fe 281 if (CopyRoutine == NULL)
Sergunb 0:8f0d870509fe 282 {
Sergunb 0:8f0d870509fe 283 return USB_UNSUPPORT;
Sergunb 0:8f0d870509fe 284 }
Sergunb 0:8f0d870509fe 285
Sergunb 0:8f0d870509fe 286 pInformation->Ctrl_Info.CopyData = CopyRoutine;
Sergunb 0:8f0d870509fe 287 pInformation->Ctrl_Info.Usb_wOffset = 0;
Sergunb 0:8f0d870509fe 288 (*CopyRoutine)(0);
Sergunb 0:8f0d870509fe 289 return USB_SUCCESS;
Sergunb 0:8f0d870509fe 290 }
Sergunb 0:8f0d870509fe 291
Sergunb 0:8f0d870509fe 292 /*******************************************************************************
Sergunb 0:8f0d870509fe 293 * Function Name : Virtual_Com_Port_NoData_Setup.
Sergunb 0:8f0d870509fe 294 * Description : handle the no data class specific requests.
Sergunb 0:8f0d870509fe 295 * Input : Request Nb.
Sergunb 0:8f0d870509fe 296 * Output : None.
Sergunb 0:8f0d870509fe 297 * Return : USB_UNSUPPORT or USB_SUCCESS.
Sergunb 0:8f0d870509fe 298 *******************************************************************************/
Sergunb 0:8f0d870509fe 299 RESULT Virtual_Com_Port_NoData_Setup(uint8_t RequestNo)
Sergunb 0:8f0d870509fe 300 {
Sergunb 0:8f0d870509fe 301
Sergunb 0:8f0d870509fe 302 if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
Sergunb 0:8f0d870509fe 303 {
Sergunb 0:8f0d870509fe 304 if (RequestNo == SET_COMM_FEATURE)
Sergunb 0:8f0d870509fe 305 {
Sergunb 0:8f0d870509fe 306 return USB_SUCCESS;
Sergunb 0:8f0d870509fe 307 }
Sergunb 0:8f0d870509fe 308 else if (RequestNo == SET_CONTROL_LINE_STATE)
Sergunb 0:8f0d870509fe 309 {
Sergunb 0:8f0d870509fe 310 return USB_SUCCESS;
Sergunb 0:8f0d870509fe 311 }
Sergunb 0:8f0d870509fe 312 }
Sergunb 0:8f0d870509fe 313
Sergunb 0:8f0d870509fe 314 return USB_UNSUPPORT;
Sergunb 0:8f0d870509fe 315 }
Sergunb 0:8f0d870509fe 316
Sergunb 0:8f0d870509fe 317 /*******************************************************************************
Sergunb 0:8f0d870509fe 318 * Function Name : Virtual_Com_Port_GetDeviceDescriptor.
Sergunb 0:8f0d870509fe 319 * Description : Gets the device descriptor.
Sergunb 0:8f0d870509fe 320 * Input : Length.
Sergunb 0:8f0d870509fe 321 * Output : None.
Sergunb 0:8f0d870509fe 322 * Return : The address of the device descriptor.
Sergunb 0:8f0d870509fe 323 *******************************************************************************/
Sergunb 0:8f0d870509fe 324 uint8_t *Virtual_Com_Port_GetDeviceDescriptor(uint16_t Length)
Sergunb 0:8f0d870509fe 325 {
Sergunb 0:8f0d870509fe 326 return Standard_GetDescriptorData(Length, &Device_Descriptor);
Sergunb 0:8f0d870509fe 327 }
Sergunb 0:8f0d870509fe 328
Sergunb 0:8f0d870509fe 329 /*******************************************************************************
Sergunb 0:8f0d870509fe 330 * Function Name : Virtual_Com_Port_GetConfigDescriptor.
Sergunb 0:8f0d870509fe 331 * Description : get the configuration descriptor.
Sergunb 0:8f0d870509fe 332 * Input : Length.
Sergunb 0:8f0d870509fe 333 * Output : None.
Sergunb 0:8f0d870509fe 334 * Return : The address of the configuration descriptor.
Sergunb 0:8f0d870509fe 335 *******************************************************************************/
Sergunb 0:8f0d870509fe 336 uint8_t *Virtual_Com_Port_GetConfigDescriptor(uint16_t Length)
Sergunb 0:8f0d870509fe 337 {
Sergunb 0:8f0d870509fe 338 return Standard_GetDescriptorData(Length, &Config_Descriptor);
Sergunb 0:8f0d870509fe 339 }
Sergunb 0:8f0d870509fe 340
Sergunb 0:8f0d870509fe 341 /*******************************************************************************
Sergunb 0:8f0d870509fe 342 * Function Name : Virtual_Com_Port_GetStringDescriptor
Sergunb 0:8f0d870509fe 343 * Description : Gets the string descriptors according to the needed index
Sergunb 0:8f0d870509fe 344 * Input : Length.
Sergunb 0:8f0d870509fe 345 * Output : None.
Sergunb 0:8f0d870509fe 346 * Return : The address of the string descriptors.
Sergunb 0:8f0d870509fe 347 *******************************************************************************/
Sergunb 0:8f0d870509fe 348 uint8_t *Virtual_Com_Port_GetStringDescriptor(uint16_t Length)
Sergunb 0:8f0d870509fe 349 {
Sergunb 0:8f0d870509fe 350 uint8_t wValue0 = pInformation->USBwValue0;
Sergunb 0:8f0d870509fe 351 if (wValue0 > 4)
Sergunb 0:8f0d870509fe 352 {
Sergunb 0:8f0d870509fe 353 return NULL;
Sergunb 0:8f0d870509fe 354 }
Sergunb 0:8f0d870509fe 355 else
Sergunb 0:8f0d870509fe 356 {
Sergunb 0:8f0d870509fe 357 return Standard_GetDescriptorData(Length, &String_Descriptor[wValue0]);
Sergunb 0:8f0d870509fe 358 }
Sergunb 0:8f0d870509fe 359 }
Sergunb 0:8f0d870509fe 360
Sergunb 0:8f0d870509fe 361 /*******************************************************************************
Sergunb 0:8f0d870509fe 362 * Function Name : Virtual_Com_Port_Get_Interface_Setting.
Sergunb 0:8f0d870509fe 363 * Description : test the interface and the alternate setting according to the
Sergunb 0:8f0d870509fe 364 * supported one.
Sergunb 0:8f0d870509fe 365 * Input1 : uint8_t: Interface : interface number.
Sergunb 0:8f0d870509fe 366 * Input2 : uint8_t: AlternateSetting : Alternate Setting number.
Sergunb 0:8f0d870509fe 367 * Output : None.
Sergunb 0:8f0d870509fe 368 * Return : The address of the string descriptors.
Sergunb 0:8f0d870509fe 369 *******************************************************************************/
Sergunb 0:8f0d870509fe 370 RESULT Virtual_Com_Port_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting)
Sergunb 0:8f0d870509fe 371 {
Sergunb 0:8f0d870509fe 372 if (AlternateSetting > 0)
Sergunb 0:8f0d870509fe 373 {
Sergunb 0:8f0d870509fe 374 return USB_UNSUPPORT;
Sergunb 0:8f0d870509fe 375 }
Sergunb 0:8f0d870509fe 376 else if (Interface > 1)
Sergunb 0:8f0d870509fe 377 {
Sergunb 0:8f0d870509fe 378 return USB_UNSUPPORT;
Sergunb 0:8f0d870509fe 379 }
Sergunb 0:8f0d870509fe 380 return USB_SUCCESS;
Sergunb 0:8f0d870509fe 381 }
Sergunb 0:8f0d870509fe 382
Sergunb 0:8f0d870509fe 383 /*******************************************************************************
Sergunb 0:8f0d870509fe 384 * Function Name : Virtual_Com_Port_GetLineCoding.
Sergunb 0:8f0d870509fe 385 * Description : send the linecoding structure to the PC host.
Sergunb 0:8f0d870509fe 386 * Input : Length.
Sergunb 0:8f0d870509fe 387 * Output : None.
Sergunb 0:8f0d870509fe 388 * Return : Linecoding structure base address.
Sergunb 0:8f0d870509fe 389 *******************************************************************************/
Sergunb 0:8f0d870509fe 390 uint8_t *Virtual_Com_Port_GetLineCoding(uint16_t Length)
Sergunb 0:8f0d870509fe 391 {
Sergunb 0:8f0d870509fe 392 if (Length == 0)
Sergunb 0:8f0d870509fe 393 {
Sergunb 0:8f0d870509fe 394 pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
Sergunb 0:8f0d870509fe 395 return NULL;
Sergunb 0:8f0d870509fe 396 }
Sergunb 0:8f0d870509fe 397 return(uint8_t *)&linecoding;
Sergunb 0:8f0d870509fe 398 }
Sergunb 0:8f0d870509fe 399
Sergunb 0:8f0d870509fe 400 /*******************************************************************************
Sergunb 0:8f0d870509fe 401 * Function Name : Virtual_Com_Port_SetLineCoding.
Sergunb 0:8f0d870509fe 402 * Description : Set the linecoding structure fields.
Sergunb 0:8f0d870509fe 403 * Input : Length.
Sergunb 0:8f0d870509fe 404 * Output : None.
Sergunb 0:8f0d870509fe 405 * Return : Linecoding structure base address.
Sergunb 0:8f0d870509fe 406 *******************************************************************************/
Sergunb 0:8f0d870509fe 407 uint8_t *Virtual_Com_Port_SetLineCoding(uint16_t Length)
Sergunb 0:8f0d870509fe 408 {
Sergunb 0:8f0d870509fe 409 if (Length == 0)
Sergunb 0:8f0d870509fe 410 {
Sergunb 0:8f0d870509fe 411 pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
Sergunb 0:8f0d870509fe 412 return NULL;
Sergunb 0:8f0d870509fe 413 }
Sergunb 0:8f0d870509fe 414 return(uint8_t *)&linecoding;
Sergunb 0:8f0d870509fe 415 }
Sergunb 0:8f0d870509fe 416
Sergunb 0:8f0d870509fe 417 /******************* (C) COPYRIGHT 2011 STMicroelectronics *****END OF FILE****/
Sergunb 0:8f0d870509fe 418