aboutsummaryrefslogtreecommitdiffstats
path: root/os/hal/src/serial_usb.c
diff options
context:
space:
mode:
authorgdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-05-20 12:46:24 +0000
committergdisirio <gdisirio@35acf78f-673a-0410-8e92-d51de3d6d3f4>2011-05-20 12:46:24 +0000
commitf4ec81ae144ef2ae7ddd9a0e56082970420c0464 (patch)
treeace4834692e336cf436901b6a2eaf58b8b7a48f7 /os/hal/src/serial_usb.c
parent3cfb4077fb27e9ab51bc33d67def962ae68f26c7 (diff)
downloadChibiOS-f4ec81ae144ef2ae7ddd9a0e56082970420c0464.tar.gz
ChibiOS-f4ec81ae144ef2ae7ddd9a0e56082970420c0464.tar.bz2
ChibiOS-f4ec81ae144ef2ae7ddd9a0e56082970420c0464.zip
USB CDC functionality restored, more improvements to the I/O queues.
git-svn-id: svn://svn.code.sf.net/p/chibios/svn/trunk@2983 35acf78f-673a-0410-8e92-d51de3d6d3f4
Diffstat (limited to 'os/hal/src/serial_usb.c')
-rw-r--r--os/hal/src/serial_usb.c14
1 files changed, 6 insertions, 8 deletions
diff --git a/os/hal/src/serial_usb.c b/os/hal/src/serial_usb.c
index 7fecd5f30..3f53d7df0 100644
--- a/os/hal/src/serial_usb.c
+++ b/os/hal/src/serial_usb.c
@@ -126,9 +126,8 @@ static void inotify(GenericQueue *qp) {
chIOAddFlagsI(sdup, IO_INPUT_AVAILABLE);
sdup->iqueue.q_rdptr = sdup->iqueue.q_buffer;
sdup->iqueue.q_counter = n;
- if (notempty(&sdup->iqueue.q_waiting))
+ while (notempty(&sdup->iqueue.q_waiting))
chSchReadyI(fifo_remove(&sdup->iqueue.q_waiting))->p_u.rdymsg = Q_OK;
- chSchRescheduleS();
}
}
}
@@ -148,10 +147,9 @@ static void onotify(GenericQueue *qp) {
if (w != USB_ENDPOINT_BUSY) {
chIOAddFlagsI(sdup, IO_OUTPUT_EMPTY);
sdup->oqueue.q_wrptr = sdup->oqueue.q_buffer;
- sdup->oqueue.q_counter = n;
- if (notempty(&sdup->oqueue.q_waiting))
+ sdup->oqueue.q_counter = chQSizeI(&sdup->oqueue);
+ while (notempty(&sdup->oqueue.q_waiting))
chSchReadyI(fifo_remove(&sdup->oqueue.q_waiting))->p_u.rdymsg = Q_OK;
- chSchRescheduleS();
}
}
@@ -294,8 +292,8 @@ void sduDataTransmitted(USBDriver *usbp, usbep_t ep) {
if (w != USB_ENDPOINT_BUSY) {
chIOAddFlagsI(sdup, IO_OUTPUT_EMPTY);
sdup->oqueue.q_wrptr = sdup->oqueue.q_buffer;
- sdup->oqueue.q_counter = n;
- if (notempty(&sdup->oqueue.q_waiting))
+ sdup->oqueue.q_counter = chQSizeI(&sdup->oqueue);
+ while (notempty(&sdup->oqueue.q_waiting))
chSchReadyI(fifo_remove(&sdup->oqueue.q_waiting))->p_u.rdymsg = Q_OK;
}
}
@@ -325,7 +323,7 @@ void sduDataReceived(USBDriver *usbp, usbep_t ep) {
chIOAddFlagsI(sdup, IO_INPUT_AVAILABLE);
sdup->iqueue.q_rdptr = sdup->iqueue.q_buffer;
sdup->iqueue.q_counter = n;
- if (notempty(&sdup->iqueue.q_waiting))
+ while (notempty(&sdup->iqueue.q_waiting))
chSchReadyI(fifo_remove(&sdup->iqueue.q_waiting))->p_u.rdymsg = Q_OK;
}
}