The BrainStem is a network of devices that offer rich I/O capabilities and comprehensive interactions. The hardware comes primarily in the form of modules and that can be combined to accomplished I/O specific tasks. These hardware devices all share a common backbone network called the BrainStem Network that uses the I2C bus to exchange and route information around the system. A host or hosts can be employed using a link to then inject information or receive information from this BrainStem network of hardware modules.
The BrainStem Bus is the network backbone of the BrainStem network. For existing BrainStem modules, the bus uses I2C as the hardware transport. The brainstem network is a multiple master I2C fast mode plus network. Traffic on this bus generally follows the specification of the BrainStem protocol. Third party devices can be connected to this network, but it is most common to connect I2C peripherals to the BrainStem Module’s peripheral I2C ports.
Each module in the BrainStem Network has a unique I2C address. When a link is employed, it connects through a specific transport to one of the modules in the BrainStem Network. If the host wants to send information to a module or 3rd-party device in the network, it uses the address to send the information over the link. If the linked module is not the recipient, it acts as the router to relay the information from the link’s transport to the destination module over the BrainStem Network’s I2C bus.
Modules can interact with one another on the BrainStem Network as peers where each can manipulate one-another’s I/O. From the I2C parlance, this means the BrainStem Network has multiple masters.
When a module needs to communicate back to the host (if present), the module can send the information to the router and the router will take care of relaying that information back across the link transport to the host.
Modules are the heart of the BrainStem architecture. Each is a self-contained hardware solution that employs the BrainStem OS and can communicate with other modules over the BrainStem Network. Additionally, all modules have a link transport that enables them to talk with a host computer outside the BrainStem Network. Examples of link transports a module may use are TCP/IP, BlueTooth, USB, or other industry standards. Available BrainStem modules are listed in the BrainStem Products webpage.
The host is typically a larger computer or compute environment. These are most often desktop, mobile, or embedded processors running MacOS, Windows, or Linux operating systems. The protocols and transports are well documented so there is no practical restriction on what the host is running or how it works, it simply must be able to support the industry standard transport link mechanism. Many tools are provided for the above mentioned operating systems to allow control, configuration, and updating of the BrainStem modules across the host’s link to the BrainStem Network.
The Reflex programming language is a C-like language that runs on BrainStem controllers. Its simple interface allows a user to quickly implement application specific functionality on a BrainStem module to provide process control, data acquisition, filtering, and other custom behavior on the hardware. Reflex provides a flexible event driven architecture of embedded code, and was born out of the hierarchical control model used in many robotic systems. Reflexes running on BrainStem are ideally suited to reactive first line behaviors just above the metal. Further information about the reflex Language can be found within in the Reflex Language section.
An Entity provides a way to interact with a type of Hardware I/O within a BrainStem module. Entities include Digital inputs and outputs, analog inputs and outputs, I2C bus’, Serial UARTS, system components, and other specialized hardware classes. Entities are the fundamental building blocks of interaction between BrainStem ‘clients’ and the hardware that BrainStems interact with. See the reference section on Entities for more in-depth discussion.
The BrainStem API provides a mechanism for discovering the devices that are currently connected to the Host computer. This is part of the C API on the C/C++ library, and part of the discovery module within the Python package. The Discovery API provides methods to find connection details for a specific module, as well as methods to list all connected modules. The Discovery methods return Spec objects which represent the required connection details for the device, as well as the Device’s model number. The list of model numbers is provided on the C API page and the Python API page.