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

Function rt_link_dev_read

components/utilities/rt-link/src/rtlink_dev.c:268–306  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

266}
267
268rt_ssize_t rt_link_dev_read(rt_device_t dev, rt_off_t pos, void *buffer, rt_size_t size)
269{
270 RT_ASSERT(dev != RT_NULL);
271 RT_ASSERT(buffer != RT_NULL);
272 RT_ASSERT(size != 0);
273
274 struct rt_link_device *rtlink = (struct rt_link_device *)dev;
275 struct rtlink_recv_list *node;
276 rt_size_t read_len = 0;
277 rt_size_t unread_len = 0;
278
279 if (dev->rx_indicate == RT_NULL)
280 {
281 /* RT_LINK_RX_BLOCKING, wait service receive data event */
282 rt_link_event_recv(&rtlink->service);
283 }
284
285 if (rt_slist_first(&rtlink->recv_head) != RT_NULL)
286 {
287 node = rt_container_of(rt_slist_next(&rtlink->recv_head), struct rtlink_recv_list, list);
288 unread_len = (node->size) - (node->index);
289 read_len = (size > unread_len) ? unread_len : size;
290 rt_memcpy(buffer, (rt_uint8_t *)node->data + node->index, read_len);
291 node->index += read_len;
292
293 if (node->index >= node->size)
294 {
295 rt_slist_remove(&rtlink->recv_head, &node->list);
296 node->index = 0;
297 rt_free(node->data);
298 rt_free(node);
299 }
300 if (rt_slist_first(&rtlink->recv_head) != RT_NULL)
301 {
302 rt_link_event_send(&rtlink->service);
303 }
304 }
305 return read_len;
306}
307
308rt_ssize_t rt_link_dev_write(rt_device_t dev, rt_off_t pos, const void *buffer, rt_size_t size)
309{

Callers

nothing calls this directly

Calls 7

rt_link_event_recvFunction · 0.85
rt_slist_firstFunction · 0.85
rt_slist_nextFunction · 0.85
rt_memcpyFunction · 0.85
rt_slist_removeFunction · 0.85
rt_freeFunction · 0.85
rt_link_event_sendFunction · 0.85

Tested by

no test coverage detected