mirror of
https://github.com/betaflight/betaflight.git
synced 2025-07-15 20:35:33 +03:00
Add VCP driver (work in progress)
This commit is contained in:
parent
294f09bc91
commit
3f8a6c0e20
39 changed files with 6912 additions and 7 deletions
27
Makefile
27
Makefile
|
@ -48,15 +48,30 @@ VPATH := $(SRC_DIR):$(SRC_DIR)/startup
|
||||||
ifeq ($(TARGET),$(filter $(TARGET),STM32F3DISCOVERY CHEBUZZF3 NAZE32PRO))
|
ifeq ($(TARGET),$(filter $(TARGET),STM32F3DISCOVERY CHEBUZZF3 NAZE32PRO))
|
||||||
|
|
||||||
STDPERIPH_DIR = $(ROOT)/lib/main/STM32F30x_StdPeriph_Driver
|
STDPERIPH_DIR = $(ROOT)/lib/main/STM32F30x_StdPeriph_Driver
|
||||||
|
USBFS_DIR = $(ROOT)/lib/main/STM32_USB-FS-Device_Driver
|
||||||
|
|
||||||
VPATH := $(VPATH):$(CMSIS_DIR)/CM1/CoreSupport:$(CMSIS_DIR)/CM1/DeviceSupport/ST/STM32F30x
|
USBPERIPH_SRC = $(notdir $(wildcard $(USBFS_DIR)/src/*.c))
|
||||||
|
STDPERIPH_SRC = $(notdir $(wildcard $(STDPERIPH_DIR)/src/*.c))
|
||||||
|
|
||||||
|
EXCLUDES = stm32f30x_crc.c \
|
||||||
|
stm32f30x_can.c
|
||||||
|
|
||||||
|
STDPERIPH_SRC := $(filter-out ${EXCLUDES}, $(STDPERIPH_SRC))
|
||||||
|
|
||||||
|
DEVICE_STDPERIPH_SRC = $(USBPERIPH_SRC) \
|
||||||
|
$(STDPERIPH_SRC)
|
||||||
|
|
||||||
|
|
||||||
|
VPATH := $(VPATH):$(CMSIS_DIR)/CM1/CoreSupport:$(CMSIS_DIR)/CM1/DeviceSupport/ST/STM32F30x:$(USBFS_DIR)/src
|
||||||
CMSIS_SRC = $(notdir $(wildcard $(CMSIS_DIR)/CM1/CoreSupport/*.c \
|
CMSIS_SRC = $(notdir $(wildcard $(CMSIS_DIR)/CM1/CoreSupport/*.c \
|
||||||
$(CMSIS_DIR)/CM1/DeviceSupport/ST/STM32F30x/*.c))
|
$(CMSIS_DIR)/CM1/DeviceSupport/ST/STM32F30x/*.c))
|
||||||
|
|
||||||
INCLUDE_DIRS := $(INCLUDE_DIRS) \
|
INCLUDE_DIRS := $(INCLUDE_DIRS) \
|
||||||
$(STDPERIPH_DIR)/inc \
|
$(STDPERIPH_DIR)/inc \
|
||||||
|
$(USBFS_DIR)/inc \
|
||||||
$(CMSIS_DIR)/CM1/CoreSupport \
|
$(CMSIS_DIR)/CM1/CoreSupport \
|
||||||
$(CMSIS_DIR)/CM1/DeviceSupport/ST/STM32F30x \
|
$(CMSIS_DIR)/CM1/DeviceSupport/ST/STM32F30x \
|
||||||
|
$(ROOT)/src/main/vcp
|
||||||
|
|
||||||
LD_SCRIPT = $(ROOT)/stm32_flash_f303.ld
|
LD_SCRIPT = $(ROOT)/stm32_flash_f303.ld
|
||||||
|
|
||||||
|
@ -197,8 +212,17 @@ STM32F30x_COMMON_SRC = startup_stm32f30x_md_gcc.S \
|
||||||
drivers/timer.c
|
drivers/timer.c
|
||||||
|
|
||||||
NAZE32PRO_SRC = $(STM32F30x_COMMON_SRC) \
|
NAZE32PRO_SRC = $(STM32F30x_COMMON_SRC) \
|
||||||
|
$(DEVICE_STDPERIPH_SRC) \
|
||||||
drivers/accgyro_mpu6050.c \
|
drivers/accgyro_mpu6050.c \
|
||||||
drivers/compass_hmc5883l.c \
|
drivers/compass_hmc5883l.c \
|
||||||
|
drivers/serial_usb_vcp.c \
|
||||||
|
vcp/hw_config.c \
|
||||||
|
vcp/stm32_it.c \
|
||||||
|
vcp/usb_desc.c \
|
||||||
|
vcp/usb_endp.c \
|
||||||
|
vcp/usb_istr.c \
|
||||||
|
vcp/usb_prop.c \
|
||||||
|
vcp/usb_pwr.c \
|
||||||
$(COMMON_SRC)
|
$(COMMON_SRC)
|
||||||
|
|
||||||
STM32F3DISCOVERY_COMMON_SRC = $(STM32F30x_COMMON_SRC) \
|
STM32F3DISCOVERY_COMMON_SRC = $(STM32F30x_COMMON_SRC) \
|
||||||
|
@ -224,7 +248,6 @@ CHEBUZZF3_SRC = $(STM32F3DISCOVERY_SRC) \
|
||||||
|
|
||||||
# Search path and source files for the ST stdperiph library
|
# Search path and source files for the ST stdperiph library
|
||||||
VPATH := $(VPATH):$(STDPERIPH_DIR)/src
|
VPATH := $(VPATH):$(STDPERIPH_DIR)/src
|
||||||
STDPERIPH_SRC = $(notdir $(wildcard $(STDPERIPH_DIR)/src/*.c))
|
|
||||||
|
|
||||||
###############################################################################
|
###############################################################################
|
||||||
# Things that might need changing to use different tools
|
# Things that might need changing to use different tools
|
||||||
|
|
871
lib/main/STM32_USB-FS-Device_Driver/Release_Notes.html
Normal file
871
lib/main/STM32_USB-FS-Device_Driver/Release_Notes.html
Normal file
|
@ -0,0 +1,871 @@
|
||||||
|
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
|
||||||
|
<html xmlns:v="urn:schemas-microsoft-com:vml" xmlns:o="urn:schemas-microsoft-com:office:office" xmlns:w="urn:schemas-microsoft-com:office:word" xmlns:m="http://schemas.microsoft.com/office/2004/12/omml" xmlns="http://www.w3.org/TR/REC-html40"><head>
|
||||||
|
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
|
||||||
|
<link rel="File-List" href="Release_Notes%20%28package%29_files/filelist.xml">
|
||||||
|
<link rel="Edit-Time-Data" href="Release_Notes%20%28package%29_files/editdata.mso"><!--[if !mso]> <style> v\:* {behavior:url(#default#VML);} o\:* {behavior:url(#default#VML);} w\:* {behavior:url(#default#VML);} .shape {behavior:url(#default#VML);} </style> <![endif]--><title>Release Notes for STM32F10x, STM32L1xx and STM32F3xx USB-FS-Device Driver</title><!--[if gte mso 9]><xml> <o:DocumentProperties> <o:Author>STMicroelectronics</o:Author> <o:LastAuthor>STMicroelectronics</o:LastAuthor> <o:Revision>145</o:Revision> <o:TotalTime>461</o:TotalTime> <o:Created>2009-02-27T19:26:00Z</o:Created> <o:LastSaved>2010-12-13T14:14:00Z</o:LastSaved> <o:Pages>1</o:Pages> <o:Words>358</o:Words> <o:Characters>2045</o:Characters> <o:Company>STMicroelectronics</o:Company> <o:Lines>17</o:Lines> <o:Paragraphs>4</o:Paragraphs> <o:CharactersWithSpaces>2399</o:CharactersWithSpaces> <o:Version>11.9999</o:Version> </o:DocumentProperties> </xml><![endif]--><!--[if gte mso 9]><xml> <w:WordDocument> <w:View>Normal</w:View> <w:SpellingState>Clean</w:SpellingState> <w:GrammarState>Clean</w:GrammarState> <w:ValidateAgainstSchemas/> <w:SaveIfXMLInvalid>false</w:SaveIfXMLInvalid> <w:IgnoreMixedContent>false</w:IgnoreMixedContent> <w:AlwaysShowPlaceholderText>false</w:AlwaysShowPlaceholderText> <w:Compatibility> <w:UseFELayout/> </w:Compatibility> <w:BrowserLevel>MicrosoftInternetExplorer4</w:BrowserLevel> </w:WordDocument> </xml><![endif]--><!--[if gte mso 9]><xml> <w:LatentStyles DefLockedState="false" LatentStyleCount="156"> </w:LatentStyles> </xml><![endif]-->
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<style>
|
||||||
|
<!--
|
||||||
|
/* Font Definitions */
|
||||||
|
@font-face
|
||||||
|
{font-family:"Cambria Math";
|
||||||
|
panose-1:2 4 5 3 5 4 6 3 2 4;
|
||||||
|
mso-font-charset:1;
|
||||||
|
mso-generic-font-family:roman;
|
||||||
|
mso-font-format:other;
|
||||||
|
mso-font-pitch:variable;
|
||||||
|
mso-font-signature:0 0 0 0 0 0;}
|
||||||
|
@font-face
|
||||||
|
{font-family:Calibri;
|
||||||
|
panose-1:2 15 5 2 2 2 4 3 2 4;
|
||||||
|
mso-font-charset:0;
|
||||||
|
mso-generic-font-family:swiss;
|
||||||
|
mso-font-pitch:variable;
|
||||||
|
mso-font-signature:-1610611985 1073750139 0 0 159 0;}
|
||||||
|
@font-face
|
||||||
|
{font-family:Tahoma;
|
||||||
|
panose-1:2 11 6 4 3 5 4 4 2 4;
|
||||||
|
mso-font-charset:0;
|
||||||
|
mso-generic-font-family:swiss;
|
||||||
|
mso-font-pitch:variable;
|
||||||
|
mso-font-signature:1627400839 -2147483648 8 0 66047 0;}
|
||||||
|
@font-face
|
||||||
|
{font-family:Verdana;
|
||||||
|
panose-1:2 11 6 4 3 5 4 4 2 4;
|
||||||
|
mso-font-charset:0;
|
||||||
|
mso-generic-font-family:swiss;
|
||||||
|
mso-font-pitch:variable;
|
||||||
|
mso-font-signature:536871559 0 0 0 415 0;}
|
||||||
|
/* Style Definitions */
|
||||||
|
p.MsoNormal, li.MsoNormal, div.MsoNormal
|
||||||
|
{mso-style-unhide:no;
|
||||||
|
mso-style-qformat:yes;
|
||||||
|
mso-style-parent:"";
|
||||||
|
margin:0in;
|
||||||
|
margin-bottom:.0001pt;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
font-size:12.0pt;
|
||||||
|
font-family:"Times New Roman","serif";
|
||||||
|
mso-fareast-font-family:"Times New Roman";}
|
||||||
|
h1
|
||||||
|
{mso-style-unhide:no;
|
||||||
|
mso-style-qformat:yes;
|
||||||
|
mso-style-link:"Heading 1 Char";
|
||||||
|
mso-margin-top-alt:auto;
|
||||||
|
margin-right:0in;
|
||||||
|
mso-margin-bottom-alt:auto;
|
||||||
|
margin-left:0in;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
mso-outline-level:1;
|
||||||
|
font-size:24.0pt;
|
||||||
|
font-family:"Times New Roman","serif";
|
||||||
|
mso-fareast-font-family:"Times New Roman";
|
||||||
|
mso-fareast-theme-font:minor-fareast;
|
||||||
|
font-weight:bold;}
|
||||||
|
h2
|
||||||
|
{mso-style-unhide:no;
|
||||||
|
mso-style-qformat:yes;
|
||||||
|
mso-style-link:"Heading 2 Char";
|
||||||
|
mso-style-next:Normal;
|
||||||
|
margin-top:12.0pt;
|
||||||
|
margin-right:0in;
|
||||||
|
margin-bottom:3.0pt;
|
||||||
|
margin-left:0in;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
page-break-after:avoid;
|
||||||
|
mso-outline-level:2;
|
||||||
|
font-size:14.0pt;
|
||||||
|
font-family:"Arial","sans-serif";
|
||||||
|
mso-fareast-font-family:"Times New Roman";
|
||||||
|
mso-fareast-theme-font:minor-fareast;
|
||||||
|
font-weight:bold;
|
||||||
|
font-style:italic;}
|
||||||
|
h3
|
||||||
|
{mso-style-unhide:no;
|
||||||
|
mso-style-qformat:yes;
|
||||||
|
mso-style-link:"Heading 3 Char";
|
||||||
|
mso-margin-top-alt:auto;
|
||||||
|
margin-right:0in;
|
||||||
|
mso-margin-bottom-alt:auto;
|
||||||
|
margin-left:0in;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
mso-outline-level:3;
|
||||||
|
font-size:13.5pt;
|
||||||
|
font-family:"Times New Roman","serif";
|
||||||
|
mso-fareast-font-family:"Times New Roman";
|
||||||
|
mso-fareast-theme-font:minor-fareast;
|
||||||
|
font-weight:bold;}
|
||||||
|
a:link, span.MsoHyperlink
|
||||||
|
{mso-style-unhide:no;
|
||||||
|
color:blue;
|
||||||
|
text-decoration:underline;
|
||||||
|
text-underline:single;}
|
||||||
|
a:visited, span.MsoHyperlinkFollowed
|
||||||
|
{mso-style-unhide:no;
|
||||||
|
color:blue;
|
||||||
|
text-decoration:underline;
|
||||||
|
text-underline:single;}
|
||||||
|
p
|
||||||
|
{mso-style-unhide:no;
|
||||||
|
mso-margin-top-alt:auto;
|
||||||
|
margin-right:0in;
|
||||||
|
mso-margin-bottom-alt:auto;
|
||||||
|
margin-left:0in;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
font-size:12.0pt;
|
||||||
|
font-family:"Times New Roman","serif";
|
||||||
|
mso-fareast-font-family:"Times New Roman";}
|
||||||
|
p.MsoAcetate, li.MsoAcetate, div.MsoAcetate
|
||||||
|
{mso-style-unhide:no;
|
||||||
|
mso-style-link:"Balloon Text Char";
|
||||||
|
margin:0in;
|
||||||
|
margin-bottom:.0001pt;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
font-size:8.0pt;
|
||||||
|
font-family:"Tahoma","sans-serif";
|
||||||
|
mso-fareast-font-family:"Times New Roman";}
|
||||||
|
span.Heading1Char
|
||||||
|
{mso-style-name:"Heading 1 Char";
|
||||||
|
mso-style-unhide:no;
|
||||||
|
mso-style-locked:yes;
|
||||||
|
mso-style-link:"Heading 1";
|
||||||
|
mso-ansi-font-size:14.0pt;
|
||||||
|
mso-bidi-font-size:14.0pt;
|
||||||
|
font-family:"Cambria","serif";
|
||||||
|
mso-ascii-font-family:Cambria;
|
||||||
|
mso-ascii-theme-font:major-latin;
|
||||||
|
mso-fareast-font-family:"Times New Roman";
|
||||||
|
mso-fareast-theme-font:major-fareast;
|
||||||
|
mso-hansi-font-family:Cambria;
|
||||||
|
mso-hansi-theme-font:major-latin;
|
||||||
|
mso-bidi-font-family:"Times New Roman";
|
||||||
|
mso-bidi-theme-font:major-bidi;
|
||||||
|
color:#365F91;
|
||||||
|
mso-themecolor:accent1;
|
||||||
|
mso-themeshade:191;
|
||||||
|
font-weight:bold;}
|
||||||
|
span.Heading2Char
|
||||||
|
{mso-style-name:"Heading 2 Char";
|
||||||
|
mso-style-unhide:no;
|
||||||
|
mso-style-locked:yes;
|
||||||
|
mso-style-link:"Heading 2";
|
||||||
|
mso-ansi-font-size:13.0pt;
|
||||||
|
mso-bidi-font-size:13.0pt;
|
||||||
|
font-family:"Cambria","serif";
|
||||||
|
mso-ascii-font-family:Cambria;
|
||||||
|
mso-ascii-theme-font:major-latin;
|
||||||
|
mso-fareast-font-family:"Times New Roman";
|
||||||
|
mso-fareast-theme-font:major-fareast;
|
||||||
|
mso-hansi-font-family:Cambria;
|
||||||
|
mso-hansi-theme-font:major-latin;
|
||||||
|
mso-bidi-font-family:"Times New Roman";
|
||||||
|
mso-bidi-theme-font:major-bidi;
|
||||||
|
color:#4F81BD;
|
||||||
|
mso-themecolor:accent1;
|
||||||
|
font-weight:bold;}
|
||||||
|
span.Heading3Char
|
||||||
|
{mso-style-name:"Heading 3 Char";
|
||||||
|
mso-style-unhide:no;
|
||||||
|
mso-style-locked:yes;
|
||||||
|
mso-style-link:"Heading 3";
|
||||||
|
mso-ansi-font-size:12.0pt;
|
||||||
|
mso-bidi-font-size:12.0pt;
|
||||||
|
font-family:"Cambria","serif";
|
||||||
|
mso-ascii-font-family:Cambria;
|
||||||
|
mso-ascii-theme-font:major-latin;
|
||||||
|
mso-fareast-font-family:"Times New Roman";
|
||||||
|
mso-fareast-theme-font:major-fareast;
|
||||||
|
mso-hansi-font-family:Cambria;
|
||||||
|
mso-hansi-theme-font:major-latin;
|
||||||
|
mso-bidi-font-family:"Times New Roman";
|
||||||
|
mso-bidi-theme-font:major-bidi;
|
||||||
|
color:#4F81BD;
|
||||||
|
mso-themecolor:accent1;
|
||||||
|
font-weight:bold;}
|
||||||
|
span.BalloonTextChar
|
||||||
|
{mso-style-name:"Balloon Text Char";
|
||||||
|
mso-style-unhide:no;
|
||||||
|
mso-style-locked:yes;
|
||||||
|
mso-style-link:"Balloon Text";
|
||||||
|
mso-ansi-font-size:8.0pt;
|
||||||
|
mso-bidi-font-size:8.0pt;
|
||||||
|
font-family:"Tahoma","sans-serif";
|
||||||
|
mso-ascii-font-family:Tahoma;
|
||||||
|
mso-hansi-font-family:Tahoma;
|
||||||
|
mso-bidi-font-family:Tahoma;}
|
||||||
|
.MsoChpDefault
|
||||||
|
{mso-style-type:export-only;
|
||||||
|
mso-default-props:yes;
|
||||||
|
font-size:10.0pt;
|
||||||
|
mso-ansi-font-size:10.0pt;
|
||||||
|
mso-bidi-font-size:10.0pt;}
|
||||||
|
@page WordSection1
|
||||||
|
{size:8.5in 11.0in;
|
||||||
|
margin:1.0in 1.25in 1.0in 1.25in;
|
||||||
|
mso-header-margin:.5in;
|
||||||
|
mso-footer-margin:.5in;
|
||||||
|
mso-paper-source:0;}
|
||||||
|
div.WordSection1
|
||||||
|
{page:WordSection1;}
|
||||||
|
/* List Definitions */
|
||||||
|
@list l0
|
||||||
|
{mso-list-id:62067358;
|
||||||
|
mso-list-template-ids:-174943062;}
|
||||||
|
@list l0:level1
|
||||||
|
{mso-level-number-format:bullet;
|
||||||
|
mso-level-text:\F0B7;
|
||||||
|
mso-level-tab-stop:.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;
|
||||||
|
mso-ansi-font-size:10.0pt;
|
||||||
|
font-family:Symbol;}
|
||||||
|
@list l0:level2
|
||||||
|
{mso-level-tab-stop:1.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l0:level3
|
||||||
|
{mso-level-tab-stop:1.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l0:level4
|
||||||
|
{mso-level-tab-stop:2.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l0:level5
|
||||||
|
{mso-level-tab-stop:2.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l0:level6
|
||||||
|
{mso-level-tab-stop:3.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l0:level7
|
||||||
|
{mso-level-tab-stop:3.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l0:level8
|
||||||
|
{mso-level-tab-stop:4.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l0:level9
|
||||||
|
{mso-level-tab-stop:4.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l1
|
||||||
|
{mso-list-id:128015942;
|
||||||
|
mso-list-template-ids:-90681214;}
|
||||||
|
@list l1:level1
|
||||||
|
{mso-level-tab-stop:.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l1:level2
|
||||||
|
{mso-level-tab-stop:1.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l1:level3
|
||||||
|
{mso-level-tab-stop:1.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l1:level4
|
||||||
|
{mso-level-tab-stop:2.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l1:level5
|
||||||
|
{mso-level-tab-stop:2.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l1:level6
|
||||||
|
{mso-level-tab-stop:3.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l1:level7
|
||||||
|
{mso-level-tab-stop:3.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l1:level8
|
||||||
|
{mso-level-tab-stop:4.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l1:level9
|
||||||
|
{mso-level-tab-stop:4.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l2
|
||||||
|
{mso-list-id:216556000;
|
||||||
|
mso-list-template-ids:925924412;}
|
||||||
|
@list l2:level1
|
||||||
|
{mso-level-number-format:bullet;
|
||||||
|
mso-level-text:\F0B7;
|
||||||
|
mso-level-tab-stop:.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;
|
||||||
|
mso-ansi-font-size:10.0pt;
|
||||||
|
font-family:Symbol;}
|
||||||
|
@list l2:level2
|
||||||
|
{mso-level-number-format:bullet;
|
||||||
|
mso-level-text:\F0B7;
|
||||||
|
mso-level-tab-stop:1.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;
|
||||||
|
mso-ansi-font-size:10.0pt;
|
||||||
|
font-family:Symbol;}
|
||||||
|
@list l2:level3
|
||||||
|
{mso-level-tab-stop:1.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l2:level4
|
||||||
|
{mso-level-tab-stop:2.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l2:level5
|
||||||
|
{mso-level-tab-stop:2.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l2:level6
|
||||||
|
{mso-level-tab-stop:3.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l2:level7
|
||||||
|
{mso-level-tab-stop:3.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l2:level8
|
||||||
|
{mso-level-tab-stop:4.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l2:level9
|
||||||
|
{mso-level-tab-stop:4.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l3
|
||||||
|
{mso-list-id:562446694;
|
||||||
|
mso-list-template-ids:913898366;}
|
||||||
|
@list l3:level1
|
||||||
|
{mso-level-number-format:bullet;
|
||||||
|
mso-level-text:\F0B7;
|
||||||
|
mso-level-tab-stop:.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;
|
||||||
|
mso-ansi-font-size:10.0pt;
|
||||||
|
font-family:Symbol;}
|
||||||
|
@list l3:level2
|
||||||
|
{mso-level-tab-stop:1.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l3:level3
|
||||||
|
{mso-level-tab-stop:1.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l3:level4
|
||||||
|
{mso-level-tab-stop:2.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l3:level5
|
||||||
|
{mso-level-tab-stop:2.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l3:level6
|
||||||
|
{mso-level-tab-stop:3.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l3:level7
|
||||||
|
{mso-level-tab-stop:3.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l3:level8
|
||||||
|
{mso-level-tab-stop:4.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l3:level9
|
||||||
|
{mso-level-tab-stop:4.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l4
|
||||||
|
{mso-list-id:797802132;
|
||||||
|
mso-list-template-ids:-1971191336;}
|
||||||
|
@list l4:level1
|
||||||
|
{mso-level-tab-stop:.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l4:level2
|
||||||
|
{mso-level-tab-stop:1.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l4:level3
|
||||||
|
{mso-level-tab-stop:1.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l4:level4
|
||||||
|
{mso-level-tab-stop:2.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l4:level5
|
||||||
|
{mso-level-tab-stop:2.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l4:level6
|
||||||
|
{mso-level-tab-stop:3.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l4:level7
|
||||||
|
{mso-level-tab-stop:3.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l4:level8
|
||||||
|
{mso-level-tab-stop:4.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l4:level9
|
||||||
|
{mso-level-tab-stop:4.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l5
|
||||||
|
{mso-list-id:907304066;
|
||||||
|
mso-list-template-ids:1969781532;}
|
||||||
|
@list l5:level1
|
||||||
|
{mso-level-tab-stop:.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l5:level2
|
||||||
|
{mso-level-tab-stop:1.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l5:level3
|
||||||
|
{mso-level-tab-stop:1.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l5:level4
|
||||||
|
{mso-level-tab-stop:2.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l5:level5
|
||||||
|
{mso-level-tab-stop:2.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l5:level6
|
||||||
|
{mso-level-tab-stop:3.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l5:level7
|
||||||
|
{mso-level-tab-stop:3.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l5:level8
|
||||||
|
{mso-level-tab-stop:4.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l5:level9
|
||||||
|
{mso-level-tab-stop:4.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l6
|
||||||
|
{mso-list-id:1050613616;
|
||||||
|
mso-list-template-ids:-1009886748;}
|
||||||
|
@list l6:level1
|
||||||
|
{mso-level-number-format:bullet;
|
||||||
|
mso-level-text:\F0B7;
|
||||||
|
mso-level-tab-stop:.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;
|
||||||
|
mso-ansi-font-size:10.0pt;
|
||||||
|
font-family:Symbol;}
|
||||||
|
@list l6:level2
|
||||||
|
{mso-level-number-format:bullet;
|
||||||
|
mso-level-text:\F0B7;
|
||||||
|
mso-level-tab-stop:1.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;
|
||||||
|
mso-ansi-font-size:10.0pt;
|
||||||
|
font-family:Symbol;}
|
||||||
|
@list l6:level3
|
||||||
|
{mso-level-tab-stop:1.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l6:level4
|
||||||
|
{mso-level-tab-stop:2.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l6:level5
|
||||||
|
{mso-level-tab-stop:2.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l6:level6
|
||||||
|
{mso-level-tab-stop:3.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l6:level7
|
||||||
|
{mso-level-tab-stop:3.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l6:level8
|
||||||
|
{mso-level-tab-stop:4.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l6:level9
|
||||||
|
{mso-level-tab-stop:4.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l7
|
||||||
|
{mso-list-id:1234970193;
|
||||||
|
mso-list-template-ids:2055904002;}
|
||||||
|
@list l7:level1
|
||||||
|
{mso-level-number-format:bullet;
|
||||||
|
mso-level-text:\F0B7;
|
||||||
|
mso-level-tab-stop:.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;
|
||||||
|
mso-ansi-font-size:10.0pt;
|
||||||
|
font-family:Symbol;}
|
||||||
|
@list l7:level2
|
||||||
|
{mso-level-number-format:bullet;
|
||||||
|
mso-level-text:\F0B7;
|
||||||
|
mso-level-tab-stop:1.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;
|
||||||
|
mso-ansi-font-size:10.0pt;
|
||||||
|
font-family:Symbol;}
|
||||||
|
@list l7:level3
|
||||||
|
{mso-level-tab-stop:1.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l7:level4
|
||||||
|
{mso-level-tab-stop:2.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l7:level5
|
||||||
|
{mso-level-tab-stop:2.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l7:level6
|
||||||
|
{mso-level-tab-stop:3.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l7:level7
|
||||||
|
{mso-level-tab-stop:3.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l7:level8
|
||||||
|
{mso-level-tab-stop:4.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l7:level9
|
||||||
|
{mso-level-tab-stop:4.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l8
|
||||||
|
{mso-list-id:1846092290;
|
||||||
|
mso-list-template-ids:-768590846;}
|
||||||
|
@list l8:level1
|
||||||
|
{mso-level-start-at:2;
|
||||||
|
mso-level-tab-stop:.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l8:level2
|
||||||
|
{mso-level-tab-stop:1.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l8:level3
|
||||||
|
{mso-level-tab-stop:1.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l8:level4
|
||||||
|
{mso-level-tab-stop:2.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l8:level5
|
||||||
|
{mso-level-tab-stop:2.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l8:level6
|
||||||
|
{mso-level-tab-stop:3.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l8:level7
|
||||||
|
{mso-level-tab-stop:3.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l8:level8
|
||||||
|
{mso-level-tab-stop:4.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l8:level9
|
||||||
|
{mso-level-tab-stop:4.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l9
|
||||||
|
{mso-list-id:1894656566;
|
||||||
|
mso-list-template-ids:1199983812;}
|
||||||
|
@list l9:level1
|
||||||
|
{mso-level-start-at:2;
|
||||||
|
mso-level-tab-stop:.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l9:level2
|
||||||
|
{mso-level-tab-stop:1.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l9:level3
|
||||||
|
{mso-level-tab-stop:1.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l9:level4
|
||||||
|
{mso-level-tab-stop:2.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l9:level5
|
||||||
|
{mso-level-tab-stop:2.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l9:level6
|
||||||
|
{mso-level-tab-stop:3.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l9:level7
|
||||||
|
{mso-level-tab-stop:3.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l9:level8
|
||||||
|
{mso-level-tab-stop:4.0in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
@list l9:level9
|
||||||
|
{mso-level-tab-stop:4.5in;
|
||||||
|
mso-level-number-position:left;
|
||||||
|
text-indent:-.25in;}
|
||||||
|
ol
|
||||||
|
{margin-bottom:0in;}
|
||||||
|
ul
|
||||||
|
{margin-bottom:0in;}
|
||||||
|
-->
|
||||||
|
</style><!--[if gte mso 10]>
|
||||||
|
<style>
|
||||||
|
/* Style Definitions */
|
||||||
|
table.MsoNormalTable
|
||||||
|
{mso-style-name:"Table Normal";
|
||||||
|
mso-tstyle-rowband-size:0;
|
||||||
|
mso-tstyle-colband-size:0;
|
||||||
|
mso-style-noshow:yes;
|
||||||
|
mso-style-priority:99;
|
||||||
|
mso-style-qformat:yes;
|
||||||
|
mso-style-parent:"";
|
||||||
|
mso-padding-alt:0in 5.4pt 0in 5.4pt;
|
||||||
|
mso-para-margin:0in;
|
||||||
|
mso-para-margin-bottom:.0001pt;
|
||||||
|
mso-pagination:widow-orphan;
|
||||||
|
font-size:10.0pt;
|
||||||
|
font-family:"Times New Roman","serif";}
|
||||||
|
</style>
|
||||||
|
<![endif]--><!--[if gte mso 9]><xml>
|
||||||
|
<o:shapedefaults v:ext="edit" spidmax="7170"/>
|
||||||
|
</xml><![endif]--><!--[if gte mso 9]><xml>
|
||||||
|
<o:shapelayout v:ext="edit">
|
||||||
|
<o:idmap v:ext="edit" data="1"/>
|
||||||
|
</o:shapelayout></xml><![endif]-->
|
||||||
|
<meta content="MCD Application Team" name="author">
|
||||||
|
</head><body style="" link="blue" vlink="blue">
|
||||||
|
<div class="WordSection1">
|
||||||
|
<p class="MsoNormal">
|
||||||
|
<span style="font-family: "Arial","sans-serif";">
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
<div align="center">
|
||||||
|
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900">
|
||||||
|
<tbody>
|
||||||
|
<tr style="">
|
||||||
|
<td style="padding: 0in;" valign="top">
|
||||||
|
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" cellspacing="0" width="900">
|
||||||
|
<tbody>
|
||||||
|
<tr style="">
|
||||||
|
<td style="padding: 0in 5.4pt;" valign="top">
|
||||||
|
<p class="MsoNormal">
|
||||||
|
<span style="font-size: 8pt; font-family: "Arial","sans-serif"; color: blue;">
|
||||||
|
<a href="../../Release_Notes.html">Back to Release page</a>
|
||||||
|
</span>
|
||||||
|
<span style="font-size: 10pt;">
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span>
|
||||||
|
</p> </td>
|
||||||
|
</tr>
|
||||||
|
<tr style="">
|
||||||
|
<td style="padding: 1.5pt;">
|
||||||
|
<h1 style="margin-bottom: 0.25in; text-align: center;" align="center">
|
||||||
|
<span style="font-size: 20pt; font-family: "Verdana","sans-serif"; color: rgb(51, 102, 255);">Release Notes for
|
||||||
|
</span></h1>
|
||||||
|
<h1 style="margin-bottom: 0.25in; text-align: center;" align="center">
|
||||||
|
<span style="font-size: 20pt; font-family: "Verdana","sans-serif"; color: rgb(51, 102, 255);"> STM32F10x, STM32L1xx and STM32F3xx USB-FS-Device Driver
|
||||||
|
</span>
|
||||||
|
<span style="font-size: 20pt; font-family: "Verdana","sans-serif";">
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span></h1>
|
||||||
|
<p class="MsoNormal" style="text-align: center;" align="center">
|
||||||
|
<span style="font-size: 10pt; font-family: "Arial","sans-serif"; color: black;">Copyright 2012 STMicroelectronics
|
||||||
|
</span>
|
||||||
|
<span style="color: black;">
|
||||||
|
<u1:p>
|
||||||
|
</u1:p>
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
<p class="MsoNormal" style="text-align: center;" align="center">
|
||||||
|
<span style="font-size: 10pt; font-family: "Arial","sans-serif"; color: black;">
|
||||||
|
<img id="_x0000_i1026" src="../../_htmresc/logo.bmp" border="0" height="65" width="86">
|
||||||
|
</span>
|
||||||
|
<span style="font-size: 10pt;">
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span>
|
||||||
|
</p> </td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p class="MsoNormal">
|
||||||
|
<span style="font-family: "Arial","sans-serif"; display: none;">
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span>
|
||||||
|
</p>
|
||||||
|
<table class="MsoNormalTable" style="width: 675pt;" border="0" cellpadding="0" width="900">
|
||||||
|
<tbody>
|
||||||
|
<tr style="">
|
||||||
|
<td style="padding: 0in;" valign="top">
|
||||||
|
<h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
|
||||||
|
<span style="font-size: 12pt; color: white;">Contents
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span></h2>
|
||||||
|
<ol style="margin-top: 0in;" start="1" type="1">
|
||||||
|
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;">
|
||||||
|
<span style="font-size: 10pt; font-family: "Verdana","sans-serif";">
|
||||||
|
<a href="#History">Update History</a>
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span></li>
|
||||||
|
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;">
|
||||||
|
<span style="font-size: 10pt; font-family: "Verdana","sans-serif";">
|
||||||
|
<a href="#License">License</a>
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span></li>
|
||||||
|
</ol>
|
||||||
|
<h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
|
||||||
|
<a name="History"></a> <span style="font-size: 12pt; color: white;">Update History</span></h2><br>
|
||||||
|
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-right: 500pt; width: 201px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V4.0.0 / 28-August-2012<o:p></o:p></span></h3>
|
||||||
|
|
||||||
|
|
||||||
|
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main
|
||||||
|
Changes<o:p></o:p></span></u></b></p>
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
<ul style="margin-top: 0cm;" type="square">
|
||||||
|
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="font-size: 10pt; font-family: Verdana;"><span style="font-weight: bold;">Remove support</span> of the <span style="font-weight: bold; font-style: italic;">USB OTG Full speed in device</span> (peripheral) mode embedded in the <span style="font-weight: bold; font-style: italic;">STM32F105x/7x devices</span></span></li>
|
||||||
|
<ul>
|
||||||
|
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="font-size: 10pt; font-family: Verdana;">All source files starting with prefix <span style="font-style: italic;">otgd_fs</span> (ex. otgd_fs_pcd.c/.h) were removed</span></li>
|
||||||
|
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="font-size: 10pt; font-family: Verdana;">There is no change on the <span style="font-weight: bold; font-style: italic;">API</span> dealing with the <span style="font-style: italic; font-weight: bold;">USB FS Device peripheral</span>, <span style="font-weight: bold; font-style: italic;">full compatibility</span> is maintained vs. V3.4.0<br>
|
||||||
|
</span></li>
|
||||||
|
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="font-size: 10pt; font-family: Verdana;">The </span><span style="font-size: 10pt; font-family: Verdana;"> <span style="font-weight: bold; font-style: italic;">STM32F105x/7x devices</span></span><span style="font-size: 10pt; font-family: Verdana;"> are supported by the <span style="font-weight: bold; font-style: italic;">STM32F105/7xx, STM32F2xx and STM32F4xx USB On-The-Go Host and Device Library</span><br>
|
||||||
|
</span></li>
|
||||||
|
</ul>
|
||||||
|
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="font-size: 10pt; font-family: Verdana;">usb_type.h: </span><span style="font-size: 10pt; font-family: Verdana;">remove Types definition (available in stm32xxx.h file, ex. stm32f10x.h)<br>
|
||||||
|
</span></li>
|
||||||
|
</ul>
|
||||||
|
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-right: 500pt; width: 201px;"><span style="font-size: 10pt; font-family: Arial; color: white;">V3.4.0 / 12-March-2012<o:p></o:p></span></h3>
|
||||||
|
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;"><b style=""><u><span style="font-size: 10pt; font-family: Verdana; color: black;">Main
|
||||||
|
Changes<o:p></o:p></span></u></b></p>
|
||||||
|
|
||||||
|
<ul style="margin-top: 0cm;" type="square"><li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;"><span style="font-size: 10pt; font-family: Verdana;">All source files: license disclaimer text update and add link to the License file on ST Internet.</span></li></ul>
|
||||||
|
<h3 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial; margin-right: 558.05pt; width: 200px;">
|
||||||
|
<span style="font-size: 10pt; font-family: Arial; color: white;">V3.3.0 / 21-March-2011
|
||||||
|
</span></h3>
|
||||||
|
<p class="MsoNormal" style="margin: 4.5pt 0cm 4.5pt 18pt;">
|
||||||
|
<b style=""><u>
|
||||||
|
<span style="font-size: 10pt; font-family: Verdana; color: black;">Main Changes
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span></u></b>
|
||||||
|
</p>
|
||||||
|
<ul style="margin-top: 0cm;" type="square">
|
||||||
|
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;">
|
||||||
|
<span style="font-size: 10pt; font-family: Verdana;">Update library driver to support
|
||||||
|
</span>
|
||||||
|
<span style="font-size: 10pt; font-family: Verdana; color: black;">
|
||||||
|
<span style="font-weight: bold;">STM32L15x Medium-Density Low-Power
|
||||||
|
</span>
|
||||||
|
</span>
|
||||||
|
<span style="font-size: 10pt; font-family: Verdana;">devices (add STM32L1xx defines).
|
||||||
|
</span></li>
|
||||||
|
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;">
|
||||||
|
<span style="font-size: 10pt; font-family: Verdana;">Minor fixes:
|
||||||
|
</span></li>
|
||||||
|
<ul>
|
||||||
|
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;">
|
||||||
|
<span style="font-size: 10pt; font-family: Verdana;">otgd_fs_cal.c: correction of iteration number in OTGD_FS_CoreInitDev() function.
|
||||||
|
</span></li>
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;">
|
||||||
|
<span style="font-size: 10pt; font-family: Verdana;">usb_core.c: update the remote wakeup checking condition in NoData_Setup0() function.
|
||||||
|
</span></li>
|
||||||
|
</ul>
|
||||||
|
<ul>
|
||||||
|
<li class="MsoNormal" style="color: black; margin-top: 4.5pt; margin-bottom: 4.5pt;">
|
||||||
|
<span style="font-size: 10pt; font-family: Verdana;">otgd_fs_int.c: update the data count in case of 0 packet length in OTGD_FS_Handle_RxStatusQueueLevel_ISR() function.
|
||||||
|
</span></li>
|
||||||
|
</ul>
|
||||||
|
</ul>
|
||||||
|
<span style="font-size: 10pt; font-family: Verdana;">
|
||||||
|
</span>
|
||||||
|
|
||||||
|
<span style="font-size: 10pt; font-family: Verdana;">
|
||||||
|
</span>
|
||||||
|
<h2 style="background: rgb(51, 102, 255) none repeat scroll 0% 50%; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;">
|
||||||
|
<a name="License"></a>
|
||||||
|
<span style="font-size: 12pt; color: white;">License
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span></h2><p class="MsoNormal"><span style="font-size: 10pt; font-family: "Verdana","sans-serif"; color: black;">Licensed under MCD-ST Liberty SW License Agreement V2, (the "License"); You may not use this </span><span style="font-size: 10pt; font-family: "Verdana","sans-serif"; color: black;">package</span><span style="font-size: 10pt; font-family: "Verdana","sans-serif"; color: black;"> except in compliance with the License. You may obtain a copy of the License at:<br><br></span></p><div style="text-align: center;"><span style="font-size: 10pt; font-family: "Verdana","sans-serif"; color: black;"> <a target="_blank" href="http://www.st.com/software_license_agreement_liberty_v2">http://www.st.com/software_license_agreement_liberty_v2</a></span><br><span style="font-size: 10pt; font-family: "Verdana","sans-serif"; color: black;"></span></div><span style="font-size: 10pt; font-family: "Verdana","sans-serif"; color: black;"><br>Unless
|
||||||
|
required by applicable law or agreed to in writing, software
|
||||||
|
distributed under the License is distributed on an "AS IS" BASIS, <br>WITHOUT
|
||||||
|
WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See
|
||||||
|
the License for the specific language governing permissions and
|
||||||
|
limitations under the License.</span>
|
||||||
|
<div class="MsoNormal" style="text-align: center;" align="center"><span style="color: black;"><hr align="center" size="2" width="100%">
|
||||||
|
</span>
|
||||||
|
</div>
|
||||||
|
<p class="MsoNormal" style="margin: 4.5pt 0in 4.5pt 0.25in; text-align: center;" align="center">
|
||||||
|
<span style="font-size: 10pt; font-family: "Verdana","sans-serif"; color: black;">For
|
||||||
|
complete documentation on </span><span style="font-size: 10pt; font-family: "Verdana","sans-serif";">STM32<span style="color: black;">
|
||||||
|
Microcontrollers visit </span><u><span style="color: blue;"><a href="http://www.st.com/internet/mcu/family/141.jsp" target="_blank">www.st.com/STM32</a></span></u></span><span style="color: black;">
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span>
|
||||||
|
</p> </td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
<p class="MsoNormal">
|
||||||
|
<span style="font-size: 10pt;">
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</span>
|
||||||
|
</p> </td>
|
||||||
|
</tr>
|
||||||
|
</tbody>
|
||||||
|
</table>
|
||||||
|
</div>
|
||||||
|
<p class="MsoNormal">
|
||||||
|
<o:p>
|
||||||
|
</o:p>
|
||||||
|
</p>
|
||||||
|
</div>
|
||||||
|
</body></html>
|
259
lib/main/STM32_USB-FS-Device_Driver/inc/usb_core.h
Normal file
259
lib/main/STM32_USB-FS-Device_Driver/inc/usb_core.h
Normal file
|
@ -0,0 +1,259 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_core.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Standard protocol processing functions prototypes
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* 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 successfully */
|
||||||
|
USB_ERROR,
|
||||||
|
USB_UNSUPPORT,
|
||||||
|
USB_NOT_READY /* The process has not been finished, endpoint will be
|
||||||
|
NAK to further request */
|
||||||
|
} 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);
|
||||||
|
|
||||||
|
/* This field is not used in current library version. It is kept only for
|
||||||
|
compatibility with previous versions */
|
||||||
|
void* 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 DEVICE_PROP Device_Property;
|
||||||
|
extern USER_STANDARD_REQUESTS User_Standard_Requests;
|
||||||
|
extern 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 STMicroelectronics *****END OF FILE****/
|
92
lib/main/STM32_USB-FS-Device_Driver/inc/usb_def.h
Normal file
92
lib/main/STM32_USB-FS-Device_Driver/inc/usb_def.h
Normal file
|
@ -0,0 +1,92 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_def.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Definitions related to USB Core
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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 STMicroelectronics *****END OF FILE****/
|
62
lib/main/STM32_USB-FS-Device_Driver/inc/usb_init.h
Normal file
62
lib/main/STM32_USB-FS-Device_Driver/inc/usb_init.h
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_init.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Initialization routines & global variables
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* 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 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 USER_STANDARD_REQUESTS *pUser_Standard_Requests;
|
||||||
|
|
||||||
|
extern uint16_t SaveState ;
|
||||||
|
extern uint16_t wInterrupt_Mask;
|
||||||
|
|
||||||
|
#endif /* __USB_INIT_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
45
lib/main/STM32_USB-FS-Device_Driver/inc/usb_int.h
Normal file
45
lib/main/STM32_USB-FS-Device_Driver/inc/usb_int.h
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_int.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Endpoint CTR (Low and High) interrupt's service routines prototypes
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* 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 STMicroelectronics *****END OF FILE****/
|
52
lib/main/STM32_USB-FS-Device_Driver/inc/usb_lib.h
Normal file
52
lib/main/STM32_USB-FS-Device_Driver/inc/usb_lib.h
Normal file
|
@ -0,0 +1,52 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_lib.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief USB library include files
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __USB_LIB_H
|
||||||
|
#define __USB_LIB_H
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "hw_config.h"
|
||||||
|
#include "usb_type.h"
|
||||||
|
#include "usb_regs.h"
|
||||||
|
#include "usb_def.h"
|
||||||
|
#include "usb_core.h"
|
||||||
|
#include "usb_init.h"
|
||||||
|
#include "usb_sil.h"
|
||||||
|
#include "usb_mem.h"
|
||||||
|
#include "usb_int.h"
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/* Exported functions ------------------------------------------------------- */
|
||||||
|
/* External variables --------------------------------------------------------*/
|
||||||
|
|
||||||
|
#endif /* __USB_LIB_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
45
lib/main/STM32_USB-FS-Device_Driver/inc/usb_mem.h
Normal file
45
lib/main/STM32_USB-FS-Device_Driver/inc/usb_mem.h
Normal file
|
@ -0,0 +1,45 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_mem.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Utility prototypes functions for memory/PMA transfers
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* 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 STMicroelectronics *****END OF FILE****/
|
680
lib/main/STM32_USB-FS-Device_Driver/inc/usb_regs.h
Normal file
680
lib/main/STM32_USB-FS-Device_Driver/inc/usb_regs.h
Normal file
|
@ -0,0 +1,680 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_regs.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Interface prototype functions to USB cell registers
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __USB_REGS_H
|
||||||
|
#define __USB_REGS_H
|
||||||
|
|
||||||
|
/* 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*/);
|
||||||
|
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 /* __USB_REGS_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
47
lib/main/STM32_USB-FS-Device_Driver/inc/usb_sil.h
Normal file
47
lib/main/STM32_USB-FS-Device_Driver/inc/usb_sil.h
Normal file
|
@ -0,0 +1,47 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_sil.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Simplified Interface Layer function prototypes.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* 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 STMicroelectronics *****END OF FILE****/
|
54
lib/main/STM32_USB-FS-Device_Driver/inc/usb_type.h
Normal file
54
lib/main/STM32_USB-FS-Device_Driver/inc/usb_type.h
Normal file
|
@ -0,0 +1,54 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_type.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Type definitions used by the USB Library
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* 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
|
||||||
|
|
||||||
|
typedef enum
|
||||||
|
{
|
||||||
|
FALSE = 0, TRUE = !FALSE
|
||||||
|
}
|
||||||
|
boolean;
|
||||||
|
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/* Exported functions ------------------------------------------------------- */
|
||||||
|
/* External variables --------------------------------------------------------*/
|
||||||
|
|
||||||
|
#endif /* __USB_TYPE_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
1033
lib/main/STM32_USB-FS-Device_Driver/src/usb_core.c
Normal file
1033
lib/main/STM32_USB-FS-Device_Driver/src/usb_core.c
Normal file
File diff suppressed because it is too large
Load diff
76
lib/main/STM32_USB-FS-Device_Driver/src/usb_init.c
Normal file
76
lib/main/STM32_USB-FS-Device_Driver/src/usb_init.c
Normal file
|
@ -0,0 +1,76 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_init.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Initialization routines & global variables
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* 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 */
|
||||||
|
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;
|
||||||
|
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 STMicroelectronics *****END OF FILE****/
|
195
lib/main/STM32_USB-FS-Device_Driver/src/usb_int.c
Normal file
195
lib/main/STM32_USB-FS-Device_Driver/src/usb_int.c
Normal file
|
@ -0,0 +1,195 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_int.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Endpoint CTR (Low and High) interrupt's service routines
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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 interrupts */
|
||||||
|
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(...) */
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
87
lib/main/STM32_USB-FS-Device_Driver/src/usb_mem.c
Normal file
87
lib/main/STM32_USB-FS-Device_Driver/src/usb_mem.c
Normal file
|
@ -0,0 +1,87 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_mem.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Utility functions for memory transfers to/from PMA
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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++;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
760
lib/main/STM32_USB-FS-Device_Driver/src/usb_regs.c
Normal file
760
lib/main/STM32_USB-FS-Device_Driver/src/usb_regs.c
Normal file
|
@ -0,0 +1,760 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_regs.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Interface functions to USB cell registers
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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 : Set the 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);
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
103
lib/main/STM32_USB-FS-Device_Driver/src/usb_sil.c
Normal file
103
lib/main/STM32_USB-FS-Device_Driver/src/usb_sil.c
Normal file
|
@ -0,0 +1,103 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_sil.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 28-August-2012
|
||||||
|
* @brief Simplified Interface Layer for Global Initialization and Endpoint
|
||||||
|
* Rea/Write operations.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2012 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
|
||||||
|
/* 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)
|
||||||
|
{
|
||||||
|
/* USB interrupts initialization */
|
||||||
|
/* clear pending interrupts */
|
||||||
|
_SetISTR(0);
|
||||||
|
wInterrupt_Mask = IMR_MSK;
|
||||||
|
/* set interrupts mask */
|
||||||
|
_SetCNTR(wInterrupt_Mask);
|
||||||
|
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)
|
||||||
|
{
|
||||||
|
/* 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);
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
/* 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);
|
||||||
|
|
||||||
|
/* Return the number of received data */
|
||||||
|
return DataLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
|
@ -165,6 +165,9 @@ void resetSerialConfig(serialConfig_t *serialConfig)
|
||||||
serialConfig->serial_port_2_scenario = lookupScenarioIndex(SCENARIO_GPS_ONLY);
|
serialConfig->serial_port_2_scenario = lookupScenarioIndex(SCENARIO_GPS_ONLY);
|
||||||
serialConfig->serial_port_3_scenario = lookupScenarioIndex(SCENARIO_UNUSED);
|
serialConfig->serial_port_3_scenario = lookupScenarioIndex(SCENARIO_UNUSED);
|
||||||
serialConfig->serial_port_4_scenario = lookupScenarioIndex(SCENARIO_UNUSED);
|
serialConfig->serial_port_4_scenario = lookupScenarioIndex(SCENARIO_UNUSED);
|
||||||
|
#ifdef STM32F303xC
|
||||||
|
serialConfig->serial_port_5_scenario = lookupScenarioIndex(SCENARIO_UNUSED);
|
||||||
|
#endif
|
||||||
|
|
||||||
serialConfig->msp_baudrate = 115200;
|
serialConfig->msp_baudrate = 115200;
|
||||||
serialConfig->cli_baudrate = 115200;
|
serialConfig->cli_baudrate = 115200;
|
||||||
|
|
88
src/main/drivers/serial_usb_vcp.c
Normal file
88
src/main/drivers/serial_usb_vcp.c
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
|
||||||
|
#include <stdint.h>
|
||||||
|
#include <stdlib.h>
|
||||||
|
|
||||||
|
#include "platform.h"
|
||||||
|
|
||||||
|
#include "usb_core.h"
|
||||||
|
#include "usb_init.h"
|
||||||
|
#include "hw_config.h"
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include <string.h>
|
||||||
|
|
||||||
|
|
||||||
|
#include "drivers/system.h"
|
||||||
|
|
||||||
|
#include "serial.h"
|
||||||
|
#include "serial_usb_vcp.h"
|
||||||
|
|
||||||
|
|
||||||
|
#define USB_TIMEOUT 50
|
||||||
|
|
||||||
|
static vcpPort_t vcpPort;
|
||||||
|
|
||||||
|
void usbVcpSetBaudRate(serialPort_t *instance, uint32_t baudRate)
|
||||||
|
{
|
||||||
|
// TODO implement
|
||||||
|
}
|
||||||
|
|
||||||
|
void usbVcpSetMode(serialPort_t *instance, portMode_t mode)
|
||||||
|
{
|
||||||
|
// TODO implement
|
||||||
|
}
|
||||||
|
|
||||||
|
bool isUsbVcpTransmitBufferEmpty(serialPort_t *instance)
|
||||||
|
{
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t usbVcpAvailable(serialPort_t *instance)
|
||||||
|
{
|
||||||
|
return receiveLength & 0xFF; // FIXME use uint32_t return type everywhere
|
||||||
|
}
|
||||||
|
|
||||||
|
uint8_t usbVcpRead(serialPort_t *instance)
|
||||||
|
{
|
||||||
|
uint8_t buf[1];
|
||||||
|
|
||||||
|
uint32_t rxed = 0;
|
||||||
|
|
||||||
|
while (rxed < 1) {
|
||||||
|
rxed += CDC_Receive_DATA((uint8_t*)buf + rxed, 1 - rxed);
|
||||||
|
}
|
||||||
|
|
||||||
|
return buf[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
void usbVcpWrite(serialPort_t *instance, uint8_t c)
|
||||||
|
{
|
||||||
|
uint32_t txed;
|
||||||
|
uint32_t start = millis();
|
||||||
|
|
||||||
|
if (!(usbIsConnected() && usbIsConfigured())) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
do {
|
||||||
|
txed = CDC_Send_DATA((uint8_t*)&c, 1);
|
||||||
|
} while (txed < 1 && (millis() - start < USB_TIMEOUT));
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
const struct serialPortVTable usbVTable[] = { { usbVcpWrite, usbVcpAvailable, usbVcpRead, usbVcpSetBaudRate, isUsbVcpTransmitBufferEmpty, usbVcpSetMode } };
|
||||||
|
|
||||||
|
serialPort_t *usbVcpOpen(void)
|
||||||
|
{
|
||||||
|
vcpPort_t *s;
|
||||||
|
|
||||||
|
Set_System();
|
||||||
|
Set_USBClock();
|
||||||
|
USB_Interrupts_Config();
|
||||||
|
USB_Init();
|
||||||
|
|
||||||
|
s = &vcpPort;
|
||||||
|
s->port.vTable = usbVTable;
|
||||||
|
|
||||||
|
return (serialPort_t *)s;
|
||||||
|
}
|
32
src/main/drivers/serial_usb_vcp.h
Normal file
32
src/main/drivers/serial_usb_vcp.h
Normal file
|
@ -0,0 +1,32 @@
|
||||||
|
/*
|
||||||
|
This program is free software: you can redistribute it and/or modify
|
||||||
|
it under the terms of the GNU General Public License as published by
|
||||||
|
the Free Software Foundation, either version 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include "serial.h"
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
serialPort_t port;
|
||||||
|
|
||||||
|
} vcpPort_t;
|
||||||
|
|
||||||
|
serialPort_t *usbVcpOpen(void);
|
||||||
|
|
||||||
|
uint8_t usbVcpAvailable(serialPort_t *instance);
|
||||||
|
|
||||||
|
uint8_t usbVcpRead(serialPort_t *instance);
|
||||||
|
|
||||||
|
void usbVcpWrite(serialPort_t *instance, uint8_t ch);
|
||||||
|
void usbPrintStr(const char *str);
|
|
@ -286,8 +286,13 @@ void systemReset(bool toBootloader)
|
||||||
// 1FFFF000 -> 20000200 -> SP
|
// 1FFFF000 -> 20000200 -> SP
|
||||||
// 1FFFF004 -> 1FFFF021 -> PC
|
// 1FFFF004 -> 1FFFF021 -> PC
|
||||||
|
|
||||||
// FIXME update for STM32F30x
|
#ifdef STM32F10X_MD
|
||||||
*((uint32_t *)0x20004FF0) = 0xDEADBEEF; // 20KB STM32F103
|
*((uint32_t *)0x20004FF0) = 0xDEADBEEF; // 20KB STM32F103
|
||||||
|
#endif
|
||||||
|
#ifdef STM32F303xC
|
||||||
|
|
||||||
|
*((uint32_t *)0x20009FFC) = 0xDEADBEEF; // 40KB SRAM STM32F30X
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
// Generate system reset
|
// Generate system reset
|
||||||
|
|
|
@ -11,6 +11,7 @@
|
||||||
#include "drivers/serial.h"
|
#include "drivers/serial.h"
|
||||||
#include "drivers/serial_softserial.h"
|
#include "drivers/serial_softserial.h"
|
||||||
#include "drivers/serial_uart.h"
|
#include "drivers/serial_uart.h"
|
||||||
|
#include "drivers/serial_usb_vcp.h"
|
||||||
|
|
||||||
#include "serial_cli.h"
|
#include "serial_cli.h"
|
||||||
#include "serial_msp.h"
|
#include "serial_msp.h"
|
||||||
|
@ -43,6 +44,26 @@ const serialPortFunctionScenario_e serialPortScenarios[SERIAL_PORT_SCENARIO_COUN
|
||||||
|
|
||||||
static serialConfig_t *serialConfig;
|
static serialConfig_t *serialConfig;
|
||||||
static serialPort_t *serialPorts[SERIAL_PORT_COUNT];
|
static serialPort_t *serialPorts[SERIAL_PORT_COUNT];
|
||||||
|
|
||||||
|
#ifdef STM32F303xC
|
||||||
|
static serialPortFunction_t serialPortFunctions[SERIAL_PORT_COUNT] = {
|
||||||
|
{SERIAL_PORT_USB_VCP, NULL, SCENARIO_UNUSED, FUNCTION_NONE},
|
||||||
|
{SERIAL_PORT_USART1, NULL, SCENARIO_UNUSED, FUNCTION_NONE},
|
||||||
|
{SERIAL_PORT_USART2, NULL, SCENARIO_UNUSED, FUNCTION_NONE},
|
||||||
|
{SERIAL_PORT_SOFTSERIAL1, NULL, SCENARIO_UNUSED, FUNCTION_NONE},
|
||||||
|
{SERIAL_PORT_SOFTSERIAL2, NULL, SCENARIO_UNUSED, FUNCTION_NONE}
|
||||||
|
};
|
||||||
|
|
||||||
|
const static serialPortConstraint_t serialPortConstraints[SERIAL_PORT_COUNT] = {
|
||||||
|
{SERIAL_PORT_USB_VCP, 115200, 115200, SPF_NONE },
|
||||||
|
{SERIAL_PORT_USART1, 9600, 115200, SPF_NONE | SPF_SUPPORTS_SBUS_MODE },
|
||||||
|
{SERIAL_PORT_USART2, 9600, 115200, SPF_SUPPORTS_CALLBACK | SPF_SUPPORTS_SBUS_MODE},
|
||||||
|
{SERIAL_PORT_SOFTSERIAL1, 9600, 19200, SPF_SUPPORTS_CALLBACK | SPF_IS_SOFTWARE_INVERTABLE},
|
||||||
|
{SERIAL_PORT_SOFTSERIAL2, 9600, 19200, SPF_SUPPORTS_CALLBACK | SPF_IS_SOFTWARE_INVERTABLE}
|
||||||
|
};
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
static serialPortFunction_t serialPortFunctions[SERIAL_PORT_COUNT] = {
|
static serialPortFunction_t serialPortFunctions[SERIAL_PORT_COUNT] = {
|
||||||
{SERIAL_PORT_USART1, NULL, SCENARIO_UNUSED, FUNCTION_NONE},
|
{SERIAL_PORT_USART1, NULL, SCENARIO_UNUSED, FUNCTION_NONE},
|
||||||
{SERIAL_PORT_USART2, NULL, SCENARIO_UNUSED, FUNCTION_NONE},
|
{SERIAL_PORT_USART2, NULL, SCENARIO_UNUSED, FUNCTION_NONE},
|
||||||
|
@ -57,6 +78,8 @@ const static serialPortConstraint_t serialPortConstraints[SERIAL_PORT_COUNT] = {
|
||||||
{SERIAL_PORT_SOFTSERIAL2, 9600, 19200, SPF_SUPPORTS_CALLBACK | SPF_IS_SOFTWARE_INVERTABLE}
|
{SERIAL_PORT_SOFTSERIAL2, 9600, 19200, SPF_SUPPORTS_CALLBACK | SPF_IS_SOFTWARE_INVERTABLE}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
const functionConstraint_t functionConstraints[] = {
|
const functionConstraint_t functionConstraints[] = {
|
||||||
{ FUNCTION_CLI, 9600, 115200, NO_AUTOBAUD, SPF_NONE },
|
{ FUNCTION_CLI, 9600, 115200, NO_AUTOBAUD, SPF_NONE },
|
||||||
{ FUNCTION_GPS, 9600, 115200, AUTOBAUD, SPF_NONE },
|
{ FUNCTION_GPS, 9600, 115200, AUTOBAUD, SPF_NONE },
|
||||||
|
@ -79,7 +102,7 @@ typedef struct serialPortSearchResult_s {
|
||||||
} serialPortSearchResult_t;
|
} serialPortSearchResult_t;
|
||||||
|
|
||||||
static const serialPortFunctionList_t serialPortFunctionList = {
|
static const serialPortFunctionList_t serialPortFunctionList = {
|
||||||
4,
|
SERIAL_PORT_COUNT,
|
||||||
serialPortFunctions
|
serialPortFunctions
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -405,10 +428,18 @@ bool isSerialPortFunctionShared(serialPortFunction_e functionToUse, uint16_t fun
|
||||||
|
|
||||||
void applySerialConfigToPortFunctions(serialConfig_t *serialConfig)
|
void applySerialConfigToPortFunctions(serialConfig_t *serialConfig)
|
||||||
{
|
{
|
||||||
|
#ifdef STM32F303xC
|
||||||
|
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_USB_VCP)].scenario = serialPortScenarios[serialConfig->serial_port_1_scenario];
|
||||||
|
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_USART1)].scenario = serialPortScenarios[serialConfig->serial_port_2_scenario];
|
||||||
|
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_USART2)].scenario = serialPortScenarios[serialConfig->serial_port_3_scenario];
|
||||||
|
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_SOFTSERIAL1)].scenario = serialPortScenarios[serialConfig->serial_port_4_scenario];
|
||||||
|
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_SOFTSERIAL2)].scenario = serialPortScenarios[serialConfig->serial_port_5_scenario];
|
||||||
|
#else
|
||||||
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_USART1)].scenario = serialPortScenarios[serialConfig->serial_port_1_scenario];
|
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_USART1)].scenario = serialPortScenarios[serialConfig->serial_port_1_scenario];
|
||||||
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_USART2)].scenario = serialPortScenarios[serialConfig->serial_port_2_scenario];
|
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_USART2)].scenario = serialPortScenarios[serialConfig->serial_port_2_scenario];
|
||||||
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_SOFTSERIAL1)].scenario = serialPortScenarios[serialConfig->serial_port_3_scenario];
|
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_SOFTSERIAL1)].scenario = serialPortScenarios[serialConfig->serial_port_3_scenario];
|
||||||
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_SOFTSERIAL2)].scenario = serialPortScenarios[serialConfig->serial_port_4_scenario];
|
serialPortFunctions[lookupSerialPortFunctionIndexByIdentifier(SERIAL_PORT_SOFTSERIAL2)].scenario = serialPortScenarios[serialConfig->serial_port_4_scenario];
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
serialPort_t *openSerialPort(serialPortFunction_e function, serialReceiveCallbackPtr callback, uint32_t baudRate, portMode_t mode, serialInversion_e inversion)
|
serialPort_t *openSerialPort(serialPortFunction_e function, serialReceiveCallbackPtr callback, uint32_t baudRate, portMode_t mode, serialInversion_e inversion)
|
||||||
|
@ -442,6 +473,11 @@ serialPort_t *openSerialPort(serialPortFunction_e function, serialReceiveCallbac
|
||||||
|
|
||||||
serialPortIdentifier_e identifier = serialPortConstraint->identifier;
|
serialPortIdentifier_e identifier = serialPortConstraint->identifier;
|
||||||
switch(identifier) {
|
switch(identifier) {
|
||||||
|
#ifdef STM32F303xC
|
||||||
|
case SERIAL_PORT_USB_VCP:
|
||||||
|
serialPort = usbVcpOpen();
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
case SERIAL_PORT_USART1:
|
case SERIAL_PORT_USART1:
|
||||||
serialPort = uartOpen(USART1, callback, baudRate, mode, inversion);
|
serialPort = uartOpen(USART1, callback, baudRate, mode, inversion);
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -40,6 +40,28 @@ typedef enum {
|
||||||
#define SERIAL_PORT_SCENARIO_MAX (SERIAL_PORT_SCENARIO_COUNT - 1)
|
#define SERIAL_PORT_SCENARIO_MAX (SERIAL_PORT_SCENARIO_COUNT - 1)
|
||||||
extern const serialPortFunctionScenario_e serialPortScenarios[SERIAL_PORT_SCENARIO_COUNT];
|
extern const serialPortFunctionScenario_e serialPortScenarios[SERIAL_PORT_SCENARIO_COUNT];
|
||||||
|
|
||||||
|
|
||||||
|
#ifdef STM32F303xC
|
||||||
|
#define SERIAL_PORT_COUNT 5
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SERIAL_PORT_1 = 0,
|
||||||
|
SERIAL_PORT_2,
|
||||||
|
SERIAL_PORT_3,
|
||||||
|
SERIAL_PORT_4,
|
||||||
|
SERIAL_PORT_5
|
||||||
|
} serialPortIndex_e;
|
||||||
|
|
||||||
|
typedef enum {
|
||||||
|
SERIAL_PORT_USB_VCP = 0,
|
||||||
|
SERIAL_PORT_USART1,
|
||||||
|
SERIAL_PORT_USART2,
|
||||||
|
SERIAL_PORT_SOFTSERIAL1,
|
||||||
|
SERIAL_PORT_SOFTSERIAL2
|
||||||
|
} serialPortIdentifier_e;
|
||||||
|
|
||||||
|
#else
|
||||||
|
|
||||||
#define SERIAL_PORT_COUNT 4
|
#define SERIAL_PORT_COUNT 4
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
|
@ -48,7 +70,6 @@ typedef enum {
|
||||||
SERIAL_PORT_3,
|
SERIAL_PORT_3,
|
||||||
SERIAL_PORT_4
|
SERIAL_PORT_4
|
||||||
} serialPortIndex_e;
|
} serialPortIndex_e;
|
||||||
|
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SERIAL_PORT_USART1 = 0,
|
SERIAL_PORT_USART1 = 0,
|
||||||
SERIAL_PORT_USART2,
|
SERIAL_PORT_USART2,
|
||||||
|
@ -56,6 +77,8 @@ typedef enum {
|
||||||
SERIAL_PORT_SOFTSERIAL2
|
SERIAL_PORT_SOFTSERIAL2
|
||||||
} serialPortIdentifier_e;
|
} serialPortIdentifier_e;
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
// bitmask
|
// bitmask
|
||||||
typedef enum {
|
typedef enum {
|
||||||
SPF_NONE = 0,
|
SPF_NONE = 0,
|
||||||
|
@ -88,7 +111,9 @@ typedef struct serialConfig_s {
|
||||||
uint8_t serial_port_2_scenario;
|
uint8_t serial_port_2_scenario;
|
||||||
uint8_t serial_port_3_scenario;
|
uint8_t serial_port_3_scenario;
|
||||||
uint8_t serial_port_4_scenario;
|
uint8_t serial_port_4_scenario;
|
||||||
|
#ifdef STM32F303xC
|
||||||
|
uint8_t serial_port_5_scenario;
|
||||||
|
#endif
|
||||||
uint32_t msp_baudrate;
|
uint32_t msp_baudrate;
|
||||||
uint32_t cli_baudrate;
|
uint32_t cli_baudrate;
|
||||||
uint32_t gps_baudrate;
|
uint32_t gps_baudrate;
|
||||||
|
|
|
@ -54,6 +54,8 @@
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef NAZE32PRO
|
#ifdef NAZE32PRO
|
||||||
|
#define USE_FAKE_ACC
|
||||||
|
#define USE_FAKE_GYRO
|
||||||
#undef USE_ACC_LSM303DLHC
|
#undef USE_ACC_LSM303DLHC
|
||||||
#undef USE_ACC_ADXL345
|
#undef USE_ACC_ADXL345
|
||||||
#undef USE_ACC_BMA280
|
#undef USE_ACC_BMA280
|
||||||
|
@ -125,6 +127,7 @@ bool detectGyro(uint16_t gyroLpf)
|
||||||
#ifdef USE_FAKE_GYRO
|
#ifdef USE_FAKE_GYRO
|
||||||
if (fakeGyroDetect(&gyro, gyroLpf)) {
|
if (fakeGyroDetect(&gyro, gyroLpf)) {
|
||||||
return true;
|
return true;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef USE_GYRO_MPU6050
|
#ifdef USE_GYRO_MPU6050
|
||||||
|
|
353
src/main/vcp/hw_config.c
Normal file
353
src/main/vcp/hw_config.c
Normal file
|
@ -0,0 +1,353 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file hw_config.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief Hardware Configuration & Setup
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
|
||||||
|
#include "stm32_it.h"
|
||||||
|
#include "platform.h"
|
||||||
|
#include "usb_lib.h"
|
||||||
|
#include "usb_prop.h"
|
||||||
|
#include "usb_desc.h"
|
||||||
|
#include "hw_config.h"
|
||||||
|
#include "usb_pwr.h"
|
||||||
|
|
||||||
|
#include <stdbool.h>
|
||||||
|
#include "drivers/system.h"
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
ErrorStatus HSEStartUpStatus;
|
||||||
|
EXTI_InitTypeDef EXTI_InitStructure;
|
||||||
|
__IO uint32_t packetSent; // HJI
|
||||||
|
extern __IO uint32_t receiveLength; // HJI
|
||||||
|
|
||||||
|
uint8_t receiveBuffer[64]; // HJI
|
||||||
|
uint32_t sendLength; // HJI
|
||||||
|
static void IntToUnicode(uint32_t value, uint8_t *pbuf, uint8_t len);
|
||||||
|
/* Extern variables ----------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : Set_System
|
||||||
|
* Description : Configures Main system clocks & power
|
||||||
|
* Input : None.
|
||||||
|
* Return : None.
|
||||||
|
*******************************************************************************/
|
||||||
|
void Set_System(void)
|
||||||
|
{
|
||||||
|
#if !defined(STM32L1XX_MD) && !defined(STM32L1XX_HD) && !defined(STM32L1XX_MD_PLUS)
|
||||||
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
#endif /* STM32L1XX_MD && STM32L1XX_XD */
|
||||||
|
|
||||||
|
#if defined(USB_USE_EXTERNAL_PULLUP)
|
||||||
|
GPIO_InitTypeDef GPIO_InitStructure;
|
||||||
|
#endif /* USB_USE_EXTERNAL_PULLUP */
|
||||||
|
|
||||||
|
/*!< At this stage the microcontroller clock setting is already configured,
|
||||||
|
this is done through SystemInit() function which is called from startup
|
||||||
|
file (startup_stm32f10x_xx.s) before to branch to application main.
|
||||||
|
To reconfigure the default setting of SystemInit() function, refer to
|
||||||
|
system_stm32f10x.c file
|
||||||
|
*/
|
||||||
|
#if defined(STM32L1XX_MD) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS) || defined(STM32F37X) || defined(STM32F303xC)
|
||||||
|
/* Enable the SYSCFG module clock */
|
||||||
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_SYSCFG, ENABLE);
|
||||||
|
#endif /* STM32L1XX_XD */
|
||||||
|
|
||||||
|
/*Pull down PA12 to create USB Disconnect Pulse*/ // HJI
|
||||||
|
#if defined(STM32F303xC) // HJI
|
||||||
|
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE); // HJI
|
||||||
|
|
||||||
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12; // HJI
|
||||||
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz; // HJI
|
||||||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_OUT; // HJI
|
||||||
|
GPIO_InitStructure.GPIO_OType = GPIO_OType_OD; // HJI
|
||||||
|
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL; // HJI
|
||||||
|
#else
|
||||||
|
RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); // HJI
|
||||||
|
|
||||||
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_12;// HJI
|
||||||
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;// HJI
|
||||||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_OD;// HJI
|
||||||
|
#endif
|
||||||
|
|
||||||
|
GPIO_Init(GPIOA, &GPIO_InitStructure); // HJI
|
||||||
|
|
||||||
|
GPIO_ResetBits(GPIOA, GPIO_Pin_12); // HJI
|
||||||
|
|
||||||
|
delay(200); // HJI
|
||||||
|
|
||||||
|
GPIO_SetBits(GPIOA, GPIO_Pin_12); // HJI
|
||||||
|
|
||||||
|
#if defined(STM32F37X) || defined(STM32F303xC)
|
||||||
|
|
||||||
|
/*Set PA11,12 as IN - USB_DM,DP*/
|
||||||
|
RCC_AHBPeriphClockCmd(RCC_AHBPeriph_GPIOA, ENABLE);
|
||||||
|
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_11 | GPIO_Pin_12;
|
||||||
|
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
|
||||||
|
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF;
|
||||||
|
GPIO_InitStructure.GPIO_OType = GPIO_OType_PP;
|
||||||
|
GPIO_InitStructure.GPIO_PuPd = GPIO_PuPd_NOPULL;
|
||||||
|
GPIO_Init(GPIOA, &GPIO_InitStructure);
|
||||||
|
|
||||||
|
/*SET PA11,12 for USB: USB_DM,DP*/
|
||||||
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource11, GPIO_AF_14);
|
||||||
|
GPIO_PinAFConfig(GPIOA, GPIO_PinSource12, GPIO_AF_14);
|
||||||
|
|
||||||
|
#endif /* STM32F37X && STM32F303xC)*/
|
||||||
|
|
||||||
|
/* Configure the EXTI line 18 connected internally to the USB IP */
|
||||||
|
EXTI_ClearITPendingBit(EXTI_Line18);
|
||||||
|
EXTI_InitStructure.EXTI_Line = EXTI_Line18;
|
||||||
|
EXTI_InitStructure.EXTI_Trigger = EXTI_Trigger_Rising;
|
||||||
|
EXTI_InitStructure.EXTI_LineCmd = ENABLE;
|
||||||
|
EXTI_Init(&EXTI_InitStructure);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : Set_USBClock
|
||||||
|
* Description : Configures USB Clock input (48MHz)
|
||||||
|
* Input : None.
|
||||||
|
* Return : None.
|
||||||
|
*******************************************************************************/
|
||||||
|
void Set_USBClock(void)
|
||||||
|
{
|
||||||
|
/* Select USBCLK source */
|
||||||
|
RCC_USBCLKConfig(RCC_USBCLKSource_PLLCLK_1Div5);
|
||||||
|
|
||||||
|
/* Enable the USB clock */
|
||||||
|
RCC_APB1PeriphClockCmd(RCC_APB1Periph_USB, ENABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 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;
|
||||||
|
}
|
||||||
|
/*Enable SystemCoreClock*/
|
||||||
|
SystemInit();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : USB_Interrupts_Config
|
||||||
|
* Description : Configures the USB interrupts
|
||||||
|
* Input : None.
|
||||||
|
* Return : None.
|
||||||
|
*******************************************************************************/
|
||||||
|
void USB_Interrupts_Config(void)
|
||||||
|
{
|
||||||
|
NVIC_InitTypeDef NVIC_InitStructure;
|
||||||
|
|
||||||
|
/* 2 bit for pre-emption priority, 2 bits for subpriority */
|
||||||
|
NVIC_PriorityGroupConfig(NVIC_PriorityGroup_2);
|
||||||
|
|
||||||
|
/* Enable the USB interrupt */
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannel = USB_LP_CAN1_RX0_IRQn;
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 2;
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannelSubPriority = 0;
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE;
|
||||||
|
NVIC_Init(&NVIC_InitStructure);
|
||||||
|
|
||||||
|
/* Enable the USB Wake-up interrupt */
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannel = USBWakeUp_IRQn;
|
||||||
|
NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority = 1;
|
||||||
|
NVIC_Init(&NVIC_InitStructure);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : USB_Cable_Config
|
||||||
|
* Description : Software Connection/Disconnection of USB Cable
|
||||||
|
* Input : None.
|
||||||
|
* Return : Status
|
||||||
|
*******************************************************************************/
|
||||||
|
void USB_Cable_Config(FunctionalState NewState)
|
||||||
|
{
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* 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 = *(uint32_t*)ID1;
|
||||||
|
Device_Serial1 = *(uint32_t*)ID2;
|
||||||
|
Device_Serial2 = *(uint32_t*)ID3;
|
||||||
|
|
||||||
|
Device_Serial0 += Device_Serial2;
|
||||||
|
|
||||||
|
if (Device_Serial0 != 0) {
|
||||||
|
IntToUnicode(Device_Serial0, &Virtual_Com_Port_StringSerial[2], 8);
|
||||||
|
IntToUnicode(Device_Serial1, &Virtual_Com_Port_StringSerial[18], 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : HexToChar.
|
||||||
|
* Description : Convert Hex 32Bits value into char.
|
||||||
|
* Input : None.
|
||||||
|
* Output : None.
|
||||||
|
* Return : None.
|
||||||
|
*******************************************************************************/
|
||||||
|
static void IntToUnicode(uint32_t value, uint8_t *pbuf, uint8_t len)
|
||||||
|
{
|
||||||
|
uint8_t idx = 0;
|
||||||
|
|
||||||
|
for (idx = 0; idx < len; idx++) {
|
||||||
|
if (((value >> 28)) < 0xA) {
|
||||||
|
pbuf[2 * idx] = (value >> 28) + '0';
|
||||||
|
} else {
|
||||||
|
pbuf[2 * idx] = (value >> 28) + 'A' - 10;
|
||||||
|
}
|
||||||
|
|
||||||
|
value = value << 4;
|
||||||
|
|
||||||
|
pbuf[2 * idx + 1] = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : Send DATA .
|
||||||
|
* Description : send the data received from the STM32 to the PC through USB
|
||||||
|
* Input : None.
|
||||||
|
* Output : None.
|
||||||
|
* Return : None.
|
||||||
|
*******************************************************************************/
|
||||||
|
uint32_t CDC_Send_DATA(uint8_t *ptrBuffer, uint8_t sendLength)
|
||||||
|
{
|
||||||
|
/* Last transmission hasn't finished, abort */
|
||||||
|
if (packetSent) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
// We can only put 64 bytes in the buffer
|
||||||
|
if (sendLength > 64 / 2) {
|
||||||
|
sendLength = 64 / 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Try to load some bytes if we can
|
||||||
|
if (sendLength) {
|
||||||
|
UserToPMABufferCopy(ptrBuffer, ENDP1_TXADDR, sendLength);
|
||||||
|
SetEPTxCount(ENDP1, sendLength);
|
||||||
|
packetSent += sendLength;
|
||||||
|
SetEPTxValid(ENDP1);
|
||||||
|
}
|
||||||
|
|
||||||
|
return sendLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : Receive DATA .
|
||||||
|
* Description : receive the data from the PC to STM32 and send it through USB
|
||||||
|
* Input : None.
|
||||||
|
* Output : None.
|
||||||
|
* Return : None.
|
||||||
|
*******************************************************************************/
|
||||||
|
uint32_t CDC_Receive_DATA(uint8_t* recvBuf, uint32_t len)
|
||||||
|
{
|
||||||
|
static uint8_t offset = 0;
|
||||||
|
uint8_t i;
|
||||||
|
|
||||||
|
if (len > receiveLength) {
|
||||||
|
len = receiveLength;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < len; i++) {
|
||||||
|
recvBuf[i] = (uint8_t)(receiveBuffer[i + offset]);
|
||||||
|
}
|
||||||
|
|
||||||
|
receiveLength -= len;
|
||||||
|
offset += len;
|
||||||
|
|
||||||
|
/* re-enable the rx endpoint which we had set to receive 0 bytes */
|
||||||
|
if (receiveLength == 0) {
|
||||||
|
SetEPRxCount(ENDP3, 64);
|
||||||
|
SetEPRxStatus(ENDP3, EP_RX_VALID);
|
||||||
|
offset = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
return len;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : usbIsConfigured.
|
||||||
|
* Description : Determines if USB VCP is configured or not
|
||||||
|
* Input : None.
|
||||||
|
* Output : None.
|
||||||
|
* Return : True if configured.
|
||||||
|
*******************************************************************************/
|
||||||
|
uint8_t usbIsConfigured(void)
|
||||||
|
{
|
||||||
|
return (bDeviceState == CONFIGURED);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : usbIsConnected.
|
||||||
|
* Description : Determines if USB VCP is connected ot not
|
||||||
|
* Input : None.
|
||||||
|
* Output : None.
|
||||||
|
* Return : True if connected.
|
||||||
|
*******************************************************************************/
|
||||||
|
uint8_t usbIsConnected(void)
|
||||||
|
{
|
||||||
|
return (bDeviceState != UNCONNECTED);
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
62
src/main/vcp/hw_config.h
Normal file
62
src/main/vcp/hw_config.h
Normal file
|
@ -0,0 +1,62 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file hw_config.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief Hardware Configuration & Setup
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __HW_CONFIG_H
|
||||||
|
#define __HW_CONFIG_H
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
//#include "platform_config.h"
|
||||||
|
#include "usb_type.h"
|
||||||
|
#include "stm32f30x.h"
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/* Exported define -----------------------------------------------------------*/
|
||||||
|
#define MASS_MEMORY_START 0x04002000
|
||||||
|
#define BULK_MAX_PACKET_SIZE 0x00000040
|
||||||
|
|
||||||
|
/* Exported functions ------------------------------------------------------- */
|
||||||
|
void Set_System(void);
|
||||||
|
void Set_USBClock(void);
|
||||||
|
void Enter_LowPowerMode(void);
|
||||||
|
void Leave_LowPowerMode(void);
|
||||||
|
void USB_Interrupts_Config(void);
|
||||||
|
void USB_Cable_Config(FunctionalState NewState);
|
||||||
|
void Get_SerialNum(void);
|
||||||
|
uint32_t CDC_Send_DATA(uint8_t *ptrBuffer, uint8_t sendLength); // HJI
|
||||||
|
uint32_t CDC_Receive_DATA(uint8_t* recvBuf, uint32_t len); // HJI
|
||||||
|
uint8_t usbIsConfigured(void); // HJI
|
||||||
|
uint8_t usbIsConnected(void); // HJI
|
||||||
|
/* External variables --------------------------------------------------------*/
|
||||||
|
|
||||||
|
extern __IO uint32_t receiveLength; // HJI
|
||||||
|
extern __IO uint32_t packetSent; // HJI
|
||||||
|
|
||||||
|
#endif /*__HW_CONFIG_H*/
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
63
src/main/vcp/platform_config.h
Normal file
63
src/main/vcp/platform_config.h
Normal file
|
@ -0,0 +1,63 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file platform_config.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief Evaluation board specific configuration file.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __PLATFORM_CONFIG_H
|
||||||
|
#define __PLATFORM_CONFIG_H
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#if defined (STM32F10X_MD) || defined (STM32F10X_HD)
|
||||||
|
#include "stm32f10x.h"
|
||||||
|
#elif defined (STM32F303xC)
|
||||||
|
#include "stm32f30x.h"
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*Unique Devices IDs register set*/
|
||||||
|
|
||||||
|
#if defined (STM32F37X) || defined(STM32F303xC)
|
||||||
|
|
||||||
|
#define ID1 (0x1FFFF7AC)
|
||||||
|
#define ID2 (0x1FFFF7B0)
|
||||||
|
#define ID3 (0x1FFFF7B4)
|
||||||
|
|
||||||
|
#else /*STM32F1x*/
|
||||||
|
|
||||||
|
#define ID1 (0x1FFFF7E8)
|
||||||
|
#define ID2 (0x1FFFF7EC)
|
||||||
|
#define ID3 (0x1FFFF7F0)
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/* Exported functions ------------------------------------------------------- */
|
||||||
|
|
||||||
|
#endif /* __PLATFORM_CONFIG_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
167
src/main/vcp/stm32_it.c
Normal file
167
src/main/vcp/stm32_it.c
Normal file
|
@ -0,0 +1,167 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32_it.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief Main Interrupt Service Routines.
|
||||||
|
* This file provides template for all exceptions handler and peripherals
|
||||||
|
* interrupt service routine.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "hw_config.h"
|
||||||
|
#include "stm32_it.h"
|
||||||
|
#include "usb_lib.h"
|
||||||
|
#include "vcp/usb_istr.h"
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
/******************************************************************************/
|
||||||
|
/* Cortex-M Processor Exceptions Handlers */
|
||||||
|
/******************************************************************************/
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : NMI_Handler
|
||||||
|
* Description : This function handles NMI exception.
|
||||||
|
* Input : None
|
||||||
|
* Output : None
|
||||||
|
* Return : None
|
||||||
|
*******************************************************************************/
|
||||||
|
void NMI_Handler(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : MemManage_Handler
|
||||||
|
* Description : This function handles Memory Manage exception.
|
||||||
|
* Input : None
|
||||||
|
* Output : None
|
||||||
|
* Return : None
|
||||||
|
*******************************************************************************/
|
||||||
|
void MemManage_Handler(void)
|
||||||
|
{
|
||||||
|
/* Go to infinite loop when Memory Manage exception occurs */
|
||||||
|
while (1) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : BusFault_Handler
|
||||||
|
* Description : This function handles Bus Fault exception.
|
||||||
|
* Input : None
|
||||||
|
* Output : None
|
||||||
|
* Return : None
|
||||||
|
*******************************************************************************/
|
||||||
|
void BusFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* Go to infinite loop when Bus Fault exception occurs */
|
||||||
|
while (1) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : UsageFault_Handler
|
||||||
|
* Description : This function handles Usage Fault exception.
|
||||||
|
* Input : None
|
||||||
|
* Output : None
|
||||||
|
* Return : None
|
||||||
|
*******************************************************************************/
|
||||||
|
void UsageFault_Handler(void)
|
||||||
|
{
|
||||||
|
/* Go to infinite loop when Usage Fault exception occurs */
|
||||||
|
while (1) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : SVC_Handler
|
||||||
|
* Description : This function handles SVCall exception.
|
||||||
|
* Input : None
|
||||||
|
* Output : None
|
||||||
|
* Return : None
|
||||||
|
*******************************************************************************/
|
||||||
|
void SVC_Handler(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : DebugMon_Handler
|
||||||
|
* Description : This function handles Debug Monitor exception.
|
||||||
|
* Input : None
|
||||||
|
* Output : None
|
||||||
|
* Return : None
|
||||||
|
*******************************************************************************/
|
||||||
|
void DebugMon_Handler(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : PendSV_Handler
|
||||||
|
* Description : This function handles PendSVC exception.
|
||||||
|
* Input : None
|
||||||
|
* Output : None
|
||||||
|
* Return : None
|
||||||
|
*******************************************************************************/
|
||||||
|
void PendSV_Handler(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : USB_IRQHandler
|
||||||
|
* Description : This function handles USB Low Priority interrupts
|
||||||
|
* requests.
|
||||||
|
* Input : None
|
||||||
|
* Output : None
|
||||||
|
* Return : None
|
||||||
|
*******************************************************************************/
|
||||||
|
#if defined(STM32L1XX_MD) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS)|| defined (STM32F37X)
|
||||||
|
void USB_LP_IRQHandler(void)
|
||||||
|
#else
|
||||||
|
void USB_LP_CAN1_RX0_IRQHandler(void)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
USB_Istr();
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : USB_FS_WKUP_IRQHandler
|
||||||
|
* Description : This function handles USB WakeUp interrupt request.
|
||||||
|
* Input : None
|
||||||
|
* Output : None
|
||||||
|
* Return : None
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
#if defined(STM32L1XX_MD) || defined(STM32L1XX_HD)|| defined(STM32L1XX_MD_PLUS)
|
||||||
|
void USB_FS_WKUP_IRQHandler(void)
|
||||||
|
#else
|
||||||
|
void USBWakeUp_IRQHandler(void)
|
||||||
|
#endif
|
||||||
|
{
|
||||||
|
EXTI_ClearITPendingBit(EXTI_Line18);
|
||||||
|
}
|
53
src/main/vcp/stm32_it.h
Normal file
53
src/main/vcp/stm32_it.h
Normal file
|
@ -0,0 +1,53 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file stm32_it.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief This file contains the headers of the interrupt handlers.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Define to prevent recursive inclusion -------------------------------------*/
|
||||||
|
#ifndef __STM32_IT_H
|
||||||
|
#define __STM32_IT_H
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "platform_config.h"
|
||||||
|
|
||||||
|
/* Exported types ------------------------------------------------------------*/
|
||||||
|
/* Exported constants --------------------------------------------------------*/
|
||||||
|
/* Exported macro ------------------------------------------------------------*/
|
||||||
|
/* Exported functions ------------------------------------------------------- */
|
||||||
|
|
||||||
|
void NMI_Handler(void);
|
||||||
|
void MemManage_Handler(void);
|
||||||
|
void BusFault_Handler(void);
|
||||||
|
void UsageFault_Handler(void);
|
||||||
|
void SVC_Handler(void);
|
||||||
|
void DebugMon_Handler(void);
|
||||||
|
void PendSV_Handler(void);
|
||||||
|
void SysTick_Handler(void);
|
||||||
|
void USBWakeUp_IRQHandler(void);
|
||||||
|
void USB_FS_WKUP_IRQHandler(void);
|
||||||
|
|
||||||
|
#endif /* __STM32_IT_H */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
102
src/main/vcp/usb_conf.h
Normal file
102
src/main/vcp/usb_conf.h
Normal file
|
@ -0,0 +1,102 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_conf.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief Virtual COM Port Demo configuration header
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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)
|
||||||
|
|
||||||
|
/*-------------------------------------------------------------*/
|
||||||
|
/* -------------- 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 */
|
||||||
|
// HJI #define IMR_MSK (CNTR_CTRM | CNTR_WKUPM | CNTR_SUSPM | CNTR_ERRM | CNTR_SOFM | CNTR_ESOFM | CNTR_RESETM )
|
||||||
|
// Disable Suspend/Resume response completely // HJI
|
||||||
|
#define IMR_MSK (CNTR_CTRM | CNTR_WKUPM | CNTR_ERRM | CNTR_SOFM | CNTR_RESETM ) // HJI
|
||||||
|
|
||||||
|
/*#define CTR_CALLBACK*/
|
||||||
|
/*#define DOVR_CALLBACK*/
|
||||||
|
/*#define ERR_CALLBACK*/
|
||||||
|
/*#define WKUP_CALLBACK*/
|
||||||
|
/*#define SUSP_CALLBACK*/
|
||||||
|
/*#define RESET_CALLBACK*/
|
||||||
|
/*#define SOF_CALLBACK*/
|
||||||
|
/*#define ESOF_CALLBACK*/
|
||||||
|
/* 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 STMicroelectronics *****END OF FILE****/
|
149
src/main/vcp/usb_desc.c
Normal file
149
src/main/vcp/usb_desc.c
Normal file
|
@ -0,0 +1,149 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_desc.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief Descriptors for Virtual Com Port Demo
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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[] = {
|
||||||
|
/*Configuration Descriptor*/
|
||||||
|
0x09, /* bLength: Configuration 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 Management 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 };
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
65
src/main/vcp/usb_desc.h
Normal file
65
src/main/vcp/usb_desc.h
Normal file
|
@ -0,0 +1,65 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_desc.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief Descriptor Header for Virtual COM Port Device
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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 64
|
||||||
|
#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 STMicroelectronics *****END OF FILE****/
|
75
src/main/vcp/usb_endp.c
Normal file
75
src/main/vcp/usb_endp.c
Normal file
|
@ -0,0 +1,75 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_endp.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief Endpoint routines
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usb_lib.h"
|
||||||
|
#include "usb_desc.h"
|
||||||
|
#include "usb_mem.h"
|
||||||
|
#include "hw_config.h"
|
||||||
|
#include "usb_istr.h"
|
||||||
|
#include "usb_pwr.h"
|
||||||
|
|
||||||
|
/* Private typedef -----------------------------------------------------------*/
|
||||||
|
/* Private define ------------------------------------------------------------*/
|
||||||
|
|
||||||
|
/* Interval between sending IN packets in frame number (1 frame = 1ms) */
|
||||||
|
#define VCOMPORT_IN_FRAME_INTERVAL 5
|
||||||
|
/* Private macro -------------------------------------------------------------*/
|
||||||
|
/* Private variables ---------------------------------------------------------*/
|
||||||
|
extern __IO uint32_t packetSent; // HJI
|
||||||
|
extern __IO uint8_t receiveBuffer[64]; // HJI
|
||||||
|
__IO uint32_t receiveLength; // HJI
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : EP1_IN_Callback
|
||||||
|
* Description :
|
||||||
|
* Input : None.
|
||||||
|
* Output : None.
|
||||||
|
* Return : None.
|
||||||
|
*******************************************************************************/
|
||||||
|
|
||||||
|
void EP1_IN_Callback(void)
|
||||||
|
{
|
||||||
|
packetSent = 0; // HJI
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : EP3_OUT_Callback
|
||||||
|
* Description :
|
||||||
|
* Input : None.
|
||||||
|
* Output : None.
|
||||||
|
* Return : None.
|
||||||
|
*******************************************************************************/
|
||||||
|
void EP3_OUT_Callback(void)
|
||||||
|
{
|
||||||
|
receiveLength = GetEPRxCount(ENDP3); // HJI
|
||||||
|
PMAToUserBufferCopy((unsigned char*)receiveBuffer, ENDP3_RXADDR, receiveLength); // HJI
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
222
src/main/vcp/usb_istr.c
Normal file
222
src/main/vcp/usb_istr.c
Normal file
|
@ -0,0 +1,222 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_istr.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief ISTR events interrupt service routines
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#include "usb_lib.h"
|
||||||
|
#include "usb_prop.h"
|
||||||
|
#include "usb_pwr.h"
|
||||||
|
#include "usb_istr.h"
|
||||||
|
|
||||||
|
/* 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 */
|
||||||
|
__IO uint32_t esof_counter = 0; /* expected SOF counter */
|
||||||
|
__IO uint32_t wCNTR = 0;
|
||||||
|
|
||||||
|
/* Extern variables ----------------------------------------------------------*/
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
/* function pointers to non-control endpoints service routines */
|
||||||
|
void (*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 (*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,
|
||||||
|
};
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : USB_Istr
|
||||||
|
* Description : ISTR events interrupt service routine
|
||||||
|
* Input :
|
||||||
|
* Output :
|
||||||
|
* Return :
|
||||||
|
*******************************************************************************/
|
||||||
|
void USB_Istr(void)
|
||||||
|
{
|
||||||
|
wIstr = _GetISTR();
|
||||||
|
|
||||||
|
#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_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_ESOF)
|
||||||
|
if (wIstr & ISTR_ESOF & wInterrupt_Mask)
|
||||||
|
{
|
||||||
|
/* clear ESOF flag in ISTR */
|
||||||
|
_SetISTR((uint16_t)CLR_ESOF);
|
||||||
|
|
||||||
|
if ((_GetFNR()&FNR_RXDP)!=0)
|
||||||
|
{
|
||||||
|
/* increment ESOF counter */
|
||||||
|
esof_counter ++;
|
||||||
|
|
||||||
|
/* test if we enter in ESOF more than 3 times with FSUSP =0 and RXDP =1=>> possible missing SUSP flag*/
|
||||||
|
if ((esof_counter >3)&&((_GetCNTR()&CNTR_FSUSP)==0))
|
||||||
|
{
|
||||||
|
/* this a sequence to apply a force RESET*/
|
||||||
|
|
||||||
|
/*Store CNTR value */
|
||||||
|
wCNTR = _GetCNTR();
|
||||||
|
|
||||||
|
/*Store endpoints registers status */
|
||||||
|
for (i=0;i<8;i++) EP[i] = _GetENDPOINT(i);
|
||||||
|
|
||||||
|
/*apply FRES */
|
||||||
|
wCNTR|=CNTR_FRES;
|
||||||
|
_SetCNTR(wCNTR);
|
||||||
|
|
||||||
|
/*clear FRES*/
|
||||||
|
wCNTR&=~CNTR_FRES;
|
||||||
|
_SetCNTR(wCNTR);
|
||||||
|
|
||||||
|
/*poll for RESET flag in ISTR*/
|
||||||
|
while((_GetISTR()&ISTR_RESET) == 0);
|
||||||
|
/* clear RESET flag in ISTR */
|
||||||
|
_SetISTR((uint16_t)CLR_RESET);
|
||||||
|
|
||||||
|
/*restore Enpoints*/
|
||||||
|
for (i=0;i<8;i++)
|
||||||
|
_SetENDPOINT(i, EP[i]);
|
||||||
|
|
||||||
|
esof_counter = 0;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
esof_counter = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 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 */
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
93
src/main/vcp/usb_istr.h
Normal file
93
src/main/vcp/usb_istr.h
Normal file
|
@ -0,0 +1,93 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_istr.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief This file includes the peripherals header files in the user application.
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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 ------------------------------------------------------- */
|
||||||
|
|
||||||
|
void USB_Istr(void);
|
||||||
|
|
||||||
|
/* function prototypes Automatically built defining related macros */
|
||||||
|
|
||||||
|
void EP1_IN_Callback(void);
|
||||||
|
void EP2_IN_Callback(void);
|
||||||
|
void EP3_IN_Callback(void);
|
||||||
|
void EP4_IN_Callback(void);
|
||||||
|
void EP5_IN_Callback(void);
|
||||||
|
void EP6_IN_Callback(void);
|
||||||
|
void EP7_IN_Callback(void);
|
||||||
|
|
||||||
|
void EP1_OUT_Callback(void);
|
||||||
|
void EP2_OUT_Callback(void);
|
||||||
|
void EP3_OUT_Callback(void);
|
||||||
|
void EP4_OUT_Callback(void);
|
||||||
|
void EP5_OUT_Callback(void);
|
||||||
|
void EP6_OUT_Callback(void);
|
||||||
|
void EP7_OUT_Callback(void);
|
||||||
|
|
||||||
|
#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
|
||||||
|
#endif /*__USB_ISTR_H*/
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
362
src/main/vcp/usb_prop.c
Normal file
362
src/main/vcp/usb_prop.c
Normal file
|
@ -0,0 +1,362 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_prop.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief All processing related to Virtual Com Port Demo
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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();
|
||||||
|
|
||||||
|
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;
|
||||||
|
|
||||||
|
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);
|
||||||
|
|
||||||
|
bDeviceState = ATTACHED;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : Virtual_Com_Port_SetConfiguration.
|
||||||
|
* Description : Update 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 : Update 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) {
|
||||||
|
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 : Linecoding 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 STMicroelectronics *****END OF FILE****/
|
||||||
|
|
85
src/main/vcp/usb_prop.h
Normal file
85
src/main/vcp/usb_prop.h
Normal file
|
@ -0,0 +1,85 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_prop.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief All processing related to Virtual COM Port Demo (Endpoint 0)
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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 STMicroelectronics *****END OF FILE****/
|
||||||
|
|
310
src/main/vcp/usb_pwr.c
Normal file
310
src/main/vcp/usb_pwr.c
Normal file
|
@ -0,0 +1,310 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_pwr.c
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief Connection/disconnection & power management
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* Includes ------------------------------------------------------------------*/
|
||||||
|
#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 boolean fSuspendEnabled = TRUE; /* true when suspend is possible */ // HJI
|
||||||
|
__IO uint32_t EP[8];
|
||||||
|
|
||||||
|
struct {
|
||||||
|
__IO RESUME_STATE eState;
|
||||||
|
__IO uint8_t bESOFcnt;
|
||||||
|
} ResumeS;
|
||||||
|
|
||||||
|
__IO uint32_t remotewakeupon = 0;
|
||||||
|
|
||||||
|
/* Extern variables ----------------------------------------------------------*/
|
||||||
|
/* Private function prototypes -----------------------------------------------*/
|
||||||
|
/* Extern function prototypes ------------------------------------------------*/
|
||||||
|
/* Private functions ---------------------------------------------------------*/
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : PowerOn
|
||||||
|
* Description :
|
||||||
|
* Input : None.
|
||||||
|
* Output : None.
|
||||||
|
* Return : USB_SUCCESS.
|
||||||
|
*******************************************************************************/
|
||||||
|
RESULT PowerOn(void)
|
||||||
|
{
|
||||||
|
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);
|
||||||
|
|
||||||
|
return USB_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : PowerOff
|
||||||
|
* Description : handles switch-off conditions
|
||||||
|
* Input : None.
|
||||||
|
* Output : None.
|
||||||
|
* Return : USB_SUCCESS.
|
||||||
|
*******************************************************************************/
|
||||||
|
RESULT PowerOff()
|
||||||
|
{
|
||||||
|
/* disable all interrupts 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);
|
||||||
|
/* 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)
|
||||||
|
{
|
||||||
|
uint32_t i = 0;
|
||||||
|
uint16_t wCNTR;
|
||||||
|
uint32_t tmpreg = 0;
|
||||||
|
__IO uint32_t savePWR_CR = 0;
|
||||||
|
/* suspend preparation */
|
||||||
|
/* ... */
|
||||||
|
|
||||||
|
/*Store CNTR value */
|
||||||
|
wCNTR = _GetCNTR();
|
||||||
|
|
||||||
|
/* This a sequence to apply a force RESET to handle a robustness case */
|
||||||
|
|
||||||
|
/*Store endpoints registers status */
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
EP[i] = _GetENDPOINT(i);
|
||||||
|
|
||||||
|
/* unmask RESET flag */
|
||||||
|
wCNTR |= CNTR_RESETM;
|
||||||
|
_SetCNTR(wCNTR);
|
||||||
|
|
||||||
|
/*apply FRES */
|
||||||
|
wCNTR |= CNTR_FRES;
|
||||||
|
_SetCNTR(wCNTR);
|
||||||
|
|
||||||
|
/*clear FRES*/
|
||||||
|
wCNTR &= ~CNTR_FRES;
|
||||||
|
_SetCNTR(wCNTR);
|
||||||
|
|
||||||
|
/*poll for RESET flag in ISTR*/
|
||||||
|
while ((_GetISTR() & ISTR_RESET) == 0)
|
||||||
|
;
|
||||||
|
|
||||||
|
/* clear RESET flag in ISTR */
|
||||||
|
_SetISTR((uint16_t)CLR_RESET);
|
||||||
|
|
||||||
|
/*restore Enpoints*/
|
||||||
|
for (i = 0; i < 8; i++)
|
||||||
|
_SetENDPOINT(i, EP[i]);
|
||||||
|
|
||||||
|
/* Now it is safe to enter macrocell in suspend mode */
|
||||||
|
wCNTR |= CNTR_FSUSP;
|
||||||
|
_SetCNTR(wCNTR);
|
||||||
|
|
||||||
|
/* force low-power mode in the macrocell */
|
||||||
|
wCNTR = _GetCNTR();
|
||||||
|
wCNTR |= CNTR_LPMODE;
|
||||||
|
_SetCNTR(wCNTR);
|
||||||
|
|
||||||
|
/*prepare entry in low power mode (STOP mode)*/
|
||||||
|
/* Select the regulator state in STOP mode*/
|
||||||
|
savePWR_CR = PWR->CR;
|
||||||
|
tmpreg = PWR->CR;
|
||||||
|
/* Clear PDDS and LPDS bits */
|
||||||
|
tmpreg &= ((uint32_t)0xFFFFFFFC);
|
||||||
|
/* Set LPDS bit according to PWR_Regulator value */
|
||||||
|
tmpreg |= PWR_Regulator_LowPower;
|
||||||
|
/* Store the new value */
|
||||||
|
PWR->CR = tmpreg;
|
||||||
|
/* Set SLEEPDEEP bit of Cortex System Control Register */
|
||||||
|
#if defined (STM32F303xC) || defined (STM32F37X)
|
||||||
|
SCB->SCR |= SCB_SCR_SLEEPDEEP_Msk;
|
||||||
|
#else
|
||||||
|
SCB->SCR |= SCB_SCR_SLEEPDEEP;
|
||||||
|
#endif
|
||||||
|
/* enter system in STOP mode, only when wakeup flag in not set */
|
||||||
|
if ((_GetISTR() & ISTR_WKUP) == 0) {
|
||||||
|
__WFI();
|
||||||
|
/* Reset SLEEPDEEP bit of Cortex System Control Register */
|
||||||
|
#if defined (STM32F303xC) || defined (STM32F37X)
|
||||||
|
SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk);
|
||||||
|
#else
|
||||||
|
SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP);
|
||||||
|
#endif
|
||||||
|
} else {
|
||||||
|
/* Clear Wakeup flag */
|
||||||
|
_SetISTR(CLR_WKUP);
|
||||||
|
/* clear FSUSP to abort entry in suspend mode */
|
||||||
|
wCNTR = _GetCNTR();
|
||||||
|
wCNTR &= ~CNTR_FSUSP;
|
||||||
|
_SetCNTR(wCNTR);
|
||||||
|
|
||||||
|
/*restore sleep mode configuration */
|
||||||
|
/* restore Power regulator config in sleep mode*/
|
||||||
|
PWR->CR = savePWR_CR;
|
||||||
|
|
||||||
|
/* Reset SLEEPDEEP bit of Cortex System Control Register */
|
||||||
|
#if defined (STM32F303xC) || defined (STM32F37X)
|
||||||
|
SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP_Msk);
|
||||||
|
#else
|
||||||
|
SCB->SCR &= (uint32_t)~((uint32_t)SCB_SCR_SLEEPDEEP);
|
||||||
|
#endif
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/*******************************************************************************
|
||||||
|
* Function Name : Resume_Init
|
||||||
|
* Description : Handles wake-up restoring normal operations
|
||||||
|
* Input : None.
|
||||||
|
* Output : None.
|
||||||
|
* Return : USB_SUCCESS.
|
||||||
|
*******************************************************************************/
|
||||||
|
void Resume_Init(void)
|
||||||
|
{
|
||||||
|
uint16_t wCNTR;
|
||||||
|
|
||||||
|
/* ------------------ ONLY WITH BUS-POWERED DEVICES ---------------------- */
|
||||||
|
/* restart the clocks */
|
||||||
|
/* ... */
|
||||||
|
|
||||||
|
/* CNTR_LPMODE = 0 */
|
||||||
|
wCNTR = _GetCNTR();
|
||||||
|
wCNTR &= (~CNTR_LPMODE);
|
||||||
|
_SetCNTR(wCNTR);
|
||||||
|
|
||||||
|
/* restore full power */
|
||||||
|
/* ... on connected devices */
|
||||||
|
Leave_LowPowerMode();
|
||||||
|
|
||||||
|
/* reset FSUSP bit */
|
||||||
|
_SetCNTR(IMR_MSK);
|
||||||
|
|
||||||
|
/* 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)
|
||||||
|
{
|
||||||
|
uint16_t wCNTR;
|
||||||
|
|
||||||
|
if (eResumeSetVal != RESUME_ESOF)
|
||||||
|
ResumeS.eState = eResumeSetVal;
|
||||||
|
switch (ResumeS.eState) {
|
||||||
|
case RESUME_EXTERNAL:
|
||||||
|
if (remotewakeupon == 0) {
|
||||||
|
Resume_Init();
|
||||||
|
ResumeS.eState = RESUME_OFF;
|
||||||
|
} else /* RESUME detected during the RemoteWAkeup signalling => keep RemoteWakeup handling*/
|
||||||
|
{
|
||||||
|
ResumeS.eState = RESUME_ON;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RESUME_INTERNAL:
|
||||||
|
Resume_Init();
|
||||||
|
ResumeS.eState = RESUME_START;
|
||||||
|
remotewakeupon = 1;
|
||||||
|
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:
|
||||||
|
wCNTR = _GetCNTR();
|
||||||
|
wCNTR |= CNTR_RESUME;
|
||||||
|
_SetCNTR(wCNTR);
|
||||||
|
ResumeS.eState = RESUME_ON;
|
||||||
|
ResumeS.bESOFcnt = 10;
|
||||||
|
break;
|
||||||
|
case RESUME_ON:
|
||||||
|
ResumeS.bESOFcnt--;
|
||||||
|
if (ResumeS.bESOFcnt == 0) {
|
||||||
|
wCNTR = _GetCNTR();
|
||||||
|
wCNTR &= (~CNTR_RESUME);
|
||||||
|
_SetCNTR(wCNTR);
|
||||||
|
ResumeS.eState = RESUME_OFF;
|
||||||
|
remotewakeupon = 0;
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case RESUME_OFF:
|
||||||
|
case RESUME_ESOF:
|
||||||
|
default:
|
||||||
|
ResumeS.eState = RESUME_OFF;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
68
src/main/vcp/usb_pwr.h
Normal file
68
src/main/vcp/usb_pwr.h
Normal file
|
@ -0,0 +1,68 @@
|
||||||
|
/**
|
||||||
|
******************************************************************************
|
||||||
|
* @file usb_pwr.h
|
||||||
|
* @author MCD Application Team
|
||||||
|
* @version V4.0.0
|
||||||
|
* @date 21-January-2013
|
||||||
|
* @brief Connection/disconnection & power management header
|
||||||
|
******************************************************************************
|
||||||
|
* @attention
|
||||||
|
*
|
||||||
|
* <h2><center>© COPYRIGHT 2013 STMicroelectronics</center></h2>
|
||||||
|
*
|
||||||
|
* Licensed under MCD-ST Liberty SW License Agreement V2, (the "License");
|
||||||
|
* You may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at:
|
||||||
|
*
|
||||||
|
* http://www.st.com/software_license_agreement_liberty_v2
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*
|
||||||
|
******************************************************************************
|
||||||
|
*/
|
||||||
|
|
||||||
|
/* 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 boolean fSuspendEnabled; /* true when suspend is possible */ // HJI
|
||||||
|
#endif /*__USB_PWR_H*/
|
||||||
|
|
||||||
|
/************************ (C) COPYRIGHT STMicroelectronics *****END OF FILE****/
|
Loading…
Add table
Add a link
Reference in a new issue