This example allows you to connect your debug terminal to some other serial-connected device on the system. You can then type AT commands at the terminal and get responses back for the serially connected device. Should work with something like an ESP8266 or similar connected in to the Arduino header.

Committer:
AnnaBridge
Date:
Fri Nov 10 16:08:43 2017 +0000
Revision:
0:0f1c0f6579ab
UARTSerial example 3

Who changed what in which revision?

UserRevisionLine numberNew contents of line
AnnaBridge 0:0f1c0f6579ab 1 #include "mbed.h"
AnnaBridge 0:0f1c0f6579ab 2
AnnaBridge 0:0f1c0f6579ab 3 UARTSerial pc(USBTX, USBRX);
AnnaBridge 0:0f1c0f6579ab 4 UARTSerial device(MBED_CONF_APP_UART1_TX, MBED_CONF_APP_UART1_RX);
AnnaBridge 0:0f1c0f6579ab 5
AnnaBridge 0:0f1c0f6579ab 6 static void copy_some(FileHandle *out, FileHandle *in) {
AnnaBridge 0:0f1c0f6579ab 7 // To ensure performance, allow to read multiple bytes at once, although
AnnaBridge 0:0f1c0f6579ab 8 // we don't expect to read many in practice.
AnnaBridge 0:0f1c0f6579ab 9
AnnaBridge 0:0f1c0f6579ab 10 // read() will return immediately, as we've already
AnnaBridge 0:0f1c0f6579ab 11 // checked that `in` is ready with poll()
AnnaBridge 0:0f1c0f6579ab 12 char buffer[32];
AnnaBridge 0:0f1c0f6579ab 13 ssize_t read = in->read(buffer, sizeof buffer);
AnnaBridge 0:0f1c0f6579ab 14 if (read <= 0) {
AnnaBridge 0:0f1c0f6579ab 15 error("Input error");
AnnaBridge 0:0f1c0f6579ab 16 }
AnnaBridge 0:0f1c0f6579ab 17
AnnaBridge 0:0f1c0f6579ab 18 // Then write them all out. Assuming output port is similar speed to input,
AnnaBridge 0:0f1c0f6579ab 19 // this may block briefly, but not significantly.
AnnaBridge 0:0f1c0f6579ab 20 ssize_t written = 0;
AnnaBridge 0:0f1c0f6579ab 21 while (written < read) {
AnnaBridge 0:0f1c0f6579ab 22 ssize_t w = out->write(buffer + written, read - written);
AnnaBridge 0:0f1c0f6579ab 23 if (w <= 0) {
AnnaBridge 0:0f1c0f6579ab 24 error("Output error");
AnnaBridge 0:0f1c0f6579ab 25 }
AnnaBridge 0:0f1c0f6579ab 26 written += w;
AnnaBridge 0:0f1c0f6579ab 27 }
AnnaBridge 0:0f1c0f6579ab 28 }
AnnaBridge 0:0f1c0f6579ab 29
AnnaBridge 0:0f1c0f6579ab 30 int main() {
AnnaBridge 0:0f1c0f6579ab 31 char buffer[32];
AnnaBridge 0:0f1c0f6579ab 32 pollfh fds[2];
AnnaBridge 0:0f1c0f6579ab 33
AnnaBridge 0:0f1c0f6579ab 34 fds[0].fh = &pc;
AnnaBridge 0:0f1c0f6579ab 35 fds[0].events = POLLIN;
AnnaBridge 0:0f1c0f6579ab 36 fds[1].fh = &device;
AnnaBridge 0:0f1c0f6579ab 37 fds[1].events = POLLIN;
AnnaBridge 0:0f1c0f6579ab 38
AnnaBridge 0:0f1c0f6579ab 39 while (1) {
AnnaBridge 0:0f1c0f6579ab 40 // Block until either of the 2 ports is readable (or has an error)
AnnaBridge 0:0f1c0f6579ab 41 poll(fds, 2, -1);
AnnaBridge 0:0f1c0f6579ab 42
AnnaBridge 0:0f1c0f6579ab 43 if (fds[0].revents) {
AnnaBridge 0:0f1c0f6579ab 44 copy_some(fds[1].fh, fds[0].fh);
AnnaBridge 0:0f1c0f6579ab 45 }
AnnaBridge 0:0f1c0f6579ab 46 if (fds[1].revents) {
AnnaBridge 0:0f1c0f6579ab 47 copy_some(fds[0].fh, fds[1].fh);
AnnaBridge 0:0f1c0f6579ab 48 }
AnnaBridge 0:0f1c0f6579ab 49 }
AnnaBridge 0:0f1c0f6579ab 50 }