aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/platforms/STM32/USBv1
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2012-08-21 08:50:11 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2012-08-21 08:50:11 +0000
commitc13206f3eea1a01848cbabc4b57a85f9cb02b17a (patch)
tree12ed6ed3440701f379048b86aad4b4ceadb73866 /os/hal/platforms/STM32/USBv1
parenteee100dd4443d592efb3cd75e890fe4d1f4ab553 (diff)
downloadChibiOS-c13206f3eea1a01848cbabc4b57a85f9cb02b17a.tar.gz
ChibiOS-c13206f3eea1a01848cbabc4b57a85f9cb02b17a.tar.bz2
ChibiOS-c13206f3eea1a01848cbabc4b57a85f9cb02b17a.zip
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@4599 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/platforms/STM32/USBv1')
-rw-r--r--os/hal/platforms/STM32/USBv1/usb_lld.c12
-rw-r--r--os/hal/platforms/STM32/USBv1/usb_lld.h5
2 files changed, 12 insertions, 5 deletions
diff --git a/os/hal/platforms/STM32/USBv1/usb_lld.c b/os/hal/platforms/STM32/USBv1/usb_lld.c
index 0b72c3a56..1e35336df 100644
--- a/os/hal/platforms/STM32/USBv1/usb_lld.c
+++ b/os/hal/platforms/STM32/USBv1/usb_lld.c
@@ -81,6 +81,7 @@ static const USBEndpointConfig ep0config = {
0x40,
&ep0_state.in,
&ep0_state.out,
+ 1,
ep0setup_buffer
};
@@ -347,7 +348,6 @@ CH_IRQ_HANDLER(STM32_USB1_LP_HANDLER) {
EPR_CLEAR_CTR_TX(ep);
n = (size_t)USB_GET_DESCRIPTOR(ep)->TXCOUNT0;
- epcp->in_state->mode.linear.txbuf += n;
epcp->in_state->txcnt += n;
epcp->in_state->txsize -= n;
if (epcp->in_state->txsize > 0) {
@@ -361,10 +361,12 @@ CH_IRQ_HANDLER(STM32_USB1_LP_HANDLER) {
usb_packet_write_from_queue(USB_GET_DESCRIPTOR(ep),
epcp->in_state->mode.queue.txqueue,
n);
- else
+ else {
+ epcp->in_state->mode.linear.txbuf += n;
usb_packet_write_from_buffer(USB_GET_DESCRIPTOR(ep),
epcp->in_state->mode.linear.txbuf,
n);
+ }
chSysLockFromIsr();
usb_lld_start_in(usbp, ep);
chSysUnlockFromIsr();
@@ -391,13 +393,13 @@ CH_IRQ_HANDLER(STM32_USB1_LP_HANDLER) {
usb_packet_read_to_queue(udp,
epcp->out_state->mode.queue.rxqueue,
n);
- else
+ else {
usb_packet_read_to_buffer(udp,
epcp->out_state->mode.linear.rxbuf,
n);
-
+ epcp->out_state->mode.linear.rxbuf += n;
+ }
/* Transaction data updated.*/
- epcp->out_state->mode.linear.rxbuf += n;
epcp->out_state->rxcnt += n;
epcp->out_state->rxsize -= n;
epcp->out_state->rxpkts -= 1;
diff --git a/os/hal/platforms/STM32/USBv1/usb_lld.h b/os/hal/platforms/STM32/USBv1/usb_lld.h
index 7e7253abd..bce83681a 100644
--- a/os/hal/platforms/STM32/USBv1/usb_lld.h
+++ b/os/hal/platforms/STM32/USBv1/usb_lld.h
@@ -237,6 +237,11 @@ typedef struct {
USBOutEndpointState *out_state;
/* End of the mandatory fields.*/
/**
+ * @brief Reserved field, not currently used.
+ * @note Initialize this field to 1 in order to be forward compatible.
+ */
+ uint16_t ep_buffers;
+ /**
* @brief Pointer to a buffer for setup packets.
* @details Setup packets require a dedicated 8-bytes buffer, set this
* field to @p NULL for non-control endpoints.