Correction to the ZLP fix for the STM32 F4 OTG FS driver

git-svn-id: https://nuttx.svn.sourceforge.net/svnroot/nuttx/trunk@4591 7fd9a85b-ad96-42d3-883c-3090e2eb8679
This commit is contained in:
patacongo 2012-04-11 18:12:03 +00:00
parent 0c9433d032
commit f1c5ee72b9
4 changed files with 106 additions and 1 deletions

View File

@ -2,3 +2,19 @@
# For a description of the syntax of this configuration file,
# see misc/tools/kconfig-language.txt.
#
menu "Custom free memory command"
source "$APPSDIR/system/free/Kconfig"
endmenu
menu "I2C tool"
source "$APPSDIR/system/i2c/Kconfig"
endmenu
menu "FLASH Program Installation"
source "$APPSDIR/system/install/Kconfig"
endmenu
menu "readline() support"
source "$APPSDIR/system/readline/Kconfig"
endmenu

View File

@ -2,3 +2,49 @@
# For a description of the syntax of this configuration file,
# see misc/tools/kconfig-language.txt.
#
#if I2C
config I2CTOOL_BUILTIN
int "NSH built-in command"
default y
depends on NSH_BUILTIN_APPS
---help---
Build the tools as an NSH built-in command
config I2CTOOL_MINBUS
int "Minimum bus number"
default 0
---help---
Smallest bus index supported by the hardware (default 0).
config I2CTOOL_MAXBUS
int "Maximum bus number"
default 3
---help---
Largest bus index supported by the hardware (default 3)
config I2CTOOL_MINADDR
int "Minimum I2C address"
default 0x03
---help---
Minium 7-bit device address (default: 0x03)
config I2CTOOL_MAXADDR
int "Maximum I2C address"
default 0x77
---help---
Largest 7-bit device address (default: 0x77)
config I2CTOOL_MAXREGADDR
int "Maximum I2C register address"
default 0xff
---help---
Largest I2C register address (default: 0xff)
config I2CTOOL_DEFFREQ
int "Default I2C frequency"
default 4000000
---help---
Default I2C frequency (default: 4000000)
#endif

View File

@ -2,3 +2,30 @@
# For a description of the syntax of this configuration file,
# see misc/tools/kconfig-language.txt.
#
config READLINE_ECHO
bool "Echo character input"
default y
---help---
Echo received character input back via stdout. This is normal
behavior and should be selected unless the source of stdin input
already has local echo support or you need to suppress the back-channel
responses for any other reason.
choice
prompt "Newline Options"
default EOL_IS_EITHER_CRLF
config EOL_IS_CR
bool "EOL is CR"
config EOL_IS_LF
bool "EOL is LF"
config EOL_IS_BOTH_CRLF
bool "EOL is CR and LF"
config EOL_IS_EITHER_CRLF
bool "EOL is CR or LF"
endchoice

View File

@ -1027,6 +1027,11 @@ static void stm32_epin_request(FAR struct stm32_usbdev_s *priv,
if (privreq->req.len == 0)
{
/* The ZLP flag is set TRUE whenever we want to force the driver to
* send a zero-length-packet on the next pass through the loop (below).
* The flag is cleared whenever a packet is sent in the loop below.
*/
privep->zlp = true;
}
@ -1043,6 +1048,10 @@ static void stm32_epin_request(FAR struct stm32_usbdev_s *priv,
bytesleft = privreq->req.len - privreq->req.xfrd;
nbytes = bytesleft;
/* Assume no zero-length-packet on the next pass through this loop */
privep->zlp = false;
/* Limit the size of the transfer to one full packet and handle
* zero-length packets (ZLPs).
*/
@ -1053,7 +1062,6 @@ static void stm32_epin_request(FAR struct stm32_usbdev_s *priv,
* the request.
*/
privep->zlp = false;
if (nbytes >= privep->ep.maxpacket)
{
nbytes = privep->ep.maxpacket;
@ -1066,6 +1074,14 @@ static void stm32_epin_request(FAR struct stm32_usbdev_s *priv,
if (bytesleft == privep->ep.maxpacket &&
(privreq->req.flags & USBDEV_REQFLAGS_NULLPKT) != 0)
{
/* The ZLP flag is set TRUE whenever we want to force
* the driver to send a zero-length-packet on the next
* pass through this loop. The flag is cleared (above)
* whenever we are committed to sending any packet and
* set here when we want to force one more pass through
* the loop.
*/
privep->zlp = true;
}
}