0x1815 · hostsInfo
Rich multi-host management for Bolt/BLE/eQuad devices — enumerate host slots, query pairing status and bus type, and read raw transport descriptors.
Multi-host management for Bolt / BLE / eQuad devices that can pair to several
host computers simultaneously. getFeatureInfo (function 0) returns the total
host-slot count, the currently active slot, and two capability bitmasks.
getHostInfo (function 1) queries the pairing status, bus type, and
friendly-name metadata for any individual slot. getHostDescriptor (function 2)
reads a single raw descriptor page for the slot's transport connection.
HostIndex—Current(device-selected, wire value0xFF) orSlot(n)(zero-based).HostSlotStatus—EmptyorPaired.HostBusType—Equad,Usb,Bt,Ble,BlePro(Logi Bolt), orUndefined.HostsInfoCapabilities— bitflags advertisingGET_NAME,SET_NAME,MOVE_HOST,DELETE_HOST,SET_OS_VERSIONsupport on this device.HostDescriptorCapabilities— bitflags for the supported descriptor families:EQUAD,USB,BT,BLE.
Spec: Logitech HID++ 2.0 — hostsInfo. Used by: Typed wrapper in
openlogi-hidpp.
Function reference
The HostsInfoFeature wrapper (0x1815) exposes:
Methods
| Function | HID++ fn | Signature | Returns |
|---|---|---|---|
get_feature_info | 0 | () | HostsInfoFeatureInfo |
get_host_info | 1 | (host: HostIndex) | HostInfo |
get_host_descriptor | 2 | (host: HostIndex, page: u8) | HostDescriptorPage |
All methods are async and return Result<…, Hidpp20Error>.
Types
HostsInfoFeatureInfo
Static information about the HostsInfo feature.
| Field | Type | Description |
|---|---|---|
capabilities | HostsInfoCapabilities | Host-management capabilities. |
descriptor_capabilities | HostDescriptorCapabilities | Host descriptor capabilities. |
host_count | u8 | Number of host slots. |
current_host | HostIndex | Current host slot index. |
HostInfo
Information about one host slot.
| Field | Type | Description |
|---|---|---|
host_index | HostIndex | Host slot index returned by the device. |
status | HostSlotStatus | Pairing status. |
bus_type | HostBusType | Bus type used by this host slot. |
page_count | u8 | Number of descriptor pages. |
name_len | u8 | Current friendly-name length. |
name_max_len | u8 | Maximum friendly-name length. |
HostDescriptorPage
Raw host descriptor page.
| Field | Type | Description |
|---|---|---|
host_index | HostIndex | Host slot index returned by the device. |
bus_type | HostBusType | Descriptor bus type, decoded from the page header when known. |
page_index | u8 | Descriptor page index, decoded from the page header. |
body | [u8; 14] | Raw descriptor body bytes. |
HostIndex
A host slot selector.
| Variant | Value | Description |
|---|---|---|
Current | 0xFF | The host slot currently selected by the device. |
Slot(u8) | 0–254 | A zero-based host slot index. |
HostSlotStatus
Pairing status for a host slot.
| Variant | Value | Description |
|---|---|---|
Empty | 0 | The host slot is empty. |
Paired | 1 | The host slot is paired. |
HostBusType
Bus type associated with a host slot.
| Variant | Value | Description |
|---|---|---|
Undefined | 0 | Undefined or unknown bus type. |
Equad | 1 | eQuad wireless. |
Usb | 2 | USB. |
Bt | 3 | Bluetooth classic. |
Ble | 4 | Bluetooth Low Energy. |
BlePro | 5 | BLE Pro / Logi Bolt. |
HostsInfoCapabilities
Host-management capabilities.
| Flag | Bit/Value | Description |
|---|---|---|
GET_NAME | 1 << 0 | Host names can be read. |
SET_NAME | 1 << 1 | Host names can be written. |
MOVE_HOST | 1 << 2 | Host slots can be moved. |
DELETE_HOST | 1 << 3 | Host slots can be deleted. |
SET_OS_VERSION | 1 << 4 | Host OS versions can be written. |
HostDescriptorCapabilities
Supported host descriptor families.
| Flag | Bit/Value | Description |
|---|---|---|
EQUAD | 1 << 0 | eQuad host descriptors are available. |
USB | 1 << 1 | USB host descriptors are available. |
BT | 1 << 2 | Bluetooth classic host descriptors are available. |
BLE | 1 << 3 | Bluetooth Low Energy host descriptors are available. |
Wire format
All three functions use a 3-byte request payload and return a 16-byte long response payload (accessed via extend_payload()).
get_feature_info (fn 0)
Request: [0x00, 0x00, 0x00] (no parameters)
Response (byte → field):
| Byte | Field | Notes |
|---|---|---|
| 0 | capabilities | HostsInfoCapabilities bitflags (GET_NAME=bit 0, SET_NAME=bit 1, MOVE_HOST=bit 2, DELETE_HOST=bit 3, SET_OS_VERSION=bit 4) |
| 1 | descriptor_capabilities | HostDescriptorCapabilities bitflags (EQUAD=bit 0, USB=bit 1, BT=bit 2, BLE=bit 3) |
| 2 | host_count | Total number of host slots |
| 3 | current_host | 0xFF → HostIndex::Current; any other value → HostIndex::Slot(n) |
get_host_info (fn 1)
Request: [host, 0x00, 0x00] — byte 0 = HostIndex as u8 (0xFF for Current, slot index otherwise)
Response (byte → field):
| Byte | Field | Notes |
|---|---|---|
| 0 | host_index | Echo of the addressed slot (0xFF → HostIndex::Current) |
| 1 | status | HostSlotStatus — 0 = Empty, 1 = Paired |
| 2 | bus_type | HostBusType — 0=Undefined, 1=Equad, 2=Usb, 3=Bt, 4=Ble, 5=BlePro |
| 3 | page_count | Number of descriptor pages |
| 4 | name_len | Current friendly-name length in bytes |
| 5 | name_max_len | Maximum friendly-name length in bytes |
get_host_descriptor (fn 2)
Request: [host, page, 0x00] — byte 0 = HostIndex as u8, byte 1 = descriptor page index
Response (byte → field):
| Byte | Field | Notes |
|---|---|---|
| 0 | host_index | Echo of the addressed slot |
| 1 | page header | Bits 7–4 (>> 4) = bus_type (HostBusType); bits 3–0 (& 0x0F) = page_index |
| 2–15 | body | 14 raw descriptor bytes (payload[2..16]) |
Usage (Rust)
use hidpp::{device::Device, feature::hosts_info::{HostsInfoFeature, HostIndex}};
// mut device: Device, already created via Device::new(channel, index)
device.enumerate_features().await?;
if let Some(feat) = device.get_feature::<HostsInfoFeature>() {
let info = feat.get_feature_info().await?;
println!("slots: {}, current: {:?}", info.host_count, info.current_host);
for slot in 0..info.host_count {
let host = feat.get_host_info(HostIndex::Slot(slot)).await?;
println!("slot {slot}: {:?} via {:?}", host.status, host.bus_type);
for page in 0..host.page_count {
let desc = feat.get_host_descriptor(HostIndex::Slot(slot), page).await?;
println!(" page {}: bus={:?} body={:?}", desc.page_index, desc.bus_type, desc.body);
}
}
}