From d749ecc10a40b21a22b3e7ab14ff9861fabe4685 Mon Sep 17 00:00:00 2001 From: gdisirio Date: Sat, 12 Feb 2011 11:54:15 +0000 Subject: RAM optimization to the USB driver. git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2732 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/hal/src/serial_usb.c | 4 ++-- os/hal/src/usb.c | 32 +++++++++++++++++++------------- 2 files changed, 21 insertions(+), 15 deletions(-) (limited to 'os/hal/src') diff --git a/os/hal/src/serial_usb.c b/os/hal/src/serial_usb.c index 430218edb..b17669c04 100644 --- a/os/hal/src/serial_usb.c +++ b/os/hal/src/serial_usb.c @@ -124,7 +124,7 @@ static void inotify(GenericQueue *qp) { if (n != USB_ENDPOINT_BUSY) { sdup->iqueue.q_rdptr = sdup->iqueue.q_buffer; chSemSetCounterI(&sdup->iqueue.q_sem, n); - chIOAddFlagsI(sdup, IO_INPUT_AVAILABLE); +// chIOAddFlagsI(sdup, IO_INPUT_AVAILABLE); } } } @@ -143,7 +143,7 @@ static void onotify(GenericQueue *qp) { if (n != USB_ENDPOINT_BUSY) { sdup->oqueue.q_wrptr = sdup->oqueue.q_buffer; chSemSetCounterI(&sdup->oqueue.q_sem, SERIAL_USB_BUFFERS_SIZE); - chIOAddFlagsI(sdup, IO_OUTPUT_EMPTY); +// chIOAddFlagsI(sdup, IO_OUTPUT_EMPTY); } } diff --git a/os/hal/src/usb.c b/os/hal/src/usb.c index 08fa52a3e..cbbe8f5b3 100644 --- a/os/hal/src/usb.c +++ b/os/hal/src/usb.c @@ -234,9 +234,11 @@ void usbInit(void) { */ void usbObjectInit(USBDriver *usbp) { - usbp->state = USB_STOP; - usbp->config = NULL; - usbp->param = NULL; + usbp->state = USB_STOP; + usbp->config = NULL; + usbp->param = NULL; + usbp->transmitting = 0; + usbp->receiving = 0; } /** @@ -358,10 +360,10 @@ void usbDisableEndpointsI(USBDriver *usbp) { size_t usbReadPacketI(USBDriver *usbp, usbep_t ep, uint8_t *buf, size_t n) { - if (usbp->ep[ep]->receiving) + if (usbGetReceiveStatusI(usbp, ep)) return USB_ENDPOINT_BUSY; - usbp->ep[ep]->receiving = TRUE; + usbp->receiving |= (1 << ep); return usb_lld_read_packet(usbp, ep, buf, n);; } @@ -385,10 +387,10 @@ size_t usbReadPacketI(USBDriver *usbp, usbep_t ep, size_t usbWritePacketI(USBDriver *usbp, usbep_t ep, const uint8_t *buf, size_t n) { - if (usbp->ep[ep]->transmitting) + if (usbGetTransmitStatusI(usbp, ep)) return USB_ENDPOINT_BUSY; - usbp->ep[ep]->transmitting = TRUE; + usbp->transmitting |= (1 << ep); usb_lld_write_packet(usbp, ep, buf, n); return 0; } @@ -413,9 +415,10 @@ size_t usbWritePacketI(USBDriver *usbp, usbep_t ep, bool_t usbStartReceiveI(USBDriver *usbp, usbep_t ep, uint8_t *buf, size_t n) { - if (usbp->ep[ep]->receiving) + if (usbGetReceiveStatusI(usbp, ep)) return TRUE; - usbp->ep[ep]->receiving = TRUE; + + usbp->receiving |= (1 << ep); usb_lld_start_out(usbp, ep, buf, n); return FALSE; } @@ -440,9 +443,10 @@ bool_t usbStartReceiveI(USBDriver *usbp, usbep_t ep, bool_t usbStartTransmitI(USBDriver *usbp, usbep_t ep, const uint8_t *buf, size_t n) { - if (usbp->ep[ep]->transmitting) + if (usbGetTransmitStatusI(usbp, ep)) return TRUE; - usbp->ep[ep]->transmitting = TRUE; + + usbp->transmitting |= (1 << ep); usb_lld_start_in(usbp, ep, buf, n); return FALSE; } @@ -460,8 +464,9 @@ bool_t usbStartTransmitI(USBDriver *usbp, usbep_t ep, */ bool_t usbStallReceiveI(USBDriver *usbp, usbep_t ep) { - if (usbp->ep[ep]->receiving) + if (usbGetReceiveStatusI(usbp, ep)) return TRUE; + usb_lld_stall_out(usbp, ep); return FALSE; } @@ -479,8 +484,9 @@ bool_t usbStallReceiveI(USBDriver *usbp, usbep_t ep) { */ bool_t usbStallTransmitI(USBDriver *usbp, usbep_t ep) { - if (usbp->ep[ep]->transmitting) + if (usbGetTransmitStatusI(usbp, ep)) return TRUE; + usb_lld_stall_in(usbp, ep); return FALSE; } -- cgit v1.2.3