Host Protocols Direct Protocol
April 13, 2023 at 2:39 AMSpringCore Direct Protocol
Overview
SpringCore Direct is a versatile protocol that allows the host to control the SpringCore device independently of its operating mode and independently of its communication interface (USB, BLE, …).
For instance, SpringCore Direct is used to load a new firmware in the device, or to control its user interface (LEDs, buzzer) dynamically from any application, directly or through SpringCard Companion’s high level REST or WebSocket API.
SpringCore Direct is
- fast (efficient in terms of speed) and simple to implement (efficient and reliable in terms of code),
- suitable to accommodate virtually any application scheme, with a total layer isolation,
- scalable and able to evolve in the future to support various security methods (authentication, MACing and ciphering),
- optimized for USB yet consistent with existing Bluetooth, Network (TCP / UDP) or Serial-based protocols.
Interfaces, channels, endpoints and characteristics
SpringCore Direct uses a half-duplex command/response communication channel plus an event notification channel. The channels are implemented over the software interfaces of the underlying communication interface.
For Serial, the implementation uses the Serial link to convey the 3 channels. This means that commands/responses and notifications are multiplexed within a full-duplex communication link (RS-TTL, RS-232 or RS-422). Hardware flow control could optionaly be enabled, to accommodate a slow host or an half-duplex communication link (such as RS-485).
For USB, the implementation uses 3 endpoints and is fully defined in USB : SpringCore Direct.
For BLE, the implementation uses 3 characteristics and is fully defined in Bluetooth : SpringCore Direct.
The table below shows the correspondence between the various communication interfaces:
Channel | USB endpoint | BLE characteristic |
---|---|---|
Commands | BulkOut (PC to RDR) | Direct_Command (write only) |
Responses | BulkIn (RDR to PC) | Direct_Response (read, indicate) |
Notifications | InterruptIn | Direct_Events (read, indicate) |
Note
In the next pages, the word endpoint will be used, but it must be understood that it covers a Bluetooth (BLE) GATT characteristic too.