Blurz Rust Library на Bluetooth соединении Raspberry PI 4 с указанным c устройством - PullRequest
0 голосов
/ 16 января 2020

Я делаю проект на Raspberry Pi 4 модель B на основе Rust, используя Blurz Rust Library .

Так вот мой код:

let sessionBLE = BluetoothSession::create_session(Option::None).unwrap();
let adapter: BluetoothAdapter = BluetoothAdapter::init(&sessionBLE).unwrap();

let discoverySessionBLE : BluetoothDiscoverySession = BluetoothDiscoverySession::create_session(&sessionBLE, adapter.get_id()).unwrap();


println!("IS DISCOVERABLE {}", adapter.is_discoverable().unwrap());
println!("IS POWERED {}", adapter.is_powered().unwrap());
println!("IS DISCOVERING {}", adapter.is_discovering().unwrap());

adapter.set_discoverable(true);

println!("start discovery");
discoverySessionBLE.start_discovery().unwrap();


thread::sleep(Duration::from_secs(2));
println!("<------------------------------------------>");
println!("IS DISCOVERABLE {}", adapter.is_discoverable().unwrap());
println!("IS POWERED {}", adapter.is_powered().unwrap());
println!("IS DISCOVERING {}", adapter.is_discovering().unwrap());
println!("device list number (count) {}", adapter.get_device_list().unwrap().len());
println!("device list {:?}", adapter.get_device_list().unwrap());


let devices = adapter.get_device_list().unwrap();

println!("Test array.: {}", adapter.get_device_list().unwrap()[1]);
let uuid = adapter.get_uuids().unwrap()[1].to_string();

println!("Connecting..");
let deviceBle : BluetoothDevice = adapter.get_first_device().unwrap();

deviceBle.connect(10000);
thread::sleep(Duration::from_secs(2));
println!("device BluetoothDevice {}", deviceBle.get_address().unwrap());
println!("device RSSI {}", deviceBle.get_rssi().unwrap());
println!("device CONNECETED {}", deviceBle.is_connected().unwrap());
println!("device GATT {:?}", deviceBle.get_gatt_services().unwrap());

Все работает, но есть проблема, поэтому я не понимаю, как подключиться к указанному устройству c. Это список, найденный после сканирования:

["/org/bluez/hci0/dev_D4_CA_6E_F0_9E_21", "/org/bluez/hci0/dev_00_A0_50_FC_85_B4", "/org/bluez/hci0/dev_7D_A6_E2_28_E2_21", "/org/bluez/hci0/dev_7D_26_EF_98_8A_F4", "/org/bluez/hci0/dev_42_14_C3_01_25_25", "/org/bluez/hci0/dev_75_0C_80_CD_04_1E", "/org/bluez/hci0/dev_52_71_26_A1_52_AA", "/org/bluez/hci0/dev_40_C3_D7_65_CC_BF", "/org/bluez/hci0/dev_72_95_B8_34_82_A3", "/org/bluez/hci0/dev_6B_99_43_81_D0_31", "/org/bluez/hci0/dev_45_66_4A_20_7C_0B", "/org/bluez/hci0/dev_46_99_9C_AA_BD_36", "/org/bluez/hci0/dev_CC_52_AF_CB_49_12", "/org/bluez/hci0/dev_C4_22_C6_95_9C_1A", "/org/bluez/hci0/dev_00_A0_50_FC_18_46", "/org/bluez/hci0/dev_00_A0_50_FD_15_F4"]

Я не могу подключиться к указанному устройству c, мне нужно подключиться к третьему устройству: «7D_A6_E2_28_E2_21», но из документации я не могу понять, как, я вижу, есть один метод:

let deviceBle : BluetoothDevice = adapter.get_first_device().unwrap();

Но он получает только первое устройство, что я могу сделать, чтобы получить третье устройство?

1 Ответ

0 голосов
/ 16 января 2020

Это довольно просто с BluetoothDevice::new:

let device_3 = BluetoothDevice::new(&sessionBLE, devices[2].clone());
...