The design for the Z-wave code has an interface that communicates with the DCE router (Zwave.cpp), and inserts Zwave jobs into a queue. This queue is read by the low-level Z-wave interface PlutoZWSerialApi(.h,.cpp), which handles the low-level communication with the Zwave transciever.
Asynchronous mode creates threads that run this process asynchronously, with the DCE interface adding jobs to the queue and the Z-wave interface removing them as quickly as it can. The threads are synchronized via mutexs in order to keep things in line.
Synchronous mode has the DCE interface send commands directly to the Z-wave interface.
SerialConnection.* is a layer over the serial communication which takes care about the general protocol specification like communication parameters, the start of every message, the checksum algorithm etc.
The Zwave computer interface is a bi-directional serial device, so when it receives notifications from other devices, it can pass them on to the PC.