Design goals ============ The IOCOM library connects IO devices to control computer in a heterogeneous network environment. The same library code run on computers and micro controllers. * Connect distributed IO devices to controller * Make it simple, reliable and fast. * Open source, free to use also as part of commercial code. * No compromises. Only one simple way to the specific job. * Reference implementation and documented protocol to connect the devices. * Code can be ported to any system with standard C compiler and sufficient resources. * Data is seen as memory blocks. Memory blocks are plain byte arrays. * Memory blocks are transferred to one direction only. * Application never locks up. If communication doesn’t keep up with changes by application, frames are dropped. * Preserve order of changes and data transfer synchronization, so that application will know that whole memory block is up to date. * Low small transaction latency. Typical goal is around 1 milliseconds, depending on hardware. * High through output in bigger transactions. * Large address space size. Typically 32k bytes for 8/16 bit micro-controllers and 2GB for 32/64 bit systems. Practical maximum memory block size is set by available system memory. * Point to point connection over TCP socket or full duplex serial communication. * Low overhead. Small message headers, transfer only changes, compress transferred data. * Secure TLS connections and device identification when needed. * RTOS multi-threading support, when needed. 180812, updated 20.5.2020/pekka