blob: 370c352248c30c747aacc1ee595808f3e27ab433 [file] [log] [blame]
// Copyright 2016 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
// Next MinVersion: 7
module arc.mojom;
import "mojo/common/values.mojom";
[Extensible]
enum BluetoothAdapterState {
OFF = 0,
ON
};
[Extensible]
enum BluetoothDiscoveryState {
STOPPED,
STARTED
};
[Extensible]
enum BluetoothAclState {
CONNECTED,
DISCONNECTED
};
[Extensible]
enum BluetoothStatus {
SUCCESS = 0,
FAIL,
NOT_READY,
NOMEM,
BUSY,
DONE,
UNSUPPORTED,
PARM_INVALID,
UNHANDLED,
AUTH_FAILURE,
RMT_DEV_DOWN,
AUTH_REJECTED
};
struct BluetoothAddress {
array<uint8, 6> address;
};
struct BluetoothUUID {
array<uint8, 16> uuid;
};
struct BluetoothServiceRecord {
BluetoothUUID uuid;
uint16 channel;
string name;
};
struct BluetoothLocalLEFeatures {
uint16 version_supported;
uint8 local_privacy_enabled;
uint8 max_adv_instance;
uint8 rpa_offload_supported;
uint8 max_irk_list_size;
uint8 max_adv_filter_supported;
uint8 activity_energy_info_supported;
uint16 scan_result_storage_size;
uint16 total_trackable_advertisers;
bool extended_scan_support;
bool debug_logging_supported;
};
[Extensible]
enum BluetoothPropertyType {
ALL = 0,
BDNAME = 1,
BDADDR,
UUIDS,
CLASS_OF_DEVICE,
TYPE_OF_DEVICE,
SERVICE_RECORD,
ADAPTER_SCAN_MODE,
ADAPTER_BONDED_DEVICES,
ADAPTER_DISCOVERY_TIMEOUT,
REMOTE_FRIENDLY_NAME,
REMOTE_RSSI,
REMOTE_VERSION_INFO,
LOCAL_LE_FEATURES,
REMOTE_DEVICE_TIMESTAMP = 0xFF,
};
[Extensible]
enum BluetoothScanMode {
NONE = 0x0,
CONNECTABLE,
CONNECTABLE_DISCOVERABLE
};
[Extensible]
enum BluetoothDeviceType {
BREDR = 0x1,
BLE,
DUAL
};
[Extensible]
enum BluetoothBondState {
NONE = 0,
BONDING,
BONDED
};
struct BluetoothRemoteVersion {
int32 version;
int32 sub_ver;
int32 manufacturer;
};
union BluetoothProperty {
string bdname;
BluetoothAddress bdaddr;
array<BluetoothUUID> uuids;
uint32 device_class;
BluetoothDeviceType device_type;
BluetoothServiceRecord service_record;
BluetoothScanMode adapter_scan_mode;
array<BluetoothAddress> bonded_devices;
uint32 discovery_timeout;
string remote_friendly_name;
int32 remote_rssi;
BluetoothRemoteVersion remote_version;
BluetoothLocalLEFeatures local_le_features;
};
// Bluetooth GATT types
// Copy from Android API
// https://developer.android.com/reference/android/bluetooth/BluetoothGatt.html
[Extensible]
enum BluetoothGattStatus {
GATT_SUCCESS = 0,
GATT_READ_NOT_PERMITTED = 0x2,
GATT_WRITE_NOT_PERMITTED = 0x3,
GATT_INSUFFICIENT_AUTHENTICATION = 0x5,
GATT_REQUEST_NOT_SUPPORTED = 0x6,
GATT_INVALID_OFFSET = 0x7,
GATT_INVALID_ATTRIBUTE_LENGTH = 0xd,
GATT_INSUFFICIENT_ENCRYPTION = 0xf,
GATT_CONNECTION_CONGESTED = 0x8f,
GATT_FAILURE = 0x101,
};
// Copy from Android API
// https://source.android.com/devices/halref/structbtgatt__gatt__id__t.html
struct BluetoothGattID {
BluetoothUUID uuid;
uint8 inst_id;
};
// Copy from Android API
// is_primary is not a boolean because Android defines it as uint8_t.
// https://source.android.com/devices/halref/structbtgatt__srvc__id__t.html
struct BluetoothGattServiceID {
BluetoothGattID id;
uint8 is_primary;
};
struct BluetoothGattValue {
BluetoothGattStatus status;
array<uint8> value;
};
const int8 kUnknownPower = 127;
// Copied from Android Bluetooth package. See AdvertiseManager$AdvertiseNative
// http://goo.gl/UnKC5N
enum BluetoothAdvertisementType {
ADV_TYPE_CONNECTABLE = 0,
ADV_TYPE_SCANNABLE = 2,
ADV_TYPE_NON_CONNECTABLE = 3,
};
// Copy from Bluetooth Assigned Numbers Document, Generic Access Profile
// https://www.bluetooth.com/specifications/assigned-numbers/generic-access-profile
[Extensible]
enum BluetoothAdvertisingDataType {
DATA_TYPE_FLAGS = 0x01,
DATA_TYPE_SERVICE_UUIDS_16_BIT_COMPLETE = 0x03,
DATA_TYPE_SERVICE_UUIDS_128_BIT_COMPLETE = 0x07,
DATA_TYPE_LOCAL_NAME_COMPLETE = 0x09,
DATA_TYPE_TX_POWER_LEVEL = 0x0A,
DATA_TYPE_SERVICE_DATA = 0x16,
DATA_TYPE_MANUFACTURER_SPECIFIC_DATA = 0xff,
};
// Copy from Bluetooth Core v4.2 Volume 3 Part C Chapter 11
// and Bluetooth Core Specification Supplement v6 Part A Chapter 1
// https://www.bluetooth.com/specifications/adopted-specifications
union BluetoothAdvertisingData {
uint8 flags;
array<uint16> service_uuids_16;
array<BluetoothUUID> service_uuids;
string local_name;
uint8 tx_power_level;
BluetoothServiceData service_data;
array<uint8> manufacturer_data;
array<uint8> other_data;
};
struct BluetoothServiceData {
uint16 uuid_16bit;
array<uint8> data;
};
struct BluetoothAdvertisement {
BluetoothAdvertisementType type;
bool include_tx_power;
array<BluetoothAdvertisingData> data;
// Add more here as Chrome supports it.
};
[Extensible]
enum BluetoothGattDBAttributeType {
BTGATT_DB_PRIMARY_SERVICE = 0,
BTGATT_DB_SECONDARY_SERVICE,
BTGATT_DB_INCLUDED_SERVICE,
BTGATT_DB_CHARACTERISTIC,
BTGATT_DB_DESCRIPTOR,
};
struct BluetoothGattDBElement {
uint8 id;
BluetoothUUID uuid;
BluetoothGattDBAttributeType type;
uint16 attribute_handle;
/*
* If |type| is |BTGATT_DB_PRIMARY_SERVICE|, or
* |BTGATT_DB_SECONDARY_SERVICE|, this contains the start and end attribute
* handles.
*/
uint16 start_handle;
uint16 end_handle;
/*
* If |type| is |BTGATT_DB_CHARACTERISTIC|, this contains the properties of
* the characteristic.
*/
uint8 properties;
};
// Bluetooth SDP types
[Extensible]
enum BluetoothSdpAttributeType {
NULLTYPE = 0,
UINT,
INT,
UUID,
STRING,
BOOL,
SEQUENCE,
URL,
};
/*
* A BluetoothSdpAttribute contains either a value or a sequence, where a
* sequence is an array of BluetoothSdpAttribute. A multi-layered attribute
* design is intended. Note BluetoothSdpAttribute supports up to depth 32 for
* the attribute with multi-layer sequences. The attributes within a sequence
* which has the depth beyond the maximum supported depth will be invalidated
* and ignored.
*/
struct BluetoothSdpAttribute {
BluetoothSdpAttributeType type;
uint32 type_size;
mojo.common.mojom.ListValue value;
array<BluetoothSdpAttribute> sequence;
};
struct BluetoothSdpRecord {
map<uint16, BluetoothSdpAttribute> attrs;
};
struct BluetoothCreateSdpRecordResult {
BluetoothStatus status;
uint32 service_handle;
};
// Next Method ID: 43
interface BluetoothHost {
EnableAdapter@0() => (BluetoothAdapterState state);
DisableAdapter@1() => (BluetoothAdapterState state);
GetAdapterProperty@2(BluetoothPropertyType type);
SetAdapterProperty@3(BluetoothProperty property);
GetRemoteDeviceProperty@4(BluetoothAddress remote_addr,
BluetoothPropertyType type);
SetRemoteDeviceProperty@5(BluetoothAddress remote_addr,
BluetoothProperty property);
GetRemoteServiceRecord@6(BluetoothAddress remote_addr,
BluetoothUUID uuid);
GetRemoteServices@7(BluetoothAddress remote_addr);
StartDiscovery@8();
CancelDiscovery@9();
CreateBond@10(BluetoothAddress addr, int32 transport);
RemoveBond@11(BluetoothAddress addr);
CancelBond@12(BluetoothAddress addr);
GetConnectionState@13(BluetoothAddress addr) => (bool connected);
// Bluetooth Gatt Client functions
[MinVersion=1] StartLEScan@14();
[MinVersion=1] StopLEScan@15();
[MinVersion=1] ConnectLEDevice@16(BluetoothAddress remote_addr);
[MinVersion=1] DisconnectLEDevice@17(BluetoothAddress remote_addr);
[MinVersion=1] SearchService@18(BluetoothAddress remote_addr);
[MinVersion=1] GetGattDB@19(BluetoothAddress remote_addr);
[MinVersion=1] StartLEListen@20() => (BluetoothGattStatus status);
[MinVersion=1] StopLEListen@21() => (BluetoothGattStatus status);
[MinVersion=1] ReadGattCharacteristic@22(BluetoothAddress remote_addr,
BluetoothGattServiceID service_id,
BluetoothGattID char_id)
=> (BluetoothGattValue value);
[MinVersion=1] WriteGattCharacteristic@23(BluetoothAddress remote_addr,
BluetoothGattServiceID service_id,
BluetoothGattID char_id,
BluetoothGattValue value)
=> (BluetoothGattStatus status);
[MinVersion=1] ReadGattDescriptor@24(BluetoothAddress remote_addr,
BluetoothGattServiceID service_id,
BluetoothGattID char_id,
BluetoothGattID desc_id)
=> (BluetoothGattValue value);
[MinVersion=1] WriteGattDescriptor@25(BluetoothAddress remote_addr,
BluetoothGattServiceID service_id,
BluetoothGattID char_id,
BluetoothGattID desc_id,
BluetoothGattValue value)
=> (BluetoothGattStatus status);
[MinVersion=1] RegisterForGattNotification@26(
BluetoothAddress remote_addr,
BluetoothGattServiceID service_id,
BluetoothGattID char_id)
=> (BluetoothGattStatus status);
[MinVersion=1] DeregisterForGattNotification@27(
BluetoothAddress remote_addr,
BluetoothGattServiceID service_id,
BluetoothGattID char_id)
=> (BluetoothGattStatus status);
[MinVersion=1] ReadRemoteRssi@28(BluetoothAddress remote_addr)
=> (int32 rssi);
[MinVersion=2] OpenBluetoothSocket@29()
=> (handle sock);
// Bluetooth Gatt Server functions
// Copied from Android API
// https://source.android.com/devices/halref/bt__gatt__server_8h.html
[MinVersion=3] AddService@30(BluetoothGattServiceID service_id,
int32 num_handles)
=> (int32 service_handle);
[MinVersion=3] AddCharacteristic@31(int32 service_handle,
BluetoothUUID uuid,
int32 properties,
int32 permissions)
=> (int32 characteristic_handle);
[MinVersion=3] AddDescriptor@32(int32 service_handle,
BluetoothUUID uuid,
int32 permissions)
=> (int32 descriptor_handle);
[MinVersion=3] StartService@33(int32 service_handle)
=> (BluetoothGattStatus status);
[MinVersion=3] StopService@34(int32 service_handle)
=> (BluetoothGattStatus status);
[MinVersion=3] DeleteService@35(int32 service_handle)
=> (BluetoothGattStatus status);
[MinVersion=3] SendIndication@36(int32 attribute_handle,
BluetoothAddress address,
bool confirm,
array<uint8> value)
=> (BluetoothGattStatus status);
// Bluetooth SDP functions
[MinVersion=5] GetSdpRecords@37(BluetoothAddress remote_addr,
BluetoothUUID target_uuid);
[MinVersion=5] CreateSdpRecord@38(BluetoothSdpRecord record)
=> (BluetoothCreateSdpRecordResult result);
[MinVersion=5] RemoveSdpRecord@39(uint32 service_handle)
=> (BluetoothStatus status);
// Multi-advertisement functions
[MinVersion=6] ReserveAdvertisementHandle@40()
=> (BluetoothGattStatus status, int32 adv_handle);
[MinVersion=6] BroadcastAdvertisement@41(int32 adv_handle,
BluetoothAdvertisement adv)
=> (BluetoothGattStatus status);
[MinVersion=6] ReleaseAdvertisementHandle@42(int32 adv_handle)
=> (BluetoothGattStatus status);
};
// Next Method ID: 18
interface BluetoothInstance {
Init@0(BluetoothHost host_ptr);
OnAdapterProperties@1(BluetoothStatus status,
array<BluetoothProperty> properties);
OnRemoteDeviceProperties@2(BluetoothStatus status,
BluetoothAddress address,
array<BluetoothProperty> properties);
OnDeviceFound@3(array<BluetoothProperty> properties);
OnDiscoveryStateChanged@4(BluetoothDiscoveryState state);
OnBondStateChanged@5(BluetoothStatus status,
BluetoothAddress remote_addr,
BluetoothBondState state);
OnAclStateChanged@6(BluetoothStatus status,
BluetoothAddress remote_addr,
BluetoothAclState state);
// Bluetooth Gatt Client callbacks
[MinVersion=1] OnLEDeviceFound@7(BluetoothAddress addr,
int32 rssi,
array<BluetoothAdvertisingData> adv_data);
[MinVersion=1] OnLEConnectionStateChange@8(BluetoothAddress remote_addr,
bool connected);
[MinVersion=4] OnLEDeviceAddressChange@16(BluetoothAddress old_addr,
BluetoothAddress new_addr);
[MinVersion=1] OnSearchComplete@9(BluetoothAddress remote_addr,
BluetoothGattStatus status);
[MinVersion=1] OnGetGattDB@10(BluetoothAddress remote_addr,
array<BluetoothGattDBElement> db);
[MinVersion=1] OnServicesRemoved@11(BluetoothAddress remote_addr,
uint16 start_handle,
uint16 end_handle);
[MinVersion=1] OnServicesAdded@12(BluetoothAddress remote_addr,
array<BluetoothGattDBElement> db);
[MinVersion=2] OnGattNotify@13(BluetoothAddress remote_addr,
BluetoothGattServiceID service_id,
BluetoothGattID char_id,
bool is_notify,
array<uint8> value);
// Bluetooth Gatt Server functions
[MinVersion=3] RequestGattRead@14(BluetoothAddress address,
int32 attribute_handle,
int32 offset,
bool is_long)
=> (BluetoothGattStatus status, array<uint8> value);
[MinVersion=3] RequestGattWrite@15(BluetoothAddress address,
int32 attribute_handle,
int32 offset,
array<uint8> value)
=> (BluetoothGattStatus status);
// Bluetooth SDP function
[MinVersion=5] OnGetSdpRecords@17(BluetoothStatus status,
BluetoothAddress remove_addr,
BluetoothUUID target_uuid,
array<BluetoothSdpRecord> records);
};