Bluetooth Low Energy Generic Attribute Profile
ref BLUETOOTH CORE SPECIFICATION Version 5.1 | Vol 3, Part G
Generic Attribute Profile (GATT)
Example
use gatt::{CharacteristicProperties, Registration, Server};
use gatt::services as srv;
use gatt::characteristics as ch;
#[derive(Debug, Clone, PartialEq, Eq, Hash)]
enum Token {
DeviceName,
BatteryLevelNotify,
}
fn new_registration() -> Registration<Token> {
let mut registration = Registration::new();
registration.add_primary_service(srv::GENERIC_ACCESS);
registration.add_characteristic_with_token(
Token::DeviceName,
ch::DEVICE_NAME,
"abc",
CharacteristicProperties::WRITE,
);
registration.add_characteristic(
ch::APPEARANCE,
0x03c0u16.to_le_bytes().to_vec(),
CharacteristicProperties::READ,
);
registration.add_primary_service(srv::GENERIC_ATTRIBUTE);
registration.add_characteristic(
ch::SERVICE_CHANGED,
"",
CharacteristicProperties::INDICATE,
);
registration.add_primary_service(srv::DEVICE_INFORMATION);
registration.add_characteristic(
ch::MANUFACTURER_NAME_STRING,
"機械",
CharacteristicProperties::READ,
);
registration.add_characteristic(
ch::MODEL_NUMBER_STRING,
"A123",
CharacteristicProperties::READ,
);
registration.add_characteristic(
ch::SERIAL_NUMBER_STRING,
"333-444",
CharacteristicProperties::READ,
);
registration.add_primary_service(srv::BATTERY);
registration.add_characteristic_with_token(
Token::BatteryLevelNotify,
ch::BATTERY_LEVEL,
"",
CharacteristicProperties::NOTIFY,
);
registration
}
#[tokio::main(flavor = "current_thread")]
async fn main() -> anyhow::Result<()> {
use std::io::stdin;
use tokio::task::spawn_blocking;
let server = Server::bind()?;
# Ok(())
}
Supported target
Tested on Linux 5.9 (Arch Linux)
License
Licensed under either of
Contribution
Unless you explicitly state otherwise, any contribution intentionally submitted
for inclusion in the work by you, as defined in the Apache-2.0 license, shall be
dual licensed as above, without any additional terms or conditions.!