Browse Source

Add FIONWRITE to allow applications to sniff the amount of writable space on a descriptor. Implement this for serial devices only.

sbg
px4dev 12 years ago
parent
commit
e787fa5bce
  1. 21
      nuttx/drivers/serial/serial.c
  2. 4
      nuttx/include/nuttx/fs/ioctl.h

21
nuttx/drivers/serial/serial.c

@ -688,6 +688,27 @@ static int uart_ioctl(FAR struct file *filep, int cmd, unsigned long arg) @@ -688,6 +688,27 @@ static int uart_ioctl(FAR struct file *filep, int cmd, unsigned long arg)
*(int *)arg = count;
}
case FIONWRITE:
{
int count;
irqstate_t state = irqsave();
/* determine the number of bytes free in the buffer */
if (dev->xmit.head <= dev->xmit.tail)
{
count = dev->xmit.tail - dev->xmit.head - 1;
}
else
{
count = dev->xmit.size - (dev->xmit.head - dev->xmit.tail) - 1;
}
irqrestore(state);
*(int *)arg = count;
}
#ifdef CONFIG_SERIAL_TERMIOS
case TCGETS:
{

4
nuttx/include/nuttx/fs/ioctl.h

@ -110,6 +110,10 @@ @@ -110,6 +110,10 @@
* OUT: Bytes readable from this fd
*/
#define FIONWRITE _FIOC(0x0005) /* IN: Location to return value (int *)
* OUT: Bytes writable to this fd
*/
/* NuttX file system ioctl definitions **************************************/
#define _DIOCVALID(c) (_IOC_TYPE(c)==_DIOCBASE)

Loading…
Cancel
Save