The network console library provides a very simple virtual "serial"
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 be connected to via odroid netcon on your local
terminal, or 9242 odroid netcon if you're working on CSE.
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, so you shouldn't need to change these.
Libnetworkconsole interface
network_console_init
struct network_console *network_console_init()
network_console_init initialises the network console by
setting up the udp socket and returns a handle that must be passed
to other network console functions. Note that this function will fail if called
before the network has been initialised.
network_console_send
int network_console_send(struct network_console *network_console,
char *data, int len);
network_console_send will write len bytes of
data to the UDP port to appear on your local "serial" interface.
This function returns the number of bytes written, which may be less than
len. This occurs if the 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 using odroid netcon in your terminal.
network_console_register_handler
int network_console_register_handler(struct network_console *network_console,
void (*handler)(struct network_console *)network_console, char c));
To receive input from your odroid netcon interface, you must register a
handler function, which will be called by the network console
when data is available. The provided function pointer type
simply takes the inputted character as its only argument. Once registered, your handler
function will be called during an interrupt context (so it should be
reasonably light-weight).
What's really happening here
The network console driver uses a network stack library (picotcp)
to package/unpackage UDP frames, which are sent to/received from the
SosGateway(your machine), to act as a simple serial interface.