New USB stack
This commit is contained in:
136
ChangeLog
136
ChangeLog
@@ -1,3 +1,139 @@
|
|||||||
|
2012-05-10 Niibe Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
|
* STM32_USB-FS-Device_Driver, Virtual_COM_Port: Remove.
|
||||||
|
|
||||||
|
* src/usb_lld.c (#include): Don't include usb_lib.h.
|
||||||
|
(RECIPIENT, REG_BASE PMA_ADDR, CNTR, ISTR, FNR, DADDR, BTABLE)
|
||||||
|
(ISTR_CTR, ISTR_DOVR, ISTR_ERR, ISTR_WKUP, ISTR_SUSP, ISTR_RESET)
|
||||||
|
(ISTR_SOF, ISTR_ESOF, ISTR_DIR, ISTR_EP_ID, CLR_CTR, CLR_DOVR)
|
||||||
|
(CLR_ERR, CLR_WKUP, CLR_SUSP, CLR_RESET, CLR_SOF, CLR_ESOF)
|
||||||
|
(CNTR_CTRM, CNTR_DOVRM, CNTR_ERRM, CNTR_WKUPM, CNTR_SUSPM)
|
||||||
|
(CNTR_RESETM, CNTR_SOFM, CNTR_ESOFM, CNTR_RESUME, CNTR_FSUSP)
|
||||||
|
(CNTR_LPMODE, CNTR_PDWN, CNTR_FRES, DADDR_EF, DADDR_ADD)
|
||||||
|
(EP_CTR_RX, EP_DTOG_RX, EPRX_STAT, EP_SETUP, EP_T_FIELD, EP_KIND)
|
||||||
|
(EP_CTR_TX, EP_DTOG_TX, EPTX_STAT, EPADDR_FIELD, EPREG_MASK)
|
||||||
|
(EP_TX_DIS, EP_TX_STALL, EP_TX_NAK, EP_TX_VALID, EPTX_DTOG1)
|
||||||
|
(EPTX_DTOG2, EP_RX_DIS, EP_RX_STALL, EP_RX_NAK, EP_RX_VALID)
|
||||||
|
(EPRX_DTOG1, EPRX_DTOG2): New. Compatible to ST's USB-FS-Device_Lib.
|
||||||
|
(CH_IRQ_HANDLER): Call usb_interrupt_handler (was: USB_Istr).
|
||||||
|
(EP1_IN_Callback, EP2_IN_Callback, EP3_IN_Callback)
|
||||||
|
(EP4_IN_Callback, EP5_IN_Callback, EP6_IN_Callback)
|
||||||
|
(EP7_IN_Callback, EP1_OUT_Callback, EP2_OUT_Callback)
|
||||||
|
(EP3_OUT_Callback, EP4_OUT_Callback, EP5_OUT_Callback)
|
||||||
|
(EP6_OUT_Callback, EP7_OUT_Callback): New. Implement here.
|
||||||
|
Compatible to ST's USB-FS-Device_Lib.
|
||||||
|
(USB_MAX_PACKET_SIZE): New.
|
||||||
|
(GET_STATUS, CLEAR_FEATURE, RESERVED1, SET_FEATURE, RESERVED2)
|
||||||
|
(SET_ADDRESS, GET_DESCRIPTOR, SET_DESCRIPTOR, GET_CONFIGURATION)
|
||||||
|
(SET_CONFIGURATION, GET_INTERFACE, SET_INTERFACE)
|
||||||
|
(SYNCH_FRAME,TOTAL_REQUEST): New for USB control transfer.
|
||||||
|
(enum CONTROL_STATE): New for state machine of control pipe.
|
||||||
|
(enum FEATURE_SELECTOR): New.
|
||||||
|
(struct DATA_INFO, struct CONTROL_INFO, struct DEVICE_INFO): New.
|
||||||
|
(ctrl_p, dev_p, data_p, Control_Info, Device_Info, Data_Info):
|
||||||
|
New.
|
||||||
|
(usb_lld_stall_tx, usb_lld_stall_rx)
|
||||||
|
(usb_lld_tx_data_len, usb_lld_txcpy, usb_lld_tx_enable)
|
||||||
|
(usb_lld_write, usb_lld_rx_enable, usb_lld_rx_data_len)
|
||||||
|
(usb_lld_rxcpy): Move from usb_lld.h and not inline.
|
||||||
|
(usb_lld_reset, usb_lld_setup_endpoint)
|
||||||
|
(usb_lld_set_configuration, usb_lld_current_configuration)
|
||||||
|
(usb_lld_set_feature, usb_lld_set_data_to_send): New.
|
||||||
|
(usb_lld_to_pmabuf, usb_lld_from_pmabuf): Clean up.
|
||||||
|
(usb_lld_init): New implementation.
|
||||||
|
(st103_set_btable, st103_get_istr, st103_set_istr, st103_set_cntr)
|
||||||
|
(st103_set_daddr, st103_set_epreg, st103_get_epreg)
|
||||||
|
(st103_set_tx_addr, st103_get_tx_addr, st103_set_tx_count)
|
||||||
|
(st103_get_tx_count, st103_set_rx_addr, st103_get_rx_addr)
|
||||||
|
(st103_set_rx_buf_size, st103_get_rx_count, st103_ep_clear_ctr_rx)
|
||||||
|
(st103_ep_clear_ctr_tx, st103_ep_set_rxtx_status)
|
||||||
|
(st103_ep_set_rx_status, st103_ep_get_rx_status)
|
||||||
|
(st103_ep_set_tx_status, st103_ep_get_tx_status)
|
||||||
|
(st103_ep_clear_dtog_rx, st103_ep_clear_dtog_tx): New lower-level
|
||||||
|
functions for USB related registers access.
|
||||||
|
(usb_interrupt_handler, usb_handle_transfer)
|
||||||
|
(handle_datastage_out, handle_datastage_in, handle_setup0)
|
||||||
|
(handle_in0, handle_out0)
|
||||||
|
(std_none, std_get_status, std_clear_feature, std_set_feature,
|
||||||
|
std_set_address, std_get_descriptor, std_get_configuration,
|
||||||
|
std_set_configuration, std_get_interface, std_set_interface)
|
||||||
|
(std_request_handler): New USB stack implementation.
|
||||||
|
|
||||||
|
* src/usb_lld.h (usb_lld_stall_tx, usb_lld_stall_rx)
|
||||||
|
(usb_lld_tx_data_len, usb_lld_txcpy, usb_lld_tx_enable)
|
||||||
|
(usb_lld_write, usb_lld_rx_enable, usb_lld_rx_data_len)
|
||||||
|
(usb_lld_rxcpy): Those are not inline functions anymore.
|
||||||
|
(USB_DEVICE_DESCRIPTOR_TYPE, USB_CONFIGURATION_DESCRIPTOR_TYPE)
|
||||||
|
(USB_STRING_DESCRIPTOR_TYPE, USB_INTERFACE_DESCRIPTOR_TYPE)
|
||||||
|
(USB_ENDPOINT_DESCRIPTOR_TYPE, STANDARD_ENDPOINT_DESC_SIZE)
|
||||||
|
(ENDP0, ENDP1, ENDP2, ENDP3, ENDP4, ENDP5, ENDP6, ENDP7)
|
||||||
|
(EP_BULK, EP_CONTROL, EP_ISOCHRONOUS, EP_INTERRUPT)
|
||||||
|
(DEVICE_RECIPIENT, INTERFACE_RECIPIENT, ENDPOINT_RECIPIENT)
|
||||||
|
(ENDPOINT_RECIPIENT, OTHER_RECIPIENT)
|
||||||
|
(DEVICE_DESCRIPTOR, CONFIG_DESCRIPTOR, STRING_DESCRIPTOR)
|
||||||
|
(INTERFACE_DESCRIPTOR, ENDPOINT_DESCRIPTOR)
|
||||||
|
(REQUEST_TYPE, STANDARD_REQUEST, CLASS_REQUEST, VENDOR_REQUEST)
|
||||||
|
(USB_UNSUPPORT, USB_SUCCESS)
|
||||||
|
(USB_EVENT_RESET, USB_EVENT_ADDRESS, USB_EVENT_CONFIG)
|
||||||
|
(USB_EVENT_SUSPEND, USB_EVENT_WAKEUP, USB_EVENT_STALL)
|
||||||
|
(USB_SET_INTERFACE, USB_GET_INTERFACE, USB_QUERY_INTERFACE)
|
||||||
|
(UNCONNECTED, ATTACHED, POWERED, SUSPENDED, ADDRESSED)
|
||||||
|
(CONFIGURED, USB_Cable_Config): New. Compatible to ST's
|
||||||
|
USB-FS-Device_Lib.
|
||||||
|
(struct Descriptor, struct usb_device_method)
|
||||||
|
(Device_Descriptor, Config_Descriptor, String_Descriptors)
|
||||||
|
(STM32_USB_IRQ_PRIORITY, bDeviceState, Device_Method)
|
||||||
|
(usb_lld_init, usb_lld_reset, usb_lld_setup_endpoint)
|
||||||
|
(usb_lld_set_configuration, usb_lld_current_configuration)
|
||||||
|
(usb_lld_set_feature, usb_lld_set_data_to_send): New API.
|
||||||
|
|
||||||
|
* src/usb_prop.c(#include): Only include usb_lld.h for USB.
|
||||||
|
(SetEPRxCount_allocated_size): Remove.
|
||||||
|
(struct line_coding, line_coding, Virtual_Com_Port_Data_Setup)
|
||||||
|
(Virtual_Com_Port_NoData_Setup): Add from usb-cdc-vport.c.
|
||||||
|
(gnuk_device_init, gnuk_device_reset, gnuk_setup_with_data)
|
||||||
|
(gnuk_setup_with_nodata): Follow the API change of USB stack.
|
||||||
|
(gnuk_setup_endpoints_for_interface, gnuk_get_descriptor)
|
||||||
|
(gnuk_usb_event, gnuk_interface): New.
|
||||||
|
(gnuk_device_SetConfiguration, gnuk_device_SetInterface)
|
||||||
|
(gnuk_device_SetDeviceAddress, gnuk_device_Status_In)
|
||||||
|
(gnuk_device_Status_Out, gnuk_device_GetDeviceDescriptor)
|
||||||
|
(gnuk_device_GetConfigDescriptor, gnuk_device_GetStringDescriptor)
|
||||||
|
(gnuk_device_Get_Interface_Setting, gnuk_clock_frequencies)
|
||||||
|
(gnuk_data_rates, msc_lun_info, Device_Table)
|
||||||
|
(User_Standard_Requests): Remove.
|
||||||
|
(Device_Method): Replace Device_Property.
|
||||||
|
|
||||||
|
* src/usb_msc.c (#include): Only include usb_lld.h for USB.
|
||||||
|
|
||||||
|
* src/usb_endp.c (#include): Only include usb_lld.h for USB.
|
||||||
|
(EP5_OUT_Callback): Follow the API change of USB stack.
|
||||||
|
|
||||||
|
* src/usb_desc.c (#include): Only include usb_lld.h for USB.
|
||||||
|
Add usb_conf.h.
|
||||||
|
(Device_Descriptor, Config_Descriptor): Follow the API change
|
||||||
|
of USB stack.
|
||||||
|
(String_Descriptors): New, rename from String_Descriptor.
|
||||||
|
|
||||||
|
* src/usb_conf.h (EP_NUM, BTABLE_ADDRESS, IMR_MSK): Remove.
|
||||||
|
(NUM_STRING_DESC): Add.
|
||||||
|
|
||||||
|
* src/usb-icc.c (#include): Only include usb_lld.h for USB.
|
||||||
|
|
||||||
|
* src/usb-cdc-vport.c, src/usb_prop.h: Remove.
|
||||||
|
|
||||||
|
* src/stmusb.mk, src/vcomport.mk: Remove.
|
||||||
|
|
||||||
|
* src/main.c (#include): Only include usb_lld.h for USB.
|
||||||
|
(main): Remove call to USB_Init.
|
||||||
|
|
||||||
|
* src/Makefile.in (include): Remove stmusb.mk, vcomport.mk.
|
||||||
|
(VCOMSRC) [ENABLE_VCOMPORT]: Add.
|
||||||
|
(INCDIR): Remove STMUSBINCDIR and VCOMDIR.
|
||||||
|
|
||||||
|
* boards/common/hw_config.c (Enter_LowPowerMode)
|
||||||
|
(Leave_LowPowerMode): Remove.
|
||||||
|
|
||||||
2012-02-02 Niibe Yutaka <gniibe@fsij.org>
|
2012-02-02 Niibe Yutaka <gniibe@fsij.org>
|
||||||
|
|
||||||
* Version 0.17.
|
* Version 0.17.
|
||||||
|
|||||||
9
NEWS
9
NEWS
@@ -1,5 +1,14 @@
|
|||||||
Gnuk NEWS - User visible changes
|
Gnuk NEWS - User visible changes
|
||||||
|
|
||||||
|
* Major changes in Gnuk 0.18
|
||||||
|
|
||||||
|
Released 2012-05-XX, by NIIBE Yutaka
|
||||||
|
|
||||||
|
** New USB stack
|
||||||
|
Gnuk used to use USB stack of USB-FS-Device_Lib by ST. Now, it has
|
||||||
|
original implementation. Hopefully, size and quality are improved.
|
||||||
|
|
||||||
|
|
||||||
* Major changes in Gnuk 0.17
|
* Major changes in Gnuk 0.17
|
||||||
|
|
||||||
Released 2012-02-02, by NIIBE Yutaka
|
Released 2012-02-02, by NIIBE Yutaka
|
||||||
|
|||||||
10
README
10
README
@@ -225,16 +225,6 @@ Gnuk is distributed with external source code.
|
|||||||
The file include/polarssl/bn_mul.h is heavily modified for ARM
|
The file include/polarssl/bn_mul.h is heavily modified for ARM
|
||||||
Cortex-M3.
|
Cortex-M3.
|
||||||
|
|
||||||
* STM32_USB-FS-Device_Driver/ -- a part of USB-FS-Device_Lib
|
|
||||||
* Virtual_COM_Port/ -- a part of USB-FS-Device_Lib
|
|
||||||
|
|
||||||
STM32F10x USB Full Speed Device Library (USB-FS-Device_Lib)
|
|
||||||
is a STM32F10x library for USB functionality.
|
|
||||||
|
|
||||||
I took Libraries/STM32_USB-FS-Device_Driver and
|
|
||||||
Project/Virtual_COM_Port in STM32_USB-FS-Device_Lib distribution.
|
|
||||||
See http://www.st.com/ for detail.
|
|
||||||
|
|
||||||
|
|
||||||
Host Requirements
|
Host Requirements
|
||||||
=================
|
=================
|
||||||
|
|||||||
@@ -1,258 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : otgd_fs_cal.h
|
|
||||||
* Author : STMicroelectronics
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Header of OTG FS Device Core Access Layer interface.
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
#ifndef __OTG_CORE_H__
|
|
||||||
#define __OTG_CORE_H__
|
|
||||||
|
|
||||||
#ifdef STM32F10X_CL
|
|
||||||
|
|
||||||
#include "stm32f10x.h"
|
|
||||||
#include "usb_type.h"
|
|
||||||
|
|
||||||
#if defined ( __CC_ARM )
|
|
||||||
#define __packed __packed /*!< packing keyword for ARM Compiler */
|
|
||||||
#elif defined ( __ICCARM__ )
|
|
||||||
#define __packed __packed /*!< packing keyword for IAR Compiler */
|
|
||||||
#elif defined ( __GNUC__ )
|
|
||||||
#define __packed __attribute__ ((__packed__)) /*!< packing keyword for GNU Compiler */
|
|
||||||
#elif defined ( __TASKING__ ) /*!< packing keyword for TASKING Compiler */
|
|
||||||
#define __packed
|
|
||||||
#endif /* __CC_ARM */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
define and types
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#define DEVICE_MODE_ENABLED
|
|
||||||
|
|
||||||
#ifndef NULL
|
|
||||||
#define NULL ((void *)0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
|
|
||||||
#define DEV_EP_TX_DIS 0x0000
|
|
||||||
#define DEV_EP_TX_STALL 0x0010
|
|
||||||
#define DEV_EP_TX_NAK 0x0020
|
|
||||||
#define DEV_EP_TX_VALID 0x0030
|
|
||||||
|
|
||||||
#define DEV_EP_RX_DIS 0x0000
|
|
||||||
#define DEV_EP_RX_STALL 0x1000
|
|
||||||
#define DEV_EP_RX_NAK 0x2000
|
|
||||||
#define DEV_EP_RX_VALID 0x3000
|
|
||||||
|
|
||||||
/***************** GLOBAL DEFINES ***************************/
|
|
||||||
|
|
||||||
#define GAHBCFG_TXFEMPTYLVL_EMPTY 1
|
|
||||||
#define GAHBCFG_TXFEMPTYLVL_HALFEMPTY 0
|
|
||||||
|
|
||||||
#define GAHBCFG_GLBINT_ENABLE 1
|
|
||||||
#define GAHBCFG_INT_DMA_BURST_SINGLE 0
|
|
||||||
#define GAHBCFG_INT_DMA_BURST_INCR 1
|
|
||||||
#define GAHBCFG_INT_DMA_BURST_INCR4 3
|
|
||||||
#define GAHBCFG_INT_DMA_BURST_INCR8 5
|
|
||||||
#define GAHBCFG_INT_DMA_BURST_INCR16 7
|
|
||||||
#define GAHBCFG_DMAENABLE 1
|
|
||||||
#define GAHBCFG_TXFEMPTYLVL_EMPTY 1
|
|
||||||
#define GAHBCFG_TXFEMPTYLVL_HALFEMPTY 0
|
|
||||||
|
|
||||||
#define GRXSTS_PKTSTS_IN 2
|
|
||||||
#define GRXSTS_PKTSTS_IN_XFER_COMP 3
|
|
||||||
#define GRXSTS_PKTSTS_DATA_TOGGLE_ERR 5
|
|
||||||
#define GRXSTS_PKTSTS_CH_HALTED 7
|
|
||||||
|
|
||||||
#define DEVICE_MODE 0
|
|
||||||
#define HOST_MODE 1
|
|
||||||
|
|
||||||
/***************** DEVICE DEFINES ***************************/
|
|
||||||
|
|
||||||
#define DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ 0
|
|
||||||
#define DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ 1
|
|
||||||
#define DSTS_ENUMSPD_LS_PHY_6MHZ 2
|
|
||||||
#define DSTS_ENUMSPD_FS_PHY_48MHZ 3
|
|
||||||
|
|
||||||
#define DCFG_FRAME_INTERVAL_80 0
|
|
||||||
#define DCFG_FRAME_INTERVAL_85 1
|
|
||||||
#define DCFG_FRAME_INTERVAL_90 2
|
|
||||||
#define DCFG_FRAME_INTERVAL_95 3
|
|
||||||
|
|
||||||
#define DEP0CTL_MPS_64 0
|
|
||||||
#define DEP0CTL_MPS_32 1
|
|
||||||
#define DEP0CTL_MPS_16 2
|
|
||||||
#define DEP0CTL_MPS_8 3
|
|
||||||
|
|
||||||
#define EP_SPEED_LOW 0
|
|
||||||
#define EP_SPEED_FULL 1
|
|
||||||
#define EP_SPEED_HIGH 2
|
|
||||||
|
|
||||||
#define EP_TYPE_CTRL 0
|
|
||||||
#define EP_TYPE_ISOC 1
|
|
||||||
#define EP_TYPE_BULK 2
|
|
||||||
#define EP_TYPE_INTR 3
|
|
||||||
|
|
||||||
#define STS_GOUT_NAK 1
|
|
||||||
#define STS_DATA_UPDT 2
|
|
||||||
#define STS_XFER_COMP 3
|
|
||||||
#define STS_SETUP_COMP 4
|
|
||||||
#define STS_SETUP_UPDT 6
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum {
|
|
||||||
|
|
||||||
USB_OTG_OK,
|
|
||||||
USB_OTG_FAIL
|
|
||||||
|
|
||||||
}USB_OTG_Status;
|
|
||||||
|
|
||||||
typedef struct USB_OTG_hc
|
|
||||||
{
|
|
||||||
uint8_t hc_num;
|
|
||||||
uint8_t dev_addr ;
|
|
||||||
uint8_t ep_num;
|
|
||||||
uint8_t ep_is_in;
|
|
||||||
uint8_t speed;
|
|
||||||
uint8_t ep_type;
|
|
||||||
uint16_t max_packet;
|
|
||||||
uint8_t data_pid;
|
|
||||||
uint16_t multi_count;
|
|
||||||
uint8_t *xfer_buff;
|
|
||||||
uint32_t xfer_len;
|
|
||||||
}
|
|
||||||
USB_OTG_HC , *PUSB_OTG_HC;
|
|
||||||
|
|
||||||
typedef struct USB_OTG_ep
|
|
||||||
{
|
|
||||||
uint8_t num;
|
|
||||||
uint8_t is_in;
|
|
||||||
uint32_t tx_fifo_num;
|
|
||||||
uint32_t type;
|
|
||||||
uint8_t data_pid_start;
|
|
||||||
uint8_t even_odd_frame;
|
|
||||||
uint32_t maxpacket;
|
|
||||||
uint8_t *xfer_buff;
|
|
||||||
uint32_t xfer_len;
|
|
||||||
uint32_t xfer_count;
|
|
||||||
}
|
|
||||||
|
|
||||||
USB_OTG_EP , *PUSB_OTG_EP;
|
|
||||||
|
|
||||||
/********************************************************************************
|
|
||||||
MACRO'S
|
|
||||||
********************************************************************************/
|
|
||||||
|
|
||||||
#define CLEAR_IN_EP_INTR(epnum,intr) \
|
|
||||||
diepint.d32=0; \
|
|
||||||
diepint.b.intr = 1; \
|
|
||||||
WRITE_REG32(&core_regs.inep_regs[epnum]->dev_in_ep_int,diepint.d32);
|
|
||||||
|
|
||||||
#define CLEAR_OUT_EP_INTR(epnum,intr) \
|
|
||||||
doepint.d32=0; \
|
|
||||||
doepint.b.intr = 1; \
|
|
||||||
WRITE_REG32(&core_regs.outep_regs[epnum]->dev_out_ep_int,doepint.d32);
|
|
||||||
|
|
||||||
|
|
||||||
#define READ_REG32(reg) (*(__IO uint32_t *)reg)
|
|
||||||
|
|
||||||
#define WRITE_REG32(reg,value) (*(__IO uint32_t *)reg = value)
|
|
||||||
|
|
||||||
#define MODIFY_REG32(reg,clear_mask,set_mask) \
|
|
||||||
WRITE_REG32(reg, (((READ_REG32(reg)) & ~clear_mask) | set_mask ) )
|
|
||||||
|
|
||||||
|
|
||||||
#define uDELAY(usec) udelay(usec)
|
|
||||||
#define mDELAY(msec) uDELAY(msec * 1000)
|
|
||||||
|
|
||||||
#define _OTGD_FS_GATE_PHYCLK *(__IO uint32_t*)(0x50000E00) = 0x03
|
|
||||||
#define _OTGD_FS_UNGATE_PHYCLK *(__IO uint32_t*)(0x50000E00) = 0x00
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
this can be changed for real time base
|
|
||||||
*******************************************************************************/
|
|
||||||
static void udelay (const uint32_t usec)
|
|
||||||
{
|
|
||||||
uint32_t count = 0;
|
|
||||||
const uint32_t utime = usec * 10;
|
|
||||||
do
|
|
||||||
{
|
|
||||||
if ( ++count > utime )
|
|
||||||
{
|
|
||||||
return ;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
while (1);
|
|
||||||
}
|
|
||||||
/********************************************************************************
|
|
||||||
EXPORTED FUNCTIONS FROM THE OTGD_FS_CAL LAYER
|
|
||||||
********************************************************************************/
|
|
||||||
USB_OTG_Status OTGD_FS_CoreInit(void);
|
|
||||||
USB_OTG_Status OTGD_FS_SetAddress(uint32_t BaseAddress);
|
|
||||||
USB_OTG_Status OTGD_FS_EnableGlobalInt(void);
|
|
||||||
USB_OTG_Status OTGD_FS_DisableGlobalInt(void);
|
|
||||||
|
|
||||||
USB_OTG_Status USB_OTG_CoreInitHost(void);
|
|
||||||
USB_OTG_Status USB_OTG_EnableHostInt(void);
|
|
||||||
USB_OTG_Status USB_OTG_DisableHostInt(void);
|
|
||||||
|
|
||||||
void* OTGD_FS_ReadPacket(uint8_t *dest, uint16_t bytes);
|
|
||||||
USB_OTG_Status OTGD_FS_WritePacket(uint8_t *src, uint8_t ch_ep_num, uint16_t bytes);
|
|
||||||
|
|
||||||
USB_OTG_Status USB_OTG_HcInit(USB_OTG_HC *hc);
|
|
||||||
USB_OTG_Status USB_OTG_StartXfer(USB_OTG_HC *hc);
|
|
||||||
|
|
||||||
uint32_t USB_OTG_ResetPort( void);
|
|
||||||
|
|
||||||
uint32_t USB_OTG_ReadHPRT0(void);
|
|
||||||
uint32_t OTGD_FS_ReadDevAllInEPItr(void);
|
|
||||||
uint32_t OTGD_FS_ReadCoreItr(void);
|
|
||||||
uint32_t OTGD_FS_ReadOtgItr (void);
|
|
||||||
uint32_t USB_OTG_ReadHostAllChannels_intr (void);
|
|
||||||
uint8_t IsHostMode(void);
|
|
||||||
uint8_t IsDeviceMode(void);
|
|
||||||
USB_OTG_Status USB_OTG_HcInit(USB_OTG_HC *hc);
|
|
||||||
USB_OTG_Status USB_OTG_HcHalt(uint8_t hc_num);
|
|
||||||
|
|
||||||
USB_OTG_Status OTGD_FS_FlushTxFifo (uint32_t num);
|
|
||||||
USB_OTG_Status OTGD_FS_FlushRxFifo (void);
|
|
||||||
USB_OTG_Status OTGD_FS_SetHostMode (void);
|
|
||||||
|
|
||||||
USB_OTG_Status OTGD_FS_PhyInit(void);
|
|
||||||
USB_OTG_Status USB_OTG_HcStartXfer(USB_OTG_HC *hc);
|
|
||||||
|
|
||||||
USB_OTG_Status OTGD_FS_CoreInitDev (void);
|
|
||||||
USB_OTG_Status OTGD_FS_EnableDevInt(void);
|
|
||||||
USB_OTG_Status OTGD_FS_EP0Activate(void);
|
|
||||||
USB_OTG_Status OTGD_FS_EPActivate(USB_OTG_EP *ep);
|
|
||||||
USB_OTG_Status OTGD_FS_EPDeactivate(USB_OTG_EP *ep);
|
|
||||||
|
|
||||||
USB_OTG_Status OTGD_FS_EPStartXfer(USB_OTG_EP *ep);
|
|
||||||
USB_OTG_Status OTGD_FS_EP0StartXfer(USB_OTG_EP *ep);
|
|
||||||
|
|
||||||
USB_OTG_Status OTGD_FS_EPSetStall(USB_OTG_EP *ep);
|
|
||||||
USB_OTG_Status OTGD_FS_EPClearStall(USB_OTG_EP *ep);
|
|
||||||
uint32_t OTGD_FS_ReadDevAllOutEp_itr(void);
|
|
||||||
uint32_t OTGD_FS_ReadDevOutEP_itr(USB_OTG_EP *ep);
|
|
||||||
uint32_t OTGD_FS_ReadDevAllInEPItr(void);
|
|
||||||
|
|
||||||
|
|
||||||
uint32_t OTGD_FS_Dev_GetEPStatus(USB_OTG_EP *ep);
|
|
||||||
void OTGD_FS_Dev_SetEPStatus(USB_OTG_EP *ep, uint32_t Status);
|
|
||||||
void OTGD_FS_Dev_SetRemoteWakeup(void);
|
|
||||||
void OTGD_FS_Dev_ResetRemoteWakeup(void);
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
#endif
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
||||||
@@ -1,121 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : otg_dev.h
|
|
||||||
* Author : STMicroelectronics
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : linking defines
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __OTG_DEV_H__
|
|
||||||
#define __OTG_DEV_H__
|
|
||||||
|
|
||||||
#ifdef STM32F10X_CL
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "stm32f10x.h"
|
|
||||||
#include "usb_type.h"
|
|
||||||
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
|
|
||||||
/* Endpoint types */
|
|
||||||
#define OTG_DEV_EP_TYPE_CONTROL 0
|
|
||||||
#define OTG_DEV_EP_TYPE_ISOC 1
|
|
||||||
#define OTG_DEV_EP_TYPE_BULK 2
|
|
||||||
#define OTG_DEV_EP_TYPE_INT 3
|
|
||||||
|
|
||||||
/* Endpoint Addresses (w/direction) */
|
|
||||||
#define EP0_OUT 0x00
|
|
||||||
#define EP0_IN 0x80
|
|
||||||
#define EP1_OUT 0x01
|
|
||||||
#define EP1_IN 0x81
|
|
||||||
#define EP2_OUT 0x02
|
|
||||||
#define EP2_IN 0x82
|
|
||||||
#define EP3_OUT 0x03
|
|
||||||
#define EP3_IN 0x83
|
|
||||||
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-* Replace the usb_regs.h defines -*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* endpoints enumeration */
|
|
||||||
#define ENDP0 ((uint8_t)0)
|
|
||||||
#define ENDP1 ((uint8_t)1)
|
|
||||||
#define ENDP2 ((uint8_t)2)
|
|
||||||
#define ENDP3 ((uint8_t)3)
|
|
||||||
#define ENDP4 ((uint8_t)4)
|
|
||||||
#define ENDP5 ((uint8_t)5)
|
|
||||||
#define ENDP6 ((uint8_t)6)
|
|
||||||
#define ENDP7 ((uint8_t)7)
|
|
||||||
|
|
||||||
/* EP Transmit status defines */
|
|
||||||
#define EP_TX_DIS DEV_EP_TX_DIS) /* EndPoint TX DISabled */
|
|
||||||
#define EP_TX_STALL DEV_EP_TX_STALL /* EndPoint TX STALLed */
|
|
||||||
#define EP_TX_NAK DEV_EP_TX_NAK /* EndPoint TX NAKed */
|
|
||||||
#define EP_TX_VALID DEV_EP_TX_VALID /* EndPoint TX VALID */
|
|
||||||
|
|
||||||
/* EP Transmit status defines */
|
|
||||||
#define EP_RX_DIS DEV_EP_RX_DIS /* EndPoint RX DISabled */
|
|
||||||
#define EP_RX_STALL DEV_EP_RX_STALL /* EndPoint RX STALLed */
|
|
||||||
#define EP_RX_NAK DEV_EP_RX_NAK /* EndPoint RX NAKed */
|
|
||||||
#define EP_RX_VALID DEV_EP_RX_VALID /* EndPoint RX VALID */
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
#define _GetEPTxStatus(bEpNum) ((uint16_t)OTG_DEV_GetEPTxStatus(bEpNum))
|
|
||||||
#define _GetEPRxStatus(bEpNum) ((uint16_t)OTG_DEV_GetEPRxStatus(bEpNum))
|
|
||||||
|
|
||||||
#define _SetEPTxStatus(bEpNum,wState) (OTG_DEV_SetEPTxStatus(bEpNum, wState))
|
|
||||||
#define _SetEPRxStatus(bEpNum,wState) (OTG_DEV_SetEPRxStatus(bEpNum, wState))
|
|
||||||
|
|
||||||
#define _SetEPTxValid(bEpNum) (OTG_DEV_SetEPTxStatus(bEpNum, EP_TX_VALID))
|
|
||||||
#define _SetEPRxValid(bEpNum) (OTG_DEV_SetEPRxStatus(bEpNum, EP_RX_VALID))
|
|
||||||
|
|
||||||
#define _GetTxStallStatus(bEpNum) (OTG_DEV_GetEPTxStatus(bEpNum) == EP_TX_STALL)
|
|
||||||
#define _GetRxStallStatus(bEpNum) (OTG_DEV_GetEPRxStatus(bEpNum) == EP_RX_STALL)
|
|
||||||
|
|
||||||
/* Define the callbacks for updating the USB state machine */
|
|
||||||
#define OTGD_FS_DEVICE_RESET Device_Property.Reset()
|
|
||||||
|
|
||||||
/* Exported define -----------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
|
|
||||||
void OTG_DEV_Init(void);
|
|
||||||
void OTG_DEV_EP_Init(uint8_t bEpAdd, uint8_t bEpType, uint16_t wEpMaxPackSize);
|
|
||||||
|
|
||||||
void OTG_DEV_SetEPRxStatus(uint8_t bEpnum, uint32_t status);
|
|
||||||
void OTG_DEV_SetEPTxStatus(uint8_t bEpnum, uint32_t status);
|
|
||||||
uint32_t OTG_DEV_GetEPRxStatus(uint8_t bEpnum);
|
|
||||||
uint32_t OTG_DEV_GetEPTxStatus(uint8_t bEpnum);
|
|
||||||
|
|
||||||
void USB_DevDisconnect(void);
|
|
||||||
void USB_DevConnect(void);
|
|
||||||
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-* Replace the usb_regs.h prototypes *-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
void SetEPTxStatus(uint8_t bEpNum, uint16_t wState);
|
|
||||||
void SetEPRxStatus(uint8_t bEpNum, uint16_t wState);
|
|
||||||
uint16_t GetEPTxStatus(uint8_t bEpNum);
|
|
||||||
uint16_t GetEPRxStatus(uint8_t bEpNum);
|
|
||||||
void SetEPTxValid(uint8_t bEpNum);
|
|
||||||
void SetEPRxValid(uint8_t bEpNum);
|
|
||||||
uint16_t GetTxStallStatus(uint8_t bEpNum);
|
|
||||||
uint16_t GetRxStallStatus(uint8_t bEpNum);
|
|
||||||
void SetEPTxCount(uint8_t bEpNum, uint16_t wCount);
|
|
||||||
void SetEPRxCount(uint8_t bEpNum, uint16_t wCount);
|
|
||||||
|
|
||||||
uint16_t ToWord(uint8_t, uint8_t);
|
|
||||||
uint16_t ByteSwap(uint16_t);
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
#endif /* __OTG_DEV_H__ */
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
||||||
@@ -1,54 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : otgd_fs_int.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Endpoint interrupt's service routines prototypes.
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_INT_H
|
|
||||||
#define __USB_INT_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
|
|
||||||
#ifdef STM32F10X_CL
|
|
||||||
|
|
||||||
/* Interrupt Handlers functions */
|
|
||||||
uint32_t OTGD_FS_Handle_ModeMismatch_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_Sof_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_RxStatusQueueLevel_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_NPTxFE_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_GInNakEff_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_GOutNakEff_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_EarlySuspend_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_USBSuspend_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_UsbReset_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_EnumDone_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_IsoOutDrop_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_EOPF_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_EPMismatch_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_InEP_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_OutEP_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_IncomplIsoIn_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_IncomplIsoOut_ISR(void);
|
|
||||||
uint32_t OTGD_FS_Handle_Wakeup_ISR(void);
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
/* External variables --------------------------------------------------------*/
|
|
||||||
|
|
||||||
#endif /* __USB_INT_H */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,87 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : otgd_fs_pcd.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Header file of the High Layer device mode interface and
|
|
||||||
* wrapping layer
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#ifndef __USB_OTG_PCD_H__
|
|
||||||
#define __USB_OTG_PCD_H__
|
|
||||||
|
|
||||||
#include "otgd_fs_regs.h"
|
|
||||||
|
|
||||||
#define MAX_EP0_SIZE 0x40
|
|
||||||
#define MAX_PACKET_SIZE 0x400
|
|
||||||
|
|
||||||
|
|
||||||
#define USB_ENDPOINT_XFER_CONTROL 0
|
|
||||||
#define USB_ENDPOINT_XFER_ISOC 1
|
|
||||||
#define USB_ENDPOINT_XFER_BULK 2
|
|
||||||
#define USB_ENDPOINT_XFER_INT 3
|
|
||||||
#define USB_ENDPOINT_XFERTYPE_MASK 3
|
|
||||||
|
|
||||||
|
|
||||||
/********************************************************************************
|
|
||||||
ENUMERATION TYPE
|
|
||||||
********************************************************************************/
|
|
||||||
enum usb_device_speed {
|
|
||||||
USB_SPEED_UNKNOWN = 0,
|
|
||||||
USB_SPEED_LOW, USB_SPEED_FULL,
|
|
||||||
USB_SPEED_HIGH
|
|
||||||
};
|
|
||||||
/********************************************************************************
|
|
||||||
Data structure type
|
|
||||||
********************************************************************************/
|
|
||||||
typedef struct usb_ep_descriptor
|
|
||||||
{
|
|
||||||
uint8_t bLength;
|
|
||||||
uint8_t bDescriptorType;
|
|
||||||
uint8_t bEndpointAddress;
|
|
||||||
uint8_t bmAttributes;
|
|
||||||
uint16_t wMaxPacketSize;
|
|
||||||
uint8_t bInterval;
|
|
||||||
}
|
|
||||||
EP_DESCRIPTOR , *PEP_DESCRIPTOR;
|
|
||||||
/********************************************************************************
|
|
||||||
USBF LAYER UNION AND STRUCTURES
|
|
||||||
********************************************************************************/
|
|
||||||
typedef struct USB_OTG_USBF
|
|
||||||
{
|
|
||||||
|
|
||||||
USB_OTG_EP ep0;
|
|
||||||
uint8_t ep0state;
|
|
||||||
USB_OTG_EP in_ep[ MAX_TX_FIFOS - 1];
|
|
||||||
USB_OTG_EP out_ep[ MAX_TX_FIFOS - 1];
|
|
||||||
}
|
|
||||||
USB_OTG_PCD_DEV , *USB_OTG_PCD_PDEV;
|
|
||||||
/********************************************************************************
|
|
||||||
EXPORTED FUNCTION FROM THE USB_OTG LAYER
|
|
||||||
********************************************************************************/
|
|
||||||
void OTGD_FS_PCD_Init(void);
|
|
||||||
void OTGD_FS_PCD_DevConnect (void);
|
|
||||||
void OTGD_FS_PCD_DevDisconnect (void);
|
|
||||||
void OTGD_FS_PCD_EP_SetAddress (uint8_t address);
|
|
||||||
uint32_t OTGD_FS_PCD_EP_Open(EP_DESCRIPTOR *epdesc);
|
|
||||||
uint32_t OTGD_FS_PCD_EP_Close ( uint8_t ep_addr);
|
|
||||||
uint32_t OTGD_FS_PCD_EP_Read ( uint8_t ep_addr, uint8_t *pbuf, uint32_t buf_len);
|
|
||||||
uint32_t OTGD_FS_PCD_EP_Write ( uint8_t ep_addr, uint8_t *pbuf, uint32_t buf_len);
|
|
||||||
uint32_t OTGD_FS_PCD_EP_Stall (uint8_t epnum);
|
|
||||||
uint32_t OTGD_FS_PCD_EP_ClrStall (uint8_t epnum);
|
|
||||||
uint32_t OTGD_FS_PCD_EP_Flush (uint8_t epnum);
|
|
||||||
uint32_t OTGD_FS_PCD_Handle_ISR(void);
|
|
||||||
|
|
||||||
USB_OTG_EP* OTGD_FS_PCD_GetOutEP(uint32_t ep_num) ;
|
|
||||||
USB_OTG_EP* OTGD_FS_PCD_GetInEP(uint32_t ep_num);
|
|
||||||
void OTGD_FS_PCD_EP0_OutStart(void);
|
|
||||||
|
|
||||||
#endif
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,243 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_core.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Standard protocol processing functions prototypes
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_CORE_H
|
|
||||||
#define __USB_CORE_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
typedef enum _CONTROL_STATE
|
|
||||||
{
|
|
||||||
WAIT_SETUP, /* 0 */
|
|
||||||
SETTING_UP, /* 1 */
|
|
||||||
IN_DATA, /* 2 */
|
|
||||||
OUT_DATA, /* 3 */
|
|
||||||
LAST_IN_DATA, /* 4 */
|
|
||||||
LAST_OUT_DATA, /* 5 */
|
|
||||||
WAIT_STATUS_IN, /* 7 */
|
|
||||||
WAIT_STATUS_OUT, /* 8 */
|
|
||||||
STALLED, /* 9 */
|
|
||||||
PAUSE /* 10 */
|
|
||||||
} CONTROL_STATE; /* The state machine states of a control pipe */
|
|
||||||
|
|
||||||
typedef struct OneDescriptor
|
|
||||||
{
|
|
||||||
uint8_t *Descriptor;
|
|
||||||
uint16_t Descriptor_Size;
|
|
||||||
}
|
|
||||||
ONE_DESCRIPTOR, *PONE_DESCRIPTOR;
|
|
||||||
/* All the request process routines return a value of this type
|
|
||||||
If the return value is not SUCCESS or NOT_READY,
|
|
||||||
the software will STALL the correspond endpoint */
|
|
||||||
typedef enum _RESULT
|
|
||||||
{
|
|
||||||
USB_SUCCESS = 0, /* Process sucessfully */
|
|
||||||
USB_ERROR,
|
|
||||||
USB_UNSUPPORT,
|
|
||||||
USB_NOT_READY /* The process has not been finished, endpoint will be
|
|
||||||
NAK to further rquest */
|
|
||||||
} RESULT;
|
|
||||||
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-* Definitions for endpoint level -*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
typedef struct _ENDPOINT_INFO
|
|
||||||
{
|
|
||||||
/* When send data out of the device,
|
|
||||||
CopyData() is used to get data buffer 'Length' bytes data
|
|
||||||
if Length is 0,
|
|
||||||
CopyData() returns the total length of the data
|
|
||||||
if the request is not supported, returns 0
|
|
||||||
(NEW Feature )
|
|
||||||
if CopyData() returns -1, the calling routine should not proceed
|
|
||||||
further and will resume the SETUP process by the class device
|
|
||||||
if Length is not 0,
|
|
||||||
CopyData() returns a pointer to indicate the data location
|
|
||||||
Usb_wLength is the data remain to be sent,
|
|
||||||
Usb_wOffset is the Offset of original data
|
|
||||||
When receive data from the host,
|
|
||||||
CopyData() is used to get user data buffer which is capable
|
|
||||||
of Length bytes data to copy data from the endpoint buffer.
|
|
||||||
if Length is 0,
|
|
||||||
CopyData() returns the available data length,
|
|
||||||
if Length is not 0,
|
|
||||||
CopyData() returns user buffer address
|
|
||||||
Usb_rLength is the data remain to be received,
|
|
||||||
Usb_rPointer is the Offset of data buffer
|
|
||||||
*/
|
|
||||||
uint16_t Usb_wLength;
|
|
||||||
uint16_t Usb_wOffset;
|
|
||||||
uint16_t PacketSize;
|
|
||||||
uint8_t *(*CopyData)(uint16_t Length);
|
|
||||||
}ENDPOINT_INFO;
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-* Definitions for device level -*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
|
|
||||||
typedef struct _DEVICE
|
|
||||||
{
|
|
||||||
uint8_t Total_Endpoint; /* Number of endpoints that are used */
|
|
||||||
uint8_t Total_Configuration;/* Number of configuration available */
|
|
||||||
}
|
|
||||||
DEVICE;
|
|
||||||
|
|
||||||
typedef union
|
|
||||||
{
|
|
||||||
uint16_t w;
|
|
||||||
struct BW
|
|
||||||
{
|
|
||||||
uint8_t bb1;
|
|
||||||
uint8_t bb0;
|
|
||||||
}
|
|
||||||
bw;
|
|
||||||
} uint16_t_uint8_t;
|
|
||||||
|
|
||||||
typedef struct _DEVICE_INFO
|
|
||||||
{
|
|
||||||
uint8_t USBbmRequestType; /* bmRequestType */
|
|
||||||
uint8_t USBbRequest; /* bRequest */
|
|
||||||
uint16_t_uint8_t USBwValues; /* wValue */
|
|
||||||
uint16_t_uint8_t USBwIndexs; /* wIndex */
|
|
||||||
uint16_t_uint8_t USBwLengths; /* wLength */
|
|
||||||
|
|
||||||
uint8_t ControlState; /* of type CONTROL_STATE */
|
|
||||||
uint8_t Current_Feature;
|
|
||||||
uint8_t Current_Configuration; /* Selected configuration */
|
|
||||||
uint8_t Current_Interface; /* Selected interface of current configuration */
|
|
||||||
uint8_t Current_AlternateSetting;/* Selected Alternate Setting of current
|
|
||||||
interface*/
|
|
||||||
|
|
||||||
ENDPOINT_INFO Ctrl_Info;
|
|
||||||
}DEVICE_INFO;
|
|
||||||
|
|
||||||
typedef struct _DEVICE_PROP
|
|
||||||
{
|
|
||||||
void (*Init)(void); /* Initialize the device */
|
|
||||||
void (*Reset)(void); /* Reset routine of this device */
|
|
||||||
|
|
||||||
/* Device dependent process after the status stage */
|
|
||||||
void (*Process_Status_IN)(void);
|
|
||||||
void (*Process_Status_OUT)(void);
|
|
||||||
|
|
||||||
/* Procedure of process on setup stage of a class specified request with data stage */
|
|
||||||
/* All class specified requests with data stage are processed in Class_Data_Setup
|
|
||||||
Class_Data_Setup()
|
|
||||||
responses to check all special requests and fills ENDPOINT_INFO
|
|
||||||
according to the request
|
|
||||||
If IN tokens are expected, then wLength & wOffset will be filled
|
|
||||||
with the total transferring bytes and the starting position
|
|
||||||
If OUT tokens are expected, then rLength & rOffset will be filled
|
|
||||||
with the total expected bytes and the starting position in the buffer
|
|
||||||
|
|
||||||
If the request is valid, Class_Data_Setup returns SUCCESS, else UNSUPPORT
|
|
||||||
|
|
||||||
CAUTION:
|
|
||||||
Since GET_CONFIGURATION & GET_INTERFACE are highly related to
|
|
||||||
the individual classes, they will be checked and processed here.
|
|
||||||
*/
|
|
||||||
RESULT (*Class_Data_Setup)(uint8_t RequestNo);
|
|
||||||
|
|
||||||
/* Procedure of process on setup stage of a class specified request without data stage */
|
|
||||||
/* All class specified requests without data stage are processed in Class_NoData_Setup
|
|
||||||
Class_NoData_Setup
|
|
||||||
responses to check all special requests and perform the request
|
|
||||||
|
|
||||||
CAUTION:
|
|
||||||
Since SET_CONFIGURATION & SET_INTERFACE are highly related to
|
|
||||||
the individual classes, they will be checked and processed here.
|
|
||||||
*/
|
|
||||||
RESULT (*Class_NoData_Setup)(uint8_t RequestNo);
|
|
||||||
|
|
||||||
/*Class_Get_Interface_Setting
|
|
||||||
This function is used by the file usb_core.c to test if the selected Interface
|
|
||||||
and Alternate Setting (uint8_t Interface, uint8_t AlternateSetting) are supported by
|
|
||||||
the application.
|
|
||||||
This function is writing by user. It should return "SUCCESS" if the Interface
|
|
||||||
and Alternate Setting are supported by the application or "UNSUPPORT" if they
|
|
||||||
are not supported. */
|
|
||||||
|
|
||||||
RESULT (*Class_Get_Interface_Setting)(uint8_t Interface, uint8_t AlternateSetting);
|
|
||||||
|
|
||||||
uint8_t* (*GetDeviceDescriptor)(uint16_t Length);
|
|
||||||
uint8_t* (*GetConfigDescriptor)(uint16_t Length);
|
|
||||||
uint8_t* (*GetStringDescriptor)(uint16_t Length);
|
|
||||||
|
|
||||||
uint8_t* RxEP_buffer;
|
|
||||||
uint8_t MaxPacketSize;
|
|
||||||
|
|
||||||
}DEVICE_PROP;
|
|
||||||
|
|
||||||
typedef struct _USER_STANDARD_REQUESTS
|
|
||||||
{
|
|
||||||
void (*User_GetConfiguration)(void); /* Get Configuration */
|
|
||||||
void (*User_SetConfiguration)(void); /* Set Configuration */
|
|
||||||
void (*User_GetInterface)(void); /* Get Interface */
|
|
||||||
void (*User_SetInterface)(void); /* Set Interface */
|
|
||||||
void (*User_GetStatus)(void); /* Get Status */
|
|
||||||
void (*User_ClearFeature)(void); /* Clear Feature */
|
|
||||||
void (*User_SetEndPointFeature)(void); /* Set Endpoint Feature */
|
|
||||||
void (*User_SetDeviceFeature)(void); /* Set Device Feature */
|
|
||||||
void (*User_SetDeviceAddress)(void); /* Set Device Address */
|
|
||||||
}
|
|
||||||
USER_STANDARD_REQUESTS;
|
|
||||||
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
#define Type_Recipient (pInformation->USBbmRequestType & (REQUEST_TYPE | RECIPIENT))
|
|
||||||
|
|
||||||
#define Usb_rLength Usb_wLength
|
|
||||||
#define Usb_rOffset Usb_wOffset
|
|
||||||
|
|
||||||
#define USBwValue USBwValues.w
|
|
||||||
#define USBwValue0 USBwValues.bw.bb0
|
|
||||||
#define USBwValue1 USBwValues.bw.bb1
|
|
||||||
#define USBwIndex USBwIndexs.w
|
|
||||||
#define USBwIndex0 USBwIndexs.bw.bb0
|
|
||||||
#define USBwIndex1 USBwIndexs.bw.bb1
|
|
||||||
#define USBwLength USBwLengths.w
|
|
||||||
#define USBwLength0 USBwLengths.bw.bb0
|
|
||||||
#define USBwLength1 USBwLengths.bw.bb1
|
|
||||||
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
uint8_t Setup0_Process(void);
|
|
||||||
uint8_t Post0_Process(void);
|
|
||||||
uint8_t Out0_Process(void);
|
|
||||||
uint8_t In0_Process(void);
|
|
||||||
|
|
||||||
RESULT Standard_SetEndPointFeature(void);
|
|
||||||
RESULT Standard_SetDeviceFeature(void);
|
|
||||||
|
|
||||||
uint8_t *Standard_GetConfiguration(uint16_t Length);
|
|
||||||
RESULT Standard_SetConfiguration(void);
|
|
||||||
uint8_t *Standard_GetInterface(uint16_t Length);
|
|
||||||
RESULT Standard_SetInterface(void);
|
|
||||||
uint8_t *Standard_GetDescriptorData(uint16_t Length, PONE_DESCRIPTOR pDesc);
|
|
||||||
|
|
||||||
uint8_t *Standard_GetStatus(uint16_t Length);
|
|
||||||
RESULT Standard_ClearFeature(void);
|
|
||||||
void SetDeviceAddress(uint8_t);
|
|
||||||
void NOP_Process(void);
|
|
||||||
|
|
||||||
extern const DEVICE_PROP Device_Property;
|
|
||||||
extern const USER_STANDARD_REQUESTS User_Standard_Requests;
|
|
||||||
extern const DEVICE Device_Table;
|
|
||||||
extern DEVICE_INFO Device_Info;
|
|
||||||
|
|
||||||
/* cells saving status during interrupt servicing */
|
|
||||||
extern __IO uint16_t SaveRState;
|
|
||||||
extern __IO uint16_t SaveTState;
|
|
||||||
|
|
||||||
#endif /* __USB_CORE_H */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,80 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_def.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Definitions related to USB Core
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_DEF_H
|
|
||||||
#define __USB_DEF_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
typedef enum _RECIPIENT_TYPE
|
|
||||||
{
|
|
||||||
DEVICE_RECIPIENT, /* Recipient device */
|
|
||||||
INTERFACE_RECIPIENT, /* Recipient interface */
|
|
||||||
ENDPOINT_RECIPIENT, /* Recipient endpoint */
|
|
||||||
OTHER_RECIPIENT
|
|
||||||
} RECIPIENT_TYPE;
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum _STANDARD_REQUESTS
|
|
||||||
{
|
|
||||||
GET_STATUS = 0,
|
|
||||||
CLEAR_FEATURE,
|
|
||||||
RESERVED1,
|
|
||||||
SET_FEATURE,
|
|
||||||
RESERVED2,
|
|
||||||
SET_ADDRESS,
|
|
||||||
GET_DESCRIPTOR,
|
|
||||||
SET_DESCRIPTOR,
|
|
||||||
GET_CONFIGURATION,
|
|
||||||
SET_CONFIGURATION,
|
|
||||||
GET_INTERFACE,
|
|
||||||
SET_INTERFACE,
|
|
||||||
TOTAL_sREQUEST, /* Total number of Standard request */
|
|
||||||
SYNCH_FRAME = 12
|
|
||||||
} STANDARD_REQUESTS;
|
|
||||||
|
|
||||||
/* Definition of "USBwValue" */
|
|
||||||
typedef enum _DESCRIPTOR_TYPE
|
|
||||||
{
|
|
||||||
DEVICE_DESCRIPTOR = 1,
|
|
||||||
CONFIG_DESCRIPTOR,
|
|
||||||
STRING_DESCRIPTOR,
|
|
||||||
INTERFACE_DESCRIPTOR,
|
|
||||||
ENDPOINT_DESCRIPTOR
|
|
||||||
} DESCRIPTOR_TYPE;
|
|
||||||
|
|
||||||
/* Feature selector of a SET_FEATURE or CLEAR_FEATURE */
|
|
||||||
typedef enum _FEATURE_SELECTOR
|
|
||||||
{
|
|
||||||
ENDPOINT_STALL,
|
|
||||||
DEVICE_REMOTE_WAKEUP
|
|
||||||
} FEATURE_SELECTOR;
|
|
||||||
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Definition of "USBbmRequestType" */
|
|
||||||
#define REQUEST_TYPE 0x60 /* Mask to get request type */
|
|
||||||
#define STANDARD_REQUEST 0x00 /* Standard request */
|
|
||||||
#define CLASS_REQUEST 0x20 /* Class request */
|
|
||||||
#define VENDOR_REQUEST 0x40 /* Vendor request */
|
|
||||||
|
|
||||||
#define RECIPIENT 0x1F /* Mask to get recipient */
|
|
||||||
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
|
|
||||||
#endif /* __USB_DEF_H */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,49 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_init.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Initialization routines & global variables
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_INIT_H
|
|
||||||
#define __USB_INIT_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
void USB_Init(void);
|
|
||||||
|
|
||||||
/* External variables --------------------------------------------------------*/
|
|
||||||
/* The number of current endpoint, it will be used to specify an endpoint */
|
|
||||||
extern uint8_t EPindex;
|
|
||||||
/* The number of current device, it is an index to the Device_Table */
|
|
||||||
/*extern uint8_t Device_no; */
|
|
||||||
/* Points to the DEVICE_INFO structure of current device */
|
|
||||||
/* The purpose of this register is to speed up the execution */
|
|
||||||
extern DEVICE_INFO* pInformation;
|
|
||||||
/* Points to the DEVICE_PROP structure of current device */
|
|
||||||
/* The purpose of this register is to speed up the execution */
|
|
||||||
extern const DEVICE_PROP* pProperty;
|
|
||||||
/* Temporary save the state of Rx & Tx status. */
|
|
||||||
/* Whenever the Rx or Tx state is changed, its value is saved */
|
|
||||||
/* in this variable first and will be set to the EPRB or EPRA */
|
|
||||||
/* at the end of interrupt process */
|
|
||||||
extern const USER_STANDARD_REQUESTS *pUser_Standard_Requests;
|
|
||||||
|
|
||||||
extern uint16_t SaveState ;
|
|
||||||
extern uint16_t wInterrupt_Mask;
|
|
||||||
|
|
||||||
#endif /* __USB_INIT_H */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,33 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_int.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Endpoint CTR (Low and High) interrupt's service routines
|
|
||||||
* prototypes
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_INT_H
|
|
||||||
#define __USB_INT_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
void CTR_LP(void);
|
|
||||||
void CTR_HP(void);
|
|
||||||
|
|
||||||
/* External variables --------------------------------------------------------*/
|
|
||||||
|
|
||||||
#endif /* __USB_INT_H */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,50 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_lib.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : USB library include files
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_LIB_H
|
|
||||||
#define __USB_LIB_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "stm32f10x.h"
|
|
||||||
#include "usb_type.h"
|
|
||||||
#include "usb_regs.h"
|
|
||||||
#include "usb_def.h"
|
|
||||||
#include "usb_core.h"
|
|
||||||
#include "usb_init.h"
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
#include "usb_mem.h"
|
|
||||||
#include "usb_int.h"
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
#include "usb_sil.h"
|
|
||||||
|
|
||||||
#ifdef STM32F10X_CL
|
|
||||||
#include "otgd_fs_cal.h"
|
|
||||||
#include "otgd_fs_pcd.h"
|
|
||||||
#include "otgd_fs_dev.h"
|
|
||||||
#include "otgd_fs_int.h"
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
/* External variables --------------------------------------------------------*/
|
|
||||||
|
|
||||||
#endif /* __USB_LIB_H */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,32 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_mem.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Utility prototypes functions for memory/PMA transfers
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_MEM_H
|
|
||||||
#define __USB_MEM_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
void UserToPMABufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes);
|
|
||||||
void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes);
|
|
||||||
|
|
||||||
/* External variables --------------------------------------------------------*/
|
|
||||||
|
|
||||||
#endif /*__USB_MEM_H*/
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,670 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_regs.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Interface prototype functions to USB cell registers
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_REGS_H
|
|
||||||
#define __USB_REGS_H
|
|
||||||
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
typedef enum _EP_DBUF_DIR
|
|
||||||
{
|
|
||||||
/* double buffered endpoint direction */
|
|
||||||
EP_DBUF_ERR,
|
|
||||||
EP_DBUF_OUT,
|
|
||||||
EP_DBUF_IN
|
|
||||||
}EP_DBUF_DIR;
|
|
||||||
|
|
||||||
/* endpoint buffer number */
|
|
||||||
enum EP_BUF_NUM
|
|
||||||
{
|
|
||||||
EP_NOBUF,
|
|
||||||
EP_BUF0,
|
|
||||||
EP_BUF1
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
#define RegBase (0x40005C00L) /* USB_IP Peripheral Registers base address */
|
|
||||||
#define PMAAddr (0x40006000L) /* USB_IP Packet Memory Area base address */
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
/* General registers */
|
|
||||||
/******************************************************************************/
|
|
||||||
|
|
||||||
/* Control register */
|
|
||||||
#define CNTR ((__IO unsigned *)(RegBase + 0x40))
|
|
||||||
/* Interrupt status register */
|
|
||||||
#define ISTR ((__IO unsigned *)(RegBase + 0x44))
|
|
||||||
/* Frame number register */
|
|
||||||
#define FNR ((__IO unsigned *)(RegBase + 0x48))
|
|
||||||
/* Device address register */
|
|
||||||
#define DADDR ((__IO unsigned *)(RegBase + 0x4C))
|
|
||||||
/* Buffer Table address register */
|
|
||||||
#define BTABLE ((__IO unsigned *)(RegBase + 0x50))
|
|
||||||
/******************************************************************************/
|
|
||||||
/* Endpoint registers */
|
|
||||||
/******************************************************************************/
|
|
||||||
#define EP0REG ((__IO unsigned *)(RegBase)) /* endpoint 0 register address */
|
|
||||||
|
|
||||||
/* Endpoint Addresses (w/direction) */
|
|
||||||
#define EP0_OUT ((uint8_t)0x00)
|
|
||||||
#define EP0_IN ((uint8_t)0x80)
|
|
||||||
#define EP1_OUT ((uint8_t)0x01)
|
|
||||||
#define EP1_IN ((uint8_t)0x81)
|
|
||||||
#define EP2_OUT ((uint8_t)0x02)
|
|
||||||
#define EP2_IN ((uint8_t)0x82)
|
|
||||||
#define EP3_OUT ((uint8_t)0x03)
|
|
||||||
#define EP3_IN ((uint8_t)0x83)
|
|
||||||
#define EP4_OUT ((uint8_t)0x04)
|
|
||||||
#define EP4_IN ((uint8_t)0x84)
|
|
||||||
#define EP5_OUT ((uint8_t)0x05)
|
|
||||||
#define EP5_IN ((uint8_t)0x85)
|
|
||||||
#define EP6_OUT ((uint8_t)0x06)
|
|
||||||
#define EP6_IN ((uint8_t)0x86)
|
|
||||||
#define EP7_OUT ((uint8_t)0x07)
|
|
||||||
#define EP7_IN ((uint8_t)0x87)
|
|
||||||
|
|
||||||
/* endpoints enumeration */
|
|
||||||
#define ENDP0 ((uint8_t)0)
|
|
||||||
#define ENDP1 ((uint8_t)1)
|
|
||||||
#define ENDP2 ((uint8_t)2)
|
|
||||||
#define ENDP3 ((uint8_t)3)
|
|
||||||
#define ENDP4 ((uint8_t)4)
|
|
||||||
#define ENDP5 ((uint8_t)5)
|
|
||||||
#define ENDP6 ((uint8_t)6)
|
|
||||||
#define ENDP7 ((uint8_t)7)
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
/* ISTR interrupt events */
|
|
||||||
/******************************************************************************/
|
|
||||||
#define ISTR_CTR (0x8000) /* Correct TRansfer (clear-only bit) */
|
|
||||||
#define ISTR_DOVR (0x4000) /* DMA OVeR/underrun (clear-only bit) */
|
|
||||||
#define ISTR_ERR (0x2000) /* ERRor (clear-only bit) */
|
|
||||||
#define ISTR_WKUP (0x1000) /* WaKe UP (clear-only bit) */
|
|
||||||
#define ISTR_SUSP (0x0800) /* SUSPend (clear-only bit) */
|
|
||||||
#define ISTR_RESET (0x0400) /* RESET (clear-only bit) */
|
|
||||||
#define ISTR_SOF (0x0200) /* Start Of Frame (clear-only bit) */
|
|
||||||
#define ISTR_ESOF (0x0100) /* Expected Start Of Frame (clear-only bit) */
|
|
||||||
|
|
||||||
|
|
||||||
#define ISTR_DIR (0x0010) /* DIRection of transaction (read-only bit) */
|
|
||||||
#define ISTR_EP_ID (0x000F) /* EndPoint IDentifier (read-only bit) */
|
|
||||||
|
|
||||||
#define CLR_CTR (~ISTR_CTR) /* clear Correct TRansfer bit */
|
|
||||||
#define CLR_DOVR (~ISTR_DOVR) /* clear DMA OVeR/underrun bit*/
|
|
||||||
#define CLR_ERR (~ISTR_ERR) /* clear ERRor bit */
|
|
||||||
#define CLR_WKUP (~ISTR_WKUP) /* clear WaKe UP bit */
|
|
||||||
#define CLR_SUSP (~ISTR_SUSP) /* clear SUSPend bit */
|
|
||||||
#define CLR_RESET (~ISTR_RESET) /* clear RESET bit */
|
|
||||||
#define CLR_SOF (~ISTR_SOF) /* clear Start Of Frame bit */
|
|
||||||
#define CLR_ESOF (~ISTR_ESOF) /* clear Expected Start Of Frame bit */
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
/* CNTR control register bits definitions */
|
|
||||||
/******************************************************************************/
|
|
||||||
#define CNTR_CTRM (0x8000) /* Correct TRansfer Mask */
|
|
||||||
#define CNTR_DOVRM (0x4000) /* DMA OVeR/underrun Mask */
|
|
||||||
#define CNTR_ERRM (0x2000) /* ERRor Mask */
|
|
||||||
#define CNTR_WKUPM (0x1000) /* WaKe UP Mask */
|
|
||||||
#define CNTR_SUSPM (0x0800) /* SUSPend Mask */
|
|
||||||
#define CNTR_RESETM (0x0400) /* RESET Mask */
|
|
||||||
#define CNTR_SOFM (0x0200) /* Start Of Frame Mask */
|
|
||||||
#define CNTR_ESOFM (0x0100) /* Expected Start Of Frame Mask */
|
|
||||||
|
|
||||||
|
|
||||||
#define CNTR_RESUME (0x0010) /* RESUME request */
|
|
||||||
#define CNTR_FSUSP (0x0008) /* Force SUSPend */
|
|
||||||
#define CNTR_LPMODE (0x0004) /* Low-power MODE */
|
|
||||||
#define CNTR_PDWN (0x0002) /* Power DoWN */
|
|
||||||
#define CNTR_FRES (0x0001) /* Force USB RESet */
|
|
||||||
|
|
||||||
/******************************************************************************/
|
|
||||||
/* FNR Frame Number Register bit definitions */
|
|
||||||
/******************************************************************************/
|
|
||||||
#define FNR_RXDP (0x8000) /* status of D+ data line */
|
|
||||||
#define FNR_RXDM (0x4000) /* status of D- data line */
|
|
||||||
#define FNR_LCK (0x2000) /* LoCKed */
|
|
||||||
#define FNR_LSOF (0x1800) /* Lost SOF */
|
|
||||||
#define FNR_FN (0x07FF) /* Frame Number */
|
|
||||||
/******************************************************************************/
|
|
||||||
/* DADDR Device ADDRess bit definitions */
|
|
||||||
/******************************************************************************/
|
|
||||||
#define DADDR_EF (0x80)
|
|
||||||
#define DADDR_ADD (0x7F)
|
|
||||||
/******************************************************************************/
|
|
||||||
/* Endpoint register */
|
|
||||||
/******************************************************************************/
|
|
||||||
/* bit positions */
|
|
||||||
#define EP_CTR_RX (0x8000) /* EndPoint Correct TRansfer RX */
|
|
||||||
#define EP_DTOG_RX (0x4000) /* EndPoint Data TOGGLE RX */
|
|
||||||
#define EPRX_STAT (0x3000) /* EndPoint RX STATus bit field */
|
|
||||||
#define EP_SETUP (0x0800) /* EndPoint SETUP */
|
|
||||||
#define EP_T_FIELD (0x0600) /* EndPoint TYPE */
|
|
||||||
#define EP_KIND (0x0100) /* EndPoint KIND */
|
|
||||||
#define EP_CTR_TX (0x0080) /* EndPoint Correct TRansfer TX */
|
|
||||||
#define EP_DTOG_TX (0x0040) /* EndPoint Data TOGGLE TX */
|
|
||||||
#define EPTX_STAT (0x0030) /* EndPoint TX STATus bit field */
|
|
||||||
#define EPADDR_FIELD (0x000F) /* EndPoint ADDRess FIELD */
|
|
||||||
|
|
||||||
/* EndPoint REGister MASK (no toggle fields) */
|
|
||||||
#define EPREG_MASK (EP_CTR_RX|EP_SETUP|EP_T_FIELD|EP_KIND|EP_CTR_TX|EPADDR_FIELD)
|
|
||||||
|
|
||||||
/* EP_TYPE[1:0] EndPoint TYPE */
|
|
||||||
#define EP_TYPE_MASK (0x0600) /* EndPoint TYPE Mask */
|
|
||||||
#define EP_BULK (0x0000) /* EndPoint BULK */
|
|
||||||
#define EP_CONTROL (0x0200) /* EndPoint CONTROL */
|
|
||||||
#define EP_ISOCHRONOUS (0x0400) /* EndPoint ISOCHRONOUS */
|
|
||||||
#define EP_INTERRUPT (0x0600) /* EndPoint INTERRUPT */
|
|
||||||
#define EP_T_MASK (~EP_T_FIELD & EPREG_MASK)
|
|
||||||
|
|
||||||
|
|
||||||
/* EP_KIND EndPoint KIND */
|
|
||||||
#define EPKIND_MASK (~EP_KIND & EPREG_MASK)
|
|
||||||
|
|
||||||
/* STAT_TX[1:0] STATus for TX transfer */
|
|
||||||
#define EP_TX_DIS (0x0000) /* EndPoint TX DISabled */
|
|
||||||
#define EP_TX_STALL (0x0010) /* EndPoint TX STALLed */
|
|
||||||
#define EP_TX_NAK (0x0020) /* EndPoint TX NAKed */
|
|
||||||
#define EP_TX_VALID (0x0030) /* EndPoint TX VALID */
|
|
||||||
#define EPTX_DTOG1 (0x0010) /* EndPoint TX Data TOGgle bit1 */
|
|
||||||
#define EPTX_DTOG2 (0x0020) /* EndPoint TX Data TOGgle bit2 */
|
|
||||||
#define EPTX_DTOGMASK (EPTX_STAT|EPREG_MASK)
|
|
||||||
|
|
||||||
/* STAT_RX[1:0] STATus for RX transfer */
|
|
||||||
#define EP_RX_DIS (0x0000) /* EndPoint RX DISabled */
|
|
||||||
#define EP_RX_STALL (0x1000) /* EndPoint RX STALLed */
|
|
||||||
#define EP_RX_NAK (0x2000) /* EndPoint RX NAKed */
|
|
||||||
#define EP_RX_VALID (0x3000) /* EndPoint RX VALID */
|
|
||||||
#define EPRX_DTOG1 (0x1000) /* EndPoint RX Data TOGgle bit1 */
|
|
||||||
#define EPRX_DTOG2 (0x2000) /* EndPoint RX Data TOGgle bit1 */
|
|
||||||
#define EPRX_DTOGMASK (EPRX_STAT|EPREG_MASK)
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* SetCNTR */
|
|
||||||
#define _SetCNTR(wRegValue) (*CNTR = (uint16_t)wRegValue)
|
|
||||||
|
|
||||||
/* SetISTR */
|
|
||||||
#define _SetISTR(wRegValue) (*ISTR = (uint16_t)wRegValue)
|
|
||||||
|
|
||||||
/* SetDADDR */
|
|
||||||
#define _SetDADDR(wRegValue) (*DADDR = (uint16_t)wRegValue)
|
|
||||||
|
|
||||||
/* SetBTABLE */
|
|
||||||
#define _SetBTABLE(wRegValue)(*BTABLE = (uint16_t)(wRegValue & 0xFFF8))
|
|
||||||
|
|
||||||
/* GetCNTR */
|
|
||||||
#define _GetCNTR() ((uint16_t) *CNTR)
|
|
||||||
|
|
||||||
/* GetISTR */
|
|
||||||
#define _GetISTR() ((uint16_t) *ISTR)
|
|
||||||
|
|
||||||
/* GetFNR */
|
|
||||||
#define _GetFNR() ((uint16_t) *FNR)
|
|
||||||
|
|
||||||
/* GetDADDR */
|
|
||||||
#define _GetDADDR() ((uint16_t) *DADDR)
|
|
||||||
|
|
||||||
/* GetBTABLE */
|
|
||||||
#define _GetBTABLE() ((uint16_t) *BTABLE)
|
|
||||||
|
|
||||||
/* SetENDPOINT */
|
|
||||||
#define _SetENDPOINT(bEpNum,wRegValue) (*(EP0REG + bEpNum)= \
|
|
||||||
(uint16_t)wRegValue)
|
|
||||||
|
|
||||||
/* GetENDPOINT */
|
|
||||||
#define _GetENDPOINT(bEpNum) ((uint16_t)(*(EP0REG + bEpNum)))
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPType
|
|
||||||
* Description : sets the type in the endpoint register(bits EP_TYPE[1:0])
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wType
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEPType(bEpNum,wType) (_SetENDPOINT(bEpNum,\
|
|
||||||
((_GetENDPOINT(bEpNum) & EP_T_MASK) | wType )))
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : GetEPType
|
|
||||||
* Description : gets the type in the endpoint register(bits EP_TYPE[1:0])
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Endpoint Type
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _GetEPType(bEpNum) (_GetENDPOINT(bEpNum) & EP_T_FIELD)
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPTxStatus
|
|
||||||
* Description : sets the status for tx transfer (bits STAT_TX[1:0]).
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wState: new state
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEPTxStatus(bEpNum,wState) {\
|
|
||||||
register uint16_t _wRegVal; \
|
|
||||||
_wRegVal = _GetENDPOINT(bEpNum) & EPTX_DTOGMASK;\
|
|
||||||
/* toggle first bit ? */ \
|
|
||||||
if((EPTX_DTOG1 & wState)!= 0) \
|
|
||||||
_wRegVal ^= EPTX_DTOG1; \
|
|
||||||
/* toggle second bit ? */ \
|
|
||||||
if((EPTX_DTOG2 & wState)!= 0) \
|
|
||||||
_wRegVal ^= EPTX_DTOG2; \
|
|
||||||
_SetENDPOINT(bEpNum, (_wRegVal | EP_CTR_RX|EP_CTR_TX)); \
|
|
||||||
} /* _SetEPTxStatus */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPRxStatus
|
|
||||||
* Description : sets the status for rx transfer (bits STAT_TX[1:0])
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wState: new state.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEPRxStatus(bEpNum,wState) {\
|
|
||||||
register uint16_t _wRegVal; \
|
|
||||||
\
|
|
||||||
_wRegVal = _GetENDPOINT(bEpNum) & EPRX_DTOGMASK;\
|
|
||||||
/* toggle first bit ? */ \
|
|
||||||
if((EPRX_DTOG1 & wState)!= 0) \
|
|
||||||
_wRegVal ^= EPRX_DTOG1; \
|
|
||||||
/* toggle second bit ? */ \
|
|
||||||
if((EPRX_DTOG2 & wState)!= 0) \
|
|
||||||
_wRegVal ^= EPRX_DTOG2; \
|
|
||||||
_SetENDPOINT(bEpNum, (_wRegVal | EP_CTR_RX|EP_CTR_TX)); \
|
|
||||||
} /* _SetEPRxStatus */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPRxTxStatus
|
|
||||||
* Description : sets the status for rx & tx (bits STAT_TX[1:0] & STAT_RX[1:0])
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wStaterx: new state.
|
|
||||||
* wStatetx: new state.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEPRxTxStatus(bEpNum,wStaterx,wStatetx) {\
|
|
||||||
register uint32_t _wRegVal; \
|
|
||||||
\
|
|
||||||
_wRegVal = _GetENDPOINT(bEpNum) & (EPRX_DTOGMASK |EPTX_STAT) ;\
|
|
||||||
/* toggle first bit ? */ \
|
|
||||||
if((EPRX_DTOG1 & wStaterx)!= 0) \
|
|
||||||
_wRegVal ^= EPRX_DTOG1; \
|
|
||||||
/* toggle second bit ? */ \
|
|
||||||
if((EPRX_DTOG2 & wStaterx)!= 0) \
|
|
||||||
_wRegVal ^= EPRX_DTOG2; \
|
|
||||||
/* toggle first bit ? */ \
|
|
||||||
if((EPTX_DTOG1 & wStatetx)!= 0) \
|
|
||||||
_wRegVal ^= EPTX_DTOG1; \
|
|
||||||
/* toggle second bit ? */ \
|
|
||||||
if((EPTX_DTOG2 & wStatetx)!= 0) \
|
|
||||||
_wRegVal ^= EPTX_DTOG2; \
|
|
||||||
_SetENDPOINT(bEpNum, _wRegVal | EP_CTR_RX|EP_CTR_TX); \
|
|
||||||
} /* _SetEPRxTxStatus */
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : GetEPTxStatus / GetEPRxStatus
|
|
||||||
* Description : gets the status for tx/rx transfer (bits STAT_TX[1:0]
|
|
||||||
* /STAT_RX[1:0])
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : status .
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _GetEPTxStatus(bEpNum) ((uint16_t)_GetENDPOINT(bEpNum) & EPTX_STAT)
|
|
||||||
|
|
||||||
#define _GetEPRxStatus(bEpNum) ((uint16_t)_GetENDPOINT(bEpNum) & EPRX_STAT)
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPTxValid / SetEPRxValid
|
|
||||||
* Description : sets directly the VALID tx/rx-status into the enpoint register
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEPTxValid(bEpNum) (_SetEPTxStatus(bEpNum, EP_TX_VALID))
|
|
||||||
|
|
||||||
#define _SetEPRxValid(bEpNum) (_SetEPRxStatus(bEpNum, EP_RX_VALID))
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : GetTxStallStatus / GetRxStallStatus.
|
|
||||||
* Description : checks stall condition in an endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : TRUE = endpoint in stall condition.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _GetTxStallStatus(bEpNum) (_GetEPTxStatus(bEpNum) \
|
|
||||||
== EP_TX_STALL)
|
|
||||||
#define _GetRxStallStatus(bEpNum) (_GetEPRxStatus(bEpNum) \
|
|
||||||
== EP_RX_STALL)
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEP_KIND / ClearEP_KIND.
|
|
||||||
* Description : set & clear EP_KIND bit.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEP_KIND(bEpNum) (_SetENDPOINT(bEpNum, \
|
|
||||||
(EP_CTR_RX|EP_CTR_TX|((_GetENDPOINT(bEpNum) | EP_KIND) & EPREG_MASK))))
|
|
||||||
#define _ClearEP_KIND(bEpNum) (_SetENDPOINT(bEpNum, \
|
|
||||||
(EP_CTR_RX|EP_CTR_TX|(_GetENDPOINT(bEpNum) & EPKIND_MASK))))
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : Set_Status_Out / Clear_Status_Out.
|
|
||||||
* Description : Sets/clears directly STATUS_OUT bit in the endpoint register.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _Set_Status_Out(bEpNum) _SetEP_KIND(bEpNum)
|
|
||||||
#define _Clear_Status_Out(bEpNum) _ClearEP_KIND(bEpNum)
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPDoubleBuff / ClearEPDoubleBuff.
|
|
||||||
* Description : Sets/clears directly EP_KIND bit in the endpoint register.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEPDoubleBuff(bEpNum) _SetEP_KIND(bEpNum)
|
|
||||||
#define _ClearEPDoubleBuff(bEpNum) _ClearEP_KIND(bEpNum)
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : ClearEP_CTR_RX / ClearEP_CTR_TX.
|
|
||||||
* Description : Clears bit CTR_RX / CTR_TX in the endpoint register.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _ClearEP_CTR_RX(bEpNum) (_SetENDPOINT(bEpNum,\
|
|
||||||
_GetENDPOINT(bEpNum) & 0x7FFF & EPREG_MASK))
|
|
||||||
#define _ClearEP_CTR_TX(bEpNum) (_SetENDPOINT(bEpNum,\
|
|
||||||
_GetENDPOINT(bEpNum) & 0xFF7F & EPREG_MASK))
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : ToggleDTOG_RX / ToggleDTOG_TX .
|
|
||||||
* Description : Toggles DTOG_RX / DTOG_TX bit in the endpoint register.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _ToggleDTOG_RX(bEpNum) (_SetENDPOINT(bEpNum, \
|
|
||||||
EP_CTR_RX|EP_CTR_TX|EP_DTOG_RX | (_GetENDPOINT(bEpNum) & EPREG_MASK)))
|
|
||||||
#define _ToggleDTOG_TX(bEpNum) (_SetENDPOINT(bEpNum, \
|
|
||||||
EP_CTR_RX|EP_CTR_TX|EP_DTOG_TX | (_GetENDPOINT(bEpNum) & EPREG_MASK)))
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : ClearDTOG_RX / ClearDTOG_TX.
|
|
||||||
* Description : Clears DTOG_RX / DTOG_TX bit in the endpoint register.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _ClearDTOG_RX(bEpNum) if((_GetENDPOINT(bEpNum) & EP_DTOG_RX) != 0)\
|
|
||||||
_ToggleDTOG_RX(bEpNum)
|
|
||||||
#define _ClearDTOG_TX(bEpNum) if((_GetENDPOINT(bEpNum) & EP_DTOG_TX) != 0)\
|
|
||||||
_ToggleDTOG_TX(bEpNum)
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPAddress.
|
|
||||||
* Description : Sets address in an endpoint register.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* bAddr: Address.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEPAddress(bEpNum,bAddr) _SetENDPOINT(bEpNum,\
|
|
||||||
EP_CTR_RX|EP_CTR_TX|(_GetENDPOINT(bEpNum) & EPREG_MASK) | bAddr)
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : GetEPAddress.
|
|
||||||
* Description : Gets address in an endpoint register.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _GetEPAddress(bEpNum) ((uint8_t)(_GetENDPOINT(bEpNum) & EPADDR_FIELD))
|
|
||||||
|
|
||||||
#define _pEPTxAddr(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8 )*2 + PMAAddr))
|
|
||||||
#define _pEPTxCount(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8+2)*2 + PMAAddr))
|
|
||||||
#define _pEPRxAddr(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8+4)*2 + PMAAddr))
|
|
||||||
#define _pEPRxCount(bEpNum) ((uint32_t *)((_GetBTABLE()+bEpNum*8+6)*2 + PMAAddr))
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPTxAddr / SetEPRxAddr.
|
|
||||||
* Description : sets address of the tx/rx buffer.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wAddr: address to be set (must be word aligned).
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEPTxAddr(bEpNum,wAddr) (*_pEPTxAddr(bEpNum) = ((wAddr >> 1) << 1))
|
|
||||||
#define _SetEPRxAddr(bEpNum,wAddr) (*_pEPRxAddr(bEpNum) = ((wAddr >> 1) << 1))
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : GetEPTxAddr / GetEPRxAddr.
|
|
||||||
* Description : Gets address of the tx/rx buffer.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : address of the buffer.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _GetEPTxAddr(bEpNum) ((uint16_t)*_pEPTxAddr(bEpNum))
|
|
||||||
#define _GetEPRxAddr(bEpNum) ((uint16_t)*_pEPRxAddr(bEpNum))
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPCountRxReg.
|
|
||||||
* Description : Sets counter of rx buffer with no. of blocks.
|
|
||||||
* Input : pdwReg: pointer to counter.
|
|
||||||
* wCount: Counter.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _BlocksOf32(dwReg,wCount,wNBlocks) {\
|
|
||||||
wNBlocks = wCount >> 5;\
|
|
||||||
if((wCount & 0x1f) == 0)\
|
|
||||||
wNBlocks--;\
|
|
||||||
*pdwReg = (uint32_t)((wNBlocks << 10) | 0x8000);\
|
|
||||||
}/* _BlocksOf32 */
|
|
||||||
|
|
||||||
#define _BlocksOf2(dwReg,wCount,wNBlocks) {\
|
|
||||||
wNBlocks = wCount >> 1;\
|
|
||||||
if((wCount & 0x1) != 0)\
|
|
||||||
wNBlocks++;\
|
|
||||||
*pdwReg = (uint32_t)(wNBlocks << 10);\
|
|
||||||
}/* _BlocksOf2 */
|
|
||||||
|
|
||||||
#define _SetEPCountRxReg(dwReg,wCount) {\
|
|
||||||
uint16_t wNBlocks;\
|
|
||||||
if(wCount > 62){_BlocksOf32(dwReg,wCount,wNBlocks);}\
|
|
||||||
else {_BlocksOf2(dwReg,wCount,wNBlocks);}\
|
|
||||||
}/* _SetEPCountRxReg */
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
#define _SetEPRxDblBuf0Count(bEpNum,wCount) {\
|
|
||||||
uint32_t *pdwReg = _pEPTxCount(bEpNum); \
|
|
||||||
_SetEPCountRxReg(pdwReg, wCount);\
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPTxCount / SetEPRxCount.
|
|
||||||
* Description : sets counter for the tx/rx buffer.
|
|
||||||
* Input : bEpNum: endpoint number.
|
|
||||||
* wCount: Counter value.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEPTxCount(bEpNum,wCount) (*_pEPTxCount(bEpNum) = wCount)
|
|
||||||
#define _SetEPRxCount(bEpNum,wCount) {\
|
|
||||||
uint32_t *pdwReg = _pEPRxCount(bEpNum); \
|
|
||||||
_SetEPCountRxReg(pdwReg, wCount);\
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : GetEPTxCount / GetEPRxCount.
|
|
||||||
* Description : gets counter of the tx buffer.
|
|
||||||
* Input : bEpNum: endpoint number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Counter value.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _GetEPTxCount(bEpNum)((uint16_t)(*_pEPTxCount(bEpNum)) & 0x3ff)
|
|
||||||
#define _GetEPRxCount(bEpNum)((uint16_t)(*_pEPRxCount(bEpNum)) & 0x3ff)
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPDblBuf0Addr / SetEPDblBuf1Addr.
|
|
||||||
* Description : Sets buffer 0/1 address in a double buffer endpoint.
|
|
||||||
* Input : bEpNum: endpoint number.
|
|
||||||
* : wBuf0Addr: buffer 0 address.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEPDblBuf0Addr(bEpNum,wBuf0Addr) {_SetEPTxAddr(bEpNum, wBuf0Addr);}
|
|
||||||
#define _SetEPDblBuf1Addr(bEpNum,wBuf1Addr) {_SetEPRxAddr(bEpNum, wBuf1Addr);}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPDblBuffAddr.
|
|
||||||
* Description : Sets addresses in a double buffer endpoint.
|
|
||||||
* Input : bEpNum: endpoint number.
|
|
||||||
* : wBuf0Addr: buffer 0 address.
|
|
||||||
* : wBuf1Addr = buffer 1 address.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEPDblBuffAddr(bEpNum,wBuf0Addr,wBuf1Addr) { \
|
|
||||||
_SetEPDblBuf0Addr(bEpNum, wBuf0Addr);\
|
|
||||||
_SetEPDblBuf1Addr(bEpNum, wBuf1Addr);\
|
|
||||||
} /* _SetEPDblBuffAddr */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : GetEPDblBuf0Addr / GetEPDblBuf1Addr.
|
|
||||||
* Description : Gets buffer 0/1 address of a double buffer endpoint.
|
|
||||||
* Input : bEpNum: endpoint number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _GetEPDblBuf0Addr(bEpNum) (_GetEPTxAddr(bEpNum))
|
|
||||||
#define _GetEPDblBuf1Addr(bEpNum) (_GetEPRxAddr(bEpNum))
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : SetEPDblBuffCount / SetEPDblBuf0Count / SetEPDblBuf1Count.
|
|
||||||
* Description : Gets buffer 0/1 address of a double buffer endpoint.
|
|
||||||
* Input : bEpNum: endpoint number.
|
|
||||||
* : bDir: endpoint dir EP_DBUF_OUT = OUT
|
|
||||||
* EP_DBUF_IN = IN
|
|
||||||
* : wCount: Counter value
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _SetEPDblBuf0Count(bEpNum, bDir, wCount) { \
|
|
||||||
if(bDir == EP_DBUF_OUT)\
|
|
||||||
/* OUT endpoint */ \
|
|
||||||
{_SetEPRxDblBuf0Count(bEpNum,wCount);} \
|
|
||||||
else if(bDir == EP_DBUF_IN)\
|
|
||||||
/* IN endpoint */ \
|
|
||||||
*_pEPTxCount(bEpNum) = (uint32_t)wCount; \
|
|
||||||
} /* SetEPDblBuf0Count*/
|
|
||||||
|
|
||||||
#define _SetEPDblBuf1Count(bEpNum, bDir, wCount) { \
|
|
||||||
if(bDir == EP_DBUF_OUT)\
|
|
||||||
/* OUT endpoint */ \
|
|
||||||
{_SetEPRxCount(bEpNum,wCount);}\
|
|
||||||
else if(bDir == EP_DBUF_IN)\
|
|
||||||
/* IN endpoint */\
|
|
||||||
*_pEPRxCount(bEpNum) = (uint32_t)wCount; \
|
|
||||||
} /* SetEPDblBuf1Count */
|
|
||||||
|
|
||||||
#define _SetEPDblBuffCount(bEpNum, bDir, wCount) {\
|
|
||||||
_SetEPDblBuf0Count(bEpNum, bDir, wCount); \
|
|
||||||
_SetEPDblBuf1Count(bEpNum, bDir, wCount); \
|
|
||||||
} /* _SetEPDblBuffCount */
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Macro Name : GetEPDblBuf0Count / GetEPDblBuf1Count.
|
|
||||||
* Description : Gets buffer 0/1 rx/tx counter for double buffering.
|
|
||||||
* Input : bEpNum: endpoint number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
#define _GetEPDblBuf0Count(bEpNum) (_GetEPTxCount(bEpNum))
|
|
||||||
#define _GetEPDblBuf1Count(bEpNum) (_GetEPRxCount(bEpNum))
|
|
||||||
|
|
||||||
|
|
||||||
/* External variables --------------------------------------------------------*/
|
|
||||||
extern __IO uint16_t wIstr; /* ISTR register last read value */
|
|
||||||
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
void SetCNTR(uint16_t /*wRegValue*/);
|
|
||||||
void SetISTR(uint16_t /*wRegValue*/);
|
|
||||||
void SetDADDR(uint16_t /*wRegValue*/);
|
|
||||||
void SetBTABLE(uint16_t /*wRegValue*/);
|
|
||||||
uint16_t GetCNTR(void);
|
|
||||||
uint16_t GetISTR(void);
|
|
||||||
uint16_t GetFNR(void);
|
|
||||||
uint16_t GetDADDR(void);
|
|
||||||
uint16_t GetBTABLE(void);
|
|
||||||
void SetENDPOINT(uint8_t /*bEpNum*/, uint16_t /*wRegValue*/);
|
|
||||||
uint16_t GetENDPOINT(uint8_t /*bEpNum*/);
|
|
||||||
void SetEPType(uint8_t /*bEpNum*/, uint16_t /*wType*/);
|
|
||||||
uint16_t GetEPType(uint8_t /*bEpNum*/);
|
|
||||||
void SetEPTxStatus(uint8_t /*bEpNum*/, uint16_t /*wState*/);
|
|
||||||
void SetEPRxStatus(uint8_t /*bEpNum*/, uint16_t /*wState*/);
|
|
||||||
void SetDouBleBuffEPStall(uint8_t /*bEpNum*/, uint8_t bDir);
|
|
||||||
uint16_t GetEPTxStatus(uint8_t /*bEpNum*/);
|
|
||||||
uint16_t GetEPRxStatus(uint8_t /*bEpNum*/);
|
|
||||||
void SetEPTxValid(uint8_t /*bEpNum*/);
|
|
||||||
void SetEPRxValid(uint8_t /*bEpNum*/);
|
|
||||||
uint16_t GetTxStallStatus(uint8_t /*bEpNum*/);
|
|
||||||
uint16_t GetRxStallStatus(uint8_t /*bEpNum*/);
|
|
||||||
void SetEP_KIND(uint8_t /*bEpNum*/);
|
|
||||||
void ClearEP_KIND(uint8_t /*bEpNum*/);
|
|
||||||
void Set_Status_Out(uint8_t /*bEpNum*/);
|
|
||||||
void Clear_Status_Out(uint8_t /*bEpNum*/);
|
|
||||||
void SetEPDoubleBuff(uint8_t /*bEpNum*/);
|
|
||||||
void ClearEPDoubleBuff(uint8_t /*bEpNum*/);
|
|
||||||
void ClearEP_CTR_RX(uint8_t /*bEpNum*/);
|
|
||||||
void ClearEP_CTR_TX(uint8_t /*bEpNum*/);
|
|
||||||
void ToggleDTOG_RX(uint8_t /*bEpNum*/);
|
|
||||||
void ToggleDTOG_TX(uint8_t /*bEpNum*/);
|
|
||||||
void ClearDTOG_RX(uint8_t /*bEpNum*/);
|
|
||||||
void ClearDTOG_TX(uint8_t /*bEpNum*/);
|
|
||||||
void SetEPAddress(uint8_t /*bEpNum*/, uint8_t /*bAddr*/);
|
|
||||||
uint8_t GetEPAddress(uint8_t /*bEpNum*/);
|
|
||||||
void SetEPTxAddr(uint8_t /*bEpNum*/, uint16_t /*wAddr*/);
|
|
||||||
void SetEPRxAddr(uint8_t /*bEpNum*/, uint16_t /*wAddr*/);
|
|
||||||
uint16_t GetEPTxAddr(uint8_t /*bEpNum*/);
|
|
||||||
uint16_t GetEPRxAddr(uint8_t /*bEpNum*/);
|
|
||||||
void SetEPCountRxReg(uint32_t * /*pdwReg*/, uint16_t /*wCount*/);
|
|
||||||
void SetEPTxCount(uint8_t /*bEpNum*/, uint16_t /*wCount*/);
|
|
||||||
void SetEPRxCount(uint8_t /*bEpNum*/, uint16_t /*wCount*/);
|
|
||||||
uint16_t GetEPTxCount(uint8_t /*bEpNum*/);
|
|
||||||
uint16_t GetEPRxCount(uint8_t /*bEpNum*/);
|
|
||||||
void SetEPDblBuf0Addr(uint8_t /*bEpNum*/, uint16_t /*wBuf0Addr*/);
|
|
||||||
void SetEPDblBuf1Addr(uint8_t /*bEpNum*/, uint16_t /*wBuf1Addr*/);
|
|
||||||
void SetEPDblBuffAddr(uint8_t /*bEpNum*/, uint16_t /*wBuf0Addr*/, uint16_t /*wBuf1Addr*/);
|
|
||||||
uint16_t GetEPDblBuf0Addr(uint8_t /*bEpNum*/);
|
|
||||||
uint16_t GetEPDblBuf1Addr(uint8_t /*bEpNum*/);
|
|
||||||
void SetEPDblBuffCount(uint8_t /*bEpNum*/, uint8_t /*bDir*/, uint16_t /*wCount*/);
|
|
||||||
void SetEPDblBuf0Count(uint8_t /*bEpNum*/, uint8_t /*bDir*/, uint16_t /*wCount*/);
|
|
||||||
void SetEPDblBuf1Count(uint8_t /*bEpNum*/, uint8_t /*bDir*/, uint16_t /*wCount*/);
|
|
||||||
uint16_t GetEPDblBuf0Count(uint8_t /*bEpNum*/);
|
|
||||||
uint16_t GetEPDblBuf1Count(uint8_t /*bEpNum*/);
|
|
||||||
EP_DBUF_DIR GetEPDblBufDir(uint8_t /*bEpNum*/);
|
|
||||||
void FreeUserBuffer(uint8_t bEpNum/*bEpNum*/, uint8_t bDir);
|
|
||||||
uint16_t ToWord(uint8_t, uint8_t);
|
|
||||||
uint16_t ByteSwap(uint16_t);
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
#endif /* __USB_REGS_H */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,34 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_sil.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Simplified Interface Layer function prototypes.
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_SIL_H
|
|
||||||
#define __USB_SIL_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
|
|
||||||
uint32_t USB_SIL_Init(void);
|
|
||||||
uint32_t USB_SIL_Write(uint8_t bEpAddr, uint8_t* pBufferPointer, uint32_t wBufferSize);
|
|
||||||
uint32_t USB_SIL_Read(uint8_t bEpAddr, uint8_t* pBufferPointer);
|
|
||||||
|
|
||||||
/* External variables --------------------------------------------------------*/
|
|
||||||
|
|
||||||
#endif /* __USB_SIL_H */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_type.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Type definitions used by the USB Library
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_TYPE_H
|
|
||||||
#define __USB_TYPE_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_conf.h"
|
|
||||||
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
#ifndef NULL
|
|
||||||
#define NULL ((void *)0)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifndef __STM32F10x_H
|
|
||||||
|
|
||||||
typedef signed long s32;
|
|
||||||
typedef signed short s16;
|
|
||||||
typedef signed char s8;
|
|
||||||
|
|
||||||
typedef volatile signed long vs32;
|
|
||||||
typedef volatile signed short vs16;
|
|
||||||
typedef volatile signed char vs8;
|
|
||||||
|
|
||||||
typedef unsigned long u32;
|
|
||||||
typedef unsigned short u16;
|
|
||||||
typedef unsigned char u8;
|
|
||||||
|
|
||||||
typedef unsigned long const uc32; /* Read Only */
|
|
||||||
typedef unsigned short const uc16; /* Read Only */
|
|
||||||
typedef unsigned char const uc8; /* Read Only */
|
|
||||||
|
|
||||||
typedef volatile unsigned long vu32;
|
|
||||||
typedef volatile unsigned short vu16;
|
|
||||||
typedef volatile unsigned char vu8;
|
|
||||||
|
|
||||||
typedef volatile unsigned long const vuc32; /* Read Only */
|
|
||||||
typedef volatile unsigned short const vuc16; /* Read Only */
|
|
||||||
typedef volatile unsigned char const vuc8; /* Read Only */
|
|
||||||
|
|
||||||
|
|
||||||
typedef enum
|
|
||||||
{
|
|
||||||
FALSE = 0, TRUE = !FALSE
|
|
||||||
}
|
|
||||||
bool;
|
|
||||||
|
|
||||||
typedef enum { RESET = 0, SET = !RESET } FlagStatus, ITStatus;
|
|
||||||
|
|
||||||
typedef enum { DISABLE = 0, ENABLE = !DISABLE} FunctionalState;
|
|
||||||
|
|
||||||
typedef enum { ERROR = 0, SUCCESS = !ERROR} ErrorStatus;
|
|
||||||
#endif
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
/* External variables --------------------------------------------------------*/
|
|
||||||
|
|
||||||
#endif /* __USB_TYPE_H */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,386 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : otgd_fs_dev.c
|
|
||||||
* Author : STMicroelectronics
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : High Layer device mode interface and wrapping layer.
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#ifdef STM32F10X_CL
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "otgd_fs_dev.h"
|
|
||||||
#include "usb_regs.h"
|
|
||||||
#include "otgd_fs_cal.h"
|
|
||||||
#include "otgd_fs_pcd.h"
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
/* Extern variables ----------------------------------------------------------*/
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTG_DEV_Init
|
|
||||||
* Description : Initialize the OTG Device IP and EP0.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void OTG_DEV_Init(void)
|
|
||||||
{
|
|
||||||
EP_DESCRIPTOR ep_descriptor;
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
/* Set the OTG_USB base registers address */
|
|
||||||
OTGD_FS_SetAddress(USB_OTG_FS1_BASE_ADDR);
|
|
||||||
|
|
||||||
/* Disable all global interrupts */
|
|
||||||
OTGD_FS_DisableGlobalInt();
|
|
||||||
|
|
||||||
/*Init the Core (common init.) */
|
|
||||||
OTGD_FS_CoreInit();
|
|
||||||
|
|
||||||
/* Init Device */
|
|
||||||
OTGD_FS_CoreInitDev();
|
|
||||||
|
|
||||||
/* Init internal driver structure */
|
|
||||||
OTGD_FS_PCD_Init();
|
|
||||||
|
|
||||||
/* Configure and open the IN control EP0 */
|
|
||||||
ep_descriptor.bEndpointAddress = 0x80;
|
|
||||||
ep_descriptor.wMaxPacketSize = 64;
|
|
||||||
ep_descriptor.bmAttributes = USB_ENDPOINT_XFER_CONTROL;
|
|
||||||
OTGD_FS_PCD_EP_Open(&ep_descriptor);
|
|
||||||
|
|
||||||
/* Configure and open the OUT control EP0 */
|
|
||||||
ep_descriptor.bEndpointAddress = 0x00;
|
|
||||||
OTGD_FS_PCD_EP_Open(&ep_descriptor);
|
|
||||||
|
|
||||||
|
|
||||||
ep = OTGD_FS_PCD_GetOutEP(0);
|
|
||||||
OTGD_FS_EPStartXfer(ep);
|
|
||||||
|
|
||||||
/* Enable EP0 to start receiving setup packets */
|
|
||||||
OTGD_FS_PCD_EP0_OutStart();
|
|
||||||
|
|
||||||
/* Enable USB Global interrupt */
|
|
||||||
OTGD_FS_EnableGlobalInt();
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTG_DEV_EP_Init
|
|
||||||
* Description : Initialize the selected endpoint parameters
|
|
||||||
* Input : - bEpAdd: address of the endpoint (epnum|epdir)
|
|
||||||
* expample: EP1 OUT -> 0x01 and EP1 IN 0x81.
|
|
||||||
* - bEpType: OTG_DEV_EP_TYPE_CONTROL, OTG_DEV_EP_TYPE_ISOC,
|
|
||||||
* OTG_DEV_EP_TYPE_BULK, OTG_DEV_EP_TYPE_INT
|
|
||||||
* - wEpMaxPackSize: The EP max packet size.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Status: New status to be set for the endpoint:
|
|
||||||
*******************************************************************************/
|
|
||||||
void OTG_DEV_EP_Init(uint8_t bEpAdd, uint8_t bEpType, uint16_t wEpMaxPackSize)
|
|
||||||
{
|
|
||||||
EP_DESCRIPTOR ep_descriptor;
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
/* Set the EP parameters in a structure */
|
|
||||||
ep_descriptor.bEndpointAddress = bEpAdd;
|
|
||||||
ep_descriptor.bmAttributes = bEpType;
|
|
||||||
ep_descriptor.wMaxPacketSize = wEpMaxPackSize;
|
|
||||||
|
|
||||||
OTGD_FS_PCD_EP_Flush(bEpAdd);
|
|
||||||
|
|
||||||
/* Open the EP with entered parameters */
|
|
||||||
OTGD_FS_PCD_EP_Open(&ep_descriptor);
|
|
||||||
|
|
||||||
/* Activate the EP if it is an OUT EP */
|
|
||||||
if ((bEpAdd & 0x80) == 0)
|
|
||||||
{
|
|
||||||
ep = OTGD_FS_PCD_GetOutEP(bEpAdd & 0x7F);
|
|
||||||
OTGD_FS_EPStartXfer(ep);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ep = OTGD_FS_PCD_GetInEP(bEpAdd & 0x7F);
|
|
||||||
ep->even_odd_frame = 0;
|
|
||||||
OTG_DEV_SetEPTxStatus(bEpAdd, DEV_EP_TX_NAK);
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTG_DEV_GetEPTxStatus
|
|
||||||
* Description : Set the related endpoint status.
|
|
||||||
* Input : Number of the endpoint.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Status: New status to be set for the endpoint:
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTG_DEV_GetEPTxStatus(uint8_t bEpnum)
|
|
||||||
{
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
uint32_t status = 0;
|
|
||||||
|
|
||||||
ep = OTGD_FS_PCD_GetInEP(bEpnum & 0x7F);
|
|
||||||
|
|
||||||
status = OTGD_FS_Dev_GetEPStatus(ep);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTG_DEV_GetEPRxStatus
|
|
||||||
* Description : returns the related endpoint status.
|
|
||||||
* Input : Number of the endpoint.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Status: New status to be set for the endpoint:
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTG_DEV_GetEPRxStatus(uint8_t bEpnum)
|
|
||||||
{
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
uint32_t status = 0;
|
|
||||||
|
|
||||||
ep = OTGD_FS_PCD_GetOutEP(bEpnum & 0x7F);
|
|
||||||
|
|
||||||
status = OTGD_FS_Dev_GetEPStatus(ep);
|
|
||||||
|
|
||||||
return status;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTG_DEV_SetEPTxStatus
|
|
||||||
* Description : Sets the related endpoint status.
|
|
||||||
* Input : - bEpnum: Number of the endpoint.
|
|
||||||
* - Status: New status to be set for the endpoint. It can be
|
|
||||||
* DEV_EP_TX_VALID, DEV_EP_TX_STALL, DEV_EP_TX_NAK or
|
|
||||||
* DEV_EP_TX_DISABLE.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void OTG_DEV_SetEPTxStatus(uint8_t bEpnum, uint32_t Status)
|
|
||||||
{
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
ep = OTGD_FS_PCD_GetInEP(bEpnum & 0x7F);
|
|
||||||
|
|
||||||
if ((bEpnum == 0x80) && (Status == DEV_EP_TX_STALL))
|
|
||||||
{
|
|
||||||
ep->is_in = 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
OTGD_FS_Dev_SetEPStatus(ep, Status);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTG_DEV_SetEPRxStatus
|
|
||||||
* Description : Sets the related endpoint status.
|
|
||||||
* Input : - bEpnum: Number of the endpoint.
|
|
||||||
* - Status: New status to be set for the endpoint. It can be
|
|
||||||
* DEV_EP_RX_VALID, DEV_EP_RX_STALL, DEV_EP_RX_NAK or
|
|
||||||
* DEV_EP_RX_DISABLE.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void OTG_DEV_SetEPRxStatus(uint8_t bEpnum, uint32_t Status)
|
|
||||||
{
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
ep = OTGD_FS_PCD_GetOutEP(bEpnum & 0x7F);
|
|
||||||
|
|
||||||
OTGD_FS_Dev_SetEPStatus(ep, Status);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : USB_DevDisconnect
|
|
||||||
* Description : Disconnect the Pullup resist.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wState: new state.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void USB_DevDisconnect(void)
|
|
||||||
{
|
|
||||||
OTGD_FS_PCD_DevDisconnect();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : USB_DevConnect
|
|
||||||
* Description : Disconnect the .
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wState: new state.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void USB_DevConnect(void)
|
|
||||||
{
|
|
||||||
OTGD_FS_PCD_DevConnect();
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-* Replace the usb_regs.h defines -*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPTxStatus
|
|
||||||
* Description : Set the status of Tx endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wState: new state.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPTxStatus(uint8_t bEpNum, uint16_t wState)
|
|
||||||
{
|
|
||||||
_SetEPTxStatus(bEpNum, wState);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPRxStatus
|
|
||||||
* Description : Set the status of Rx endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wState: new state.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPRxStatus(uint8_t bEpNum, uint16_t wState)
|
|
||||||
{
|
|
||||||
_SetEPRxStatus(bEpNum, wState);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPTxStatus
|
|
||||||
* Description : Returns the endpoint Tx status.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Endpoint TX Status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPTxStatus(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPTxStatus(bEpNum));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPRxStatus
|
|
||||||
* Description : Returns the endpoint Rx status.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Endpoint RX Status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPRxStatus(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPRxStatus(bEpNum));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPTxValid
|
|
||||||
* Description : Valid the endpoint Tx Status.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPTxValid(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_SetEPTxStatus(bEpNum, EP_TX_VALID);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPRxValid
|
|
||||||
* Description : Valid the endpoint Rx Status.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPRxValid(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_SetEPRxStatus(bEpNum, EP_RX_VALID);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetTxStallStatus
|
|
||||||
* Description : Returns the Stall status of the Tx endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Tx Stall status.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetTxStallStatus(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetTxStallStatus(bEpNum));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetRxStallStatus
|
|
||||||
* Description : Returns the Stall status of the Rx endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Rx Stall status.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetRxStallStatus(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetRxStallStatus(bEpNum));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPTxCount.
|
|
||||||
* Description : Set the Tx count.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wCount: new count value.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPTxCount(uint8_t bEpNum, uint16_t wCount)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPRxCount
|
|
||||||
* Description : Set the Rx count.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wCount: the new count value.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPRxCount(uint8_t bEpNum, uint16_t wCount)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : ToWord
|
|
||||||
* Description : merge two byte in a word.
|
|
||||||
* Input : bh: byte high, bl: bytes low.
|
|
||||||
* Output : None.
|
|
||||||
* Return : resulted word.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t ToWord(uint8_t bh, uint8_t bl)
|
|
||||||
{
|
|
||||||
uint16_t wRet = 0;
|
|
||||||
wRet = (uint16_t)bl | ((uint16_t)bh << 8);
|
|
||||||
return(wRet);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : ByteSwap
|
|
||||||
* Description : Swap two byte in a word.
|
|
||||||
* Input : wSwW: word to Swap.
|
|
||||||
* Output : None.
|
|
||||||
* Return : resulted word.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t ByteSwap(uint16_t wSwW)
|
|
||||||
{
|
|
||||||
uint8_t bTemp = 0;
|
|
||||||
uint16_t wRet = 0;
|
|
||||||
|
|
||||||
bTemp = (uint8_t)(wSwW & 0xff);
|
|
||||||
wRet = (wSwW >> 8) | ((uint16_t)bTemp << 8);
|
|
||||||
return(wRet);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,874 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : otgd_fs_int.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Endpoint interrupt's service routines.
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#ifdef STM32F10X_CL
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "stm32f10x.h"
|
|
||||||
#include "usb_type.h"
|
|
||||||
#include "otgd_fs_int.h"
|
|
||||||
#include "usb_lib.h"
|
|
||||||
#include "usb_istr.h"
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
/* Max size of the received OUT Non periodic packet */
|
|
||||||
#define MAX_OUT_PKT_SIZE 160
|
|
||||||
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
uint8_t USBD_Data_Buffer [MAX_OUT_PKT_SIZE];
|
|
||||||
__IO uint8_t IsocBuff [(ISOC_BUFFER_SZE * NUM_SUB_BUFFERS)];
|
|
||||||
__IO uint32_t IsocBufferIdx = 0;
|
|
||||||
|
|
||||||
extern USB_OTG_CORE_REGS core_regs;
|
|
||||||
|
|
||||||
__IO uint16_t SaveRState;
|
|
||||||
__IO uint16_t SaveTState;
|
|
||||||
|
|
||||||
/* Extern variables ----------------------------------------------------------*/
|
|
||||||
extern void (*pEpInt_IN[7])(void); /* Handles IN interrupts */
|
|
||||||
extern void (*pEpInt_OUT[7])(void); /* Handles OUT interrupts */
|
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
static uint32_t OTGD_FS_PCD_ReadDevInEP( USB_OTG_EP *ep);
|
|
||||||
static enum usb_device_speed OTGD_FS_PCD_GetDeviceSpeed(void);
|
|
||||||
static uint32_t OTGD_FS_PCD_WriteEmptyTxFifo(uint32_t epnum);
|
|
||||||
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_ModeMismatch_ISR
|
|
||||||
* Description : Handles the Mode Mismatch error interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_ModeMismatch_ISR(void)
|
|
||||||
{
|
|
||||||
USB_OTG_int_sts_data gintsts;
|
|
||||||
gintsts.d32 = 0 ;
|
|
||||||
|
|
||||||
INTR_MODEMISMATCH_Callback();
|
|
||||||
|
|
||||||
/* Clear interrupt */
|
|
||||||
gintsts.b.modemismatch = 1;
|
|
||||||
WRITE_REG32(&core_regs.common_regs->int_sts, gintsts.d32);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_Sof_ISR
|
|
||||||
* Description : Handles the Start Of Frame detected interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_Sof_ISR(void)
|
|
||||||
{
|
|
||||||
USB_OTG_int_sts_data int_sts ;
|
|
||||||
int_sts.d32 = 0;
|
|
||||||
|
|
||||||
/* Call user function */
|
|
||||||
INTR_SOFINTR_Callback();
|
|
||||||
|
|
||||||
/* Clear interrupt */
|
|
||||||
int_sts.b.sofintr = 1;
|
|
||||||
WRITE_REG32 (&core_regs.common_regs->int_sts, int_sts.d32);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_RxStatusQueueLevel_ISR
|
|
||||||
* Description : Handles the Rx Status Queue Level Interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_RxStatusQueueLevel_ISR(void)
|
|
||||||
{
|
|
||||||
USB_OTG_int_msk_data int_mask;
|
|
||||||
USB_OTG_dev_rx_sts_data status;
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
int_mask.d32 = 0;
|
|
||||||
status.d32 = 0;
|
|
||||||
|
|
||||||
/* Disable the Rx Status Queue Level interrupt */
|
|
||||||
int_mask.b.rxstsqlvl = 1;
|
|
||||||
MODIFY_REG32( &core_regs.common_regs->int_msk, int_mask.d32, 0);
|
|
||||||
|
|
||||||
/* Get the Status from the top of the FIFO */
|
|
||||||
status.d32 = READ_REG32( &core_regs.common_regs->rx_stsp );
|
|
||||||
|
|
||||||
/* Get the related endpoint structure */
|
|
||||||
ep = OTGD_FS_PCD_GetOutEP(status.b.epnum);
|
|
||||||
|
|
||||||
switch (status.b.pktsts)
|
|
||||||
{
|
|
||||||
case STS_GOUT_NAK:
|
|
||||||
break;
|
|
||||||
case STS_DATA_UPDT:
|
|
||||||
if (status.b.bcnt)
|
|
||||||
{
|
|
||||||
if (ep->type == EP_TYPE_ISOC)
|
|
||||||
{
|
|
||||||
/* Call user function */
|
|
||||||
INTR_RXSTSQLVL_ISODU_Callback();
|
|
||||||
|
|
||||||
/* Copy the received buffer to the RAM */
|
|
||||||
OTGD_FS_ReadPacket((uint8_t*)(IsocBuff + (ISOC_BUFFER_SZE * IsocBufferIdx)), status.b.bcnt);
|
|
||||||
ep->xfer_buff = (uint8_t*)(IsocBuff + (ISOC_BUFFER_SZE * IsocBufferIdx));
|
|
||||||
|
|
||||||
/* Check if the end of the global buffer has been reached */
|
|
||||||
if (IsocBufferIdx == (NUM_SUB_BUFFERS - 1))
|
|
||||||
{
|
|
||||||
/* Reset the buffer index */
|
|
||||||
IsocBufferIdx = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Increment the buffer index */
|
|
||||||
IsocBufferIdx ++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Copy the received buffer to the RAM */
|
|
||||||
OTGD_FS_ReadPacket(USBD_Data_Buffer, status.b.bcnt);
|
|
||||||
ep->xfer_buff = USBD_Data_Buffer;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Update the endpoint structure */
|
|
||||||
ep->xfer_len = status.b.bcnt;
|
|
||||||
ep->xfer_count += status.b.bcnt;
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
case STS_XFER_COMP:
|
|
||||||
break;
|
|
||||||
case STS_SETUP_COMP:
|
|
||||||
break;
|
|
||||||
case STS_SETUP_UPDT:
|
|
||||||
/* Copy the setup packet received in Fifo into the setup buffer in RAM */
|
|
||||||
OTGD_FS_ReadPacket(USBD_Data_Buffer, 8);
|
|
||||||
ep->xfer_buff = USBD_Data_Buffer;
|
|
||||||
ep->xfer_count += status.b.bcnt;
|
|
||||||
ep->xfer_len = status.b.bcnt;
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Call the user function */
|
|
||||||
INTR_RXSTSQLVL_Callback();
|
|
||||||
|
|
||||||
/* Enable the Rx Status Queue Level interrupt */
|
|
||||||
MODIFY_REG32( &core_regs.common_regs->int_msk, 0, int_mask.d32);
|
|
||||||
|
|
||||||
/* Clear interrupt: this is a read only bit, it cannot be cleared by register
|
|
||||||
access */
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_NPTxFE_ISR
|
|
||||||
* Description : Handles the Non Periodic Tx FIFO Empty interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_NPTxFE_ISR(void )
|
|
||||||
{
|
|
||||||
USB_OTG_int_msk_data gintmsk;
|
|
||||||
gintmsk.d32 = 0;
|
|
||||||
|
|
||||||
/* Call the user function */
|
|
||||||
INTR_NPTXFEMPTY_Callback();
|
|
||||||
|
|
||||||
gintmsk.b.nptxfempty = 1;
|
|
||||||
MODIFY_REG32(&core_regs.common_regs->int_msk, gintmsk.d32, 0 );
|
|
||||||
|
|
||||||
/* Clear interrupt: This bit is a read only bit, cannot be cleared
|
|
||||||
by register access */
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_GInNakEff_ISR
|
|
||||||
* Description : Handles the Global IN Endpoints NAK Effective interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_GInNakEff_ISR(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* Call user function */
|
|
||||||
INTR_GINNAKEFF_Callback();
|
|
||||||
|
|
||||||
/* Clear interrupt: This is a read only bit, it cannot be cleared by register
|
|
||||||
access */
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_GOutNakEff_ISR
|
|
||||||
* Description : Handles the Global OUT Endpoints NAK Effective interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_GOutNakEff_ISR(void)
|
|
||||||
{
|
|
||||||
/* Call user function */
|
|
||||||
INTR_GOUTNAKEFF_Callback();
|
|
||||||
|
|
||||||
/* Clear interrupt: This is a read only bit, it cannot be cleared by register
|
|
||||||
access */
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_EarlySuspend_ISR
|
|
||||||
* Description : Handles the Early Suspend detected interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_EarlySuspend_ISR(void )
|
|
||||||
{
|
|
||||||
USB_OTG_int_sts_data gintsts;
|
|
||||||
USB_OTG_int_msk_data gintmsk;
|
|
||||||
|
|
||||||
gintsts.d32 = 0;
|
|
||||||
gintmsk.d32 = 0;
|
|
||||||
|
|
||||||
|
|
||||||
/* Call user function */
|
|
||||||
INTR_ERLYSUSPEND_Callback();
|
|
||||||
|
|
||||||
gintmsk.b.erlysuspend = 1;
|
|
||||||
MODIFY_REG32(&core_regs.common_regs->int_msk, gintmsk.d32, 0 );
|
|
||||||
|
|
||||||
/* Clear interrupt */
|
|
||||||
gintsts.b.erlysuspend = 1;
|
|
||||||
WRITE_REG32(&core_regs.common_regs->int_sts, gintsts.d32);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_USBSuspend_ISR
|
|
||||||
* Description : Handles the Suspend condition detected interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_USBSuspend_ISR(void)
|
|
||||||
{
|
|
||||||
USB_OTG_int_sts_data gintsts;
|
|
||||||
|
|
||||||
gintsts.d32 = 0;
|
|
||||||
/* Call user function */
|
|
||||||
INTR_USBSUSPEND_Callback();
|
|
||||||
|
|
||||||
/* Clear interrupt */
|
|
||||||
gintsts.b.usbsuspend = 1;
|
|
||||||
WRITE_REG32(&core_regs.common_regs->int_sts, gintsts.d32);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_UsbReset_ISR
|
|
||||||
* Description : This interrupt occurs when a USB Reset is detected.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_UsbReset_ISR(void)
|
|
||||||
{
|
|
||||||
USB_OTG_dev_all_int_data daintmsk;
|
|
||||||
USB_OTG_dev_out_ep_msk_data doepmsk;
|
|
||||||
USB_OTG_dev_in_ep_msk_data diepmsk;
|
|
||||||
USB_OTG_dev_cfg_data dcfg;
|
|
||||||
USB_OTG_dev_ctl_data dctl;
|
|
||||||
USB_OTG_int_sts_data gintsts;
|
|
||||||
|
|
||||||
daintmsk.d32 = 0;
|
|
||||||
doepmsk.d32 = 0;
|
|
||||||
diepmsk.d32 = 0;
|
|
||||||
dcfg.d32 =0;
|
|
||||||
dctl.d32 = 0;
|
|
||||||
gintsts.d32 = 0;
|
|
||||||
|
|
||||||
/* Clear the Remote Wakeup Signalling */
|
|
||||||
dctl.b.rmtwkupsig = 1;
|
|
||||||
MODIFY_REG32(&core_regs.dev_regs->dev_ctl, dctl.d32, 0 );
|
|
||||||
|
|
||||||
/* Flush the NP Tx FIFO */
|
|
||||||
OTGD_FS_FlushTxFifo( 0 );
|
|
||||||
|
|
||||||
daintmsk.b.inep0 = 1;
|
|
||||||
daintmsk.b.outep0 = 1;
|
|
||||||
WRITE_REG32( &core_regs.dev_regs->dev_all_int_msk, daintmsk.d32 );
|
|
||||||
|
|
||||||
doepmsk.b.setup = 1;
|
|
||||||
doepmsk.b.xfercompl = 1;
|
|
||||||
doepmsk.b.ahberr = 1;
|
|
||||||
doepmsk.b.epdisabled = 1;
|
|
||||||
WRITE_REG32( &core_regs.dev_regs->dev_out_ep_msk, doepmsk.d32 );
|
|
||||||
|
|
||||||
diepmsk.b.xfercompl = 1;
|
|
||||||
diepmsk.b.timeout = 1;
|
|
||||||
diepmsk.b.epdisabled = 1;
|
|
||||||
diepmsk.b.ahberr = 1;
|
|
||||||
diepmsk.b.intknepmis = 1;
|
|
||||||
WRITE_REG32( &core_regs.dev_regs->dev_in_ep_msk, diepmsk.d32 );
|
|
||||||
|
|
||||||
/* Reset Device Address */
|
|
||||||
dcfg.d32 = READ_REG32( &core_regs.dev_regs->dev_cfg);
|
|
||||||
dcfg.b.devaddr = 0;
|
|
||||||
WRITE_REG32( &core_regs.dev_regs->dev_cfg, dcfg.d32);
|
|
||||||
|
|
||||||
/* setup EP0 to receive SETUP packets */
|
|
||||||
OTGD_FS_PCD_EP0_OutStart();
|
|
||||||
|
|
||||||
/* Clear interrupt */
|
|
||||||
gintsts.d32 = 0;
|
|
||||||
gintsts.b.usbreset = 1;
|
|
||||||
WRITE_REG32 (&core_regs.common_regs->int_sts, gintsts.d32);
|
|
||||||
|
|
||||||
/* Call the user reset function */
|
|
||||||
OTGD_FS_DEVICE_RESET;
|
|
||||||
|
|
||||||
/* Call user function */
|
|
||||||
INTR_USBRESET_Callback();
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_EnumDone_ISR
|
|
||||||
* Description : Reads the device status register and set the device speed
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_EnumDone_ISR(void)
|
|
||||||
{
|
|
||||||
USB_OTG_int_sts_data gintsts;
|
|
||||||
USB_OTG_usb_cfg_data gusbcfg;
|
|
||||||
|
|
||||||
gintsts.d32 = 0;
|
|
||||||
gusbcfg.d32 = 0;
|
|
||||||
|
|
||||||
OTGD_FS_EP0Activate();
|
|
||||||
|
|
||||||
/* Set USB turnaround time based on device speed and PHY interface. */
|
|
||||||
gusbcfg.d32 = READ_REG32(&core_regs.common_regs->usb_cfg);
|
|
||||||
|
|
||||||
/* Full or low speed */
|
|
||||||
if ( OTGD_FS_PCD_GetDeviceSpeed() == USB_SPEED_FULL)
|
|
||||||
{
|
|
||||||
gusbcfg.b.usbtrdtim = 9;
|
|
||||||
}
|
|
||||||
WRITE_REG32(&core_regs.common_regs->usb_cfg, gusbcfg.d32);
|
|
||||||
|
|
||||||
/* Call user function */
|
|
||||||
INTR_ENUMDONE_Callback();
|
|
||||||
|
|
||||||
/* Clear interrupt */
|
|
||||||
gintsts.b.enumdone = 1;
|
|
||||||
WRITE_REG32( &core_regs.common_regs->int_sts, gintsts.d32 );
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_IsoOutDrop_ISR
|
|
||||||
* Description : Handles the Isochrounous Out packet Dropped interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_IsoOutDrop_ISR(void)
|
|
||||||
{
|
|
||||||
USB_OTG_int_sts_data gintsts;
|
|
||||||
|
|
||||||
gintsts.d32 = 0;
|
|
||||||
/* Call user function */
|
|
||||||
INTR_ISOOUTDROP_Callback();
|
|
||||||
|
|
||||||
/* Clear interrupt */
|
|
||||||
gintsts.b.isooutdrop = 1;
|
|
||||||
WRITE_REG32(&core_regs.common_regs->int_sts, gintsts.d32);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_EOPF_ISR
|
|
||||||
* Description : Handles the Expexted End Of Periodic Frame interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_EOPF_ISR(void )
|
|
||||||
{
|
|
||||||
USB_OTG_int_sts_data gintsts;
|
|
||||||
USB_OTG_int_msk_data gintmsk;
|
|
||||||
|
|
||||||
gintsts.d32 = 0;
|
|
||||||
gintmsk.d32 = 0;
|
|
||||||
|
|
||||||
gintmsk.b.eopframe = 1;
|
|
||||||
MODIFY_REG32(&core_regs.common_regs->int_msk, gintmsk.d32, 0 );
|
|
||||||
|
|
||||||
/* Call user function */
|
|
||||||
INTR_EOPFRAME_Callback();
|
|
||||||
|
|
||||||
/* Clear interrupt */
|
|
||||||
gintsts.b.eopframe = 1;
|
|
||||||
WRITE_REG32(&core_regs.common_regs->int_sts, gintsts.d32);
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_EPMismatch_ISR
|
|
||||||
* Description : Handles the Endpoint Mismatch error interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_EPMismatch_ISR(void)
|
|
||||||
{
|
|
||||||
USB_OTG_int_sts_data gintsts;
|
|
||||||
|
|
||||||
gintsts.d32 = 0;
|
|
||||||
|
|
||||||
/* Call user function */
|
|
||||||
INTR_EPMISMATCH_Callback();
|
|
||||||
|
|
||||||
/* Clear interrupt */
|
|
||||||
gintsts.b.epmismatch = 1;
|
|
||||||
WRITE_REG32(&core_regs.common_regs->int_sts, gintsts.d32);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_InEP_ISR
|
|
||||||
* Description : Handles all IN endpoints interrupts.
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_InEP_ISR(void)
|
|
||||||
{
|
|
||||||
USB_OTG_dev_in_ep_int_data diepint;
|
|
||||||
|
|
||||||
uint32_t ep_intr = 0;
|
|
||||||
uint32_t epnum = 0;
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
uint32_t fifoemptymsk = 0;
|
|
||||||
|
|
||||||
diepint.d32 = 0;
|
|
||||||
ep_intr = OTGD_FS_ReadDevAllInEPItr();
|
|
||||||
while ( ep_intr )
|
|
||||||
{
|
|
||||||
if (ep_intr&0x1) /* In ITR */
|
|
||||||
{
|
|
||||||
ep = OTGD_FS_PCD_GetInEP(epnum);
|
|
||||||
diepint.d32 = OTGD_FS_PCD_ReadDevInEP(ep); /* Get In ITR status */
|
|
||||||
if ( diepint.b.xfercompl )
|
|
||||||
{
|
|
||||||
fifoemptymsk = 0x1 << ep->num;
|
|
||||||
MODIFY_REG32(&core_regs.dev_regs->dev_fifo_empty_msk, fifoemptymsk, 0);
|
|
||||||
|
|
||||||
/* Clear the Interrupt flag */
|
|
||||||
CLEAR_IN_EP_INTR(epnum, xfercompl);
|
|
||||||
|
|
||||||
if (epnum == 0)
|
|
||||||
{
|
|
||||||
/* Call the core IN process for EP0 */
|
|
||||||
In0_Process();
|
|
||||||
|
|
||||||
/* before terminate set Tx & Rx status */
|
|
||||||
OTG_DEV_SetEPRxStatus(epnum, SaveRState);
|
|
||||||
OTG_DEV_SetEPTxStatus(epnum, SaveTState);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
OTG_DEV_SetEPTxStatus((epnum | 0x80 ), DEV_EP_TX_NAK);
|
|
||||||
|
|
||||||
(*pEpInt_IN[epnum -1])();
|
|
||||||
|
|
||||||
/* Toggle Endpoint frame ID */
|
|
||||||
if (ep->even_odd_frame == 0)
|
|
||||||
ep->even_odd_frame = 1;
|
|
||||||
else
|
|
||||||
ep->even_odd_frame = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
if ( diepint.b.ahberr )
|
|
||||||
{
|
|
||||||
CLEAR_IN_EP_INTR(epnum, ahberr);
|
|
||||||
}
|
|
||||||
if ( diepint.b.timeout )
|
|
||||||
{
|
|
||||||
CLEAR_IN_EP_INTR(epnum, timeout);
|
|
||||||
}
|
|
||||||
if (diepint.b.intktxfemp)
|
|
||||||
{
|
|
||||||
CLEAR_IN_EP_INTR(epnum, intktxfemp);
|
|
||||||
}
|
|
||||||
if (diepint.b.intknepmis)
|
|
||||||
{
|
|
||||||
CLEAR_IN_EP_INTR(epnum, intknepmis);
|
|
||||||
}
|
|
||||||
if (diepint.b.inepnakeff)
|
|
||||||
{
|
|
||||||
CLEAR_IN_EP_INTR(epnum, inepnakeff);
|
|
||||||
}
|
|
||||||
if (diepint.b.emptyintr)
|
|
||||||
{
|
|
||||||
if ((epnum == 0) || (OTG_DEV_GetEPTxStatus(epnum) == DEV_EP_TX_VALID))
|
|
||||||
{
|
|
||||||
OTGD_FS_PCD_WriteEmptyTxFifo(epnum);
|
|
||||||
}
|
|
||||||
|
|
||||||
CLEAR_IN_EP_INTR(epnum, emptyintr);
|
|
||||||
}
|
|
||||||
if ( diepint.b.epdisabled )
|
|
||||||
{
|
|
||||||
/* Reset Endpoint Frame ID to 0 */
|
|
||||||
ep->even_odd_frame = 0;
|
|
||||||
|
|
||||||
CLEAR_IN_EP_INTR(epnum, epdisabled);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
epnum++;
|
|
||||||
ep_intr >>= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Call user function */
|
|
||||||
INTR_INEPINTR_Callback();
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_OutEP_ISR
|
|
||||||
* Description : Handles all OUT endpoints interrupts.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : Status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_OutEP_ISR(void)
|
|
||||||
{
|
|
||||||
uint32_t ep_intr = 0;
|
|
||||||
USB_OTG_dev_out_ep_int_data doepint;
|
|
||||||
uint32_t epnum = 0;
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
doepint.d32 = 0;
|
|
||||||
|
|
||||||
/* Read in the device interrupt bits */
|
|
||||||
ep_intr = OTGD_FS_ReadDevAllOutEp_itr();
|
|
||||||
|
|
||||||
while ( ep_intr )
|
|
||||||
{
|
|
||||||
if (ep_intr&0x1)
|
|
||||||
{
|
|
||||||
/* Get EP pointer */
|
|
||||||
ep = OTGD_FS_PCD_GetOutEP(epnum);
|
|
||||||
doepint.d32 = OTGD_FS_ReadDevOutEP_itr(ep);
|
|
||||||
|
|
||||||
/* Transfer complete */
|
|
||||||
if ( doepint.b.xfercompl )
|
|
||||||
{
|
|
||||||
/* Clear the bit in DOEPINTn for this interrupt */
|
|
||||||
CLEAR_OUT_EP_INTR(epnum, xfercompl);
|
|
||||||
|
|
||||||
if (epnum == 0)
|
|
||||||
{
|
|
||||||
/* Call the OUT process for the EP0 */
|
|
||||||
Out0_Process();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
(*pEpInt_OUT[epnum-1])();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/* Endpoint disable */
|
|
||||||
if ( doepint.b.epdisabled )
|
|
||||||
{
|
|
||||||
/* Clear the bit in DOEPINTn for this interrupt */
|
|
||||||
CLEAR_OUT_EP_INTR(epnum, epdisabled);
|
|
||||||
}
|
|
||||||
/* AHB Error */
|
|
||||||
if ( doepint.b.ahberr )
|
|
||||||
{
|
|
||||||
CLEAR_OUT_EP_INTR(epnum, ahberr);
|
|
||||||
}
|
|
||||||
/* Setup Phase Done (control EPs) */
|
|
||||||
if ( doepint.b.setup )
|
|
||||||
{
|
|
||||||
if (epnum == 0)
|
|
||||||
{
|
|
||||||
/* Call the SETUP process for the EP0 */
|
|
||||||
Setup0_Process();
|
|
||||||
|
|
||||||
/* Before exit, update the Tx status */
|
|
||||||
OTG_DEV_SetEPTxStatus(0x80, SaveTState);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Other control endpoints */
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Clear the EP Interrupt */
|
|
||||||
CLEAR_OUT_EP_INTR(epnum, setup);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
epnum++;
|
|
||||||
ep_intr >>= 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Call user function */
|
|
||||||
INTR_OUTEPINTR_Callback();
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_IncomplIsoIn_ISR
|
|
||||||
* Description : Handles the Incomplete Isochrous IN tranfer error interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_IncomplIsoIn_ISR(void)
|
|
||||||
{
|
|
||||||
USB_OTG_int_sts_data gintsts;
|
|
||||||
|
|
||||||
gintsts.d32 = 0;
|
|
||||||
|
|
||||||
/* Call user function */
|
|
||||||
INTR_INCOMPLISOIN_Callback();
|
|
||||||
|
|
||||||
/* Clear interrupt */
|
|
||||||
gintsts.b.incomplisoin = 1;
|
|
||||||
WRITE_REG32(&core_regs.common_regs->int_sts, gintsts.d32);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_IncomplIsoOut_ISR
|
|
||||||
* Description : Handles the Incomplete Isochrous OUT tranfer error interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_IncomplIsoOut_ISR(void)
|
|
||||||
{
|
|
||||||
USB_OTG_int_sts_data gintsts;
|
|
||||||
|
|
||||||
gintsts.d32 = 0;
|
|
||||||
|
|
||||||
/* Call user function */
|
|
||||||
INTR_INCOMPLISOOUT_Callback();
|
|
||||||
|
|
||||||
/* Clear interrupt */
|
|
||||||
gintsts.b.outepintr = 1;
|
|
||||||
WRITE_REG32(&core_regs.common_regs->int_sts, gintsts.d32);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_Handle_Wakeup_ISR
|
|
||||||
* Description : Handles the Wakeup or Remote Wakeup detected interrupt.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_Handle_Wakeup_ISR(void)
|
|
||||||
{
|
|
||||||
USB_OTG_int_sts_data gintsts;
|
|
||||||
|
|
||||||
gintsts.d32 = 0;
|
|
||||||
/* Call user function */
|
|
||||||
INTR_WKUPINTR_Callback();
|
|
||||||
|
|
||||||
/* Clear interrupt */
|
|
||||||
gintsts.b.wkupintr = 1;
|
|
||||||
WRITE_REG32 (&core_regs.common_regs->int_sts, gintsts.d32);
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_GetDeviceSpeed
|
|
||||||
* Description : Get the device speed from the device status register
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : The Device speed value.
|
|
||||||
*******************************************************************************/
|
|
||||||
static enum usb_device_speed OTGD_FS_PCD_GetDeviceSpeed(void)
|
|
||||||
{
|
|
||||||
USB_OTG_dev_sts_data dsts;
|
|
||||||
enum usb_device_speed speed = USB_SPEED_UNKNOWN;
|
|
||||||
|
|
||||||
dsts.d32 = 0;
|
|
||||||
|
|
||||||
dsts.d32 = READ_REG32(&core_regs.dev_regs->dev_sts);
|
|
||||||
|
|
||||||
switch (dsts.b.enumspd)
|
|
||||||
{
|
|
||||||
case DSTS_ENUMSPD_HS_PHY_30MHZ_OR_60MHZ:
|
|
||||||
speed = USB_SPEED_HIGH;
|
|
||||||
break;
|
|
||||||
case DSTS_ENUMSPD_FS_PHY_30MHZ_OR_60MHZ:
|
|
||||||
case DSTS_ENUMSPD_FS_PHY_48MHZ:
|
|
||||||
speed = USB_SPEED_FULL;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case DSTS_ENUMSPD_LS_PHY_6MHZ:
|
|
||||||
speed = USB_SPEED_LOW;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
|
|
||||||
return speed;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_ReadDevInEP
|
|
||||||
* Description : Reads all the Endpoints flags.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : Status
|
|
||||||
*******************************************************************************/
|
|
||||||
static uint32_t OTGD_FS_PCD_ReadDevInEP( USB_OTG_EP *ep)
|
|
||||||
{
|
|
||||||
uint32_t v = 0, msk = 0, emp=0;
|
|
||||||
|
|
||||||
msk = READ_REG32(&core_regs.dev_regs->dev_in_ep_msk);
|
|
||||||
emp = READ_REG32(&core_regs.dev_regs->dev_fifo_empty_msk);
|
|
||||||
msk |= ((emp >> ep->num) & 0x1) << 7;
|
|
||||||
v = READ_REG32(&core_regs.inep_regs[ep->num]->dev_in_ep_int) & msk;
|
|
||||||
|
|
||||||
return v;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_WriteEmptyTxFifo
|
|
||||||
* Description : Checks Fifo for the next packet to be loaded.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : Status
|
|
||||||
*******************************************************************************/
|
|
||||||
static uint32_t OTGD_FS_PCD_WriteEmptyTxFifo(uint32_t epnum)
|
|
||||||
{
|
|
||||||
USB_OTG_dev_tx_fifo_sts_data txstatus;
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
uint32_t len = 0;
|
|
||||||
uint32_t dwords = 0;
|
|
||||||
USB_OTG_dev_ep_ctl_data depctl;
|
|
||||||
|
|
||||||
|
|
||||||
txstatus.d32 = 0;
|
|
||||||
depctl.d32 = 0;
|
|
||||||
|
|
||||||
ep = OTGD_FS_PCD_GetInEP(epnum);
|
|
||||||
|
|
||||||
len = ep->xfer_len - ep->xfer_count;
|
|
||||||
|
|
||||||
if (len > ep->maxpacket)
|
|
||||||
{
|
|
||||||
len = ep->maxpacket;
|
|
||||||
}
|
|
||||||
|
|
||||||
dwords = (len + 3) / 4;
|
|
||||||
txstatus.d32 = READ_REG32( &core_regs.inep_regs[epnum]->dev_tx_fifo_sts);
|
|
||||||
|
|
||||||
/* Manage the case of 0-length data packets toggling data PID */
|
|
||||||
if ((ep->xfer_len == 0) && (ep->xfer_count == 0))
|
|
||||||
{
|
|
||||||
if (ep->num > 0)
|
|
||||||
{
|
|
||||||
depctl.d32 = READ_REG32( &core_regs.inep_regs[epnum]->dev_in_ep_ctl);
|
|
||||||
if (ep->even_odd_frame == 1)
|
|
||||||
{
|
|
||||||
depctl.b.setd0pid = 0;
|
|
||||||
depctl.b.setd1pid = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
depctl.b.setd0pid = 1;
|
|
||||||
depctl.b.setd1pid = 0;
|
|
||||||
}
|
|
||||||
WRITE_REG32( &core_regs.inep_regs[epnum]->dev_in_ep_ctl, depctl.d32);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
while ((txstatus.b.txfspcavail > dwords) &&
|
|
||||||
(ep->xfer_count < ep->xfer_len) &&
|
|
||||||
(ep->xfer_len) != 0)
|
|
||||||
{
|
|
||||||
if (ep->num > 0)
|
|
||||||
{
|
|
||||||
depctl.d32 = READ_REG32( &core_regs.inep_regs[epnum]->dev_in_ep_ctl);
|
|
||||||
if (ep->even_odd_frame == 0)
|
|
||||||
{
|
|
||||||
depctl.b.setd0pid = 1;
|
|
||||||
depctl.b.setd1pid = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
depctl.b.setd0pid = 0;
|
|
||||||
depctl.b.setd1pid = 1;
|
|
||||||
}
|
|
||||||
WRITE_REG32( &core_regs.inep_regs[epnum]->dev_in_ep_ctl, depctl.d32);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Write the FIFO */
|
|
||||||
len = ep->xfer_len - ep->xfer_count;
|
|
||||||
|
|
||||||
if (len > ep->maxpacket)
|
|
||||||
{
|
|
||||||
len = ep->maxpacket;
|
|
||||||
}
|
|
||||||
dwords = (len + 3) / 4;
|
|
||||||
|
|
||||||
OTGD_FS_WritePacket(ep->xfer_buff, epnum, len);
|
|
||||||
|
|
||||||
ep->xfer_count += len;
|
|
||||||
ep->xfer_buff += len;
|
|
||||||
|
|
||||||
txstatus.d32 = READ_REG32(&core_regs.inep_regs[epnum]->dev_tx_fifo_sts);
|
|
||||||
}
|
|
||||||
|
|
||||||
return 1;
|
|
||||||
}
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,454 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : otgd_fs_pcd.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Peripheral Device Interface low layer.
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT SOFTWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH SOFTWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#ifdef STM32F10X_CL
|
|
||||||
|
|
||||||
#include "usb_lib.h"
|
|
||||||
#include "otgd_fs_cal.h"
|
|
||||||
#include "otgd_fs_pcd.h"
|
|
||||||
|
|
||||||
USB_OTG_PCD_DEV USB_OTG_PCD_dev;
|
|
||||||
|
|
||||||
extern USB_OTG_CORE_REGS core_regs;
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_Init
|
|
||||||
* Description : Initialize the USB Device portion of the driver.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : None
|
|
||||||
*******************************************************************************/
|
|
||||||
void OTGD_FS_PCD_Init(void)
|
|
||||||
{
|
|
||||||
uint32_t i = 0;
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
ep = &USB_OTG_PCD_dev.ep0;
|
|
||||||
USB_OTG_PCD_dev.ep0state = 0;
|
|
||||||
|
|
||||||
/* Init ep structure */
|
|
||||||
ep->num = 0;
|
|
||||||
ep->tx_fifo_num = 0;
|
|
||||||
|
|
||||||
/* Control until ep is actvated */
|
|
||||||
ep->type = EP_TYPE_CTRL;
|
|
||||||
ep->maxpacket = MAX_PACKET_SIZE;
|
|
||||||
|
|
||||||
ep->xfer_buff = 0;
|
|
||||||
ep->xfer_len = 0;
|
|
||||||
|
|
||||||
for (i = 1; i < MAX_TX_FIFOS ; i++)
|
|
||||||
{
|
|
||||||
ep = &USB_OTG_PCD_dev.in_ep[i-1];
|
|
||||||
|
|
||||||
/* Init ep structure */
|
|
||||||
ep->is_in = 1;
|
|
||||||
ep->num = i;
|
|
||||||
ep->tx_fifo_num = i;
|
|
||||||
|
|
||||||
/* Control until ep is actvated */
|
|
||||||
ep->type = EP_TYPE_CTRL;
|
|
||||||
ep->maxpacket = MAX_PACKET_SIZE;
|
|
||||||
ep->xfer_buff = 0;
|
|
||||||
ep->xfer_len = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
for (i = 1; i < MAX_TX_FIFOS; i++)
|
|
||||||
{
|
|
||||||
ep = &USB_OTG_PCD_dev.out_ep[i-1];
|
|
||||||
|
|
||||||
/* Init ep structure */
|
|
||||||
ep->is_in = 0;
|
|
||||||
ep->num = i;
|
|
||||||
ep->tx_fifo_num = i;
|
|
||||||
|
|
||||||
/* Control until ep is activated */
|
|
||||||
ep->type = EP_TYPE_CTRL;
|
|
||||||
ep->maxpacket = MAX_PACKET_SIZE;
|
|
||||||
ep->xfer_buff = 0;
|
|
||||||
ep->xfer_len = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
USB_OTG_PCD_dev.ep0.maxpacket = MAX_EP0_SIZE;
|
|
||||||
USB_OTG_PCD_dev.ep0.type = EP_TYPE_CTRL;
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_EP_Open
|
|
||||||
* Description : Configure an Endpoint
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_PCD_EP_Open(EP_DESCRIPTOR *epdesc)
|
|
||||||
{
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
|
|
||||||
if ((0x80 & epdesc->bEndpointAddress) != 0)
|
|
||||||
{
|
|
||||||
ep = OTGD_FS_PCD_GetInEP(epdesc->bEndpointAddress & 0x7F);
|
|
||||||
ep->is_in = 1;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ep = OTGD_FS_PCD_GetOutEP(epdesc->bEndpointAddress & 0x7F);
|
|
||||||
ep->is_in = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
ep->num = epdesc->bEndpointAddress & 0x7F;
|
|
||||||
ep->maxpacket = epdesc->wMaxPacketSize;
|
|
||||||
ep->type = epdesc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK;
|
|
||||||
|
|
||||||
if (ep->is_in)
|
|
||||||
{
|
|
||||||
/* Assign a Tx FIFO */
|
|
||||||
ep->tx_fifo_num = ep->num;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Set initial data PID. */
|
|
||||||
if ((epdesc->bmAttributes & USB_ENDPOINT_XFERTYPE_MASK) == USB_ENDPOINT_XFER_BULK )
|
|
||||||
{
|
|
||||||
ep->data_pid_start = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
OTGD_FS_EPActivate(ep );
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_EP_Close
|
|
||||||
* Description : Called when an EP is disabled
|
|
||||||
* Input : Endpoint address.
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_PCD_EP_Close(uint8_t ep_addr)
|
|
||||||
{
|
|
||||||
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
if ((0x80 & ep_addr) != 0)
|
|
||||||
{
|
|
||||||
ep = OTGD_FS_PCD_GetInEP(ep_addr & 0x7F);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ep = OTGD_FS_PCD_GetOutEP(ep_addr & 0x7F);
|
|
||||||
}
|
|
||||||
|
|
||||||
ep->num = ep_addr & 0x7F;
|
|
||||||
ep->is_in = (0x80 & ep_addr) != 0;
|
|
||||||
|
|
||||||
OTGD_FS_EPDeactivate(ep );
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_EP_Read
|
|
||||||
* Description : Read data from Fifo
|
|
||||||
* Input : Endpoint address.
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_PCD_EP_Read (uint8_t ep_addr, uint8_t *pbuf, uint32_t buf_len)
|
|
||||||
{
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
uint32_t i = 0;
|
|
||||||
|
|
||||||
ep = OTGD_FS_PCD_GetOutEP(ep_addr & 0x7F);
|
|
||||||
|
|
||||||
/* copy received data into application buffer */
|
|
||||||
for (i = 0 ; i < buf_len ; i++)
|
|
||||||
{
|
|
||||||
pbuf[i] = ep->xfer_buff[i];
|
|
||||||
}
|
|
||||||
|
|
||||||
/*setup and start the Xfer */
|
|
||||||
ep->xfer_buff = pbuf;
|
|
||||||
ep->xfer_len = buf_len;
|
|
||||||
ep->xfer_count = 0;
|
|
||||||
ep->is_in = 0;
|
|
||||||
ep->num = ep_addr & 0x7F;
|
|
||||||
|
|
||||||
if ( ep->num == 0 )
|
|
||||||
{
|
|
||||||
OTGD_FS_EP0StartXfer(ep);
|
|
||||||
}
|
|
||||||
else if (USB_OTG_PCD_dev.ep0state == 0)
|
|
||||||
{
|
|
||||||
OTGD_FS_EPStartXfer( ep );
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : USBF_EP_Write
|
|
||||||
* Description : Read data from Fifo
|
|
||||||
* Input : ep
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_PCD_EP_Write (uint8_t ep_addr, uint8_t *pbuf, uint32_t buf_len)
|
|
||||||
{
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
ep = OTGD_FS_PCD_GetInEP(ep_addr & 0x7f);
|
|
||||||
|
|
||||||
/* assign data to EP structure buffer */
|
|
||||||
ep->xfer_buff = pbuf;
|
|
||||||
|
|
||||||
/* Setup and start the Transfer */
|
|
||||||
ep->xfer_count = 0;
|
|
||||||
ep->xfer_len = buf_len;
|
|
||||||
ep->is_in = 1;
|
|
||||||
ep->num = ep_addr & 0x7F;
|
|
||||||
|
|
||||||
if ( ep->num == 0 )
|
|
||||||
{
|
|
||||||
OTGD_FS_EP0StartXfer(ep);
|
|
||||||
}
|
|
||||||
else if (USB_OTG_PCD_dev.ep0state == 0)
|
|
||||||
{
|
|
||||||
OTGD_FS_EPStartXfer( ep );
|
|
||||||
}
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_EP_Stall
|
|
||||||
* Description : Stall an endpoint.
|
|
||||||
* Input : Endpoint Address.
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_PCD_EP_Stall (uint8_t ep_addr)
|
|
||||||
{
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
if ((0x80 & ep_addr) != 0)
|
|
||||||
{
|
|
||||||
ep = OTGD_FS_PCD_GetInEP(ep_addr & 0x7F);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ep = OTGD_FS_PCD_GetOutEP(ep_addr & 0x7F);
|
|
||||||
}
|
|
||||||
|
|
||||||
ep->num = ep_addr & 0x7F;
|
|
||||||
ep->is_in = ((ep_addr & 0x80) == 0x80) ? 1 : 0;
|
|
||||||
|
|
||||||
OTGD_FS_EPSetStall(ep);
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_EP_ClrStall
|
|
||||||
* Description : Clear stall condition on endpoints.
|
|
||||||
* Input : Endpoint Address.
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_PCD_EP_ClrStall (uint8_t ep_addr)
|
|
||||||
{
|
|
||||||
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
if ((0x80 & ep_addr) != 0)
|
|
||||||
{
|
|
||||||
ep = OTGD_FS_PCD_GetInEP(ep_addr & 0x7F);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ep = OTGD_FS_PCD_GetOutEP(ep_addr & 0x7F);
|
|
||||||
}
|
|
||||||
|
|
||||||
ep->num = ep_addr & 0x7F;
|
|
||||||
ep->is_in = ((ep_addr & 0x80) == 0x80) ? 1 : 0;
|
|
||||||
|
|
||||||
OTGD_FS_EPClearStall(ep);
|
|
||||||
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : USBF_FCD_EP_Flush()
|
|
||||||
* Description : This Function flushes the buffer.
|
|
||||||
* Input : Endpoint Address.
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t OTGD_FS_PCD_EP_Flush (uint8_t ep_addr)
|
|
||||||
{
|
|
||||||
|
|
||||||
uint8_t is_out = 0;
|
|
||||||
uint8_t ep_nbr = 0;
|
|
||||||
|
|
||||||
ep_nbr = ep_addr & 0x7F;
|
|
||||||
is_out = ((ep_addr & 0x80) == 0x80) ? 0 : 1;
|
|
||||||
|
|
||||||
if (is_out == 0)
|
|
||||||
{
|
|
||||||
OTGD_FS_FlushTxFifo(ep_nbr);
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
OTGD_FS_FlushRxFifo();
|
|
||||||
}
|
|
||||||
OTGD_FS_PCD_EP_ClrStall(ep_addr);
|
|
||||||
return (0);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_EP_SetAddress
|
|
||||||
* Description : This Function set USB device address
|
|
||||||
* Input : The new device Address to be set.
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
void OTGD_FS_PCD_EP_SetAddress (uint8_t address)
|
|
||||||
{
|
|
||||||
|
|
||||||
USB_OTG_dev_cfg_data dcfg;
|
|
||||||
|
|
||||||
dcfg.d32 = 0;
|
|
||||||
|
|
||||||
dcfg.b.devaddr = address;
|
|
||||||
MODIFY_REG32( &core_regs.dev_regs->dev_cfg, 0, dcfg.d32);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_GetInEP
|
|
||||||
* Description : This function returns pointer to IN EP struct with number ep_num
|
|
||||||
* Input : Endpoint Number.
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
USB_OTG_EP* OTGD_FS_PCD_GetInEP(uint32_t ep_num)
|
|
||||||
{
|
|
||||||
uint32_t i = 0;
|
|
||||||
|
|
||||||
if (ep_num == 0)
|
|
||||||
{
|
|
||||||
return &USB_OTG_PCD_dev.ep0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (i = 0; i < MAX_TX_FIFOS; ++i)
|
|
||||||
{
|
|
||||||
if (USB_OTG_PCD_dev.in_ep[i].num == ep_num)
|
|
||||||
return &USB_OTG_PCD_dev.in_ep[i];
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : USBF_GetOutEP
|
|
||||||
* Description : returns pointer to OUT EP struct with number ep_num
|
|
||||||
* Input : Endpoint Number.
|
|
||||||
* Output : None
|
|
||||||
* Return : USBF_EP
|
|
||||||
*******************************************************************************/
|
|
||||||
USB_OTG_EP* OTGD_FS_PCD_GetOutEP(uint32_t ep_num)
|
|
||||||
{
|
|
||||||
uint32_t i = 0;
|
|
||||||
|
|
||||||
if (ep_num == 0)
|
|
||||||
{
|
|
||||||
return &USB_OTG_PCD_dev.ep0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
for (i = 0; i < MAX_TX_FIFOS; ++i)
|
|
||||||
{
|
|
||||||
if (USB_OTG_PCD_dev.out_ep[i].num == ep_num)
|
|
||||||
return &USB_OTG_PCD_dev.out_ep[i];
|
|
||||||
}
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_DevConnect
|
|
||||||
* Description : Connect device
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
void OTGD_FS_PCD_DevConnect(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
USB_OTG_dev_ctl_data dctl;
|
|
||||||
|
|
||||||
dctl.d32 = 0;
|
|
||||||
|
|
||||||
dctl.d32 = READ_REG32(&core_regs.dev_regs->dev_ctl);
|
|
||||||
|
|
||||||
/* Connect device */
|
|
||||||
dctl.b.sftdiscon = 0;
|
|
||||||
WRITE_REG32(&core_regs.dev_regs->dev_ctl, dctl.d32);
|
|
||||||
mDELAY(25);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_DevDisconnect
|
|
||||||
* Description : Disconnect device
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
void OTGD_FS_PCD_DevDisconnect (void)
|
|
||||||
{
|
|
||||||
|
|
||||||
USB_OTG_dev_ctl_data dctl;
|
|
||||||
|
|
||||||
dctl.d32 = 0;
|
|
||||||
|
|
||||||
dctl.d32 = READ_REG32(&core_regs.dev_regs->dev_ctl);
|
|
||||||
|
|
||||||
/* Disconnect device for 20ms */
|
|
||||||
dctl.b.sftdiscon = 1;
|
|
||||||
WRITE_REG32(&core_regs.dev_regs->dev_ctl, dctl.d32);
|
|
||||||
mDELAY(25);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : OTGD_FS_PCD_EP0_OutStart
|
|
||||||
* Description : Configures EPO to receive SETUP packets.
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : None
|
|
||||||
*******************************************************************************/
|
|
||||||
void OTGD_FS_PCD_EP0_OutStart(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
USB_OTG_dev_ep_txfer_size0_data doeptsize0;
|
|
||||||
doeptsize0.d32 = 0;
|
|
||||||
|
|
||||||
|
|
||||||
doeptsize0.b.supcnt = 3;
|
|
||||||
doeptsize0.b.pktcnt = 1;
|
|
||||||
doeptsize0.b.xfersize = 8 * 3;
|
|
||||||
|
|
||||||
WRITE_REG32( &core_regs.outep_regs[0]->dev_out_ep_txfer_siz, doeptsize0.d32 );
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
||||||
File diff suppressed because it is too large
Load Diff
@@ -1,63 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_init.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Initialization routines & global variables
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_lib.h"
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
/* The number of current endpoint, it will be used to specify an endpoint */
|
|
||||||
uint8_t EPindex;
|
|
||||||
/* The number of current device, it is an index to the Device_Table */
|
|
||||||
/* uint8_t Device_no; */
|
|
||||||
/* Points to the DEVICE_INFO structure of current device */
|
|
||||||
/* The purpose of this register is to speed up the execution */
|
|
||||||
DEVICE_INFO *pInformation;
|
|
||||||
/* Points to the DEVICE_PROP structure of current device */
|
|
||||||
/* The purpose of this register is to speed up the execution */
|
|
||||||
const DEVICE_PROP *pProperty;
|
|
||||||
/* Temporary save the state of Rx & Tx status. */
|
|
||||||
/* Whenever the Rx or Tx state is changed, its value is saved */
|
|
||||||
/* in this variable first and will be set to the EPRB or EPRA */
|
|
||||||
/* at the end of interrupt process */
|
|
||||||
uint16_t SaveState ;
|
|
||||||
uint16_t wInterrupt_Mask;
|
|
||||||
DEVICE_INFO Device_Info;
|
|
||||||
const USER_STANDARD_REQUESTS *pUser_Standard_Requests;
|
|
||||||
|
|
||||||
/* Extern variables ----------------------------------------------------------*/
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : USB_Init
|
|
||||||
* Description : USB system initialization
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void USB_Init(void)
|
|
||||||
{
|
|
||||||
pInformation = &Device_Info;
|
|
||||||
pInformation->ControlState = 2;
|
|
||||||
pProperty = &Device_Property;
|
|
||||||
pUser_Standard_Requests = &User_Standard_Requests;
|
|
||||||
/* Initialize devices one by one */
|
|
||||||
pProperty->Init();
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,188 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_int.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Endpoint CTR (Low and High) interrupt's service routines
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_lib.h"
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
__IO uint16_t SaveRState;
|
|
||||||
__IO uint16_t SaveTState;
|
|
||||||
|
|
||||||
/* Extern variables ----------------------------------------------------------*/
|
|
||||||
extern void (*pEpInt_IN[7])(void); /* Handles IN interrupts */
|
|
||||||
extern void (*pEpInt_OUT[7])(void); /* Handles OUT interrupts */
|
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : CTR_LP.
|
|
||||||
* Description : Low priority Endpoint Correct Transfer interrupt's service
|
|
||||||
* routine.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void CTR_LP(void)
|
|
||||||
{
|
|
||||||
__IO uint16_t wEPVal = 0;
|
|
||||||
/* stay in loop while pending ints */
|
|
||||||
while (((wIstr = _GetISTR()) & ISTR_CTR) != 0)
|
|
||||||
{
|
|
||||||
/* extract highest priority endpoint number */
|
|
||||||
EPindex = (uint8_t)(wIstr & ISTR_EP_ID);
|
|
||||||
if (EPindex == 0)
|
|
||||||
{
|
|
||||||
/* Decode and service control endpoint interrupt */
|
|
||||||
/* calling related service routine */
|
|
||||||
/* (Setup0_Process, In0_Process, Out0_Process) */
|
|
||||||
|
|
||||||
/* save RX & TX status */
|
|
||||||
/* and set both to NAK */
|
|
||||||
|
|
||||||
|
|
||||||
SaveRState = _GetENDPOINT(ENDP0);
|
|
||||||
SaveTState = SaveRState & EPTX_STAT;
|
|
||||||
SaveRState &= EPRX_STAT;
|
|
||||||
|
|
||||||
_SetEPRxTxStatus(ENDP0,EP_RX_NAK,EP_TX_NAK);
|
|
||||||
|
|
||||||
/* DIR bit = origin of the interrupt */
|
|
||||||
|
|
||||||
if ((wIstr & ISTR_DIR) == 0)
|
|
||||||
{
|
|
||||||
/* DIR = 0 */
|
|
||||||
|
|
||||||
/* DIR = 0 => IN int */
|
|
||||||
/* DIR = 0 implies that (EP_CTR_TX = 1) always */
|
|
||||||
|
|
||||||
|
|
||||||
_ClearEP_CTR_TX(ENDP0);
|
|
||||||
In0_Process();
|
|
||||||
|
|
||||||
/* before terminate set Tx & Rx status */
|
|
||||||
|
|
||||||
_SetEPRxTxStatus(ENDP0,SaveRState,SaveTState);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* DIR = 1 */
|
|
||||||
|
|
||||||
/* DIR = 1 & CTR_RX => SETUP or OUT int */
|
|
||||||
/* DIR = 1 & (CTR_TX | CTR_RX) => 2 int pending */
|
|
||||||
|
|
||||||
wEPVal = _GetENDPOINT(ENDP0);
|
|
||||||
|
|
||||||
if ((wEPVal &EP_SETUP) != 0)
|
|
||||||
{
|
|
||||||
_ClearEP_CTR_RX(ENDP0); /* SETUP bit kept frozen while CTR_RX = 1 */
|
|
||||||
Setup0_Process();
|
|
||||||
/* before terminate set Tx & Rx status */
|
|
||||||
|
|
||||||
_SetEPRxTxStatus(ENDP0,SaveRState,SaveTState);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
else if ((wEPVal & EP_CTR_RX) != 0)
|
|
||||||
{
|
|
||||||
_ClearEP_CTR_RX(ENDP0);
|
|
||||||
Out0_Process();
|
|
||||||
/* before terminate set Tx & Rx status */
|
|
||||||
|
|
||||||
_SetEPRxTxStatus(ENDP0,SaveRState,SaveTState);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}/* if(EPindex == 0) */
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* Decode and service non control endpoints interrupt */
|
|
||||||
|
|
||||||
/* process related endpoint register */
|
|
||||||
wEPVal = _GetENDPOINT(EPindex);
|
|
||||||
if ((wEPVal & EP_CTR_RX) != 0)
|
|
||||||
{
|
|
||||||
/* clear int flag */
|
|
||||||
_ClearEP_CTR_RX(EPindex);
|
|
||||||
|
|
||||||
/* call OUT service function */
|
|
||||||
(*pEpInt_OUT[EPindex-1])();
|
|
||||||
|
|
||||||
} /* if((wEPVal & EP_CTR_RX) */
|
|
||||||
|
|
||||||
if ((wEPVal & EP_CTR_TX) != 0)
|
|
||||||
{
|
|
||||||
/* clear int flag */
|
|
||||||
_ClearEP_CTR_TX(EPindex);
|
|
||||||
|
|
||||||
/* call IN service function */
|
|
||||||
(*pEpInt_IN[EPindex-1])();
|
|
||||||
} /* if((wEPVal & EP_CTR_TX) != 0) */
|
|
||||||
|
|
||||||
}/* if(EPindex == 0) else */
|
|
||||||
|
|
||||||
}/* while(...) */
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : CTR_HP.
|
|
||||||
* Description : High Priority Endpoint Correct Transfer interrupt's service
|
|
||||||
* routine.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void CTR_HP(void)
|
|
||||||
{
|
|
||||||
uint32_t wEPVal = 0;
|
|
||||||
|
|
||||||
while (((wIstr = _GetISTR()) & ISTR_CTR) != 0)
|
|
||||||
{
|
|
||||||
_SetISTR((uint16_t)CLR_CTR); /* clear CTR flag */
|
|
||||||
/* extract highest priority endpoint number */
|
|
||||||
EPindex = (uint8_t)(wIstr & ISTR_EP_ID);
|
|
||||||
/* process related endpoint register */
|
|
||||||
wEPVal = _GetENDPOINT(EPindex);
|
|
||||||
if ((wEPVal & EP_CTR_RX) != 0)
|
|
||||||
{
|
|
||||||
/* clear int flag */
|
|
||||||
_ClearEP_CTR_RX(EPindex);
|
|
||||||
|
|
||||||
/* call OUT service function */
|
|
||||||
(*pEpInt_OUT[EPindex-1])();
|
|
||||||
|
|
||||||
} /* if((wEPVal & EP_CTR_RX) */
|
|
||||||
else if ((wEPVal & EP_CTR_TX) != 0)
|
|
||||||
{
|
|
||||||
/* clear int flag */
|
|
||||||
_ClearEP_CTR_TX(EPindex);
|
|
||||||
|
|
||||||
/* call IN service function */
|
|
||||||
(*pEpInt_IN[EPindex-1])();
|
|
||||||
|
|
||||||
|
|
||||||
} /* if((wEPVal & EP_CTR_TX) != 0) */
|
|
||||||
|
|
||||||
}/* while(...) */
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,75 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_mem.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Utility functions for memory transfers to/from PMA
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_lib.h"
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
/* Extern variables ----------------------------------------------------------*/
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : UserToPMABufferCopy
|
|
||||||
* Description : Copy a buffer from user memory area to packet memory area (PMA)
|
|
||||||
* Input : - pbUsrBuf: pointer to user memory area.
|
|
||||||
* - wPMABufAddr: address into PMA.
|
|
||||||
* - wNBytes: no. of bytes to be copied.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None .
|
|
||||||
*******************************************************************************/
|
|
||||||
void UserToPMABufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)
|
|
||||||
{
|
|
||||||
uint32_t n = (wNBytes + 1) >> 1; /* n = (wNBytes + 1) / 2 */
|
|
||||||
uint32_t i, temp1, temp2;
|
|
||||||
uint16_t *pdwVal;
|
|
||||||
pdwVal = (uint16_t *)(wPMABufAddr * 2 + PMAAddr);
|
|
||||||
for (i = n; i != 0; i--)
|
|
||||||
{
|
|
||||||
temp1 = (uint16_t) * pbUsrBuf;
|
|
||||||
pbUsrBuf++;
|
|
||||||
temp2 = temp1 | (uint16_t) * pbUsrBuf << 8;
|
|
||||||
*pdwVal++ = temp2;
|
|
||||||
pdwVal++;
|
|
||||||
pbUsrBuf++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : PMAToUserBufferCopy
|
|
||||||
* Description : Copy a buffer from user memory area to packet memory area (PMA)
|
|
||||||
* Input : - pbUsrBuf = pointer to user memory area.
|
|
||||||
* - wPMABufAddr = address into PMA.
|
|
||||||
* - wNBytes = no. of bytes to be copied.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void PMAToUserBufferCopy(uint8_t *pbUsrBuf, uint16_t wPMABufAddr, uint16_t wNBytes)
|
|
||||||
{
|
|
||||||
uint32_t n = (wNBytes + 1) >> 1;/* /2*/
|
|
||||||
uint32_t i;
|
|
||||||
uint32_t *pdwVal;
|
|
||||||
pdwVal = (uint32_t *)(wPMABufAddr * 2 + PMAAddr);
|
|
||||||
for (i = n; i != 0; i--)
|
|
||||||
{
|
|
||||||
*(uint16_t*)pbUsrBuf++ = *pdwVal++;
|
|
||||||
pbUsrBuf++;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,750 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_regs.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Interface functions to USB cell registers
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_lib.h"
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
/* Extern variables ----------------------------------------------------------*/
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetCNTR.
|
|
||||||
* Description : Set the CNTR register value.
|
|
||||||
* Input : wRegValue: new register value.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetCNTR(uint16_t wRegValue)
|
|
||||||
{
|
|
||||||
_SetCNTR(wRegValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetCNTR.
|
|
||||||
* Description : returns the CNTR register value.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : CNTR register Value.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetCNTR(void)
|
|
||||||
{
|
|
||||||
return(_GetCNTR());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetISTR.
|
|
||||||
* Description : Set the ISTR register value.
|
|
||||||
* Input : wRegValue: new register value.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetISTR(uint16_t wRegValue)
|
|
||||||
{
|
|
||||||
_SetISTR(wRegValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetISTR
|
|
||||||
* Description : Returns the ISTR register value.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : ISTR register Value
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetISTR(void)
|
|
||||||
{
|
|
||||||
return(_GetISTR());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetFNR
|
|
||||||
* Description : Returns the FNR register value.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : FNR register Value
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetFNR(void)
|
|
||||||
{
|
|
||||||
return(_GetFNR());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetDADDR
|
|
||||||
* Description : Set the DADDR register value.
|
|
||||||
* Input : wRegValue: new register value.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetDADDR(uint16_t wRegValue)
|
|
||||||
{
|
|
||||||
_SetDADDR(wRegValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetDADDR
|
|
||||||
* Description : Returns the DADDR register value.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : DADDR register Value
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetDADDR(void)
|
|
||||||
{
|
|
||||||
return(_GetDADDR());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetBTABLE
|
|
||||||
* Description : Set the BTABLE.
|
|
||||||
* Input : wRegValue: New register value.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetBTABLE(uint16_t wRegValue)
|
|
||||||
{
|
|
||||||
_SetBTABLE(wRegValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetBTABLE.
|
|
||||||
* Description : Returns the BTABLE register value.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : BTABLE address.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetBTABLE(void)
|
|
||||||
{
|
|
||||||
return(_GetBTABLE());
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetENDPOINT
|
|
||||||
* Description : Setthe Endpoint register value.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wRegValue.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetENDPOINT(uint8_t bEpNum, uint16_t wRegValue)
|
|
||||||
{
|
|
||||||
_SetENDPOINT(bEpNum, wRegValue);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetENDPOINT
|
|
||||||
* Description : Return the Endpoint register value.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Endpoint register value.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetENDPOINT(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetENDPOINT(bEpNum));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPType
|
|
||||||
* Description : sets the type in the endpoint register.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wType: type definition.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPType(uint8_t bEpNum, uint16_t wType)
|
|
||||||
{
|
|
||||||
_SetEPType(bEpNum, wType);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPType
|
|
||||||
* Description : Returns the endpoint type.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Endpoint Type
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPType(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPType(bEpNum));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPTxStatus
|
|
||||||
* Description : Set the status of Tx endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wState: new state.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPTxStatus(uint8_t bEpNum, uint16_t wState)
|
|
||||||
{
|
|
||||||
_SetEPTxStatus(bEpNum, wState);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPRxStatus
|
|
||||||
* Description : Set the status of Rx endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wState: new state.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPRxStatus(uint8_t bEpNum, uint16_t wState)
|
|
||||||
{
|
|
||||||
_SetEPRxStatus(bEpNum, wState);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetDouBleBuffEPStall
|
|
||||||
* Description : sets the status for Double Buffer Endpoint to STALL
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* bDir: Endpoint direction.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetDouBleBuffEPStall(uint8_t bEpNum, uint8_t bDir)
|
|
||||||
{
|
|
||||||
uint16_t Endpoint_DTOG_Status;
|
|
||||||
Endpoint_DTOG_Status = GetENDPOINT(bEpNum);
|
|
||||||
if (bDir == EP_DBUF_OUT)
|
|
||||||
{ /* OUT double buffered endpoint */
|
|
||||||
_SetENDPOINT(bEpNum, Endpoint_DTOG_Status & ~EPRX_DTOG1);
|
|
||||||
}
|
|
||||||
else if (bDir == EP_DBUF_IN)
|
|
||||||
{ /* IN double buffered endpoint */
|
|
||||||
_SetENDPOINT(bEpNum, Endpoint_DTOG_Status & ~EPTX_DTOG1);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPTxStatus
|
|
||||||
* Description : Returns the endpoint Tx status.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Endpoint TX Status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPTxStatus(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPTxStatus(bEpNum));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPRxStatus
|
|
||||||
* Description : Returns the endpoint Rx status.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Endpoint RX Status
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPRxStatus(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPRxStatus(bEpNum));
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPTxValid
|
|
||||||
* Description : Valid the endpoint Tx Status.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPTxValid(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_SetEPTxStatus(bEpNum, EP_TX_VALID);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPRxValid
|
|
||||||
* Description : Valid the endpoint Rx Status.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPRxValid(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_SetEPRxStatus(bEpNum, EP_RX_VALID);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEP_KIND
|
|
||||||
* Description : Clear the EP_KIND bit.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEP_KIND(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_SetEP_KIND(bEpNum);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : ClearEP_KIND
|
|
||||||
* Description : set the EP_KIND bit.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void ClearEP_KIND(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_ClearEP_KIND(bEpNum);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Clear_Status_Out
|
|
||||||
* Description : Clear the Status Out of the related Endpoint
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Clear_Status_Out(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_ClearEP_KIND(bEpNum);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Set_Status_Out
|
|
||||||
* Description : Set the Status Out of the related Endpoint
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Set_Status_Out(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_SetEP_KIND(bEpNum);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPDoubleBuff
|
|
||||||
* Description : Enable the double buffer feature for the endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPDoubleBuff(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_SetEP_KIND(bEpNum);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : ClearEPDoubleBuff
|
|
||||||
* Description : Disable the double buffer feature for the endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void ClearEPDoubleBuff(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_ClearEP_KIND(bEpNum);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetTxStallStatus
|
|
||||||
* Description : Returns the Stall status of the Tx endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Tx Stall status.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetTxStallStatus(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetTxStallStatus(bEpNum));
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetRxStallStatus
|
|
||||||
* Description : Returns the Stall status of the Rx endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Rx Stall status.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetRxStallStatus(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetRxStallStatus(bEpNum));
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : ClearEP_CTR_RX
|
|
||||||
* Description : Clear the CTR_RX bit.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void ClearEP_CTR_RX(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_ClearEP_CTR_RX(bEpNum);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : ClearEP_CTR_TX
|
|
||||||
* Description : Clear the CTR_TX bit.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void ClearEP_CTR_TX(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_ClearEP_CTR_TX(bEpNum);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : ToggleDTOG_RX
|
|
||||||
* Description : Toggle the DTOG_RX bit.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void ToggleDTOG_RX(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_ToggleDTOG_RX(bEpNum);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : ToggleDTOG_TX
|
|
||||||
* Description : Toggle the DTOG_TX bit.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void ToggleDTOG_TX(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_ToggleDTOG_TX(bEpNum);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : ClearDTOG_RX.
|
|
||||||
* Description : Clear the DTOG_RX bit.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void ClearDTOG_RX(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_ClearDTOG_RX(bEpNum);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : ClearDTOG_TX.
|
|
||||||
* Description : Clear the DTOG_TX bit.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void ClearDTOG_TX(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
_ClearDTOG_TX(bEpNum);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPAddress
|
|
||||||
* Description : Set the endpoint address.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* bAddr: New endpoint address.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPAddress(uint8_t bEpNum, uint8_t bAddr)
|
|
||||||
{
|
|
||||||
_SetEPAddress(bEpNum, bAddr);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPAddress
|
|
||||||
* Description : Get the endpoint address.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Endpoint address.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint8_t GetEPAddress(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPAddress(bEpNum));
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPTxAddr
|
|
||||||
* Description : Set the endpoint Tx buffer address.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wAddr: new address.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPTxAddr(uint8_t bEpNum, uint16_t wAddr)
|
|
||||||
{
|
|
||||||
_SetEPTxAddr(bEpNum, wAddr);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPRxAddr
|
|
||||||
* Description : Set the endpoint Rx buffer address.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wAddr: new address.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPRxAddr(uint8_t bEpNum, uint16_t wAddr)
|
|
||||||
{
|
|
||||||
_SetEPRxAddr(bEpNum, wAddr);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPTxAddr
|
|
||||||
* Description : Returns the endpoint Tx buffer address.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Rx buffer address.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPTxAddr(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPTxAddr(bEpNum));
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPRxAddr.
|
|
||||||
* Description : Returns the endpoint Rx buffer address.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Rx buffer address.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPRxAddr(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPRxAddr(bEpNum));
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPTxCount.
|
|
||||||
* Description : Set the Tx count.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wCount: new count value.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPTxCount(uint8_t bEpNum, uint16_t wCount)
|
|
||||||
{
|
|
||||||
_SetEPTxCount(bEpNum, wCount);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPCountRxReg.
|
|
||||||
* Description : Set the Count Rx Register value.
|
|
||||||
* Input : *pdwReg: point to the register.
|
|
||||||
* wCount: the new register value.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPCountRxReg(uint32_t *pdwReg, uint16_t wCount)
|
|
||||||
{
|
|
||||||
_SetEPCountRxReg(dwReg, wCount);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPRxCount
|
|
||||||
* Description : Set the Rx count.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wCount: the new count value.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPRxCount(uint8_t bEpNum, uint16_t wCount)
|
|
||||||
{
|
|
||||||
_SetEPRxCount(bEpNum, wCount);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPTxCount
|
|
||||||
* Description : Get the Tx count.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None
|
|
||||||
* Return : Tx count value.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPTxCount(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPTxCount(bEpNum));
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPRxCount
|
|
||||||
* Description : Get the Rx count.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Rx count value.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPRxCount(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPRxCount(bEpNum));
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPDblBuffAddr
|
|
||||||
* Description : Set the addresses of the buffer 0 and 1.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* wBuf0Addr: new address of buffer 0.
|
|
||||||
* wBuf1Addr: new address of buffer 1.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPDblBuffAddr(uint8_t bEpNum, uint16_t wBuf0Addr, uint16_t wBuf1Addr)
|
|
||||||
{
|
|
||||||
_SetEPDblBuffAddr(bEpNum, wBuf0Addr, wBuf1Addr);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPDblBuf0Addr
|
|
||||||
* Description : Set the Buffer 1 address.
|
|
||||||
* Input : bEpNum: Endpoint Number
|
|
||||||
* wBuf0Addr: new address.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPDblBuf0Addr(uint8_t bEpNum, uint16_t wBuf0Addr)
|
|
||||||
{
|
|
||||||
_SetEPDblBuf0Addr(bEpNum, wBuf0Addr);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPDblBuf1Addr
|
|
||||||
* Description : Set the Buffer 1 address.
|
|
||||||
* Input : bEpNum: Endpoint Number
|
|
||||||
* wBuf1Addr: new address.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPDblBuf1Addr(uint8_t bEpNum, uint16_t wBuf1Addr)
|
|
||||||
{
|
|
||||||
_SetEPDblBuf1Addr(bEpNum, wBuf1Addr);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPDblBuf0Addr
|
|
||||||
* Description : Returns the address of the Buffer 0.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPDblBuf0Addr(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPDblBuf0Addr(bEpNum));
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPDblBuf1Addr
|
|
||||||
* Description : Returns the address of the Buffer 1.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Address of the Buffer 1.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPDblBuf1Addr(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPDblBuf1Addr(bEpNum));
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPDblBuffCount
|
|
||||||
* Description : Set the number of bytes for a double Buffer
|
|
||||||
* endpoint.
|
|
||||||
* Input : bEpNum,bDir, wCount
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPDblBuffCount(uint8_t bEpNum, uint8_t bDir, uint16_t wCount)
|
|
||||||
{
|
|
||||||
_SetEPDblBuffCount(bEpNum, bDir, wCount);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPDblBuf0Count
|
|
||||||
* Description : Set the number of bytes in the buffer 0 of a double Buffer
|
|
||||||
* endpoint.
|
|
||||||
* Input : bEpNum, bDir, wCount
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPDblBuf0Count(uint8_t bEpNum, uint8_t bDir, uint16_t wCount)
|
|
||||||
{
|
|
||||||
_SetEPDblBuf0Count(bEpNum, bDir, wCount);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : SetEPDblBuf1Count
|
|
||||||
* Description : Set the number of bytes in the buffer 0 of a double Buffer
|
|
||||||
* endpoint.
|
|
||||||
* Input : bEpNum, bDir, wCount
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void SetEPDblBuf1Count(uint8_t bEpNum, uint8_t bDir, uint16_t wCount)
|
|
||||||
{
|
|
||||||
_SetEPDblBuf1Count(bEpNum, bDir, wCount);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPDblBuf0Count
|
|
||||||
* Description : Returns the number of byte received in the buffer 0 of a double
|
|
||||||
* Buffer endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Endpoint Buffer 0 count
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPDblBuf0Count(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPDblBuf0Count(bEpNum));
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPDblBuf1Count
|
|
||||||
* Description : Returns the number of data received in the buffer 1 of a double
|
|
||||||
* Buffer endpoint.
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Endpoint Buffer 1 count.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t GetEPDblBuf1Count(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
return(_GetEPDblBuf1Count(bEpNum));
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : GetEPDblBufDir
|
|
||||||
* Description : gets direction of the double buffered endpoint
|
|
||||||
* Input : bEpNum: Endpoint Number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : EP_DBUF_OUT, EP_DBUF_IN,
|
|
||||||
* EP_DBUF_ERR if the endpoint counter not yet programmed.
|
|
||||||
*******************************************************************************/
|
|
||||||
EP_DBUF_DIR GetEPDblBufDir(uint8_t bEpNum)
|
|
||||||
{
|
|
||||||
if ((uint16_t)(*_pEPRxCount(bEpNum) & 0xFC00) != 0)
|
|
||||||
return(EP_DBUF_OUT);
|
|
||||||
else if (((uint16_t)(*_pEPTxCount(bEpNum)) & 0x03FF) != 0)
|
|
||||||
return(EP_DBUF_IN);
|
|
||||||
else
|
|
||||||
return(EP_DBUF_ERR);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : FreeUserBuffer
|
|
||||||
* Description : free buffer used from the application realizing it to the line
|
|
||||||
toggles bit SW_BUF in the double buffered endpoint register
|
|
||||||
* Input : bEpNum, bDir
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void FreeUserBuffer(uint8_t bEpNum, uint8_t bDir)
|
|
||||||
{
|
|
||||||
if (bDir == EP_DBUF_OUT)
|
|
||||||
{ /* OUT double buffered endpoint */
|
|
||||||
_ToggleDTOG_TX(bEpNum);
|
|
||||||
}
|
|
||||||
else if (bDir == EP_DBUF_IN)
|
|
||||||
{ /* IN double buffered endpoint */
|
|
||||||
_ToggleDTOG_RX(bEpNum);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : ToWord
|
|
||||||
* Description : merge two byte in a word.
|
|
||||||
* Input : bh: byte high, bl: bytes low.
|
|
||||||
* Output : None.
|
|
||||||
* Return : resulted word.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t ToWord(uint8_t bh, uint8_t bl)
|
|
||||||
{
|
|
||||||
uint16_t wRet;
|
|
||||||
wRet = (uint16_t)bl | ((uint16_t)bh << 8);
|
|
||||||
return(wRet);
|
|
||||||
}
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : ByteSwap
|
|
||||||
* Description : Swap two byte in a word.
|
|
||||||
* Input : wSwW: word to Swap.
|
|
||||||
* Output : None.
|
|
||||||
* Return : resulted word.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint16_t ByteSwap(uint16_t wSwW)
|
|
||||||
{
|
|
||||||
uint8_t bTemp;
|
|
||||||
uint16_t wRet;
|
|
||||||
bTemp = (uint8_t)(wSwW & 0xff);
|
|
||||||
wRet = (wSwW >> 8) | ((uint16_t)bTemp << 8);
|
|
||||||
return(wRet);
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,126 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_sil.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Simplified Interface Layer for Global Initialization and
|
|
||||||
* Endpoint Rea/Write operations.
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_lib.h"
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
/* Extern variables ----------------------------------------------------------*/
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : USB_SIL_Init
|
|
||||||
* Description : Initialize the USB Device IP and the Endpoint 0.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Status.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t USB_SIL_Init(void)
|
|
||||||
{
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
|
|
||||||
/* USB interrupts initialization */
|
|
||||||
/* clear pending interrupts */
|
|
||||||
_SetISTR(0);
|
|
||||||
wInterrupt_Mask = IMR_MSK;
|
|
||||||
/* set interrupts mask */
|
|
||||||
_SetCNTR(wInterrupt_Mask);
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* Perform OTG Device initialization procedure (including EP0 init) */
|
|
||||||
OTG_DEV_Init();
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : USB_SIL_Write
|
|
||||||
* Description : Write a buffer of data to a selected endpoint.
|
|
||||||
* Input : - bEpAddr: The address of the non control endpoint.
|
|
||||||
* - pBufferPointer: The pointer to the buffer of data to be written
|
|
||||||
* to the endpoint.
|
|
||||||
* - wBufferSize: Number of data to be written (in bytes).
|
|
||||||
* Output : None.
|
|
||||||
* Return : Status.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t USB_SIL_Write(uint8_t bEpAddr, uint8_t* pBufferPointer, uint32_t wBufferSize)
|
|
||||||
{
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
|
|
||||||
/* Use the memory interface function to write to the selected endpoint */
|
|
||||||
UserToPMABufferCopy(pBufferPointer, GetEPTxAddr(bEpAddr & 0x7F), wBufferSize);
|
|
||||||
|
|
||||||
/* Update the data length in the control register */
|
|
||||||
SetEPTxCount((bEpAddr & 0x7F), wBufferSize);
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
/* Use the PCD interface layer function to write to the selected endpoint */
|
|
||||||
OTGD_FS_PCD_EP_Write (bEpAddr, pBufferPointer, wBufferSize);
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : USB_SIL_Read
|
|
||||||
* Description : Write a buffer of data to a selected endpoint.
|
|
||||||
* Input : - bEpAddr: The address of the non control endpoint.
|
|
||||||
* - pBufferPointer: The pointer to which will be saved the
|
|
||||||
* received data buffer.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Number of received data (in Bytes).
|
|
||||||
*******************************************************************************/
|
|
||||||
uint32_t USB_SIL_Read(uint8_t bEpAddr, uint8_t* pBufferPointer)
|
|
||||||
{
|
|
||||||
uint32_t DataLength = 0;
|
|
||||||
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
|
|
||||||
/* Get the number of received data on the selected Endpoint */
|
|
||||||
DataLength = GetEPRxCount(bEpAddr & 0x7F);
|
|
||||||
|
|
||||||
/* Use the memory interface function to write to the selected endpoint */
|
|
||||||
PMAToUserBufferCopy(pBufferPointer, GetEPRxAddr(bEpAddr & 0x7F), DataLength);
|
|
||||||
|
|
||||||
#else
|
|
||||||
|
|
||||||
USB_OTG_EP *ep;
|
|
||||||
|
|
||||||
/* Get the structure pointer of the selected Endpoint */
|
|
||||||
ep = OTGD_FS_PCD_GetOutEP(bEpAddr);
|
|
||||||
|
|
||||||
/* Get the number of received data */
|
|
||||||
DataLength = ep->xfer_len;
|
|
||||||
|
|
||||||
/* Use the PCD interface layer function to read the selected endpoint */
|
|
||||||
OTGD_FS_PCD_EP_Read (bEpAddr, pBufferPointer, DataLength);
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
/* Return the number of received data */
|
|
||||||
return DataLength;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
|
|
||||||
* File Name : hw_config.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.0.1
|
|
||||||
* Date : 04/27/2009
|
|
||||||
* Description : Hardware Configuration & Setup
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_lib.h"
|
|
||||||
#include "usb_prop.h"
|
|
||||||
#include "usb_desc.h"
|
|
||||||
#include "hw_config.h"
|
|
||||||
#include "platform_config.h"
|
|
||||||
#include "usb_pwr.h"
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
/* Extern variables ----------------------------------------------------------*/
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Enter_LowPowerMode
|
|
||||||
* Description : Power-off system clocks and power while entering suspend mode
|
|
||||||
* Input : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Enter_LowPowerMode(void)
|
|
||||||
{
|
|
||||||
/* Set the device state to suspend */
|
|
||||||
bDeviceState = SUSPENDED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Leave_LowPowerMode
|
|
||||||
* Description : Restores system clocks and power while exiting suspend mode
|
|
||||||
* Input : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Leave_LowPowerMode(void)
|
|
||||||
{
|
|
||||||
DEVICE_INFO *pInfo = &Device_Info;
|
|
||||||
|
|
||||||
/* Set the device state to the correct state */
|
|
||||||
if (pInfo->Current_Configuration != 0) {
|
|
||||||
/* Device configured */
|
|
||||||
bDeviceState = CONFIGURED;
|
|
||||||
} else {
|
|
||||||
bDeviceState = ATTACHED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : USB_Cable_Config
|
|
||||||
* Description : Software Connection/Disconnection of USB Cable
|
|
||||||
* Input : None.
|
|
||||||
* Return : Status
|
|
||||||
*******************************************************************************/
|
|
||||||
void USB_Cable_Config (FunctionalState NewState)
|
|
||||||
{
|
|
||||||
if (NewState != DISABLE) {
|
|
||||||
GPIO_ResetBits(GPIOC, GPIO_Pin_11);
|
|
||||||
} else {
|
|
||||||
GPIO_SetBits(GPIOC, GPIO_Pin_11);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Get_SerialNum.
|
|
||||||
* Description : Create the serial number string descriptor.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Get_SerialNum(void)
|
|
||||||
{
|
|
||||||
uint32_t Device_Serial0, Device_Serial1, Device_Serial2;
|
|
||||||
/*
|
|
||||||
Device_Serial0 = *(__IO uint32_t*)(0x1FFFF7E8);
|
|
||||||
Device_Serial1 = *(__IO uint32_t*)(0x1FFFF7EC);
|
|
||||||
Device_Serial2 = *(__IO uint32_t*)(0x1FFFF7F0);
|
|
||||||
|
|
||||||
if (Device_Serial0 != 0)
|
|
||||||
{
|
|
||||||
Virtual_Com_Port_StringSerial[2] = (uint8_t)(Device_Serial0 & 0x000000FF);
|
|
||||||
Virtual_Com_Port_StringSerial[4] = (uint8_t)((Device_Serial0 & 0x0000FF00) >> 8);
|
|
||||||
Virtual_Com_Port_StringSerial[6] = (uint8_t)((Device_Serial0 & 0x00FF0000) >> 16);
|
|
||||||
Virtual_Com_Port_StringSerial[8] = (uint8_t)((Device_Serial0 & 0xFF000000) >> 24);
|
|
||||||
|
|
||||||
Virtual_Com_Port_StringSerial[10] = (uint8_t)(Device_Serial1 & 0x000000FF);
|
|
||||||
Virtual_Com_Port_StringSerial[12] = (uint8_t)((Device_Serial1 & 0x0000FF00) >> 8);
|
|
||||||
Virtual_Com_Port_StringSerial[14] = (uint8_t)((Device_Serial1 & 0x00FF0000) >> 16);
|
|
||||||
Virtual_Com_Port_StringSerial[16] = (uint8_t)((Device_Serial1 & 0xFF000000) >> 24);
|
|
||||||
|
|
||||||
Virtual_Com_Port_StringSerial[18] = (uint8_t)(Device_Serial2 & 0x000000FF);
|
|
||||||
Virtual_Com_Port_StringSerial[20] = (uint8_t)((Device_Serial2 & 0x0000FF00) >> 8);
|
|
||||||
Virtual_Com_Port_StringSerial[22] = (uint8_t)((Device_Serial2 & 0x00FF0000) >> 16);
|
|
||||||
Virtual_Com_Port_StringSerial[24] = (uint8_t)((Device_Serial2 & 0xFF000000) >> 24);
|
|
||||||
}*/
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,41 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
|
|
||||||
* File Name : hw_config.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.0.1
|
|
||||||
* Date : 04/27/2009
|
|
||||||
* Description : Hardware Configuration & Setup
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __HW_CONFIG_H
|
|
||||||
#define __HW_CONFIG_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_type.h"
|
|
||||||
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported define -----------------------------------------------------------*/
|
|
||||||
#define MASS_MEMORY_START 0x04002000
|
|
||||||
#define BULK_MAX_PACKET_SIZE 0x00000040
|
|
||||||
#define LED_ON 0xF0
|
|
||||||
#define LED_OFF 0xFF
|
|
||||||
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
void Enter_LowPowerMode(void);
|
|
||||||
void Leave_LowPowerMode(void);
|
|
||||||
void USB_Cable_Config (FunctionalState NewState);
|
|
||||||
void Get_SerialNum(void);
|
|
||||||
|
|
||||||
/* External variables --------------------------------------------------------*/
|
|
||||||
|
|
||||||
#endif /*__HW_CONFIG_H*/
|
|
||||||
/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,57 +0,0 @@
|
|||||||
#ifndef PLATFORM_H_
|
|
||||||
#define PLATFORM_H_
|
|
||||||
|
|
||||||
#define LED_PIN GPIO_Pin_12
|
|
||||||
#define LED_GPIO GPIOC
|
|
||||||
|
|
||||||
#define LCD_E_PIN GPIO_Pin_10
|
|
||||||
#define LCD_E_GPIO GPIOC
|
|
||||||
|
|
||||||
#define LCD_RESET_PIN GPIO_Pin_7
|
|
||||||
#define LCD_RESET_GPIO GPIOC
|
|
||||||
|
|
||||||
#define LCD_DC_PIN GPIO_Pin_2
|
|
||||||
#define LCD_DC_GPIO GPIOB
|
|
||||||
|
|
||||||
#define TAMP_PIN GPIO_Pin_13
|
|
||||||
#define TAMP_GPIO GPIOC
|
|
||||||
|
|
||||||
#define WAKE_PIN GPIO_Pin_0
|
|
||||||
#define WAKE_GPIO GPIOA
|
|
||||||
|
|
||||||
#define JOY_CENTER_PIN GPIO_Pin_6
|
|
||||||
#define JOY_CENTER_GPIO GPIOC
|
|
||||||
|
|
||||||
#define NRF_CS_PIN GPIO_Pin_4
|
|
||||||
#define NRF_CS_GPIO GPIOA
|
|
||||||
|
|
||||||
#define NRF_CE_PIN GPIO_Pin_8
|
|
||||||
#define NRF_CE_GPIO GPIOC
|
|
||||||
|
|
||||||
#define NRF_IRQ_PIN GPIO_Pin_9
|
|
||||||
#define NRF_IRQ_GPIO GPIOC
|
|
||||||
|
|
||||||
#define ADIS_CS_PIN GPIO_Pin_10
|
|
||||||
#define ADIS_CS_GPIO GPIOB
|
|
||||||
|
|
||||||
#define ADIS_RESET_PIN GPIO_Pin_3
|
|
||||||
#define ADIS_RESET_GPIO GPIOA
|
|
||||||
|
|
||||||
#define LED_WRITE(x) GPIO_WriteBit(LED_GPIO, LED_PIN, x)
|
|
||||||
|
|
||||||
#define LCD_DC_WRITE(x) GPIO_WriteBit(LCD_DC_GPIO, LCD_DC_PIN, x)
|
|
||||||
#define LCD_E_WRITE(x) GPIO_WriteBit(LCD_E_GPIO, LCD_E_PIN, x)
|
|
||||||
#define LCD_RESET_WRITE(x) GPIO_WriteBit(LCD_RESET_GPIO, LCD_RESET_PIN, x)
|
|
||||||
|
|
||||||
#define TAMP_READ GPIO_ReadInputDataBit(TAMP_GPIO, TAMP_PIN)
|
|
||||||
#define WAKE_READ GPIO_ReadInputDataBit(WAKE_GPIO, WAKE_PIN)
|
|
||||||
#define JOY_CENTER_READ GPIO_ReadInputDataBit(JOY_CENTER_GPIO, JOY_CENTER_PIN)
|
|
||||||
|
|
||||||
#define NRF_CE_WRITE(x) GPIO_WriteBit(NRF_CE_GPIO, NRF_CE_PIN, x)
|
|
||||||
#define NRF_CS_WRITE(x) GPIO_WriteBit(NRF_CS_GPIO, NRF_CS_PIN, x)
|
|
||||||
#define NRF_IRQ_READ GPIO_ReadInputDataBit(MRF_IRQ_GPIO, NRF_IRQ_PIN)
|
|
||||||
|
|
||||||
#define ADIS_CS_WRITE(x) GPIO_WriteBit(ADIS_CS_GPIO, ADIS_CS_PIN, x)
|
|
||||||
#define ADIS_RESET_WRITE(x) GPIO_WriteBit(ADIS_RESET_GPIO, ADIS_RESET_PIN, x)
|
|
||||||
#endif
|
|
||||||
|
|
||||||
@@ -1,52 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2009 STMicroelectronics ********************
|
|
||||||
* File Name : platform_config.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.0.1
|
|
||||||
* Date : 04/27/2009
|
|
||||||
* Description : Evaluation board specific configuration file.
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __PLATFORM_CONFIG_H
|
|
||||||
#define __PLATFORM_CONFIG_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "stm32f10x.h"
|
|
||||||
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Uncomment the line corresponding to the STMicroelectronics evaluation board
|
|
||||||
used to run the example */
|
|
||||||
#if !defined (USE_STM3210B_EVAL) && !defined (USE_STM3210E_EVAL)
|
|
||||||
//#define USE_STM3210B_EVAL
|
|
||||||
#define USE_STM3210E_EVAL
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Define the STM32F10x hardware depending on the used evaluation board */
|
|
||||||
#ifdef USE_STM3210B_EVAL
|
|
||||||
|
|
||||||
#define USB_DISCONNECT GPIOD
|
|
||||||
#define USB_DISCONNECT_PIN GPIO_Pin_9
|
|
||||||
#define RCC_APB2Periph_GPIO_DISCONNECT RCC_APB2Periph_GPIOD
|
|
||||||
|
|
||||||
#else /* USE_STM3210E_EVAL */
|
|
||||||
|
|
||||||
#define USB_DISCONNECT GPIOB
|
|
||||||
#define USB_DISCONNECT_PIN GPIO_Pin_14
|
|
||||||
#define RCC_APB2Periph_GPIO_DISCONNECT RCC_APB2Periph_GPIOB
|
|
||||||
|
|
||||||
#endif /* USE_STM3210B_EVAL */
|
|
||||||
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
|
|
||||||
#endif /* __PLATFORM_CONFIG_H */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2009 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,197 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_conf.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Virtual COM Port Demo configuration header
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_CONF_H
|
|
||||||
#define __USB_CONF_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
/* External variables --------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------*/
|
|
||||||
/* EP_NUM */
|
|
||||||
/* defines how many endpoints are used by the device */
|
|
||||||
/*-------------------------------------------------------------*/
|
|
||||||
|
|
||||||
#define EP_NUM (4)
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
/*-------------------------------------------------------------*/
|
|
||||||
/* -------------- Buffer Description Table -----------------*/
|
|
||||||
/*-------------------------------------------------------------*/
|
|
||||||
/* buffer table base address */
|
|
||||||
/* buffer table base address */
|
|
||||||
#define BTABLE_ADDRESS (0x00)
|
|
||||||
|
|
||||||
/* EP0 */
|
|
||||||
/* rx/tx buffer base address */
|
|
||||||
#define ENDP0_RXADDR (0x40)
|
|
||||||
#define ENDP0_TXADDR (0x80)
|
|
||||||
|
|
||||||
/* EP1 */
|
|
||||||
/* tx buffer base address */
|
|
||||||
#define ENDP1_TXADDR (0xC0)
|
|
||||||
#define ENDP2_TXADDR (0x100)
|
|
||||||
#define ENDP3_RXADDR (0x110)
|
|
||||||
|
|
||||||
|
|
||||||
/*-------------------------------------------------------------*/
|
|
||||||
/* ------------------- ISTR events -------------------------*/
|
|
||||||
/*-------------------------------------------------------------*/
|
|
||||||
/* IMR_MSK */
|
|
||||||
/* mask defining which events has to be handled */
|
|
||||||
/* by the device application software */
|
|
||||||
#define IMR_MSK (CNTR_CTRM | CNTR_SOFM | CNTR_RESETM )
|
|
||||||
|
|
||||||
/*#define CTR_CALLBACK*/
|
|
||||||
/*#define DOVR_CALLBACK*/
|
|
||||||
/*#define ERR_CALLBACK*/
|
|
||||||
/*#define WKUP_CALLBACK*/
|
|
||||||
/*#define SUSP_CALLBACK*/
|
|
||||||
/*#define RESET_CALLBACK*/
|
|
||||||
/*#define SOF_CALLBACK*/
|
|
||||||
/*#define ESOF_CALLBACK*/
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
#ifdef STM32F10X_CL
|
|
||||||
/*******************************************************************************
|
|
||||||
* FIFO Size Configuration
|
|
||||||
*
|
|
||||||
* (i) Dedicated data FIFO SPRAM of 1.25 Kbytes = 1280 bytes = 320 32-bits words
|
|
||||||
* available for the endpoints IN and OUT.
|
|
||||||
* Device mode features:
|
|
||||||
* -1 bidirectional CTRL EP 0
|
|
||||||
* -3 IN EPs to support any kind of Bulk, Interrupt or Isochronous transfer
|
|
||||||
* -3 OUT EPs to support any kind of Bulk, Interrupt or Isochronous transfer
|
|
||||||
*
|
|
||||||
* ii) Receive data FIFO size = RAM for setup packets +
|
|
||||||
* OUT endpoint control information +
|
|
||||||
* data OUT packets + miscellaneous
|
|
||||||
* Space = ONE 32-bits words
|
|
||||||
* --> RAM for setup packets = 4 * n + 6 space
|
|
||||||
* (n is the nbr of CTRL EPs the device core supports)
|
|
||||||
* --> OUT EP CTRL info = 1 space
|
|
||||||
* (one space for status information written to the FIFO along with each
|
|
||||||
* received packet)
|
|
||||||
* --> data OUT packets = (Largest Packet Size / 4) + 1 spaces
|
|
||||||
* (MINIMUM to receive packets)
|
|
||||||
* --> OR data OUT packets = at least 2*(Largest Packet Size / 4) + 1 spaces
|
|
||||||
* (if high-bandwidth EP is enabled or multiple isochronous EPs)
|
|
||||||
* --> miscellaneous = 1 space per OUT EP
|
|
||||||
* (one space for transfer complete status information also pushed to the
|
|
||||||
* FIFO with each endpoint's last packet)
|
|
||||||
*
|
|
||||||
* (iii)MINIMUM RAM space required for each IN EP Tx FIFO = MAX packet size for
|
|
||||||
* that particular IN EP. More space allocated in the IN EP Tx FIFO results
|
|
||||||
* in a better performance on the USB and can hide latencies on the AHB.
|
|
||||||
*
|
|
||||||
* (iv) TXn min size = 16 words. (n : Transmit FIFO index)
|
|
||||||
* (v) When a TxFIFO is not used, the Configuration should be as follows:
|
|
||||||
* case 1 : n > m and Txn is not used (n,m : Transmit FIFO indexes)
|
|
||||||
* --> Txm can use the space allocated for Txn.
|
|
||||||
* case2 : n < m and Txn is not used (n,m : Transmit FIFO indexes)
|
|
||||||
* --> Txn should be configured with the minimum space of 16 words
|
|
||||||
* (vi) The FIFO is used optimally when used TxFIFOs are allocated in the top
|
|
||||||
* of the FIFO.Ex: use EP1 and EP2 as IN instead of EP1 and EP3 as IN ones.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
#define RX_FIFO_SIZE 128
|
|
||||||
#define TX0_FIFO_SIZE 64
|
|
||||||
#define TX1_FIFO_SIZE 64
|
|
||||||
#define TX2_FIFO_SIZE 16
|
|
||||||
#define TX3_FIFO_SIZE 16
|
|
||||||
|
|
||||||
/* OTGD-FS-DEVICE IP interrupts Enable definitions */
|
|
||||||
/* Uncomment the define to enable the selected interrupt */
|
|
||||||
//#define INTR_MODEMISMATCH
|
|
||||||
#define INTR_SOFINTR
|
|
||||||
#define INTR_RXSTSQLVL /* Mandatory */
|
|
||||||
//#define INTR_NPTXFEMPTY
|
|
||||||
//#define INTR_GINNAKEFF
|
|
||||||
//#define INTR_GOUTNAKEFF
|
|
||||||
//#define INTR_ERLYSUSPEND
|
|
||||||
#define INTR_USBSUSPEND /* Mandatory */
|
|
||||||
#define INTR_USBRESET /* Mandatory */
|
|
||||||
#define INTR_ENUMDONE /* Mandatory */
|
|
||||||
//#define INTR_ISOOUTDROP
|
|
||||||
//#define INTR_EOPFRAME
|
|
||||||
//#define INTR_EPMISMATCH
|
|
||||||
#define INTR_INEPINTR /* Mandatory */
|
|
||||||
#define INTR_OUTEPINTR /* Mandatory */
|
|
||||||
//#define INTR_INCOMPLISOIN
|
|
||||||
//#define INTR_INCOMPLISOOUT
|
|
||||||
#define INTR_WKUPINTR /* Mandatory */
|
|
||||||
|
|
||||||
/* OTGD-FS-DEVICE IP interrupts subroutines */
|
|
||||||
/* Comment the define to enable the selected interrupt subroutine and replace it
|
|
||||||
by user code */
|
|
||||||
#define INTR_MODEMISMATCH_Callback NOP_Process
|
|
||||||
#define INTR_SOFINTR_Callback NOP_Process
|
|
||||||
#define INTR_RXSTSQLVL_Callback NOP_Process
|
|
||||||
#define INTR_NPTXFEMPTY_Callback NOP_Process
|
|
||||||
#define INTR_NPTXFEMPTY_Callback NOP_Process
|
|
||||||
#define INTR_GINNAKEFF_Callback NOP_Process
|
|
||||||
#define INTR_GOUTNAKEFF_Callback NOP_Process
|
|
||||||
#define INTR_ERLYSUSPEND_Callback NOP_Process
|
|
||||||
#define INTR_USBSUSPEND_Callback NOP_Process
|
|
||||||
#define INTR_USBRESET_Callback NOP_Process
|
|
||||||
#define INTR_ENUMDONE_Callback NOP_Process
|
|
||||||
#define INTR_ISOOUTDROP_Callback NOP_Process
|
|
||||||
#define INTR_EOPFRAME_Callback NOP_Process
|
|
||||||
#define INTR_EPMISMATCH_Callback NOP_Process
|
|
||||||
#define INTR_INEPINTR_Callback NOP_Process
|
|
||||||
#define INTR_OUTEPINTR_Callback NOP_Process
|
|
||||||
#define INTR_INCOMPLISOIN_Callback NOP_Process
|
|
||||||
#define INTR_INCOMPLISOOUT_Callback NOP_Process
|
|
||||||
#define INTR_WKUPINTR_Callback NOP_Process
|
|
||||||
|
|
||||||
/* Isochronous data update */
|
|
||||||
#define INTR_RXSTSQLVL_ISODU_Callback NOP_Process
|
|
||||||
|
|
||||||
/* Isochronous transfer parameters */
|
|
||||||
/* Size of a single Isochronous buffer (size of a single transfer) */
|
|
||||||
#define ISOC_BUFFER_SZE 1
|
|
||||||
/* Number of sub-buffers (number of single buffers/transfers), should be even */
|
|
||||||
#define NUM_SUB_BUFFERS 2
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
|
|
||||||
/* CTR service routines */
|
|
||||||
/* associated to defined endpoints */
|
|
||||||
/*#define EP1_IN_Callback NOP_Process
|
|
||||||
#define EP2_IN_Callback NOP_Process
|
|
||||||
#define EP3_IN_Callback NOP_Process
|
|
||||||
#define EP4_IN_Callback NOP_Process
|
|
||||||
#define EP5_IN_Callback NOP_Process
|
|
||||||
#define EP6_IN_Callback NOP_Process
|
|
||||||
#define EP7_IN_Callback NOP_Process
|
|
||||||
|
|
||||||
#define EP1_OUT_Callback NOP_Process
|
|
||||||
#define EP2_OUT_Callback NOP_Process
|
|
||||||
#define EP3_OUT_Callback NOP_Process
|
|
||||||
#define EP4_OUT_Callback NOP_Process
|
|
||||||
#define EP5_OUT_Callback NOP_Process
|
|
||||||
#define EP6_OUT_Callback NOP_Process
|
|
||||||
#define EP7_OUT_Callback NOP_Process*/
|
|
||||||
|
|
||||||
#endif /* __USB_CONF_H */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,161 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_desc.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Descriptors for Virtual Com Port Demo
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_lib.h"
|
|
||||||
#include "usb_desc.h"
|
|
||||||
|
|
||||||
/* USB Standard Device Descriptor */
|
|
||||||
const uint8_t Virtual_Com_Port_DeviceDescriptor[] =
|
|
||||||
{
|
|
||||||
0x12, /* bLength */
|
|
||||||
USB_DEVICE_DESCRIPTOR_TYPE, /* bDescriptorType */
|
|
||||||
0x00,
|
|
||||||
0x02, /* bcdUSB = 2.00 */
|
|
||||||
0x02, /* bDeviceClass: CDC */
|
|
||||||
0x00, /* bDeviceSubClass */
|
|
||||||
0x00, /* bDeviceProtocol */
|
|
||||||
0x40, /* bMaxPacketSize0 */
|
|
||||||
0x83,
|
|
||||||
0x04, /* idVendor = 0x0483 */
|
|
||||||
0x40,
|
|
||||||
0x57, /* idProduct = 0x7540 */
|
|
||||||
0x00,
|
|
||||||
0x02, /* bcdDevice = 2.00 */
|
|
||||||
1, /* Index of string descriptor describing manufacturer */
|
|
||||||
2, /* Index of string descriptor describing product */
|
|
||||||
3, /* Index of string descriptor describing the device's serial number */
|
|
||||||
0x01 /* bNumConfigurations */
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint8_t Virtual_Com_Port_ConfigDescriptor[] =
|
|
||||||
{
|
|
||||||
/*Configuation Descriptor*/
|
|
||||||
0x09, /* bLength: Configuation Descriptor size */
|
|
||||||
USB_CONFIGURATION_DESCRIPTOR_TYPE, /* bDescriptorType: Configuration */
|
|
||||||
VIRTUAL_COM_PORT_SIZ_CONFIG_DESC, /* wTotalLength:no of returned bytes */
|
|
||||||
0x00,
|
|
||||||
0x02, /* bNumInterfaces: 2 interface */
|
|
||||||
0x01, /* bConfigurationValue: Configuration value */
|
|
||||||
0x00, /* iConfiguration: Index of string descriptor describing the configuration */
|
|
||||||
0xC0, /* bmAttributes: self powered */
|
|
||||||
0x32, /* MaxPower 0 mA */
|
|
||||||
/*Interface Descriptor*/
|
|
||||||
0x09, /* bLength: Interface Descriptor size */
|
|
||||||
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: Interface */
|
|
||||||
/* Interface descriptor type */
|
|
||||||
0x00, /* bInterfaceNumber: Number of Interface */
|
|
||||||
0x00, /* bAlternateSetting: Alternate setting */
|
|
||||||
0x01, /* bNumEndpoints: One endpoints used */
|
|
||||||
0x02, /* bInterfaceClass: Communication Interface Class */
|
|
||||||
0x02, /* bInterfaceSubClass: Abstract Control Model */
|
|
||||||
0x01, /* bInterfaceProtocol: Common AT commands */
|
|
||||||
0x00, /* iInterface: */
|
|
||||||
/*Header Functional Descriptor*/
|
|
||||||
0x05, /* bLength: Endpoint Descriptor size */
|
|
||||||
0x24, /* bDescriptorType: CS_INTERFACE */
|
|
||||||
0x00, /* bDescriptorSubtype: Header Func Desc */
|
|
||||||
0x10, /* bcdCDC: spec release number */
|
|
||||||
0x01,
|
|
||||||
/*Call Managment Functional Descriptor*/
|
|
||||||
0x05, /* bFunctionLength */
|
|
||||||
0x24, /* bDescriptorType: CS_INTERFACE */
|
|
||||||
0x01, /* bDescriptorSubtype: Call Management Func Desc */
|
|
||||||
0x00, /* bmCapabilities: D0+D1 */
|
|
||||||
0x01, /* bDataInterface: 1 */
|
|
||||||
/*ACM Functional Descriptor*/
|
|
||||||
0x04, /* bFunctionLength */
|
|
||||||
0x24, /* bDescriptorType: CS_INTERFACE */
|
|
||||||
0x02, /* bDescriptorSubtype: Abstract Control Management desc */
|
|
||||||
0x02, /* bmCapabilities */
|
|
||||||
/*Union Functional Descriptor*/
|
|
||||||
0x05, /* bFunctionLength */
|
|
||||||
0x24, /* bDescriptorType: CS_INTERFACE */
|
|
||||||
0x06, /* bDescriptorSubtype: Union func desc */
|
|
||||||
0x00, /* bMasterInterface: Communication class interface */
|
|
||||||
0x01, /* bSlaveInterface0: Data Class Interface */
|
|
||||||
/*Endpoint 2 Descriptor*/
|
|
||||||
0x07, /* bLength: Endpoint Descriptor size */
|
|
||||||
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */
|
|
||||||
0x82, /* bEndpointAddress: (IN2) */
|
|
||||||
0x03, /* bmAttributes: Interrupt */
|
|
||||||
VIRTUAL_COM_PORT_INT_SIZE, /* wMaxPacketSize: */
|
|
||||||
0x00,
|
|
||||||
0xFF, /* bInterval: */
|
|
||||||
/*Data class interface descriptor*/
|
|
||||||
0x09, /* bLength: Endpoint Descriptor size */
|
|
||||||
USB_INTERFACE_DESCRIPTOR_TYPE, /* bDescriptorType: */
|
|
||||||
0x01, /* bInterfaceNumber: Number of Interface */
|
|
||||||
0x00, /* bAlternateSetting: Alternate setting */
|
|
||||||
0x02, /* bNumEndpoints: Two endpoints used */
|
|
||||||
0x0A, /* bInterfaceClass: CDC */
|
|
||||||
0x00, /* bInterfaceSubClass: */
|
|
||||||
0x00, /* bInterfaceProtocol: */
|
|
||||||
0x00, /* iInterface: */
|
|
||||||
/*Endpoint 3 Descriptor*/
|
|
||||||
0x07, /* bLength: Endpoint Descriptor size */
|
|
||||||
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */
|
|
||||||
0x03, /* bEndpointAddress: (OUT3) */
|
|
||||||
0x02, /* bmAttributes: Bulk */
|
|
||||||
VIRTUAL_COM_PORT_DATA_SIZE, /* wMaxPacketSize: */
|
|
||||||
0x00,
|
|
||||||
0x00, /* bInterval: ignore for Bulk transfer */
|
|
||||||
/*Endpoint 1 Descriptor*/
|
|
||||||
0x07, /* bLength: Endpoint Descriptor size */
|
|
||||||
USB_ENDPOINT_DESCRIPTOR_TYPE, /* bDescriptorType: Endpoint */
|
|
||||||
0x81, /* bEndpointAddress: (IN1) */
|
|
||||||
0x02, /* bmAttributes: Bulk */
|
|
||||||
VIRTUAL_COM_PORT_DATA_SIZE, /* wMaxPacketSize: */
|
|
||||||
0x00,
|
|
||||||
0x00 /* bInterval */
|
|
||||||
};
|
|
||||||
|
|
||||||
/* USB String Descriptors */
|
|
||||||
const uint8_t Virtual_Com_Port_StringLangID[VIRTUAL_COM_PORT_SIZ_STRING_LANGID] =
|
|
||||||
{
|
|
||||||
VIRTUAL_COM_PORT_SIZ_STRING_LANGID,
|
|
||||||
USB_STRING_DESCRIPTOR_TYPE,
|
|
||||||
0x09,
|
|
||||||
0x04 /* LangID = 0x0409: U.S. English */
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint8_t Virtual_Com_Port_StringVendor[VIRTUAL_COM_PORT_SIZ_STRING_VENDOR] =
|
|
||||||
{
|
|
||||||
VIRTUAL_COM_PORT_SIZ_STRING_VENDOR, /* Size of Vendor string */
|
|
||||||
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType*/
|
|
||||||
/* Manufacturer: "STMicroelectronics" */
|
|
||||||
'S', 0, 'T', 0, 'M', 0, 'i', 0, 'c', 0, 'r', 0, 'o', 0, 'e', 0,
|
|
||||||
'l', 0, 'e', 0, 'c', 0, 't', 0, 'r', 0, 'o', 0, 'n', 0, 'i', 0,
|
|
||||||
'c', 0, 's', 0
|
|
||||||
};
|
|
||||||
|
|
||||||
const uint8_t Virtual_Com_Port_StringProduct[VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT] =
|
|
||||||
{
|
|
||||||
VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT, /* bLength */
|
|
||||||
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
|
|
||||||
/* Product name: "STM32 Virtual COM Port" */
|
|
||||||
'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, ' ', 0, 'V', 0, 'i', 0,
|
|
||||||
'r', 0, 't', 0, 'u', 0, 'a', 0, 'l', 0, ' ', 0, 'C', 0, 'O', 0,
|
|
||||||
'M', 0, ' ', 0, 'P', 0, 'o', 0, 'r', 0, 't', 0, ' ', 0, ' ', 0
|
|
||||||
};
|
|
||||||
|
|
||||||
uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL] =
|
|
||||||
{
|
|
||||||
VIRTUAL_COM_PORT_SIZ_STRING_SERIAL, /* bLength */
|
|
||||||
USB_STRING_DESCRIPTOR_TYPE, /* bDescriptorType */
|
|
||||||
'S', 0, 'T', 0, 'M', 0, '3', 0, '2', 0, '1', 0, '0', 0
|
|
||||||
};
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,53 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_desc.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Descriptor Header for Virtual COM Port Device
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_DESC_H
|
|
||||||
#define __USB_DESC_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported define -----------------------------------------------------------*/
|
|
||||||
#define USB_DEVICE_DESCRIPTOR_TYPE 0x01
|
|
||||||
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
|
|
||||||
#define USB_STRING_DESCRIPTOR_TYPE 0x03
|
|
||||||
#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04
|
|
||||||
#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05
|
|
||||||
|
|
||||||
#define VIRTUAL_COM_PORT_DATA_SIZE 16
|
|
||||||
#define VIRTUAL_COM_PORT_INT_SIZE 8
|
|
||||||
|
|
||||||
#define VIRTUAL_COM_PORT_SIZ_DEVICE_DESC 18
|
|
||||||
#define VIRTUAL_COM_PORT_SIZ_CONFIG_DESC 67
|
|
||||||
#define VIRTUAL_COM_PORT_SIZ_STRING_LANGID 4
|
|
||||||
#define VIRTUAL_COM_PORT_SIZ_STRING_VENDOR 38
|
|
||||||
#define VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT 50
|
|
||||||
#define VIRTUAL_COM_PORT_SIZ_STRING_SERIAL 26
|
|
||||||
|
|
||||||
#define STANDARD_ENDPOINT_DESC_SIZE 0x09
|
|
||||||
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
extern const uint8_t Virtual_Com_Port_DeviceDescriptor[VIRTUAL_COM_PORT_SIZ_DEVICE_DESC];
|
|
||||||
extern const uint8_t Virtual_Com_Port_ConfigDescriptor[VIRTUAL_COM_PORT_SIZ_CONFIG_DESC];
|
|
||||||
|
|
||||||
extern const uint8_t Virtual_Com_Port_StringLangID[VIRTUAL_COM_PORT_SIZ_STRING_LANGID];
|
|
||||||
extern const uint8_t Virtual_Com_Port_StringVendor[VIRTUAL_COM_PORT_SIZ_STRING_VENDOR];
|
|
||||||
extern const uint8_t Virtual_Com_Port_StringProduct[VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT];
|
|
||||||
extern uint8_t Virtual_Com_Port_StringSerial[VIRTUAL_COM_PORT_SIZ_STRING_SERIAL];
|
|
||||||
|
|
||||||
#endif /* __USB_DESC_H */
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,67 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_endp.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Endpoint routines
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_lib.h"
|
|
||||||
#include "usb_desc.h"
|
|
||||||
#include "usb_mem.h"
|
|
||||||
#include "hw_config.h"
|
|
||||||
#include "usb_istr.h"
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
uint8_t buffer_out[VIRTUAL_COM_PORT_DATA_SIZE];
|
|
||||||
uint8_t buffer_in[VIRTUAL_COM_PORT_DATA_SIZE];
|
|
||||||
|
|
||||||
__IO uint32_t count_out = 0;
|
|
||||||
uint32_t count_in = 0;
|
|
||||||
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : EP1_IN_Callback
|
|
||||||
* Description :
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void EP3_IN_Callback(void)
|
|
||||||
{
|
|
||||||
count_in = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : EP3_IN_Callback
|
|
||||||
* Description :
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void EP5_OUT_Callback(void)
|
|
||||||
{
|
|
||||||
/* Get the received data buffer and update the counter */
|
|
||||||
count_out = USB_SIL_Read(EP5_OUT, buffer_out);
|
|
||||||
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
/* Enable the receive of data on EP3 */
|
|
||||||
SetEPRxValid(ENDP3);
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
||||||
@@ -1,419 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_istr.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : ISTR events interrupt service routines
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_lib.h"
|
|
||||||
#include "usb_prop.h"
|
|
||||||
#include "usb_pwr.h"
|
|
||||||
#include "usb_istr.h"
|
|
||||||
|
|
||||||
/* function prototypes Automatically built defining related macros */
|
|
||||||
void NOP_Proc(void) {
|
|
||||||
}
|
|
||||||
|
|
||||||
#define WEAK __attribute__ ((weak))
|
|
||||||
void WEAK EP1_IN_Callback(void);
|
|
||||||
void WEAK EP2_IN_Callback(void);
|
|
||||||
void WEAK EP3_IN_Callback(void);
|
|
||||||
void WEAK EP4_IN_Callback(void);
|
|
||||||
void WEAK EP5_IN_Callback(void);
|
|
||||||
void WEAK EP6_IN_Callback(void);
|
|
||||||
void WEAK EP7_IN_Callback(void);
|
|
||||||
|
|
||||||
void WEAK EP1_OUT_Callback(void);
|
|
||||||
void WEAK EP2_OUT_Callback(void);
|
|
||||||
void WEAK EP3_OUT_Callback(void);
|
|
||||||
void WEAK EP4_OUT_Callback(void);
|
|
||||||
void WEAK EP5_OUT_Callback(void);
|
|
||||||
void WEAK EP6_OUT_Callback(void);
|
|
||||||
void WEAK EP7_OUT_Callback(void);
|
|
||||||
|
|
||||||
#pragma weak EP1_IN_Callback = NOP_Proc
|
|
||||||
#pragma weak EP2_IN_Callback = NOP_Proc
|
|
||||||
#pragma weak EP3_IN_Callback = NOP_Proc
|
|
||||||
#pragma weak EP4_IN_Callback = NOP_Proc
|
|
||||||
#pragma weak EP5_IN_Callback = NOP_Proc
|
|
||||||
#pragma weak EP6_IN_Callback = NOP_Proc
|
|
||||||
#pragma weak EP7_IN_Callback = NOP_Proc
|
|
||||||
|
|
||||||
#pragma weak EP1_OUT_Callback = NOP_Proc
|
|
||||||
#pragma weak EP2_OUT_Callback = NOP_Proc
|
|
||||||
#pragma weak EP3_OUT_Callback = NOP_Proc
|
|
||||||
#pragma weak EP4_OUT_Callback = NOP_Proc
|
|
||||||
#pragma weak EP5_OUT_Callback = NOP_Proc
|
|
||||||
#pragma weak EP6_OUT_Callback = NOP_Proc
|
|
||||||
#pragma weak EP7_OUT_Callback = NOP_Proc
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
__IO uint16_t wIstr; /* ISTR register last read value */
|
|
||||||
__IO uint8_t bIntPackSOF = 0; /* SOFs received between 2 consecutive packets */
|
|
||||||
|
|
||||||
/* Extern variables ----------------------------------------------------------*/
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
/* function pointers to non-control endpoints service routines */
|
|
||||||
void (*const pEpInt_IN[7])(void) =
|
|
||||||
{
|
|
||||||
EP1_IN_Callback,
|
|
||||||
EP2_IN_Callback,
|
|
||||||
EP3_IN_Callback,
|
|
||||||
EP4_IN_Callback,
|
|
||||||
EP5_IN_Callback,
|
|
||||||
EP6_IN_Callback,
|
|
||||||
EP7_IN_Callback,
|
|
||||||
};
|
|
||||||
|
|
||||||
void (*const pEpInt_OUT[7])(void) =
|
|
||||||
{
|
|
||||||
EP1_OUT_Callback,
|
|
||||||
EP2_OUT_Callback,
|
|
||||||
EP3_OUT_Callback,
|
|
||||||
EP4_OUT_Callback,
|
|
||||||
EP5_OUT_Callback,
|
|
||||||
EP6_OUT_Callback,
|
|
||||||
EP7_OUT_Callback,
|
|
||||||
};
|
|
||||||
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : USB_Istr
|
|
||||||
* Description : STR events interrupt service routine
|
|
||||||
* Input :
|
|
||||||
* Output :
|
|
||||||
* Return :
|
|
||||||
*******************************************************************************/
|
|
||||||
void USB_Istr(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
wIstr = _GetISTR();
|
|
||||||
|
|
||||||
#if (IMR_MSK & ISTR_CTR)
|
|
||||||
if (wIstr & ISTR_CTR & wInterrupt_Mask)
|
|
||||||
{
|
|
||||||
/* servicing of the endpoint correct transfer interrupt */
|
|
||||||
/* clear of the CTR flag into the sub */
|
|
||||||
CTR_LP();
|
|
||||||
#ifdef CTR_CALLBACK
|
|
||||||
CTR_Callback();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
#if (IMR_MSK & ISTR_RESET)
|
|
||||||
if (wIstr & ISTR_RESET & wInterrupt_Mask)
|
|
||||||
{
|
|
||||||
_SetISTR((uint16_t)CLR_RESET);
|
|
||||||
Device_Property.Reset();
|
|
||||||
#ifdef RESET_CALLBACK
|
|
||||||
RESET_Callback();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
#if (IMR_MSK & ISTR_DOVR)
|
|
||||||
if (wIstr & ISTR_DOVR & wInterrupt_Mask)
|
|
||||||
{
|
|
||||||
_SetISTR((uint16_t)CLR_DOVR);
|
|
||||||
#ifdef DOVR_CALLBACK
|
|
||||||
DOVR_Callback();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
#if (IMR_MSK & ISTR_ERR)
|
|
||||||
if (wIstr & ISTR_ERR & wInterrupt_Mask)
|
|
||||||
{
|
|
||||||
_SetISTR((uint16_t)CLR_ERR);
|
|
||||||
#ifdef ERR_CALLBACK
|
|
||||||
ERR_Callback();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
#if (IMR_MSK & ISTR_WKUP)
|
|
||||||
if (wIstr & ISTR_WKUP & wInterrupt_Mask)
|
|
||||||
{
|
|
||||||
_SetISTR((uint16_t)CLR_WKUP);
|
|
||||||
Resume(RESUME_EXTERNAL);
|
|
||||||
#ifdef WKUP_CALLBACK
|
|
||||||
WKUP_Callback();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
#if (IMR_MSK & ISTR_SUSP)
|
|
||||||
if (wIstr & ISTR_SUSP & wInterrupt_Mask)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* check if SUSPEND is possible */
|
|
||||||
if (fSuspendEnabled)
|
|
||||||
{
|
|
||||||
Suspend();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* if not possible then resume after xx ms */
|
|
||||||
Resume(RESUME_LATER);
|
|
||||||
}
|
|
||||||
/* clear of the ISTR bit must be done after setting of CNTR_FSUSP */
|
|
||||||
_SetISTR((uint16_t)CLR_SUSP);
|
|
||||||
#ifdef SUSP_CALLBACK
|
|
||||||
SUSP_Callback();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
#if (IMR_MSK & ISTR_SOF)
|
|
||||||
if (wIstr & ISTR_SOF & wInterrupt_Mask)
|
|
||||||
{
|
|
||||||
_SetISTR((uint16_t)CLR_SOF);
|
|
||||||
bIntPackSOF++;
|
|
||||||
|
|
||||||
#ifdef SOF_CALLBACK
|
|
||||||
SOF_Callback();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
#if (IMR_MSK & ISTR_ESOF)
|
|
||||||
if (wIstr & ISTR_ESOF & wInterrupt_Mask)
|
|
||||||
{
|
|
||||||
_SetISTR((uint16_t)CLR_ESOF);
|
|
||||||
/* resume handling timing is made with ESOFs */
|
|
||||||
Resume(RESUME_ESOF); /* request without change of the machine state */
|
|
||||||
|
|
||||||
#ifdef ESOF_CALLBACK
|
|
||||||
ESOF_Callback();
|
|
||||||
#endif
|
|
||||||
}
|
|
||||||
#endif
|
|
||||||
} /* USB_Istr */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
#else /* STM32F10X_CL */
|
|
||||||
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : STM32_PCD_OTG_ISR_Handler
|
|
||||||
* Description : Handles all USB Device Interrupts
|
|
||||||
* Input : None
|
|
||||||
* Output : None
|
|
||||||
* Return : status
|
|
||||||
*******************************************************************************/
|
|
||||||
u32 STM32_PCD_OTG_ISR_Handler (void)
|
|
||||||
{
|
|
||||||
USB_OTG_int_sts_data gintr_status;
|
|
||||||
u32 retval = 0;
|
|
||||||
|
|
||||||
if (IsDeviceMode()) /* ensure that we are in device mode */
|
|
||||||
{
|
|
||||||
gintr_status.d32 = OTGD_FS_ReadCoreItr();
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
|
|
||||||
/* If there is no interrupt pending exit the interrupt routine */
|
|
||||||
if (!gintr_status.d32)
|
|
||||||
{
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Early Suspend interrupt */
|
|
||||||
#ifdef INTR_ERLYSUSPEND
|
|
||||||
if (gintr_status.b.erlysuspend)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_EarlySuspend_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_ERLYSUSPEND */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* End of Periodic Frame interrupt */
|
|
||||||
#ifdef INTR_EOPFRAME
|
|
||||||
if (gintr_status.b.eopframe)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_EOPF_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_EOPFRAME */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Non Periodic Tx FIFO Emty interrupt */
|
|
||||||
#ifdef INTR_NPTXFEMPTY
|
|
||||||
if (gintr_status.b.nptxfempty)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_NPTxFE_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_NPTXFEMPTY */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Wakeup or RemoteWakeup interrupt */
|
|
||||||
#ifdef INTR_WKUPINTR
|
|
||||||
if (gintr_status.b.wkupintr)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_Wakeup_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_WKUPINTR */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Suspend interrupt */
|
|
||||||
#ifdef INTR_USBSUSPEND
|
|
||||||
if (gintr_status.b.usbsuspend)
|
|
||||||
{
|
|
||||||
/* check if SUSPEND is possible */
|
|
||||||
if (fSuspendEnabled)
|
|
||||||
{
|
|
||||||
Suspend();
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
/* if not possible then resume after xx ms */
|
|
||||||
Resume(RESUME_LATER); /* This case shouldn't happen in OTG Device mode because
|
|
||||||
there's no ESOF interrupt to increment the ResumeS.bESOFcnt in the Resume state machine */
|
|
||||||
}
|
|
||||||
|
|
||||||
retval |= OTGD_FS_Handle_USBSuspend_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_USBSUSPEND */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Start of Frame interrupt */
|
|
||||||
#ifdef INTR_SOFINTR
|
|
||||||
if (gintr_status.b.sofintr)
|
|
||||||
{
|
|
||||||
/* Update the frame number variable */
|
|
||||||
bIntPackSOF++;
|
|
||||||
|
|
||||||
retval |= OTGD_FS_Handle_Sof_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_SOFINTR */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Receive FIFO Queue Status Level interrupt */
|
|
||||||
#ifdef INTR_RXSTSQLVL
|
|
||||||
if (gintr_status.b.rxstsqlvl)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_RxStatusQueueLevel_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_RXSTSQLVL */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Enumeration Done interrupt */
|
|
||||||
#ifdef INTR_ENUMDONE
|
|
||||||
if (gintr_status.b.enumdone)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_EnumDone_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_ENUMDONE */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Reset interrutp */
|
|
||||||
#ifdef INTR_USBRESET
|
|
||||||
if (gintr_status.b.usbreset)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_UsbReset_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_USBRESET */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* IN Endpoint interrupt */
|
|
||||||
#ifdef INTR_INEPINTR
|
|
||||||
if (gintr_status.b.inepint)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_InEP_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_INEPINTR */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* OUT Endpoint interrupt */
|
|
||||||
#ifdef INTR_OUTEPINTR
|
|
||||||
if (gintr_status.b.outepintr)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_OutEP_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_OUTEPINTR */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Mode Mismatch interrupt */
|
|
||||||
#ifdef INTR_MODEMISMATCH
|
|
||||||
if (gintr_status.b.modemismatch)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_ModeMismatch_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_MODEMISMATCH */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Global IN Endpoints NAK Effective interrupt */
|
|
||||||
#ifdef INTR_GINNAKEFF
|
|
||||||
if (gintr_status.b.ginnakeff)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_GInNakEff_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_GINNAKEFF */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Global OUT Endpoints NAK effective interrupt */
|
|
||||||
#ifdef INTR_GOUTNAKEFF
|
|
||||||
if (gintr_status.b.goutnakeff)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_GOutNakEff_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_GOUTNAKEFF */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Isochrounous Out packet Dropped interrupt */
|
|
||||||
#ifdef INTR_ISOOUTDROP
|
|
||||||
if (gintr_status.b.isooutdrop)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_IsoOutDrop_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_ISOOUTDROP */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Endpoint Mismatch error interrupt */
|
|
||||||
#ifdef INTR_EPMISMATCH
|
|
||||||
if (gintr_status.b.epmismatch)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_EPMismatch_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_EPMISMATCH */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Incomplete Isochrous IN tranfer error interrupt */
|
|
||||||
#ifdef INTR_INCOMPLISOIN
|
|
||||||
if (gintr_status.b.incomplisoin)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_IncomplIsoIn_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_INCOMPLISOIN */
|
|
||||||
|
|
||||||
/*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*-*/
|
|
||||||
/* Incomplete Isochrous OUT tranfer error interrupt */
|
|
||||||
#ifdef INTR_INCOMPLISOOUT
|
|
||||||
if (gintr_status.b.outepintr)
|
|
||||||
{
|
|
||||||
retval |= OTGD_FS_Handle_IncomplIsoOut_ISR();
|
|
||||||
}
|
|
||||||
#endif /* INTR_INCOMPLISOOUT */
|
|
||||||
|
|
||||||
}
|
|
||||||
return retval;
|
|
||||||
}
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,104 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_istr.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : This file includes the peripherals header files in the
|
|
||||||
* user application.
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_ISTR_H
|
|
||||||
#define __USB_ISTR_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_conf.h"
|
|
||||||
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
void USB_Istr(void);
|
|
||||||
#else /* STM32F10X_CL */
|
|
||||||
u32 STM32_PCD_OTG_ISR_Handler(void);
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
|
|
||||||
#ifdef CTR_CALLBACK
|
|
||||||
void CTR_Callback(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef DOVR_CALLBACK
|
|
||||||
void DOVR_Callback(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ERR_CALLBACK
|
|
||||||
void ERR_Callback(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef WKUP_CALLBACK
|
|
||||||
void WKUP_Callback(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SUSP_CALLBACK
|
|
||||||
void SUSP_Callback(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef RESET_CALLBACK
|
|
||||||
void RESET_Callback(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef SOF_CALLBACK
|
|
||||||
void SOF_Callback(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef ESOF_CALLBACK
|
|
||||||
void ESOF_Callback(void);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#else /* STM32F10X_CL */
|
|
||||||
|
|
||||||
/* Interrupt subroutines user callbacks prototypes.
|
|
||||||
These callbacks are called into the respective interrupt sunroutine functinos
|
|
||||||
and can be tailored for various user application purposes.
|
|
||||||
Note: Make sure that the correspondant interrupt is enabled through the
|
|
||||||
definition in usb_conf.h file */
|
|
||||||
void INTR_MODEMISMATCH_Callback(void);
|
|
||||||
void INTR_SOFINTR_Callback(void);
|
|
||||||
void INTR_RXSTSQLVL_Callback(void);
|
|
||||||
void INTR_NPTXFEMPTY_Callback(void);
|
|
||||||
void INTR_GINNAKEFF_Callback(void);
|
|
||||||
void INTR_GOUTNAKEFF_Callback(void);
|
|
||||||
void INTR_ERLYSUSPEND_Callback(void);
|
|
||||||
void INTR_USBSUSPEND_Callback(void);
|
|
||||||
void INTR_USBRESET_Callback(void);
|
|
||||||
void INTR_ENUMDONE_Callback(void);
|
|
||||||
void INTR_ISOOUTDROP_Callback(void);
|
|
||||||
void INTR_EOPFRAME_Callback(void);
|
|
||||||
void INTR_EPMISMATCH_Callback(void);
|
|
||||||
void INTR_INEPINTR_Callback(void);
|
|
||||||
void INTR_OUTEPINTR_Callback(void);
|
|
||||||
void INTR_INCOMPLISOIN_Callback(void);
|
|
||||||
void INTR_INCOMPLISOOUT_Callback(void);
|
|
||||||
void INTR_WKUPINTR_Callback(void);
|
|
||||||
|
|
||||||
/* Isochronous data update */
|
|
||||||
void INTR_RXSTSQLVL_ISODU_Callback(void);
|
|
||||||
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
|
|
||||||
#endif /*__USB_ISTR_H*/
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,419 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_prop.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : All processing related to Virtual Com Port Demo
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "usb_lib.h"
|
|
||||||
#include "usb_conf.h"
|
|
||||||
#include "usb_prop.h"
|
|
||||||
#include "usb_desc.h"
|
|
||||||
#include "usb_pwr.h"
|
|
||||||
#include "hw_config.h"
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
uint8_t Request = 0;
|
|
||||||
|
|
||||||
LINE_CODING linecoding =
|
|
||||||
{
|
|
||||||
115200, /* baud rate*/
|
|
||||||
0x00, /* stop bits-1*/
|
|
||||||
0x00, /* parity - none*/
|
|
||||||
0x08 /* no. of bits 8*/
|
|
||||||
};
|
|
||||||
|
|
||||||
/* -------------------------------------------------------------------------- */
|
|
||||||
/* Structures initializations */
|
|
||||||
/* -------------------------------------------------------------------------- */
|
|
||||||
|
|
||||||
DEVICE Device_Table =
|
|
||||||
{
|
|
||||||
EP_NUM,
|
|
||||||
1
|
|
||||||
};
|
|
||||||
|
|
||||||
DEVICE_PROP Device_Property =
|
|
||||||
{
|
|
||||||
Virtual_Com_Port_init,
|
|
||||||
Virtual_Com_Port_Reset,
|
|
||||||
Virtual_Com_Port_Status_In,
|
|
||||||
Virtual_Com_Port_Status_Out,
|
|
||||||
Virtual_Com_Port_Data_Setup,
|
|
||||||
Virtual_Com_Port_NoData_Setup,
|
|
||||||
Virtual_Com_Port_Get_Interface_Setting,
|
|
||||||
Virtual_Com_Port_GetDeviceDescriptor,
|
|
||||||
Virtual_Com_Port_GetConfigDescriptor,
|
|
||||||
Virtual_Com_Port_GetStringDescriptor,
|
|
||||||
0,
|
|
||||||
0x40 /*MAX PACKET SIZE*/
|
|
||||||
};
|
|
||||||
|
|
||||||
USER_STANDARD_REQUESTS User_Standard_Requests =
|
|
||||||
{
|
|
||||||
Virtual_Com_Port_GetConfiguration,
|
|
||||||
Virtual_Com_Port_SetConfiguration,
|
|
||||||
Virtual_Com_Port_GetInterface,
|
|
||||||
Virtual_Com_Port_SetInterface,
|
|
||||||
Virtual_Com_Port_GetStatus,
|
|
||||||
Virtual_Com_Port_ClearFeature,
|
|
||||||
Virtual_Com_Port_SetEndPointFeature,
|
|
||||||
Virtual_Com_Port_SetDeviceFeature,
|
|
||||||
Virtual_Com_Port_SetDeviceAddress
|
|
||||||
};
|
|
||||||
|
|
||||||
ONE_DESCRIPTOR Device_Descriptor =
|
|
||||||
{
|
|
||||||
(uint8_t*)Virtual_Com_Port_DeviceDescriptor,
|
|
||||||
VIRTUAL_COM_PORT_SIZ_DEVICE_DESC
|
|
||||||
};
|
|
||||||
|
|
||||||
ONE_DESCRIPTOR Config_Descriptor =
|
|
||||||
{
|
|
||||||
(uint8_t*)Virtual_Com_Port_ConfigDescriptor,
|
|
||||||
VIRTUAL_COM_PORT_SIZ_CONFIG_DESC
|
|
||||||
};
|
|
||||||
|
|
||||||
ONE_DESCRIPTOR String_Descriptor[4] =
|
|
||||||
{
|
|
||||||
{(uint8_t*)Virtual_Com_Port_StringLangID, VIRTUAL_COM_PORT_SIZ_STRING_LANGID},
|
|
||||||
{(uint8_t*)Virtual_Com_Port_StringVendor, VIRTUAL_COM_PORT_SIZ_STRING_VENDOR},
|
|
||||||
{(uint8_t*)Virtual_Com_Port_StringProduct, VIRTUAL_COM_PORT_SIZ_STRING_PRODUCT},
|
|
||||||
{(uint8_t*)Virtual_Com_Port_StringSerial, VIRTUAL_COM_PORT_SIZ_STRING_SERIAL}
|
|
||||||
};
|
|
||||||
|
|
||||||
/* Extern variables ----------------------------------------------------------*/
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
/* Extern function prototypes ------------------------------------------------*/
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_init.
|
|
||||||
* Description : Virtual COM Port Mouse init routine.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Virtual_Com_Port_init(void)
|
|
||||||
{
|
|
||||||
|
|
||||||
/* Update the serial number string descriptor with the data from the unique
|
|
||||||
ID*/
|
|
||||||
Get_SerialNum();
|
|
||||||
|
|
||||||
pInformation->Current_Configuration = 0;
|
|
||||||
|
|
||||||
/* Connect the device */
|
|
||||||
PowerOn();
|
|
||||||
|
|
||||||
/* Perform basic device initialization operations */
|
|
||||||
USB_SIL_Init();
|
|
||||||
|
|
||||||
/* configure the USART to the default settings */
|
|
||||||
//USART_Config_Default();
|
|
||||||
|
|
||||||
bDeviceState = UNCONNECTED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_Reset
|
|
||||||
* Description : Virtual_Com_Port Mouse reset routine
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Virtual_Com_Port_Reset(void)
|
|
||||||
{
|
|
||||||
/* Set Virtual_Com_Port DEVICE as not configured */
|
|
||||||
pInformation->Current_Configuration = 0;
|
|
||||||
|
|
||||||
/* Current Feature initialization */
|
|
||||||
pInformation->Current_Feature = Virtual_Com_Port_ConfigDescriptor[7];
|
|
||||||
|
|
||||||
/* Set Virtual_Com_Port DEVICE with the default Interface*/
|
|
||||||
pInformation->Current_Interface = 0;
|
|
||||||
|
|
||||||
#ifdef STM32F10X_CL
|
|
||||||
/* EP0 is already configured by USB_SIL_Init() function */
|
|
||||||
|
|
||||||
/* Init EP1 IN as Bulk endpoint */
|
|
||||||
OTG_DEV_EP_Init(EP1_IN, OTG_DEV_EP_TYPE_BULK, VIRTUAL_COM_PORT_DATA_SIZE);
|
|
||||||
|
|
||||||
/* Init EP2 IN as Interrupt endpoint */
|
|
||||||
OTG_DEV_EP_Init(EP2_IN, OTG_DEV_EP_TYPE_INT, VIRTUAL_COM_PORT_INT_SIZE);
|
|
||||||
|
|
||||||
/* Init EP3 OUT as Bulk endpoint */
|
|
||||||
OTG_DEV_EP_Init(EP3_OUT, OTG_DEV_EP_TYPE_BULK, VIRTUAL_COM_PORT_DATA_SIZE);
|
|
||||||
#else
|
|
||||||
|
|
||||||
SetBTABLE(BTABLE_ADDRESS);
|
|
||||||
|
|
||||||
/* Initialize Endpoint 0 */
|
|
||||||
SetEPType(ENDP0, EP_CONTROL);
|
|
||||||
SetEPTxStatus(ENDP0, EP_TX_STALL);
|
|
||||||
SetEPRxAddr(ENDP0, ENDP0_RXADDR);
|
|
||||||
SetEPTxAddr(ENDP0, ENDP0_TXADDR);
|
|
||||||
Clear_Status_Out(ENDP0);
|
|
||||||
SetEPRxCount(ENDP0, Device_Property.MaxPacketSize);
|
|
||||||
SetEPRxValid(ENDP0);
|
|
||||||
|
|
||||||
/* Initialize Endpoint 1 */
|
|
||||||
SetEPType(ENDP1, EP_BULK);
|
|
||||||
SetEPTxAddr(ENDP1, ENDP1_TXADDR);
|
|
||||||
SetEPTxStatus(ENDP1, EP_TX_NAK);
|
|
||||||
SetEPRxStatus(ENDP1, EP_RX_DIS);
|
|
||||||
|
|
||||||
/* Initialize Endpoint 2 */
|
|
||||||
SetEPType(ENDP2, EP_INTERRUPT);
|
|
||||||
SetEPTxAddr(ENDP2, ENDP2_TXADDR);
|
|
||||||
SetEPRxStatus(ENDP2, EP_RX_DIS);
|
|
||||||
SetEPTxStatus(ENDP2, EP_TX_NAK);
|
|
||||||
|
|
||||||
/* Initialize Endpoint 3 */
|
|
||||||
SetEPType(ENDP3, EP_BULK);
|
|
||||||
SetEPRxAddr(ENDP3, ENDP3_RXADDR);
|
|
||||||
SetEPRxCount(ENDP3, VIRTUAL_COM_PORT_DATA_SIZE);
|
|
||||||
SetEPRxStatus(ENDP3, EP_RX_VALID);
|
|
||||||
SetEPTxStatus(ENDP3, EP_TX_DIS);
|
|
||||||
|
|
||||||
/* Set this device to response on default address */
|
|
||||||
SetDeviceAddress(0);
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
bDeviceState = ATTACHED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_SetConfiguration.
|
|
||||||
* Description : Udpade the device state to configured.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Virtual_Com_Port_SetConfiguration(void)
|
|
||||||
{
|
|
||||||
DEVICE_INFO *pInfo = &Device_Info;
|
|
||||||
|
|
||||||
if (pInfo->Current_Configuration != 0)
|
|
||||||
{
|
|
||||||
/* Device configured */
|
|
||||||
bDeviceState = CONFIGURED;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_SetConfiguration.
|
|
||||||
* Description : Udpade the device state to addressed.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Virtual_Com_Port_SetDeviceAddress (void)
|
|
||||||
{
|
|
||||||
bDeviceState = ADDRESSED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_Status_In.
|
|
||||||
* Description : Virtual COM Port Status In Routine.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Virtual_Com_Port_Status_In(void)
|
|
||||||
{
|
|
||||||
if (Request == SET_LINE_CODING)
|
|
||||||
{
|
|
||||||
//USART_Config();
|
|
||||||
Request = 0;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_Status_Out
|
|
||||||
* Description : Virtual COM Port Status OUT Routine.
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Virtual_Com_Port_Status_Out(void)
|
|
||||||
{}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_Data_Setup
|
|
||||||
* Description : handle the data class specific requests
|
|
||||||
* Input : Request Nb.
|
|
||||||
* Output : None.
|
|
||||||
* Return : USB_UNSUPPORT or USB_SUCCESS.
|
|
||||||
*******************************************************************************/
|
|
||||||
RESULT Virtual_Com_Port_Data_Setup(uint8_t RequestNo)
|
|
||||||
{
|
|
||||||
uint8_t *(*CopyRoutine)(uint16_t);
|
|
||||||
|
|
||||||
CopyRoutine = NULL;
|
|
||||||
|
|
||||||
if (RequestNo == GET_LINE_CODING)
|
|
||||||
{
|
|
||||||
if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
|
|
||||||
{
|
|
||||||
CopyRoutine = Virtual_Com_Port_GetLineCoding;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
else if (RequestNo == SET_LINE_CODING)
|
|
||||||
{
|
|
||||||
if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
|
|
||||||
{
|
|
||||||
CopyRoutine = Virtual_Com_Port_SetLineCoding;
|
|
||||||
}
|
|
||||||
Request = SET_LINE_CODING;
|
|
||||||
}
|
|
||||||
|
|
||||||
if (CopyRoutine == NULL)
|
|
||||||
{
|
|
||||||
return USB_UNSUPPORT;
|
|
||||||
}
|
|
||||||
|
|
||||||
pInformation->Ctrl_Info.CopyData = CopyRoutine;
|
|
||||||
pInformation->Ctrl_Info.Usb_wOffset = 0;
|
|
||||||
(*CopyRoutine)(0);
|
|
||||||
return USB_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_NoData_Setup.
|
|
||||||
* Description : handle the no data class specific requests.
|
|
||||||
* Input : Request Nb.
|
|
||||||
* Output : None.
|
|
||||||
* Return : USB_UNSUPPORT or USB_SUCCESS.
|
|
||||||
*******************************************************************************/
|
|
||||||
RESULT Virtual_Com_Port_NoData_Setup(uint8_t RequestNo)
|
|
||||||
{
|
|
||||||
|
|
||||||
if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT))
|
|
||||||
{
|
|
||||||
if (RequestNo == SET_COMM_FEATURE)
|
|
||||||
{
|
|
||||||
return USB_SUCCESS;
|
|
||||||
}
|
|
||||||
else if (RequestNo == SET_CONTROL_LINE_STATE)
|
|
||||||
{
|
|
||||||
return USB_SUCCESS;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
return USB_UNSUPPORT;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_GetDeviceDescriptor.
|
|
||||||
* Description : Gets the device descriptor.
|
|
||||||
* Input : Length.
|
|
||||||
* Output : None.
|
|
||||||
* Return : The address of the device descriptor.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint8_t *Virtual_Com_Port_GetDeviceDescriptor(uint16_t Length)
|
|
||||||
{
|
|
||||||
return Standard_GetDescriptorData(Length, &Device_Descriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_GetConfigDescriptor.
|
|
||||||
* Description : get the configuration descriptor.
|
|
||||||
* Input : Length.
|
|
||||||
* Output : None.
|
|
||||||
* Return : The address of the configuration descriptor.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint8_t *Virtual_Com_Port_GetConfigDescriptor(uint16_t Length)
|
|
||||||
{
|
|
||||||
return Standard_GetDescriptorData(Length, &Config_Descriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_GetStringDescriptor
|
|
||||||
* Description : Gets the string descriptors according to the needed index
|
|
||||||
* Input : Length.
|
|
||||||
* Output : None.
|
|
||||||
* Return : The address of the string descriptors.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint8_t *Virtual_Com_Port_GetStringDescriptor(uint16_t Length)
|
|
||||||
{
|
|
||||||
uint8_t wValue0 = pInformation->USBwValue0;
|
|
||||||
if (wValue0 > 4)
|
|
||||||
{
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
return Standard_GetDescriptorData(Length, &String_Descriptor[wValue0]);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_Get_Interface_Setting.
|
|
||||||
* Description : test the interface and the alternate setting according to the
|
|
||||||
* supported one.
|
|
||||||
* Input1 : uint8_t: Interface : interface number.
|
|
||||||
* Input2 : uint8_t: AlternateSetting : Alternate Setting number.
|
|
||||||
* Output : None.
|
|
||||||
* Return : The address of the string descriptors.
|
|
||||||
*******************************************************************************/
|
|
||||||
RESULT Virtual_Com_Port_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting)
|
|
||||||
{
|
|
||||||
if (AlternateSetting > 0)
|
|
||||||
{
|
|
||||||
return USB_UNSUPPORT;
|
|
||||||
}
|
|
||||||
else if (Interface > 1)
|
|
||||||
{
|
|
||||||
return USB_UNSUPPORT;
|
|
||||||
}
|
|
||||||
return USB_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_GetLineCoding.
|
|
||||||
* Description : send the linecoding structure to the PC host.
|
|
||||||
* Input : Length.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Inecoding structure base address.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint8_t *Virtual_Com_Port_GetLineCoding(uint16_t Length)
|
|
||||||
{
|
|
||||||
if (Length == 0)
|
|
||||||
{
|
|
||||||
pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return(uint8_t *)&linecoding;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Virtual_Com_Port_SetLineCoding.
|
|
||||||
* Description : Set the linecoding structure fields.
|
|
||||||
* Input : Length.
|
|
||||||
* Output : None.
|
|
||||||
* Return : Linecoding structure base address.
|
|
||||||
*******************************************************************************/
|
|
||||||
uint8_t *Virtual_Com_Port_SetLineCoding(uint16_t Length)
|
|
||||||
{
|
|
||||||
if (Length == 0)
|
|
||||||
{
|
|
||||||
pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
return(uint8_t *)&linecoding;
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
||||||
@@ -1,74 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_prop.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : All processing related to Virtual COM Port Demo (Endpoint 0)
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __usb_prop_H
|
|
||||||
#define __usb_prop_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint32_t bitrate;
|
|
||||||
uint8_t format;
|
|
||||||
uint8_t paritytype;
|
|
||||||
uint8_t datatype;
|
|
||||||
}LINE_CODING;
|
|
||||||
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported define -----------------------------------------------------------*/
|
|
||||||
|
|
||||||
#define Virtual_Com_Port_GetConfiguration NOP_Process
|
|
||||||
//#define Virtual_Com_Port_SetConfiguration NOP_Process
|
|
||||||
#define Virtual_Com_Port_GetInterface NOP_Process
|
|
||||||
#define Virtual_Com_Port_SetInterface NOP_Process
|
|
||||||
#define Virtual_Com_Port_GetStatus NOP_Process
|
|
||||||
#define Virtual_Com_Port_ClearFeature NOP_Process
|
|
||||||
#define Virtual_Com_Port_SetEndPointFeature NOP_Process
|
|
||||||
#define Virtual_Com_Port_SetDeviceFeature NOP_Process
|
|
||||||
//#define Virtual_Com_Port_SetDeviceAddress NOP_Process
|
|
||||||
|
|
||||||
#define SEND_ENCAPSULATED_COMMAND 0x00
|
|
||||||
#define GET_ENCAPSULATED_RESPONSE 0x01
|
|
||||||
#define SET_COMM_FEATURE 0x02
|
|
||||||
#define GET_COMM_FEATURE 0x03
|
|
||||||
#define CLEAR_COMM_FEATURE 0x04
|
|
||||||
#define SET_LINE_CODING 0x20
|
|
||||||
#define GET_LINE_CODING 0x21
|
|
||||||
#define SET_CONTROL_LINE_STATE 0x22
|
|
||||||
#define SEND_BREAK 0x23
|
|
||||||
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
void Virtual_Com_Port_init(void);
|
|
||||||
void Virtual_Com_Port_Reset(void);
|
|
||||||
void Virtual_Com_Port_SetConfiguration(void);
|
|
||||||
void Virtual_Com_Port_SetDeviceAddress (void);
|
|
||||||
void Virtual_Com_Port_Status_In (void);
|
|
||||||
void Virtual_Com_Port_Status_Out (void);
|
|
||||||
RESULT Virtual_Com_Port_Data_Setup(uint8_t);
|
|
||||||
RESULT Virtual_Com_Port_NoData_Setup(uint8_t);
|
|
||||||
RESULT Virtual_Com_Port_Get_Interface_Setting(uint8_t Interface, uint8_t AlternateSetting);
|
|
||||||
uint8_t *Virtual_Com_Port_GetDeviceDescriptor(uint16_t );
|
|
||||||
uint8_t *Virtual_Com_Port_GetConfigDescriptor(uint16_t);
|
|
||||||
uint8_t *Virtual_Com_Port_GetStringDescriptor(uint16_t);
|
|
||||||
|
|
||||||
uint8_t *Virtual_Com_Port_GetLineCoding(uint16_t Length);
|
|
||||||
uint8_t *Virtual_Com_Port_SetLineCoding(uint16_t Length);
|
|
||||||
|
|
||||||
#endif /* __usb_prop_H */
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
|
|
||||||
@@ -1,251 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_pwr.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Connection/disconnection & power management
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
#include "stm32f10x.h"
|
|
||||||
#include "usb_lib.h"
|
|
||||||
#include "usb_conf.h"
|
|
||||||
#include "usb_pwr.h"
|
|
||||||
#include "hw_config.h"
|
|
||||||
|
|
||||||
/* Private typedef -----------------------------------------------------------*/
|
|
||||||
/* Private define ------------------------------------------------------------*/
|
|
||||||
/* Private macro -------------------------------------------------------------*/
|
|
||||||
/* Private variables ---------------------------------------------------------*/
|
|
||||||
__IO uint32_t bDeviceState = UNCONNECTED; /* USB device status */
|
|
||||||
__IO bool fSuspendEnabled = TRUE; /* true when suspend is possible */
|
|
||||||
|
|
||||||
struct
|
|
||||||
{
|
|
||||||
__IO RESUME_STATE eState;
|
|
||||||
__IO uint8_t bESOFcnt;
|
|
||||||
}ResumeS;
|
|
||||||
|
|
||||||
/* Extern variables ----------------------------------------------------------*/
|
|
||||||
/* Private function prototypes -----------------------------------------------*/
|
|
||||||
/* Extern function prototypes ------------------------------------------------*/
|
|
||||||
/* Private functions ---------------------------------------------------------*/
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : PowerOn
|
|
||||||
* Description :
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : USB_SUCCESS.
|
|
||||||
*******************************************************************************/
|
|
||||||
RESULT PowerOn(void)
|
|
||||||
{
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
uint16_t wRegVal;
|
|
||||||
|
|
||||||
/*** cable plugged-in ? ***/
|
|
||||||
USB_Cable_Config(ENABLE);
|
|
||||||
|
|
||||||
/*** CNTR_PWDN = 0 ***/
|
|
||||||
wRegVal = CNTR_FRES;
|
|
||||||
_SetCNTR(wRegVal);
|
|
||||||
|
|
||||||
/*** CNTR_FRES = 0 ***/
|
|
||||||
wInterrupt_Mask = 0;
|
|
||||||
_SetCNTR(wInterrupt_Mask);
|
|
||||||
/*** Clear pending interrupts ***/
|
|
||||||
_SetISTR(0);
|
|
||||||
/*** Set interrupt mask ***/
|
|
||||||
wInterrupt_Mask = CNTR_RESETM | CNTR_SUSPM | CNTR_WKUPM;
|
|
||||||
_SetCNTR(wInterrupt_Mask);
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
return USB_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : PowerOff
|
|
||||||
* Description : handles switch-off conditions
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : USB_SUCCESS.
|
|
||||||
*******************************************************************************/
|
|
||||||
RESULT PowerOff()
|
|
||||||
{
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
/* disable all ints and force USB reset */
|
|
||||||
_SetCNTR(CNTR_FRES);
|
|
||||||
/* clear interrupt status register */
|
|
||||||
_SetISTR(0);
|
|
||||||
/* Disable the Pull-Up*/
|
|
||||||
USB_Cable_Config(DISABLE);
|
|
||||||
/* switch-off device */
|
|
||||||
_SetCNTR(CNTR_FRES + CNTR_PDWN);
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
/* sw variables reset */
|
|
||||||
/* ... */
|
|
||||||
|
|
||||||
return USB_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Suspend
|
|
||||||
* Description : sets suspend mode operating conditions
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : USB_SUCCESS.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Suspend(void)
|
|
||||||
{
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
uint16_t wCNTR;
|
|
||||||
/* suspend preparation */
|
|
||||||
/* ... */
|
|
||||||
|
|
||||||
/* macrocell enters suspend mode */
|
|
||||||
wCNTR = _GetCNTR();
|
|
||||||
wCNTR |= CNTR_FSUSP;
|
|
||||||
_SetCNTR(wCNTR);
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
/* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
|
|
||||||
/* power reduction */
|
|
||||||
/* ... on connected devices */
|
|
||||||
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
/* force low-power mode in the macrocell */
|
|
||||||
wCNTR = _GetCNTR();
|
|
||||||
wCNTR |= CNTR_LPMODE;
|
|
||||||
_SetCNTR(wCNTR);
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
/* switch-off the clocks */
|
|
||||||
/* ... */
|
|
||||||
Enter_LowPowerMode();
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Resume_Init
|
|
||||||
* Description : Handles wake-up restoring normal operations
|
|
||||||
* Input : None.
|
|
||||||
* Output : None.
|
|
||||||
* Return : USB_SUCCESS.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Resume_Init(void)
|
|
||||||
{
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
uint16_t wCNTR;
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
/* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
|
|
||||||
/* restart the clocks */
|
|
||||||
/* ... */
|
|
||||||
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
/* CNTR_LPMODE = 0 */
|
|
||||||
wCNTR = _GetCNTR();
|
|
||||||
wCNTR &= (~CNTR_LPMODE);
|
|
||||||
_SetCNTR(wCNTR);
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
/* restore full power */
|
|
||||||
/* ... on connected devices */
|
|
||||||
Leave_LowPowerMode();
|
|
||||||
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
/* reset FSUSP bit */
|
|
||||||
_SetCNTR(IMR_MSK);
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
/* reverse suspend preparation */
|
|
||||||
/* ... */
|
|
||||||
|
|
||||||
}
|
|
||||||
|
|
||||||
/*******************************************************************************
|
|
||||||
* Function Name : Resume
|
|
||||||
* Description : This is the state machine handling resume operations and
|
|
||||||
* timing sequence. The control is based on the Resume structure
|
|
||||||
* variables and on the ESOF interrupt calling this subroutine
|
|
||||||
* without changing machine state.
|
|
||||||
* Input : a state machine value (RESUME_STATE)
|
|
||||||
* RESUME_ESOF doesn't change ResumeS.eState allowing
|
|
||||||
* decrementing of the ESOF counter in different states.
|
|
||||||
* Output : None.
|
|
||||||
* Return : None.
|
|
||||||
*******************************************************************************/
|
|
||||||
void Resume(RESUME_STATE eResumeSetVal)
|
|
||||||
{
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
uint16_t wCNTR;
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
|
|
||||||
if (eResumeSetVal != RESUME_ESOF)
|
|
||||||
ResumeS.eState = eResumeSetVal;
|
|
||||||
|
|
||||||
switch (ResumeS.eState)
|
|
||||||
{
|
|
||||||
case RESUME_EXTERNAL:
|
|
||||||
Resume_Init();
|
|
||||||
ResumeS.eState = RESUME_OFF;
|
|
||||||
break;
|
|
||||||
case RESUME_INTERNAL:
|
|
||||||
Resume_Init();
|
|
||||||
ResumeS.eState = RESUME_START;
|
|
||||||
break;
|
|
||||||
case RESUME_LATER:
|
|
||||||
ResumeS.bESOFcnt = 2;
|
|
||||||
ResumeS.eState = RESUME_WAIT;
|
|
||||||
break;
|
|
||||||
case RESUME_WAIT:
|
|
||||||
ResumeS.bESOFcnt--;
|
|
||||||
if (ResumeS.bESOFcnt == 0)
|
|
||||||
ResumeS.eState = RESUME_START;
|
|
||||||
break;
|
|
||||||
case RESUME_START:
|
|
||||||
#ifdef STM32F10X_CL
|
|
||||||
OTGD_FS_Dev_SetRemoteWakeup();
|
|
||||||
#else
|
|
||||||
wCNTR = _GetCNTR();
|
|
||||||
wCNTR |= CNTR_RESUME;
|
|
||||||
_SetCNTR(wCNTR);
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
ResumeS.eState = RESUME_ON;
|
|
||||||
ResumeS.bESOFcnt = 10;
|
|
||||||
break;
|
|
||||||
case RESUME_ON:
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
ResumeS.bESOFcnt--;
|
|
||||||
if (ResumeS.bESOFcnt == 0)
|
|
||||||
{
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
#ifdef STM32F10X_CL
|
|
||||||
OTGD_FS_Dev_ResetRemoteWakeup();
|
|
||||||
#else
|
|
||||||
wCNTR = _GetCNTR();
|
|
||||||
wCNTR &= (~CNTR_RESUME);
|
|
||||||
_SetCNTR(wCNTR);
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
ResumeS.eState = RESUME_OFF;
|
|
||||||
#ifndef STM32F10X_CL
|
|
||||||
}
|
|
||||||
#endif /* STM32F10X_CL */
|
|
||||||
break;
|
|
||||||
case RESUME_OFF:
|
|
||||||
case RESUME_ESOF:
|
|
||||||
default:
|
|
||||||
ResumeS.eState = RESUME_OFF;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,59 +0,0 @@
|
|||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_pwr.h
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : Connection/disconnection & power management header
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
/* Define to prevent recursive inclusion -------------------------------------*/
|
|
||||||
#ifndef __USB_PWR_H
|
|
||||||
#define __USB_PWR_H
|
|
||||||
|
|
||||||
/* Includes ------------------------------------------------------------------*/
|
|
||||||
/* Exported types ------------------------------------------------------------*/
|
|
||||||
typedef enum _RESUME_STATE
|
|
||||||
{
|
|
||||||
RESUME_EXTERNAL,
|
|
||||||
RESUME_INTERNAL,
|
|
||||||
RESUME_LATER,
|
|
||||||
RESUME_WAIT,
|
|
||||||
RESUME_START,
|
|
||||||
RESUME_ON,
|
|
||||||
RESUME_OFF,
|
|
||||||
RESUME_ESOF
|
|
||||||
} RESUME_STATE;
|
|
||||||
|
|
||||||
typedef enum _DEVICE_STATE
|
|
||||||
{
|
|
||||||
UNCONNECTED,
|
|
||||||
ATTACHED,
|
|
||||||
POWERED,
|
|
||||||
SUSPENDED,
|
|
||||||
ADDRESSED,
|
|
||||||
CONFIGURED
|
|
||||||
} DEVICE_STATE;
|
|
||||||
|
|
||||||
/* Exported constants --------------------------------------------------------*/
|
|
||||||
/* Exported macro ------------------------------------------------------------*/
|
|
||||||
/* Exported functions ------------------------------------------------------- */
|
|
||||||
void Suspend(void);
|
|
||||||
void Resume_Init(void);
|
|
||||||
void Resume(RESUME_STATE eResumeSetVal);
|
|
||||||
RESULT PowerOn(void);
|
|
||||||
RESULT PowerOff(void);
|
|
||||||
|
|
||||||
/* External variables --------------------------------------------------------*/
|
|
||||||
extern __IO uint32_t bDeviceState; /* USB device status */
|
|
||||||
extern __IO bool fSuspendEnabled; /* true when suspend is possible */
|
|
||||||
|
|
||||||
#endif /*__USB_PWR_H*/
|
|
||||||
|
|
||||||
/******************* (C) COPYRIGHT 2010 STMicroelectronics *****END OF FILE****/
|
|
||||||
@@ -1,36 +1,8 @@
|
|||||||
/* Hardware specific USB functions */
|
/* Hardware specific function */
|
||||||
/*
|
|
||||||
* For detail, please see the documentation of
|
|
||||||
* STM32F10x USB Full Speed Device Library (USB-FS-Device_Lib)
|
|
||||||
* by STMicroelectronics' MCD Application Team
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include "hal.h"
|
#include "hal.h"
|
||||||
#include "board.h"
|
#include "board.h"
|
||||||
#include "usb_lib.h"
|
|
||||||
#include "usb_prop.h"
|
|
||||||
#include "usb_desc.h"
|
|
||||||
#include "hw_config.h"
|
|
||||||
#include "platform_config.h"
|
|
||||||
#include "usb_pwr.h"
|
|
||||||
|
|
||||||
void
|
|
||||||
Enter_LowPowerMode (void)
|
|
||||||
{
|
|
||||||
bDeviceState = SUSPENDED;
|
|
||||||
}
|
|
||||||
|
|
||||||
void
|
|
||||||
Leave_LowPowerMode (void)
|
|
||||||
{
|
|
||||||
DEVICE_INFO *pInfo = &Device_Info;
|
|
||||||
|
|
||||||
if (pInfo->Current_Configuration != 0)
|
|
||||||
bDeviceState = CONFIGURED;
|
|
||||||
else
|
|
||||||
bDeviceState = ATTACHED;
|
|
||||||
}
|
|
||||||
|
|
||||||
const uint8_t *
|
const uint8_t *
|
||||||
unique_device_id (void)
|
unique_device_id (void)
|
||||||
|
|||||||
@@ -70,10 +70,12 @@ include $(CHIBIOS)/os/hal/platforms/STM32/platform.mk
|
|||||||
include $(CHIBIOS)/os/hal/hal.mk
|
include $(CHIBIOS)/os/hal/hal.mk
|
||||||
include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/port.mk
|
include $(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/port.mk
|
||||||
include $(CHIBIOS)/os/kernel/kernel.mk
|
include $(CHIBIOS)/os/kernel/kernel.mk
|
||||||
include stmusb.mk
|
|
||||||
include vcomport.mk
|
|
||||||
include crypt.mk
|
include crypt.mk
|
||||||
|
|
||||||
|
ifneq ($(ENABLE_VCOMPORT),)
|
||||||
|
VCOMSRC += usb_endp.c
|
||||||
|
endif
|
||||||
|
|
||||||
# C sources that can be compiled in ARM or THUMB mode depending on the global
|
# C sources that can be compiled in ARM or THUMB mode depending on the global
|
||||||
# setting.
|
# setting.
|
||||||
CSRC = $(PORTSRC) \
|
CSRC = $(PORTSRC) \
|
||||||
@@ -85,7 +87,6 @@ CSRC = $(PORTSRC) \
|
|||||||
$(BOARD_DIR)/board.c \
|
$(BOARD_DIR)/board.c \
|
||||||
$(CHIBIOS)/os/various/evtimer.c \
|
$(CHIBIOS)/os/various/evtimer.c \
|
||||||
$(CHIBIOS)/os/various/syscalls.c \
|
$(CHIBIOS)/os/various/syscalls.c \
|
||||||
$(STMUSBSRC) \
|
|
||||||
$(VCOMSRC) \
|
$(VCOMSRC) \
|
||||||
$(CRYPTSRC) \
|
$(CRYPTSRC) \
|
||||||
main.c usb_lld.c \
|
main.c usb_lld.c \
|
||||||
@@ -109,7 +110,7 @@ endif
|
|||||||
ASMSRC = $(PORTASM) \
|
ASMSRC = $(PORTASM) \
|
||||||
$(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/vectors.s
|
$(CHIBIOS)/os/ports/GCC/ARMCMx/STM32F10x/vectors.s
|
||||||
|
|
||||||
INCDIR = $(CRYPTINCDIR) $(STMUSBINCDIR) $(VCOMDIR) \
|
INCDIR = $(CRYPTINCDIR) \
|
||||||
$(PORTINC) $(KERNINC) $(TESTINC) \
|
$(PORTINC) $(KERNINC) $(TESTINC) \
|
||||||
$(HALINC) $(PLATFORMINC) ../boards/common $(BOARD_DIR) \
|
$(HALINC) $(PLATFORMINC) ../boards/common $(BOARD_DIR) \
|
||||||
$(CHIBIOS)/os/various
|
$(CHIBIOS)/os/various
|
||||||
|
|||||||
@@ -22,16 +22,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
|
|
||||||
#include "usb_lib.h"
|
|
||||||
|
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include "gnuk.h"
|
#include "gnuk.h"
|
||||||
#include "usb_lld.h"
|
#include "usb_lld.h"
|
||||||
#include "usb_istr.h"
|
|
||||||
#include "usb_desc.h"
|
|
||||||
#include "hw_config.h"
|
|
||||||
#include "usb_pwr.h"
|
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
struct stdout {
|
struct stdout {
|
||||||
@@ -380,7 +373,6 @@ main (int argc, char **argv)
|
|||||||
flash_unlock ();
|
flash_unlock ();
|
||||||
device_initialize_once ();
|
device_initialize_once ();
|
||||||
usb_lld_init ();
|
usb_lld_init ();
|
||||||
USB_Init ();
|
|
||||||
random_init ();
|
random_init ();
|
||||||
|
|
||||||
#ifdef DEBUG
|
#ifdef DEBUG
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
STMUSBDIR = ../STM32_USB-FS-Device_Driver
|
|
||||||
STMUSBSRCDIR = $(STMUSBDIR)/src
|
|
||||||
STMUSBINCDIR = $(STMUSBDIR)/inc
|
|
||||||
STMUSBSRC= \
|
|
||||||
$(STMUSBSRCDIR)/usb_init.c $(STMUSBSRCDIR)/usb_int.c \
|
|
||||||
$(STMUSBSRCDIR)/usb_core.c \
|
|
||||||
$(STMUSBSRCDIR)/usb_regs.c
|
|
||||||
@@ -1,93 +0,0 @@
|
|||||||
/*
|
|
||||||
* This file is included by usb_prop.c to provide Virtual COM port feature
|
|
||||||
*/
|
|
||||||
|
|
||||||
/* Original is ../Virtual_COM_Port/usb_prop.c by STMicroelectronics */
|
|
||||||
/* Chopped and modified for Gnuk */
|
|
||||||
|
|
||||||
#include "usb-cdc.h"
|
|
||||||
|
|
||||||
/* Original copyright notice is following: */
|
|
||||||
/******************** (C) COPYRIGHT 2010 STMicroelectronics ********************
|
|
||||||
* File Name : usb_prop.c
|
|
||||||
* Author : MCD Application Team
|
|
||||||
* Version : V3.1.1
|
|
||||||
* Date : 04/07/2010
|
|
||||||
* Description : All processing related to Virtual Com Port Demo
|
|
||||||
********************************************************************************
|
|
||||||
* THE PRESENT FIRMWARE WHICH IS FOR GUIDANCE ONLY AIMS AT PROVIDING CUSTOMERS
|
|
||||||
* WITH CODING INFORMATION REGARDING THEIR PRODUCTS IN ORDER FOR THEM TO SAVE TIME.
|
|
||||||
* AS A RESULT, STMICROELECTRONICS SHALL NOT BE HELD LIABLE FOR ANY DIRECT,
|
|
||||||
* INDIRECT OR CONSEQUENTIAL DAMAGES WITH RESPECT TO ANY CLAIMS ARISING FROM THE
|
|
||||||
* CONTENT OF SUCH FIRMWARE AND/OR THE USE MADE BY CUSTOMERS OF THE CODING
|
|
||||||
* INFORMATION CONTAINED HEREIN IN CONNECTION WITH THEIR PRODUCTS.
|
|
||||||
*******************************************************************************/
|
|
||||||
|
|
||||||
typedef struct
|
|
||||||
{
|
|
||||||
uint32_t bitrate;
|
|
||||||
uint8_t format;
|
|
||||||
uint8_t paritytype;
|
|
||||||
uint8_t datatype;
|
|
||||||
} LINE_CODING;
|
|
||||||
|
|
||||||
static LINE_CODING linecoding = {
|
|
||||||
115200, /* baud rate*/
|
|
||||||
0x00, /* stop bits-1*/
|
|
||||||
0x00, /* parity - none*/
|
|
||||||
0x08 /* no. of bits 8*/
|
|
||||||
};
|
|
||||||
|
|
||||||
static uint8_t *Virtual_Com_Port_GetLineCoding(uint16_t Length)
|
|
||||||
{
|
|
||||||
if (Length == 0)
|
|
||||||
{
|
|
||||||
pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (uint8_t *)&linecoding;
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t *Virtual_Com_Port_SetLineCoding(uint16_t Length)
|
|
||||||
{
|
|
||||||
if (Length == 0)
|
|
||||||
{
|
|
||||||
pInformation->Ctrl_Info.Usb_wLength = sizeof(linecoding);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (uint8_t *)&linecoding;
|
|
||||||
}
|
|
||||||
|
|
||||||
static RESULT
|
|
||||||
Virtual_Com_Port_Data_Setup (uint8_t RequestNo)
|
|
||||||
{
|
|
||||||
uint8_t *(*CopyRoutine)(uint16_t);
|
|
||||||
|
|
||||||
CopyRoutine = NULL;
|
|
||||||
|
|
||||||
if (RequestNo == USB_CDC_REQ_GET_LINE_CODING)
|
|
||||||
CopyRoutine = Virtual_Com_Port_GetLineCoding;
|
|
||||||
else if (RequestNo == USB_CDC_REQ_SET_LINE_CODING)
|
|
||||||
CopyRoutine = Virtual_Com_Port_SetLineCoding;
|
|
||||||
|
|
||||||
if (CopyRoutine == NULL)
|
|
||||||
return USB_UNSUPPORT;
|
|
||||||
|
|
||||||
pInformation->Ctrl_Info.CopyData = CopyRoutine;
|
|
||||||
pInformation->Ctrl_Info.Usb_wOffset = 0;
|
|
||||||
(*CopyRoutine) (0); /* Set Ctrl_Info.Usb_wLength */
|
|
||||||
|
|
||||||
return USB_SUCCESS;
|
|
||||||
}
|
|
||||||
|
|
||||||
static RESULT
|
|
||||||
Virtual_Com_Port_NoData_Setup (uint8_t RequestNo)
|
|
||||||
{
|
|
||||||
if (RequestNo == USB_CDC_REQ_SET_CONTROL_LINE_STATE)
|
|
||||||
/* Do nothing and success */
|
|
||||||
return USB_SUCCESS;
|
|
||||||
|
|
||||||
return USB_UNSUPPORT;
|
|
||||||
}
|
|
||||||
@@ -25,10 +25,6 @@
|
|||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include "hal.h"
|
#include "hal.h"
|
||||||
#include "gnuk.h"
|
#include "gnuk.h"
|
||||||
#include "usb_lib.h"
|
|
||||||
#include "usb_mem.h"
|
|
||||||
#include "hw_config.h"
|
|
||||||
#include "usb_istr.h"
|
|
||||||
#include "usb_lld.h"
|
#include "usb_lld.h"
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|||||||
@@ -1,24 +1,9 @@
|
|||||||
/* USB configuration file for USB-FS-Device_Lib */
|
/* USB buffer memory definition and number of string descriptors */
|
||||||
/*
|
|
||||||
* For detail, please see the documentation of
|
|
||||||
* STM32F10x USB Full Speed Device Library (USB-FS-Device_Lib)
|
|
||||||
* by STMicroelectronics
|
|
||||||
*/
|
|
||||||
|
|
||||||
#ifndef __USB_CONF_H
|
#ifndef __USB_CONF_H
|
||||||
#define __USB_CONF_H
|
#define __USB_CONF_H
|
||||||
|
|
||||||
#ifdef PINPAD_DND_SUPPORT
|
#define NUM_STRING_DESC 4
|
||||||
# define EP_NUM (8)
|
|
||||||
#else
|
|
||||||
# ifdef ENABLE_VIRTUAL_COM_PORT
|
|
||||||
# define EP_NUM (6)
|
|
||||||
# else
|
|
||||||
# define EP_NUM (3)
|
|
||||||
# endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#define BTABLE_ADDRESS (0x00)
|
|
||||||
|
|
||||||
/* EP0 */
|
/* EP0 */
|
||||||
#define ENDP0_RXADDR (0x40)
|
#define ENDP0_RXADDR (0x40)
|
||||||
@@ -41,6 +26,4 @@
|
|||||||
/* EP7 */
|
/* EP7 */
|
||||||
#define ENDP7_RXADDR (0x1c0)
|
#define ENDP7_RXADDR (0x1c0)
|
||||||
|
|
||||||
#define IMR_MSK (CNTR_CTRM | CNTR_SOFM | CNTR_RESETM )
|
|
||||||
|
|
||||||
#endif /* __USB_CONF_H */
|
#endif /* __USB_CONF_H */
|
||||||
|
|||||||
@@ -3,8 +3,9 @@
|
|||||||
*/
|
*/
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "usb_lib.h"
|
#include "ch.h"
|
||||||
#include "usb_desc.h"
|
#include "usb_lld.h"
|
||||||
|
#include "usb_conf.h"
|
||||||
|
|
||||||
#define USB_ICC_INTERFACE_CLASS 0x0B
|
#define USB_ICC_INTERFACE_CLASS 0x0B
|
||||||
#define USB_ICC_INTERFACE_SUBCLASS 0x00
|
#define USB_ICC_INTERFACE_SUBCLASS 0x00
|
||||||
@@ -282,19 +283,19 @@ const uint8_t gnukStringSerial[] = {
|
|||||||
};
|
};
|
||||||
|
|
||||||
|
|
||||||
const ONE_DESCRIPTOR Device_Descriptor = {
|
const struct Descriptor Device_Descriptor = {
|
||||||
(uint8_t*)gnukDeviceDescriptor,
|
gnukDeviceDescriptor,
|
||||||
sizeof (gnukDeviceDescriptor)
|
sizeof (gnukDeviceDescriptor)
|
||||||
};
|
};
|
||||||
|
|
||||||
const ONE_DESCRIPTOR Config_Descriptor = {
|
const struct Descriptor Config_Descriptor = {
|
||||||
(uint8_t*)gnukConfigDescriptor,
|
gnukConfigDescriptor,
|
||||||
sizeof (gnukConfigDescriptor)
|
sizeof (gnukConfigDescriptor)
|
||||||
};
|
};
|
||||||
|
|
||||||
const ONE_DESCRIPTOR String_Descriptor[] = {
|
const struct Descriptor String_Descriptors[NUM_STRING_DESC] = {
|
||||||
{(uint8_t*)gnukStringLangID, sizeof (gnukStringLangID)},
|
{gnukStringLangID, sizeof (gnukStringLangID)},
|
||||||
{(uint8_t*)gnukStringVendor, sizeof (gnukStringVendor)},
|
{gnukStringVendor, sizeof (gnukStringVendor)},
|
||||||
{(uint8_t*)gnukStringProduct, sizeof (gnukStringProduct)},
|
{gnukStringProduct, sizeof (gnukStringProduct)},
|
||||||
{(uint8_t*)gnukStringSerial, sizeof (gnukStringSerial)},
|
{gnukStringSerial, sizeof (gnukStringSerial)},
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -2,21 +2,19 @@
|
|||||||
* Virtual COM port (for debug output only)
|
* Virtual COM port (for debug output only)
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "usb_lib.h"
|
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include "gnuk.h"
|
#include "gnuk.h"
|
||||||
|
|
||||||
void
|
void
|
||||||
EP3_IN_Callback(void)
|
EP3_IN_Callback (void)
|
||||||
{
|
{
|
||||||
if (stdout_thread)
|
if (stdout_thread)
|
||||||
chEvtSignalI (stdout_thread, EV_TX_READY);
|
chEvtSignalI (stdout_thread, EV_TX_READY);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
EP5_OUT_Callback(void)
|
EP5_OUT_Callback (void)
|
||||||
{
|
{
|
||||||
SetEPRxValid (ENDP5);
|
usb_lld_rx_enable (ENDP5);
|
||||||
}
|
}
|
||||||
|
|||||||
1143
src/usb_lld.c
1143
src/usb_lld.c
File diff suppressed because it is too large
Load Diff
172
src/usb_lld.h
172
src/usb_lld.h
@@ -1,55 +1,143 @@
|
|||||||
|
#define USB_DEVICE_DESCRIPTOR_TYPE 0x01
|
||||||
|
#define USB_CONFIGURATION_DESCRIPTOR_TYPE 0x02
|
||||||
|
#define USB_STRING_DESCRIPTOR_TYPE 0x03
|
||||||
|
#define USB_INTERFACE_DESCRIPTOR_TYPE 0x04
|
||||||
|
#define USB_ENDPOINT_DESCRIPTOR_TYPE 0x05
|
||||||
|
|
||||||
|
#define STANDARD_ENDPOINT_DESC_SIZE 0x09
|
||||||
|
|
||||||
|
/* endpoints enumeration */
|
||||||
|
#define ENDP0 ((uint8_t)0)
|
||||||
|
#define ENDP1 ((uint8_t)1)
|
||||||
|
#define ENDP2 ((uint8_t)2)
|
||||||
|
#define ENDP3 ((uint8_t)3)
|
||||||
|
#define ENDP4 ((uint8_t)4)
|
||||||
|
#define ENDP5 ((uint8_t)5)
|
||||||
|
#define ENDP6 ((uint8_t)6)
|
||||||
|
#define ENDP7 ((uint8_t)7)
|
||||||
|
|
||||||
|
/* EP_TYPE[1:0] EndPoint TYPE */
|
||||||
|
#define EP_BULK (0x0000) /* EndPoint BULK */
|
||||||
|
#define EP_CONTROL (0x0200) /* EndPoint CONTROL */
|
||||||
|
#define EP_ISOCHRONOUS (0x0400) /* EndPoint ISOCHRONOUS */
|
||||||
|
#define EP_INTERRUPT (0x0600) /* EndPoint INTERRUPT */
|
||||||
|
|
||||||
|
enum RECIPIENT_TYPE
|
||||||
|
{
|
||||||
|
DEVICE_RECIPIENT, /* Recipient device */
|
||||||
|
INTERFACE_RECIPIENT, /* Recipient interface */
|
||||||
|
ENDPOINT_RECIPIENT, /* Recipient endpoint */
|
||||||
|
OTHER_RECIPIENT
|
||||||
|
};
|
||||||
|
|
||||||
|
enum DESCRIPTOR_TYPE
|
||||||
|
{
|
||||||
|
DEVICE_DESCRIPTOR = 1,
|
||||||
|
CONFIG_DESCRIPTOR,
|
||||||
|
STRING_DESCRIPTOR,
|
||||||
|
INTERFACE_DESCRIPTOR,
|
||||||
|
ENDPOINT_DESCRIPTOR
|
||||||
|
};
|
||||||
|
|
||||||
|
#define REQUEST_TYPE 0x60 /* Mask to get request type */
|
||||||
|
#define STANDARD_REQUEST 0x00 /* Standard request */
|
||||||
|
#define CLASS_REQUEST 0x20 /* Class request */
|
||||||
|
#define VENDOR_REQUEST 0x40 /* Vendor request */
|
||||||
|
|
||||||
|
struct Descriptor
|
||||||
|
{
|
||||||
|
const uint8_t *Descriptor;
|
||||||
|
uint16_t Descriptor_Size;
|
||||||
|
};
|
||||||
|
|
||||||
|
enum
|
||||||
|
{
|
||||||
|
USB_UNSUPPORT = 0,
|
||||||
|
USB_SUCCESS = 1,
|
||||||
|
};
|
||||||
|
|
||||||
|
struct usb_device_method
|
||||||
|
{
|
||||||
|
void (*init) (void);
|
||||||
|
void (*reset) (void);
|
||||||
|
void (*setup_with_data) (uint8_t rcp, uint8_t req_no, uint16_t index);
|
||||||
|
int (*setup_with_nodata) (uint8_t rcp, uint8_t req_no, uint16_t index);
|
||||||
|
int (*get_descriptor) (uint8_t desc_type, uint16_t index, uint16_t value);
|
||||||
|
int (*event) (uint8_t event_type, uint16_t value);
|
||||||
|
int (*interface) (uint8_t cmd, uint16_t interface, uint16_t value);
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
USB_EVENT_RESET,
|
||||||
|
USB_EVENT_ADDRESS,
|
||||||
|
USB_EVENT_CONFIG,
|
||||||
|
USB_EVENT_SUSPEND,
|
||||||
|
USB_EVENT_WAKEUP,
|
||||||
|
USB_EVENT_STALL,
|
||||||
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
USB_SET_INTERFACE,
|
||||||
|
USB_GET_INTERFACE,
|
||||||
|
USB_QUERY_INTERFACE,
|
||||||
|
};
|
||||||
|
|
||||||
|
extern void USB_Cable_Config (int NewState);
|
||||||
|
|
||||||
|
extern const struct usb_device_method Device_Method;
|
||||||
|
|
||||||
|
extern const struct Descriptor Device_Descriptor;
|
||||||
|
extern const struct Descriptor Config_Descriptor;
|
||||||
|
extern const struct Descriptor String_Descriptors[];
|
||||||
|
|
||||||
|
enum DEVICE_STATE
|
||||||
|
{
|
||||||
|
UNCONNECTED,
|
||||||
|
ATTACHED,
|
||||||
|
POWERED,
|
||||||
|
SUSPENDED,
|
||||||
|
ADDRESSED,
|
||||||
|
CONFIGURED
|
||||||
|
};
|
||||||
|
|
||||||
|
extern uint32_t bDeviceState;
|
||||||
|
|
||||||
#define STM32_USB_IRQ_PRIORITY 11
|
#define STM32_USB_IRQ_PRIORITY 11
|
||||||
void usb_lld_init (void);
|
|
||||||
|
extern void usb_lld_init (void);
|
||||||
|
|
||||||
extern void usb_lld_to_pmabuf (const void *src, uint16_t addr, size_t n);
|
extern void usb_lld_to_pmabuf (const void *src, uint16_t addr, size_t n);
|
||||||
|
|
||||||
extern void usb_lld_from_pmabuf (void *dst, uint16_t addr, size_t n);
|
extern void usb_lld_from_pmabuf (void *dst, uint16_t addr, size_t n);
|
||||||
|
|
||||||
extern inline void usb_lld_stall_tx (int ep_num)
|
extern void usb_lld_stall_tx (int ep_num);
|
||||||
{
|
|
||||||
SetEPTxStatus (ep_num, EP_TX_STALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern inline void usb_lld_stall_rx (int ep_num)
|
extern void usb_lld_stall_rx (int ep_num);
|
||||||
{
|
|
||||||
SetEPRxStatus (ep_num, EP_RX_STALL);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern inline int usb_lld_tx_data_len (int ep_num)
|
extern int usb_lld_tx_data_len (int ep_num);
|
||||||
{
|
|
||||||
return GetEPTxCount (ep_num);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern inline void usb_lld_txcpy (const void *src,
|
extern void usb_lld_txcpy (const void *src, int ep_num, int offset, size_t len);
|
||||||
int ep_num, int offset, size_t len)
|
|
||||||
{
|
|
||||||
usb_lld_to_pmabuf (src, GetEPTxAddr (ep_num) + offset, len);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern inline void usb_lld_tx_enable (int ep_num, size_t len)
|
extern void usb_lld_tx_enable (int ep_num, size_t len);
|
||||||
{
|
|
||||||
SetEPTxCount (ep_num, len);
|
|
||||||
SetEPTxValid (ep_num);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern inline void usb_lld_write (uint8_t ep_num, const void *buf, size_t len)
|
extern void usb_lld_write (uint8_t ep_num, const void *buf, size_t len);
|
||||||
{
|
|
||||||
usb_lld_to_pmabuf (buf, GetEPTxAddr (ep_num), len);
|
|
||||||
SetEPTxCount (ep_num, len);
|
|
||||||
SetEPTxValid (ep_num);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern inline void usb_lld_rx_enable (int ep_num)
|
extern void usb_lld_rx_enable (int ep_num);
|
||||||
{
|
|
||||||
SetEPRxValid (ep_num);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern inline int usb_lld_rx_data_len (int ep_num)
|
extern int usb_lld_rx_data_len (int ep_num);
|
||||||
{
|
|
||||||
return GetEPRxCount (ep_num);
|
|
||||||
}
|
|
||||||
|
|
||||||
extern inline void usb_lld_rxcpy (uint8_t *dst,
|
extern void usb_lld_rxcpy (uint8_t *dst, int ep_num, int offset, size_t len);
|
||||||
int ep_num, int offset, size_t len)
|
|
||||||
{
|
extern void usb_lld_reset (void);
|
||||||
usb_lld_from_pmabuf (dst, GetEPRxAddr (ep_num) + offset, len);
|
|
||||||
}
|
extern void usb_lld_setup_endpoint (int ep_num, int ep_type, int ep_kind,
|
||||||
|
int ep_rx_addr, int ep_tx_addr,
|
||||||
|
int ep_rx_memory_size);
|
||||||
|
|
||||||
|
extern void usb_lld_set_configuration (uint8_t config);
|
||||||
|
|
||||||
|
extern uint8_t usb_lld_current_configuration (void);
|
||||||
|
|
||||||
|
extern void usb_lld_set_feature (uint8_t feature);
|
||||||
|
|
||||||
|
extern void usb_lld_set_data_to_send (const void *p, size_t len);
|
||||||
|
|||||||
@@ -21,8 +21,6 @@
|
|||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "usb_lib.h"
|
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "ch.h"
|
#include "ch.h"
|
||||||
#include "gnuk.h"
|
#include "gnuk.h"
|
||||||
|
|||||||
520
src/usb_prop.c
520
src/usb_prop.c
@@ -1,7 +1,7 @@
|
|||||||
/*
|
/*
|
||||||
* usb_prop.c - glue/interface code between Gnuk and USB-FS-Device_Lib
|
* usb_prop.c - interface code between Gnuk and USB
|
||||||
*
|
*
|
||||||
* Copyright (C) 2010, 2011 Free Software Initiative of Japan
|
* Copyright (C) 2010, 2011, 2012 Free Software Initiative of Japan
|
||||||
* Author: NIIBE Yutaka <gniibe@fsij.org>
|
* Author: NIIBE Yutaka <gniibe@fsij.org>
|
||||||
*
|
*
|
||||||
* This file is a part of Gnuk, a GnuPG USB Token implementation.
|
* This file is a part of Gnuk, a GnuPG USB Token implementation.
|
||||||
@@ -25,15 +25,49 @@
|
|||||||
#define GNUK_MAX_PACKET_SIZE 64
|
#define GNUK_MAX_PACKET_SIZE 64
|
||||||
|
|
||||||
#include "config.h"
|
#include "config.h"
|
||||||
#include "usb_lib.h"
|
#include "ch.h"
|
||||||
|
#include "usb_lld.h"
|
||||||
#include "usb_conf.h"
|
#include "usb_conf.h"
|
||||||
#include "usb_prop.h"
|
|
||||||
#include "usb_desc.h"
|
|
||||||
#include "usb_pwr.h"
|
|
||||||
#include "hw_config.h"
|
|
||||||
|
|
||||||
#ifdef ENABLE_VIRTUAL_COM_PORT
|
#ifdef ENABLE_VIRTUAL_COM_PORT
|
||||||
#include "usb-cdc-vport.c"
|
#include "usb-cdc.h"
|
||||||
|
|
||||||
|
struct line_coding
|
||||||
|
{
|
||||||
|
uint32_t bitrate;
|
||||||
|
uint8_t format;
|
||||||
|
uint8_t paritytype;
|
||||||
|
uint8_t datatype;
|
||||||
|
};
|
||||||
|
|
||||||
|
static const struct line_coding line_coding = {
|
||||||
|
115200, /* baud rate: 115200 */
|
||||||
|
0x00, /* stop bits: 1 */
|
||||||
|
0x00, /* parity: none */
|
||||||
|
0x08 /* bits: 8 */
|
||||||
|
};
|
||||||
|
|
||||||
|
static void
|
||||||
|
Virtual_Com_Port_Data_Setup (uint8_t RequestNo)
|
||||||
|
{
|
||||||
|
if (RequestNo != USB_CDC_REQ_GET_LINE_CODING)
|
||||||
|
return USB_UNSUPPORT;
|
||||||
|
|
||||||
|
/* RequestNo == USB_CDC_REQ_SET_LINE_CODING is not supported */
|
||||||
|
|
||||||
|
usb_lld_set_data_to_send (&line_coding, sizeof(line_coding));
|
||||||
|
return USB_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
Virtual_Com_Port_NoData_Setup (uint8_t RequestNo)
|
||||||
|
{
|
||||||
|
if (RequestNo == USB_CDC_REQ_SET_CONTROL_LINE_STATE)
|
||||||
|
/* Do nothing and success */
|
||||||
|
return USB_SUCCESS;
|
||||||
|
|
||||||
|
return USB_UNSUPPORT;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef PINPAD_DND_SUPPORT
|
#ifdef PINPAD_DND_SUPPORT
|
||||||
@@ -41,215 +75,61 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
||||||
static void
|
uint32_t bDeviceState = UNCONNECTED; /* USB device status */
|
||||||
SetEPRxCount_allocated_size (uint8_t bEpNum, uint16_t wCount)
|
|
||||||
{ /* Assume wCount is even */
|
|
||||||
uint32_t *pdwReg = _pEPRxCount (bEpNum);
|
|
||||||
uint16_t value;
|
|
||||||
|
|
||||||
if (wCount <= 62)
|
|
||||||
value = (wCount & 0x3e) << 9;
|
|
||||||
else
|
|
||||||
value = 0x8000 | (((wCount >> 5) - 1) << 10);
|
|
||||||
|
|
||||||
*pdwReg = (uint32_t)value;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnuk_device_init (void)
|
gnuk_device_init (void)
|
||||||
{
|
{
|
||||||
pInformation->Current_Configuration = 0;
|
usb_lld_set_configuration (0);
|
||||||
|
USB_Cable_Config (1);
|
||||||
/* Connect the device */
|
|
||||||
PowerOn ();
|
|
||||||
|
|
||||||
/* Perform basic device initialization operations */
|
|
||||||
_SetISTR (0);
|
|
||||||
wInterrupt_Mask = IMR_MSK;
|
|
||||||
_SetCNTR (wInterrupt_Mask);
|
|
||||||
|
|
||||||
bDeviceState = UNCONNECTED;
|
bDeviceState = UNCONNECTED;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
static void
|
||||||
gnuk_device_reset (void)
|
gnuk_setup_endpoints_for_interface (uint16_t interface)
|
||||||
{
|
{
|
||||||
/* Set DEVICE as not configured */
|
if (interface == 0)
|
||||||
pInformation->Current_Configuration = 0;
|
{
|
||||||
|
|
||||||
/* Current Feature initialization */
|
|
||||||
pInformation->Current_Feature = Config_Descriptor.Descriptor[7];
|
|
||||||
|
|
||||||
/* Set DEVICE with the default Interface*/
|
|
||||||
pInformation->Current_Interface = 0;
|
|
||||||
|
|
||||||
SetBTABLE (BTABLE_ADDRESS);
|
|
||||||
|
|
||||||
/* Initialize Endpoint 0 */
|
|
||||||
SetEPType (ENDP0, EP_CONTROL);
|
|
||||||
SetEPTxStatus (ENDP0, EP_TX_STALL);
|
|
||||||
SetEPRxAddr (ENDP0, ENDP0_RXADDR);
|
|
||||||
SetEPTxAddr (ENDP0, ENDP0_TXADDR);
|
|
||||||
Clear_Status_Out (ENDP0);
|
|
||||||
SetEPRxCount_allocated_size (ENDP0, GNUK_MAX_PACKET_SIZE);
|
|
||||||
SetEPRxValid (ENDP0);
|
|
||||||
|
|
||||||
/* Initialize Endpoint 1 */
|
/* Initialize Endpoint 1 */
|
||||||
SetEPType (ENDP1, EP_BULK);
|
usb_lld_setup_endpoint (ENDP1, EP_BULK, 0, 0, ENDP1_TXADDR, 0);
|
||||||
SetEPTxAddr (ENDP1, ENDP1_TXADDR);
|
|
||||||
SetEPTxStatus (ENDP1, EP_TX_NAK);
|
|
||||||
SetEPRxStatus (ENDP1, EP_RX_DIS);
|
|
||||||
|
|
||||||
/* Initialize Endpoint 2 */
|
/* Initialize Endpoint 2 */
|
||||||
SetEPType (ENDP2, EP_BULK);
|
usb_lld_setup_endpoint (ENDP2, EP_BULK, 0, ENDP2_RXADDR, 0,
|
||||||
SetEPRxAddr (ENDP2, ENDP2_RXADDR);
|
GNUK_MAX_PACKET_SIZE);
|
||||||
SetEPRxCount_allocated_size (ENDP2, GNUK_MAX_PACKET_SIZE);
|
}
|
||||||
SetEPRxStatus (ENDP2, EP_RX_VALID);
|
|
||||||
SetEPTxStatus (ENDP2, EP_TX_DIS);
|
|
||||||
|
|
||||||
#ifdef ENABLE_VIRTUAL_COM_PORT
|
#ifdef ENABLE_VIRTUAL_COM_PORT
|
||||||
/* Initialize Endpoint 3 */
|
else if (interface == 1)
|
||||||
SetEPType (ENDP3, EP_BULK);
|
{
|
||||||
SetEPTxAddr (ENDP3, ENDP3_TXADDR);
|
|
||||||
SetEPTxStatus (ENDP3, EP_TX_NAK);
|
|
||||||
SetEPRxStatus (ENDP3, EP_RX_DIS);
|
|
||||||
|
|
||||||
/* Initialize Endpoint 4 */
|
/* Initialize Endpoint 4 */
|
||||||
SetEPType (ENDP4, EP_INTERRUPT);
|
usb_lld_setup_endpoint (ENDP4, EP_INTERRUPT, 0, 0, ENDP4_TXADDR, 0);
|
||||||
SetEPTxAddr (ENDP4, ENDP4_TXADDR);
|
}
|
||||||
SetEPTxStatus (ENDP4, EP_TX_NAK);
|
else if (interface == 2)
|
||||||
SetEPRxStatus (ENDP4, EP_RX_DIS);
|
{
|
||||||
|
/* Initialize Endpoint 3 */
|
||||||
|
usb_lld_setup_endpoint (ENDP3, EP_BULK, 0, 0, ENDP3_TXADDR, 0);
|
||||||
|
|
||||||
/* Initialize Endpoint 5 */
|
/* Initialize Endpoint 5 */
|
||||||
SetEPType (ENDP5, EP_BULK);
|
usb_lld_setup_endpoint (ENDP5, EP_BULK, 0, ENDP5_RXADDR, 0,
|
||||||
SetEPRxAddr (ENDP5, ENDP5_RXADDR);
|
VIRTUAL_COM_PORT_DATA_SIZE);
|
||||||
SetEPRxCount_allocated_size (ENDP5, VIRTUAL_COM_PORT_DATA_SIZE);
|
|
||||||
SetEPRxStatus (ENDP5, EP_RX_VALID);
|
|
||||||
SetEPTxStatus (ENDP5, EP_TX_DIS);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
#ifdef PINPAD_DND_SUPPORT
|
|
||||||
/* Initialize Endpoint 6 */
|
|
||||||
SetEPType (ENDP6, EP_BULK);
|
|
||||||
SetEPTxAddr (ENDP6, ENDP6_TXADDR);
|
|
||||||
SetEPTxStatus (ENDP6, EP_TX_NAK);
|
|
||||||
SetEPRxStatus (ENDP6, EP_RX_DIS);
|
|
||||||
|
|
||||||
/* Initialize Endpoint 7 */
|
|
||||||
SetEPType (ENDP7, EP_BULK);
|
|
||||||
SetEPRxAddr (ENDP7, ENDP7_RXADDR);
|
|
||||||
SetEPRxCount_allocated_size (ENDP7, 64);
|
|
||||||
SetEPRxStatus (ENDP7, EP_RX_STALL);
|
|
||||||
SetEPTxStatus (ENDP7, EP_TX_DIS);
|
|
||||||
#endif
|
|
||||||
|
|
||||||
/* Set this device to response on default address */
|
|
||||||
SetDeviceAddress (0);
|
|
||||||
|
|
||||||
bDeviceState = ATTACHED;
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gnuk_device_SetConfiguration (void)
|
|
||||||
{
|
|
||||||
DEVICE_INFO *pInfo = &Device_Info;
|
|
||||||
|
|
||||||
if (pInfo->Current_Configuration != 0)
|
|
||||||
{ /* Device configured */
|
|
||||||
extern void *main_thread;
|
|
||||||
extern void chEvtSignalI (void *, unsigned long);
|
|
||||||
#define LED_STATUS_MODE (8)
|
|
||||||
|
|
||||||
bDeviceState = CONFIGURED;
|
|
||||||
chEvtSignalI (main_thread, LED_STATUS_MODE);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
static void
|
|
||||||
gnuk_device_SetInterface (void)
|
|
||||||
{
|
|
||||||
uint16_t intf = pInformation->USBwIndex0;
|
|
||||||
|
|
||||||
/* alternateSetting: pInformation->USBwValue0 should be 0 */
|
|
||||||
|
|
||||||
if (intf == 0)
|
|
||||||
{
|
|
||||||
ClearDTOG_RX (ENDP2);
|
|
||||||
ClearDTOG_TX (ENDP1);
|
|
||||||
}
|
|
||||||
#ifdef ENABLE_VIRTUAL_COM_PORT
|
|
||||||
else if (intf == 1)
|
|
||||||
{
|
|
||||||
ClearDTOG_TX (ENDP4);
|
|
||||||
}
|
|
||||||
else if (intf == 2)
|
|
||||||
{
|
|
||||||
ClearDTOG_RX (ENDP5);
|
|
||||||
ClearDTOG_TX (ENDP3);
|
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
#ifdef PINPAD_DND_SUPPORT
|
#ifdef PINPAD_DND_SUPPORT
|
||||||
# ifdef ENABLE_VIRTUAL_COM_PORT
|
# ifdef ENABLE_VIRTUAL_COM_PORT
|
||||||
else if (intf == 3)
|
else if (interface == 3)
|
||||||
{
|
|
||||||
ClearDTOG_TX (ENDP6);
|
|
||||||
ClearDTOG_RX (ENDP7);
|
|
||||||
}
|
|
||||||
# else
|
# else
|
||||||
else if (intf == 1)
|
else if (interface == 1)
|
||||||
{
|
|
||||||
ClearDTOG_TX (ENDP6);
|
|
||||||
ClearDTOG_RX (ENDP7);
|
|
||||||
}
|
|
||||||
# endif
|
# endif
|
||||||
|
{
|
||||||
|
/* Initialize Endpoint 6 */
|
||||||
|
usb_lld_setup_endpoint (ENDP6, EP_BULK, 0, 0, ENDP6_TXADDR, 0);
|
||||||
|
|
||||||
|
/* Initialize Endpoint 7 */
|
||||||
|
usb_lld_setup_endpoint (ENDP7, EP_BULK, 0, ENDP7_RXADDR, 0, 64);
|
||||||
|
usb_lld_stall_rx (ENDP7);
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static void
|
|
||||||
gnuk_device_SetDeviceAddress (void)
|
|
||||||
{
|
|
||||||
bDeviceState = ADDRESSED;
|
|
||||||
}
|
|
||||||
|
|
||||||
/* IN from port 0 */
|
|
||||||
static void
|
|
||||||
gnuk_device_Status_In (void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
/* OUT to port 0 */
|
|
||||||
static void
|
|
||||||
gnuk_device_Status_Out (void)
|
|
||||||
{
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t *
|
|
||||||
gnuk_device_GetDeviceDescriptor (uint16_t Length)
|
|
||||||
{
|
|
||||||
return Standard_GetDescriptorData (Length,
|
|
||||||
(PONE_DESCRIPTOR)&Device_Descriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t *
|
|
||||||
gnuk_device_GetConfigDescriptor (uint16_t Length)
|
|
||||||
{
|
|
||||||
return Standard_GetDescriptorData (Length,
|
|
||||||
(PONE_DESCRIPTOR)&Config_Descriptor);
|
|
||||||
}
|
|
||||||
|
|
||||||
static uint8_t *
|
|
||||||
gnuk_device_GetStringDescriptor (uint16_t Length)
|
|
||||||
{
|
|
||||||
uint8_t wValue0 = pInformation->USBwValue0;
|
|
||||||
|
|
||||||
if (wValue0 >= (sizeof (String_Descriptor) / sizeof (ONE_DESCRIPTOR)))
|
|
||||||
return NULL;
|
|
||||||
else
|
|
||||||
return
|
|
||||||
Standard_GetDescriptorData (Length,
|
|
||||||
(PONE_DESCRIPTOR)&String_Descriptor[wValue0]);
|
|
||||||
}
|
|
||||||
|
|
||||||
#ifdef PINPAD_DND_SUPPORT
|
#ifdef PINPAD_DND_SUPPORT
|
||||||
# ifdef ENABLE_VIRTUAL_COM_PORT
|
# ifdef ENABLE_VIRTUAL_COM_PORT
|
||||||
# define NUM_INTERFACES 4 /* two for CDC, one for CCID, and MSC */
|
# define NUM_INTERFACES 4 /* two for CDC, one for CCID, and MSC */
|
||||||
@@ -264,15 +144,28 @@ gnuk_device_GetStringDescriptor (uint16_t Length)
|
|||||||
# endif
|
# endif
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static RESULT
|
static void
|
||||||
gnuk_device_Get_Interface_Setting (uint8_t Interface, uint8_t AlternateSetting)
|
gnuk_device_reset (void)
|
||||||
{
|
{
|
||||||
if (AlternateSetting > 0) /* Any interface, we have no alternate */
|
int i;
|
||||||
return USB_UNSUPPORT;
|
|
||||||
else if (Interface > NUM_INTERFACES)
|
|
||||||
return USB_UNSUPPORT;
|
|
||||||
|
|
||||||
return USB_SUCCESS;
|
/* Set DEVICE as not configured */
|
||||||
|
usb_lld_set_configuration (0);
|
||||||
|
|
||||||
|
/* Current Feature initialization */
|
||||||
|
usb_lld_set_feature (Config_Descriptor.Descriptor[7]);
|
||||||
|
|
||||||
|
usb_lld_reset ();
|
||||||
|
|
||||||
|
/* Initialize Endpoint 0 */
|
||||||
|
usb_lld_setup_endpoint (ENDP0, EP_CONTROL, 0,
|
||||||
|
ENDP0_RXADDR, ENDP0_TXADDR,
|
||||||
|
GNUK_MAX_PACKET_SIZE);
|
||||||
|
|
||||||
|
for (i = 0; i < NUM_INTERFACES; i++)
|
||||||
|
gnuk_setup_endpoints_for_interface (i);
|
||||||
|
|
||||||
|
bDeviceState = ATTACHED;
|
||||||
}
|
}
|
||||||
|
|
||||||
#define USB_CCID_REQ_ABORT 0x01
|
#define USB_CCID_REQ_ABORT 0x01
|
||||||
@@ -280,104 +173,48 @@ gnuk_device_Get_Interface_Setting (uint8_t Interface, uint8_t AlternateSetting)
|
|||||||
#define USB_CCID_REQ_GET_DATA_RATES 0x03
|
#define USB_CCID_REQ_GET_DATA_RATES 0x03
|
||||||
|
|
||||||
static const uint8_t freq_table[] = { 0xf3, 0x0d, 0, 0, }; /* dwDefaultClock */
|
static const uint8_t freq_table[] = { 0xf3, 0x0d, 0, 0, }; /* dwDefaultClock */
|
||||||
static uint8_t *
|
|
||||||
gnuk_clock_frequencies (uint16_t len)
|
|
||||||
{
|
|
||||||
if (len == 0)
|
|
||||||
{
|
|
||||||
pInformation->Ctrl_Info.Usb_wLength = sizeof (freq_table);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (uint8_t *)freq_table;
|
|
||||||
}
|
|
||||||
|
|
||||||
static const uint8_t data_rate_table[] = { 0x80, 0x25, 0, 0, }; /* dwDataRate */
|
static const uint8_t data_rate_table[] = { 0x80, 0x25, 0, 0, }; /* dwDataRate */
|
||||||
static uint8_t *
|
|
||||||
gnuk_data_rates (uint16_t len)
|
|
||||||
{
|
|
||||||
if (len == 0)
|
|
||||||
{
|
|
||||||
pInformation->Ctrl_Info.Usb_wLength = sizeof (data_rate_table);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (uint8_t *)data_rate_table;
|
|
||||||
}
|
|
||||||
|
|
||||||
#if defined(PINPAD_DND_SUPPORT)
|
#if defined(PINPAD_DND_SUPPORT)
|
||||||
static const uint8_t lun_table[] = { 0, 0, 0, 0, };
|
static const uint8_t lun_table[] = { 0, 0, 0, 0, };
|
||||||
static uint8_t *
|
|
||||||
msc_lun_info (uint16_t len)
|
|
||||||
{
|
|
||||||
if (len == 0)
|
|
||||||
{
|
|
||||||
pInformation->Ctrl_Info.Usb_wLength = sizeof (lun_table);
|
|
||||||
return NULL;
|
|
||||||
}
|
|
||||||
|
|
||||||
return (uint8_t *)lun_table;
|
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
static RESULT
|
static void
|
||||||
gnuk_setup_with_data (uint8_t RequestNo)
|
gnuk_setup_with_data (uint8_t recipient, uint8_t RequestNo, uint16_t index)
|
||||||
{
|
{
|
||||||
if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT)) /* Interface */
|
if (recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT)) /* Interface */
|
||||||
if (pInformation->USBwIndex0 == 0)
|
if (index == 0)
|
||||||
{
|
{
|
||||||
if (RequestNo == USB_CCID_REQ_GET_CLOCK_FREQUENCIES)
|
if (RequestNo == USB_CCID_REQ_GET_CLOCK_FREQUENCIES)
|
||||||
{
|
usb_lld_set_data_to_send (freq_table, sizeof (freq_table));
|
||||||
pInformation->Ctrl_Info.CopyData = gnuk_clock_frequencies;
|
|
||||||
pInformation->Ctrl_Info.Usb_wOffset = 0;
|
|
||||||
gnuk_clock_frequencies (0);
|
|
||||||
return USB_SUCCESS;
|
|
||||||
}
|
|
||||||
else if (RequestNo == USB_CCID_REQ_GET_DATA_RATES)
|
else if (RequestNo == USB_CCID_REQ_GET_DATA_RATES)
|
||||||
{
|
usb_lld_set_data_to_send (data_rate_table, sizeof (data_rate_table));
|
||||||
pInformation->Ctrl_Info.CopyData = gnuk_data_rates;
|
|
||||||
pInformation->Ctrl_Info.Usb_wOffset = 0;
|
|
||||||
gnuk_data_rates (0);
|
|
||||||
return USB_SUCCESS;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return USB_UNSUPPORT;
|
|
||||||
}
|
}
|
||||||
#if defined(PINPAD_DND_SUPPORT)
|
#if defined(PINPAD_DND_SUPPORT)
|
||||||
# if defined(ENABLE_VIRTUAL_COM_PORT)
|
# if defined(ENABLE_VIRTUAL_COM_PORT)
|
||||||
else if (pInformation->USBwIndex0 == 1)
|
else if (index == 1)
|
||||||
return Virtual_Com_Port_Data_Setup (RequestNo);
|
Virtual_Com_Port_Data_Setup (RequestNo);
|
||||||
else if (pInformation->USBwIndex0 == 3)
|
else if (index == 3)
|
||||||
# else
|
# else
|
||||||
else if (pInformation->USBwIndex0 == 1)
|
else if (index == 1)
|
||||||
# endif
|
# endif
|
||||||
{
|
{
|
||||||
if (RequestNo == MSC_GET_MAX_LUN_COMMAND)
|
if (RequestNo == MSC_GET_MAX_LUN_COMMAND)
|
||||||
{
|
usb_lld_set_data_to_send (lun_table, sizeof (lun_table));
|
||||||
pInformation->Ctrl_Info.CopyData = msc_lun_info;
|
|
||||||
pInformation->Ctrl_Info.Usb_wOffset = 0;
|
|
||||||
msc_lun_info (0);
|
|
||||||
return USB_SUCCESS;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
return USB_UNSUPPORT;
|
|
||||||
}
|
}
|
||||||
#elif defined(ENABLE_VIRTUAL_COM_PORT)
|
#elif defined(ENABLE_VIRTUAL_COM_PORT)
|
||||||
else if (pInformation->USBwIndex0 == 1)
|
else if (index == 1)
|
||||||
return Virtual_Com_Port_Data_Setup (RequestNo);
|
Virtual_Com_Port_Data_Setup (RequestNo);
|
||||||
#endif
|
#endif
|
||||||
else
|
|
||||||
return USB_UNSUPPORT;
|
|
||||||
else
|
|
||||||
return USB_UNSUPPORT;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static RESULT
|
static int
|
||||||
gnuk_setup_with_nodata (uint8_t RequestNo)
|
gnuk_setup_with_nodata (uint8_t recipient, uint8_t RequestNo, uint16_t index)
|
||||||
{
|
{
|
||||||
if (Type_Recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT)) /* Interface */
|
if (recipient == (CLASS_REQUEST | INTERFACE_RECIPIENT)) /* Interface */
|
||||||
if (pInformation->USBwIndex0 == 0)
|
if (index == 0)
|
||||||
{
|
{
|
||||||
if (RequestNo == USB_CCID_REQ_ABORT)
|
if (RequestNo == USB_CCID_REQ_ABORT)
|
||||||
/* wValue: bSeq, bSlot */
|
/* wValue: bSeq, bSlot */
|
||||||
@@ -388,11 +225,11 @@ gnuk_setup_with_nodata (uint8_t RequestNo)
|
|||||||
}
|
}
|
||||||
#if defined(PINPAD_DND_SUPPORT)
|
#if defined(PINPAD_DND_SUPPORT)
|
||||||
# if defined(ENABLE_VIRTUAL_COM_PORT)
|
# if defined(ENABLE_VIRTUAL_COM_PORT)
|
||||||
else if (pInformation->USBwIndex0 == 1)
|
else if (index == 1)
|
||||||
return Virtual_Com_Port_NoData_Setup (RequestNo);
|
return Virtual_Com_Port_NoData_Setup (RequestNo);
|
||||||
else if (pInformation->USBwIndex0 == 3)
|
else if (index == 3)
|
||||||
# else
|
# else
|
||||||
else if (pInformation->USBwIndex0 == 1)
|
else if (index == 1)
|
||||||
# endif
|
# endif
|
||||||
{
|
{
|
||||||
if (RequestNo == MSC_MASS_STORAGE_RESET_COMMAND)
|
if (RequestNo == MSC_MASS_STORAGE_RESET_COMMAND)
|
||||||
@@ -404,7 +241,7 @@ gnuk_setup_with_nodata (uint8_t RequestNo)
|
|||||||
return USB_UNSUPPORT;
|
return USB_UNSUPPORT;
|
||||||
}
|
}
|
||||||
#elif defined(ENABLE_VIRTUAL_COM_PORT)
|
#elif defined(ENABLE_VIRTUAL_COM_PORT)
|
||||||
else if (pInformation->USBwIndex0 == 1)
|
else if (index == 1)
|
||||||
return Virtual_Com_Port_NoData_Setup (RequestNo);
|
return Virtual_Com_Port_NoData_Setup (RequestNo);
|
||||||
#endif
|
#endif
|
||||||
else
|
else
|
||||||
@@ -413,38 +250,117 @@ gnuk_setup_with_nodata (uint8_t RequestNo)
|
|||||||
return USB_UNSUPPORT;
|
return USB_UNSUPPORT;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
gnuk_get_descriptor (uint8_t desc_type, uint16_t index, uint16_t value)
|
||||||
|
{
|
||||||
|
(void)index;
|
||||||
|
if (desc_type == DEVICE_DESCRIPTOR)
|
||||||
|
{
|
||||||
|
usb_lld_set_data_to_send (Device_Descriptor.Descriptor,
|
||||||
|
Device_Descriptor.Descriptor_Size);
|
||||||
|
return USB_SUCCESS;
|
||||||
|
}
|
||||||
|
else if (desc_type == CONFIG_DESCRIPTOR)
|
||||||
|
{
|
||||||
|
usb_lld_set_data_to_send (Config_Descriptor.Descriptor,
|
||||||
|
Config_Descriptor.Descriptor_Size);
|
||||||
|
return USB_SUCCESS;
|
||||||
|
}
|
||||||
|
else if (desc_type == STRING_DESCRIPTOR)
|
||||||
|
{
|
||||||
|
uint8_t desc_index = value & 0xff;
|
||||||
|
|
||||||
|
if (desc_index < NUM_STRING_DESC)
|
||||||
|
{
|
||||||
|
usb_lld_set_data_to_send (String_Descriptors[desc_index].Descriptor,
|
||||||
|
String_Descriptors[desc_index].Descriptor_Size);
|
||||||
|
return USB_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return USB_UNSUPPORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int gnuk_usb_event (uint8_t event_type, uint16_t value)
|
||||||
|
{
|
||||||
|
switch (event_type)
|
||||||
|
{
|
||||||
|
case USB_EVENT_RESET:
|
||||||
|
break;
|
||||||
|
case USB_EVENT_ADDRESS:
|
||||||
|
bDeviceState = ADDRESSED;
|
||||||
|
break;
|
||||||
|
case USB_EVENT_CONFIG:
|
||||||
|
if (usb_lld_current_configuration () == 0)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
extern void *main_thread;
|
||||||
|
#define LED_STATUS_MODE (8)
|
||||||
|
|
||||||
|
if (value != 1)
|
||||||
|
return USB_UNSUPPORT;
|
||||||
|
|
||||||
|
usb_lld_set_configuration (value);
|
||||||
|
for (i = 0; i < NUM_INTERFACES; i++)
|
||||||
|
gnuk_setup_endpoints_for_interface (i);
|
||||||
|
bDeviceState = CONFIGURED;
|
||||||
|
chEvtSignalI (main_thread, LED_STATUS_MODE);
|
||||||
|
return USB_SUCCESS;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
if (value != 0)
|
||||||
|
return USB_UNSUPPORT;
|
||||||
|
|
||||||
|
usb_lld_set_configuration (0);
|
||||||
|
// Disable all endpoints???
|
||||||
|
bDeviceState = ADDRESSED;
|
||||||
|
}
|
||||||
|
default:
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return USB_UNSUPPORT;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int gnuk_interface (uint8_t cmd, uint16_t interface, uint16_t alt)
|
||||||
|
{
|
||||||
|
static uint8_t zero = 0;
|
||||||
|
|
||||||
|
if (interface >= NUM_INTERFACES)
|
||||||
|
return USB_UNSUPPORT;
|
||||||
|
|
||||||
|
switch (cmd)
|
||||||
|
{
|
||||||
|
case USB_SET_INTERFACE:
|
||||||
|
if (alt != 0)
|
||||||
|
return USB_UNSUPPORT;
|
||||||
|
else
|
||||||
|
{
|
||||||
|
gnuk_setup_endpoints_for_interface (interface);
|
||||||
|
return USB_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
case USB_GET_INTERFACE:
|
||||||
|
usb_lld_set_data_to_send (&zero, 1);
|
||||||
|
return USB_SUCCESS;
|
||||||
|
|
||||||
|
default:
|
||||||
|
case USB_QUERY_INTERFACE:
|
||||||
|
return USB_SUCCESS;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Interface to USB core
|
* Interface to USB core
|
||||||
*/
|
*/
|
||||||
|
|
||||||
const DEVICE_PROP Device_Property = {
|
const struct usb_device_method Device_Method = {
|
||||||
gnuk_device_init,
|
gnuk_device_init,
|
||||||
gnuk_device_reset,
|
gnuk_device_reset,
|
||||||
gnuk_device_Status_In,
|
|
||||||
gnuk_device_Status_Out,
|
|
||||||
gnuk_setup_with_data,
|
gnuk_setup_with_data,
|
||||||
gnuk_setup_with_nodata,
|
gnuk_setup_with_nodata,
|
||||||
gnuk_device_Get_Interface_Setting,
|
gnuk_get_descriptor,
|
||||||
gnuk_device_GetDeviceDescriptor,
|
gnuk_usb_event,
|
||||||
gnuk_device_GetConfigDescriptor,
|
gnuk_interface,
|
||||||
gnuk_device_GetStringDescriptor,
|
|
||||||
0,
|
|
||||||
GNUK_MAX_PACKET_SIZE
|
|
||||||
};
|
|
||||||
|
|
||||||
const DEVICE Device_Table = {
|
|
||||||
EP_NUM,
|
|
||||||
1
|
|
||||||
};
|
|
||||||
|
|
||||||
const USER_STANDARD_REQUESTS User_Standard_Requests = {
|
|
||||||
NOP_Process, /* GetConfiguration */
|
|
||||||
gnuk_device_SetConfiguration,
|
|
||||||
NOP_Process, /* GetInterface */
|
|
||||||
gnuk_device_SetInterface,
|
|
||||||
NOP_Process, /* GetStatus */
|
|
||||||
NOP_Process, /* ClearFeature */
|
|
||||||
NOP_Process, /* SetEndPointFeature */
|
|
||||||
NOP_Process, /* SetDeviceFeature */
|
|
||||||
gnuk_device_SetDeviceAddress
|
|
||||||
};
|
};
|
||||||
|
|||||||
@@ -1,7 +0,0 @@
|
|||||||
#ifndef __usb_prop_H
|
|
||||||
#define __usb_prop_H
|
|
||||||
|
|
||||||
extern const ONE_DESCRIPTOR Device_Descriptor;
|
|
||||||
extern const ONE_DESCRIPTOR Config_Descriptor;
|
|
||||||
extern const ONE_DESCRIPTOR String_Descriptor[4];
|
|
||||||
#endif /* __usb_prop_H */
|
|
||||||
@@ -1,5 +0,0 @@
|
|||||||
VCOMDIR = ../Virtual_COM_Port
|
|
||||||
VCOMSRC= $(VCOMDIR)/usb_istr.c $(VCOMDIR)/usb_pwr.c
|
|
||||||
ifneq ($(ENABLE_VCOMPORT),)
|
|
||||||
VCOMSRC += usb_endp.c
|
|
||||||
endif
|
|
||||||
Reference in New Issue
Block a user