Răsfoiți Sursa

device/pipe: add a control cmd to get the space left in pipe

Grissiom 11 ani în urmă
părinte
comite
0feefc03b6
2 a modificat fișierele cu 4 adăugiri și 0 ștergeri
  1. 2 0
      components/drivers/include/rtdevice.h
  2. 2 0
      components/drivers/src/pipe.c

+ 2 - 0
components/drivers/include/rtdevice.h

@@ -114,6 +114,8 @@ struct rt_pipe_device
     struct rt_portal_device *read_portal;
 };
 
+#define PIPE_CTRL_GET_SPACE          0x14            /**< get the remaining size of a pipe device */
+
 #define RT_DATAQUEUE_EVENT_UNKNOWN   0x00
 #define RT_DATAQUEUE_EVENT_POP       0x01
 #define RT_DATAQUEUE_EVENT_PUSH      0x02

+ 2 - 0
components/drivers/src/pipe.c

@@ -190,6 +190,8 @@ static rt_size_t rt_pipe_write(rt_device_t dev,
 
 static rt_err_t rt_pipe_control(rt_device_t dev, rt_uint8_t cmd, void *args)
 {
+    if (cmd == PIPE_CTRL_GET_SPACE && args)
+        *(rt_size_t*)args = rt_ringbuffer_space_len(&PIPE_DEVICE(dev)->ringbuffer);
     return RT_EOK;
 }