*/
int mraa_uart_write(mraa_uart_context dev, char *buf, size_t len);
+/**
+ * Check to see if data is available on the device for reading
+ *
+ * @param dev uart context
+ * @param millis number of milliseconds to wait, or 0 to return immediately
+ * @return 1 if there is data available to read, 0 otherwise
+ */
+mraa_boolean_t
+mraa_uart_data_available(mraa_uart_context dev, unsigned int millis);
#ifdef __cplusplus
}
return mraa_uart_write(m_uart, buf, len);
}
+ /**
+ * Check to see if data is available on the device for reading
+ *
+ * @param millis number of milliseconds to wait, or 0 to return immediately
+ * @return true if there is data available to read, false otherwise
+ */
+ bool
+ dataAvailable(unsigned int millis=0)
+ {
+ if (mraa_uart_data_available(m_uart, millis))
+ return true;
+ else
+ return false;
+ }
+
private:
mraa_uart_context m_uart;
};
return write(dev->fd, buf, len);
}
+
+mraa_boolean_t
+mraa_uart_data_available(mraa_uart_context dev, unsigned int millis)
+{
+ if (!dev) {
+ syslog(LOG_ERR, "uart: data_available: write context is NULL");
+ return 0;
+ }
+
+ if (dev->fd < 0) {
+ syslog(LOG_ERR, "uart: port is not open");
+ return 0;
+ }
+
+ struct timeval timeout;
+
+ if (millis == 0) {
+ // no waiting
+ timeout.tv_sec = 0;
+ timeout.tv_usec = 0;
+ }
+ else {
+ timeout.tv_sec = millis / 1000;
+ timeout.tv_usec = (millis % 1000) * 1000;
+ }
+
+ fd_set readfds;
+
+ FD_ZERO(&readfds);
+ FD_SET(dev->fd, &readfds);
+
+ if (select(dev->fd + 1, &readfds, NULL, NULL, &timeout) > 0)
+ return 1; // data is ready
+ else
+ return 0;
+}