Serial Library

The serial library provides a very simple virtual device driver that uses UDP/IP to send data, without error correction or packet loss detection, to a UDP port on the AOS ODroid-C2 cluster server. The port is different for each odroid connected to the server and can only be connected to via 9242 odroid serial in a CSE terminal.

IP addresses

The IP addresses used by SOS are configured using cmake, and referred to as SosIP and SosGateway. See the framework documentation for configuring variables with CMake. However, both IP addresses have been set by default to the IPs expected by U-Boot on the odroid-c2.

Libserial interface

serial_init

struct serial * serial_init()

serial_init initialises the state of the serial driver and returns a handle that must be passed to other serial functions.

serial_send

int serial_send(struct serial *serial, char *data, int len);

serial_send will write len bytes of data to the UDP port for your serial connection. This function returns the number of bytes written, which may be less than len. This occurs if the serial driver's internal buffer fills faster than it can actually output data. In this case it is up to the calling code to handle the situation, either by retrying or returning an error to the user.

You can see this output by running netcat: 9242 odroid serial in a CSE terminal window.

serial_register_handler

int serial_register_handler(struct serial *serial, void (*handler)((struct serial *) serial, char c));

To receive input from the netcat terminal you must register a handler function, which will be called by the serial driver when the network makes data available. The provided function simply takes the inputted character as its only argument. This function will be called during an interrupt context so it should be reasonably light-weight.

What's really happening here

Due to historical reasons we call this driver a serial driver, even though it has nothing to do with serial ports anymore. In reality it is a virtual serial driver over ethernet, using UDP. The serial_send() function, in the driver, takes a block of data, and uses the picotcp library to package the message up into UDP frames, which are sent to the SosGateway (your machine).