Committer:
Sergunb
Date:
Mon Sep 04 12:03:42 2017 +0000
Revision:
0:f1834a63f7c1
Initial commit

Who changed what in which revision?

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