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

Function _serial_poll_rx

components/drivers/serial/dev_serial_v2.c:378–414  ·  view source on GitHub ↗

* @brief Serial polling receive data routine, This function will receive data * in a continuous loop by one by one byte. * @param dev The pointer of device driver structure * @param pos Empty parameter. * @param buffer Receive data buffer. * @param size Receive data buffer length. * @return Return the final length of data received. */

Source from the content-addressed store, hash-verified

376 * @return Return the final length of data received.
377 */
378rt_ssize_t _serial_poll_rx(struct rt_device *dev,
379 rt_off_t pos,
380 void *buffer,
381 rt_size_t size)
382{
383 struct rt_serial_device *serial;
384 rt_size_t getc_size;
385 int getc_element; /* Gets one byte of data received */
386 rt_uint8_t *getc_buffer; /* Pointer to the receive data buffer */
387
388 RT_ASSERT(dev != RT_NULL && buffer != RT_NULL);
389 if (size == 0) return 0;
390
391 serial = (struct rt_serial_device *)dev;
392 getc_buffer = (rt_uint8_t *)buffer;
393 getc_size = size;
394
395 while (size)
396 {
397 getc_element = serial->ops->getc(serial);
398 if (getc_element < 0) break;
399
400 *getc_buffer = getc_element;
401
402 ++getc_buffer;
403 --size;
404
405 if (serial->parent.open_flag & RT_DEVICE_FLAG_STREAM)
406 {
407 /* If open_flag satisfies RT_DEVICE_FLAG_STREAM
408 * and the received character is '\n', exit the loop directly */
409 if (getc_element == '\n') break;
410 }
411 }
412
413 return getc_size - size;
414}
415
416/**
417 * @brief Serial polling transmit data routines, This function will transmit

Callers 1

rt_serial_readFunction · 0.70

Calls

no outgoing calls

Tested by

no test coverage detected