Figure 1: Craniux system framework. The Craniux system is comprised of the acquisition, signal processing, and application engines, their associated GUIs, the system launcher, and the data saving manager. Engines and user interface elements are spread across four network hosts: the acquisition host, the signal processing host, the application host, and the user interface host, though the same computer may serve as multiple hosts. Network communication between system engines, as well as communication between engines and GUIs, is performed using the TCP/IP protocol. A block of neural data enters the system through the ACquisition engine, which sends preprocessed data to the Signal processing engine. The signal processing engine generates a control signal, which is then sent to the application engine. The application engine then communicates any relevant application-specific data (e.g., target information used for neural decoder training) back to the acquisition engine, which reads the next block of neural data. Bidirectional data transfer occurs between engine-specific GUIs and their associated engines, with system parameters transferred from the GUI to the engine and visualization data transferred from the engine to the GUI. Finally, the system launcher is responsible for loading the desired engines, tracking general experimental parameters, and experimental control.