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

This commit is contained in:
px4dev 2013-01-03 00:33:22 -08:00 committed by Andrew Tridgell
parent 8ffba22771
commit 3916230d8f
2 changed files with 25 additions and 0 deletions

View File

@ -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:
{

View File

@ -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)