diff options
Diffstat (limited to 'components/shared/bluetooth/lib.rs')
-rw-r--r-- | components/shared/bluetooth/lib.rs | 119 |
1 files changed, 119 insertions, 0 deletions
diff --git a/components/shared/bluetooth/lib.rs b/components/shared/bluetooth/lib.rs new file mode 100644 index 00000000000..5910aa3c284 --- /dev/null +++ b/components/shared/bluetooth/lib.rs @@ -0,0 +1,119 @@ +/* This Source Code Form is subject to the terms of the Mozilla Public + * License, v. 2.0. If a copy of the MPL was not distributed with this + * file, You can obtain one at https://mozilla.org/MPL/2.0/. */ + +pub mod blocklist; +pub mod scanfilter; + +use ipc_channel::ipc::IpcSender; +use serde::{Deserialize, Serialize}; + +use crate::scanfilter::{BluetoothScanfilterSequence, RequestDeviceoptions}; + +#[derive(Debug, Deserialize, Serialize)] +pub enum BluetoothError { + Type(String), + Network, + NotFound, + NotSupported, + Security, + InvalidState, +} + +#[derive(Debug, Deserialize, Serialize)] +pub enum GATTType { + PrimaryService, + Characteristic, + IncludedService, + Descriptor, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct BluetoothDeviceMsg { + // Bluetooth Device properties + pub id: String, + pub name: Option<String>, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct BluetoothServiceMsg { + pub uuid: String, + pub is_primary: bool, + pub instance_id: String, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct BluetoothCharacteristicMsg { + // Characteristic + pub uuid: String, + pub instance_id: String, + // Characteristic properties + pub broadcast: bool, + pub read: bool, + pub write_without_response: bool, + pub write: bool, + pub notify: bool, + pub indicate: bool, + pub authenticated_signed_writes: bool, + pub reliable_write: bool, + pub writable_auxiliaries: bool, +} + +#[derive(Debug, Deserialize, Serialize)] +pub struct BluetoothDescriptorMsg { + pub uuid: String, + pub instance_id: String, +} + +pub type BluetoothServicesMsg = Vec<BluetoothServiceMsg>; + +pub type BluetoothCharacteristicsMsg = Vec<BluetoothCharacteristicMsg>; + +pub type BluetoothDescriptorsMsg = Vec<BluetoothDescriptorMsg>; + +pub type BluetoothResult<T> = Result<T, BluetoothError>; + +pub type BluetoothResponseResult = Result<BluetoothResponse, BluetoothError>; + +#[derive(Debug, Deserialize, Serialize)] +pub enum BluetoothRequest { + RequestDevice(RequestDeviceoptions, IpcSender<BluetoothResponseResult>), + GATTServerConnect(String, IpcSender<BluetoothResponseResult>), + GATTServerDisconnect(String, IpcSender<BluetoothResult<()>>), + GetGATTChildren( + String, + Option<String>, + bool, + GATTType, + IpcSender<BluetoothResponseResult>, + ), + ReadValue(String, IpcSender<BluetoothResponseResult>), + WriteValue(String, Vec<u8>, IpcSender<BluetoothResponseResult>), + EnableNotification(String, bool, IpcSender<BluetoothResponseResult>), + WatchAdvertisements(String, IpcSender<BluetoothResponseResult>), + SetRepresentedToNull(Vec<String>, Vec<String>, Vec<String>), + IsRepresentedDeviceNull(String, IpcSender<bool>), + GetAvailability(IpcSender<BluetoothResponseResult>), + MatchesFilter( + String, + BluetoothScanfilterSequence, + IpcSender<BluetoothResult<bool>>, + ), + Test(String, IpcSender<BluetoothResult<()>>), + Exit, +} + +#[derive(Debug, Deserialize, Serialize)] +pub enum BluetoothResponse { + RequestDevice(BluetoothDeviceMsg), + GATTServerConnect(bool), + GetPrimaryServices(BluetoothServicesMsg, bool), + GetIncludedServices(BluetoothServicesMsg, bool), + GetCharacteristics(BluetoothCharacteristicsMsg, bool), + GetDescriptors(BluetoothDescriptorsMsg, bool), + ReadValue(Vec<u8>), + WriteValue(Vec<u8>), + EnableNotification(()), + WatchAdvertisements(()), + GetAvailability(bool), +} |