aboutsummaryrefslogtreecommitdiffstats
path: root/components/shared/bluetooth/lib.rs
diff options
context:
space:
mode:
Diffstat (limited to 'components/shared/bluetooth/lib.rs')
-rw-r--r--components/shared/bluetooth/lib.rs119
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),
+}