MCPcopy Create free account
hub / github.com/RT-Thread/rt-thread / serial_fops_poll

Function serial_fops_poll

components/drivers/serial/dev_serial_v2.c:226–256  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

224}
225
226static int serial_fops_poll(struct dfs_file *fd, struct rt_pollreq *req)
227{
228 int mask = 0;
229 int flags = 0;
230 rt_device_t device;
231 struct rt_serial_device *serial;
232
233 device = (rt_device_t)fd->vnode->data;
234 RT_ASSERT(device != RT_NULL);
235
236 serial = (struct rt_serial_device *)device;
237
238 /* only support POLLIN */
239 flags = fd->flags & O_ACCMODE;
240 if (flags == O_RDONLY || flags == O_RDWR)
241 {
242 rt_base_t level;
243 struct rt_serial_rx_fifo *rx_fifo;
244
245 rt_poll_add(&device->wait_queue, req);
246
247 rx_fifo = (struct rt_serial_rx_fifo *)serial->serial_rx;
248
249 level = RT_SERIAL_FIFO_LOCK(&serial->spinlock);
250 if (rt_ringbuffer_data_len(&rx_fifo->rb))
251 mask |= POLLIN;
252 RT_SERIAL_FIFO_UNLOCK(&serial->spinlock, level);
253 }
254 /* mask|=POLLOUT; */
255 return mask;
256}
257
258const static struct dfs_file_ops _serial_fops =
259 {

Callers

nothing calls this directly

Calls 2

rt_poll_addFunction · 0.85
rt_ringbuffer_data_lenFunction · 0.85

Tested by

no test coverage detected