Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Impl std::error::Error for BLEError #124

Merged
merged 3 commits into from
Apr 30, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
3 changes: 2 additions & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -42,8 +42,9 @@ once_cell = { version = "1.19.0", default-features = false }
uuid = { version = "1", default-features = false, features = ["macro-diagnostics"] }

[dev-dependencies]
anyhow = "1"
esp-idf-sys = { version = "0.34", default-features = false, features = ["binstart", "alloc_handler"] }

[build-dependencies]
anyhow = "1"
embuild = "0.31.0"
anyhow = "1.0.58"
18 changes: 6 additions & 12 deletions examples/ble5_multi_advertiser.rs
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ use esp32_nimble::{

const SERVICE_UUID: BleUuid = BleUuid::Uuid16(0xABCD);

fn main() {
fn main() -> anyhow::Result<()> {
esp_idf_sys::link_patches();
esp_idf_svc::log::EspLogger::initialize_default();

Expand Down Expand Up @@ -47,18 +47,12 @@ fn main() {

{
let mut advertising = ble_device.get_advertising().lock();
advertising
.set_instance_data(0, &mut ext_scannable)
.unwrap();
advertising
.set_instance_data(1, &mut legacy_connectable)
.unwrap();
advertising
.set_scan_response_data(1, &mut legacy_scan_response)
.unwrap();
advertising.set_instance_data(0, &mut ext_scannable)?;
advertising.set_instance_data(1, &mut legacy_connectable)?;
advertising.set_scan_response_data(1, &mut legacy_scan_response)?;

advertising.start(0).unwrap();
advertising.start(1).unwrap();
advertising.start(0)?;
advertising.start(1)?;
}

loop {
Expand Down
36 changes: 18 additions & 18 deletions examples/ble_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,12 +5,12 @@ use esp_idf_hal::task::block_on;
use esp_idf_hal::timer::{TimerConfig, TimerDriver};
use esp_idf_sys as _;

fn main() {
fn main() -> anyhow::Result<()> {
esp_idf_sys::link_patches();
esp_idf_svc::log::EspLogger::initialize_default();

let peripherals = Peripherals::take().unwrap();
let mut timer = TimerDriver::new(peripherals.timer00, &TimerConfig::new()).unwrap();
let peripherals = Peripherals::take()?;
let mut timer = TimerDriver::new(peripherals.timer00, &TimerConfig::new())?;

block_on(async {
let ble_device = BLEDevice::take();
Expand All @@ -20,35 +20,34 @@ fn main() {
.interval(100)
.window(99)
.find_device(10000, |device| device.name().contains_str("ESP32"))
.await
.unwrap();
.await?;

if let Some(device) = device {
let mut client = BLEClient::new();
client.on_connect(|client| {
client.update_conn_params(120, 120, 0, 60).unwrap();
});
client.connect(device.addr()).await.unwrap();
client.connect(device.addr()).await?;

let service = client
.get_service(uuid128!("fafafafa-fafa-fafa-fafa-fafafafafafa"))
.await
.unwrap();
.await?;

let uuid = uuid128!("d4e0e0d0-1a2b-11e9-ab14-d663bd873d93");
let characteristic = service.get_characteristic(uuid).await.unwrap();
let value = characteristic.read_value().await.unwrap();
let characteristic = service.get_characteristic(uuid).await?;
let value = characteristic.read_value().await?;
::log::info!(
"{} value: {}",
characteristic,
core::str::from_utf8(&value).unwrap()
core::str::from_utf8(&value)?
);

let uuid = uuid128!("a3c87500-8ed3-4bdf-8a39-a01bebede295");
let characteristic = service.get_characteristic(uuid).await.unwrap();
let characteristic = service.get_characteristic(uuid).await?;

if !characteristic.can_notify() {
return ::log::error!("characteristic can't notify: {}", characteristic);
::log::error!("characteristic can't notify: {}", characteristic);
return anyhow::Ok(());
}

::log::info!("subscribe to {}", characteristic);
Expand All @@ -57,12 +56,13 @@ fn main() {
::log::info!("{}", core::str::from_utf8(data).unwrap());
})
.subscribe_notify(false)
.await
.unwrap();
.await?;

timer.delay(timer.tick_hz() * 10).await.unwrap();
timer.delay(timer.tick_hz() * 10).await?;

client.disconnect().unwrap();
client.disconnect()?;
}
});

return anyhow::Ok(());
})
}
28 changes: 12 additions & 16 deletions examples/ble_keyboard.rs
Original file line number Diff line number Diff line change
Expand Up @@ -224,7 +224,7 @@ struct Keyboard {
}

impl Keyboard {
fn new() -> Self {
fn new() -> anyhow::Result<Self> {
let device = BLEDevice::take();
device
.security()
Expand All @@ -248,19 +248,15 @@ impl Keyboard {
hid.set_battery_level(100);

let ble_advertising = device.get_advertising();
ble_advertising
.lock()
.scan_response(false)
.set_data(
BLEAdvertisementData::new()
.name("ESP32 Keyboard")
.appearance(0x03C1)
.add_service_uuid(hid.hid_service().lock().uuid()),
)
.unwrap();
ble_advertising.lock().start().unwrap();
ble_advertising.lock().scan_response(false).set_data(
BLEAdvertisementData::new()
.name("ESP32 Keyboard")
.appearance(0x03C1)
.add_service_uuid(hid.hid_service().lock().uuid()),
)?;
ble_advertising.lock().start()?;

Self {
Ok(Self {
server,
input_keyboard,
output_keyboard,
Expand All @@ -270,7 +266,7 @@ impl Keyboard {
reserved: 0,
keys: [0; 6],
},
}
})
}

fn connected(&self) -> bool {
Expand Down Expand Up @@ -306,11 +302,11 @@ impl Keyboard {
}
}

fn main() {
fn main() -> anyhow::Result<()> {
esp_idf_sys::link_patches();
esp_idf_svc::log::EspLogger::initialize_default();

let mut keyboard = Keyboard::new();
let mut keyboard = Keyboard::new()?;

loop {
if keyboard.connected() {
Expand Down
8 changes: 5 additions & 3 deletions examples/ble_scan.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use esp_idf_hal::task::block_on;
use esp_idf_sys as _;
use log::*;

fn main() {
fn main() -> anyhow::Result<()> {
// Temporary. Will disappear once ESP-IDF 4.4 is released, but for now it is necessary to call this function once,
// or else some patches to the runtime implemented by esp-idf-sys might not link properly.
esp_idf_sys::link_patches();
Expand All @@ -22,7 +22,9 @@ fn main() {
.on_result(|_scan, param| {
info!("Advertised Device: {:?}", param);
});
ble_scan.start(5000).await.unwrap();
ble_scan.start(5000).await?;
info!("Scan end");
});

Ok(())
})
}
41 changes: 17 additions & 24 deletions examples/ble_secure_client.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,13 @@ use log::*;

const SERVICE_UUID: BleUuid = BleUuid::Uuid16(0xABCD);

fn main() {
fn main() -> anyhow::Result<()> {
esp_idf_sys::link_patches();
esp_idf_svc::log::EspLogger::initialize_default();

block_on(async {
let device = BLEDevice::take();
device
.set_power(PowerType::Default, PowerLevel::P9)
.unwrap();
device.set_power(PowerType::Default, PowerLevel::P9)?;
device
.security()
.set_auth(AuthReq::all())
Expand All @@ -28,45 +26,40 @@ fn main() {
.find_device(10000, move |device| {
device.is_advertising_service(&SERVICE_UUID)
})
.await
.unwrap();
.await?;

let Some(device) = device else {
::log::warn!("device not found");
return;
return anyhow::Ok(());
};

info!("Advertised Device: {:?}", device);

let mut client = BLEClient::new();
client.connect(device.addr()).await.unwrap();
client.connect(device.addr()).await?;
client.on_passkey_request(|| 123456);
client.secure_connection().await.unwrap();
client.secure_connection().await?;

let service = client.get_service(SERVICE_UUID).await.unwrap();
let service = client.get_service(SERVICE_UUID).await?;

let non_secure_characteristic = service
.get_characteristic(BleUuid::Uuid16(0x1234))
.await
.unwrap();
let value = non_secure_characteristic.read_value().await.unwrap();
let non_secure_characteristic = service.get_characteristic(BleUuid::Uuid16(0x1234)).await?;
let value = non_secure_characteristic.read_value().await?;
::log::info!(
"{:?} value: {}",
non_secure_characteristic.uuid(),
core::str::from_utf8(&value).unwrap()
core::str::from_utf8(&value)?
);

let secure_characteristic = service
.get_characteristic(BleUuid::Uuid16(0x1235))
.await
.unwrap();
let value = secure_characteristic.read_value().await.unwrap();
let secure_characteristic = service.get_characteristic(BleUuid::Uuid16(0x1235)).await?;
let value = secure_characteristic.read_value().await?;
::log::info!(
"{:?} value: {}",
secure_characteristic.uuid(),
core::str::from_utf8(&value).unwrap()
core::str::from_utf8(&value)?
);

client.disconnect().unwrap();
});
client.disconnect()?;

anyhow::Ok(())
})
}
19 changes: 8 additions & 11 deletions examples/ble_secure_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ use esp32_nimble::{
};
use esp_idf_sys as _;

fn main() {
fn main() -> anyhow::Result<()> {
esp_idf_sys::link_patches();
esp_idf_svc::log::EspLogger::initialize_default();

Expand Down Expand Up @@ -56,17 +56,14 @@ fn main() {
ble_advertising.lock().on_complete(|_| {
ble_advertising.lock().start().unwrap();
});
ble_advertising
.lock()
.set_data(
BLEAdvertisementData::new()
.name("ESP32-GATT-Server")
.add_service_uuid(BleUuid::Uuid16(0xABCD)),
)
.unwrap();
ble_advertising.lock().start().unwrap();
ble_advertising.lock().set_data(
BLEAdvertisementData::new()
.name("ESP32-GATT-Server")
.add_service_uuid(BleUuid::Uuid16(0xABCD)),
)?;
ble_advertising.lock().start()?;

::log::info!("bonded_addresses: {:?}", device.bonded_addresses().unwrap());
::log::info!("bonded_addresses: {:?}", device.bonded_addresses());

loop {
esp_idf_hal::delay::FreeRtos::delay_ms(1000);
Expand Down
17 changes: 7 additions & 10 deletions examples/ble_server.rs
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ use esp32_nimble::{uuid128, BLEAdvertisementData, BLEDevice, NimbleProperties};
use esp_idf_sys as _;
use std::format;

fn main() {
fn main() -> anyhow::Result<()> {
esp_idf_sys::link_patches();
esp_idf_svc::log::EspLogger::initialize_default();

Expand Down Expand Up @@ -63,15 +63,12 @@ fn main() {
);
});

ble_advertising
.lock()
.set_data(
BLEAdvertisementData::new()
.name("ESP32-GATT-Server")
.add_service_uuid(uuid128!("fafafafa-fafa-fafa-fafa-fafafafafafa")),
)
.unwrap();
ble_advertising.lock().start().unwrap();
ble_advertising.lock().set_data(
BLEAdvertisementData::new()
.name("ESP32-GATT-Server")
.add_service_uuid(uuid128!("fafafafa-fafa-fafa-fafa-fafafafafafa")),
)?;
ble_advertising.lock().start()?;

server.ble_gatts_show_local();

Expand Down
Loading