SpringCore Direct Protocol
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, and an event notification channel. The channels are implemented over the software interfaces of the underlying communication interface.
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||Bulk_Out (PC to RDR)||Direct_Command (write only)|
|Responses||Bulk_In (RDR to PC)||Direct_Response (read, indicate)|
|Notifications||Interrupt_In||Direct_Events (read, indicate)|
In the next pages, the word endpoint will be used, but it must be understood that it covers a Bluetooth (BLE) GATT characteristic too.