I'm trying to port GRBL 1.1 to the STM32F746 chip. Tell me the solution, thanks.

Committer:
Sergunb
Date:
Mon Sep 04 12:05:05 2017 +0000
Revision:
0:9dcf85d9b2f3
Initial commit

Who changed what in which revision?

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