blob: 4b4c171db217bf35b15208b1355968c5b91f7505 [file] [log] [blame]
#!/usr/bin/env python3
#
# Copyright 2022 The Fuchsia Authors
#
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
from enum import Enum
from enum import IntEnum
class GattCbErr(Enum):
CHAR_WRITE_REQ_ERR = "Characteristic Write Request event not found. Expected {}"
CHAR_WRITE_ERR = "Characteristic Write event not found. Expected {}"
DESC_WRITE_REQ_ERR = "Descriptor Write Request event not found. Expected {}"
DESC_WRITE_ERR = "Descriptor Write event not found. Expected {}"
CHAR_READ_ERR = "Characteristic Read event not found. Expected {}"
CHAR_READ_REQ_ERR = "Characteristic Read Request not found. Expected {}"
DESC_READ_ERR = "Descriptor Read event not found. Expected {}"
DESC_READ_REQ_ERR = "Descriptor Read Request event not found. Expected {}"
RD_REMOTE_RSSI_ERR = "Read Remote RSSI event not found. Expected {}"
GATT_SERV_DISC_ERR = "GATT Services Discovered event not found. Expected {}"
SERV_ADDED_ERR = "Service Added event not found. Expected {}"
MTU_CHANGED_ERR = "MTU Changed event not found. Expected {}"
MTU_SERV_CHANGED_ERR = "MTU Server Changed event not found. Expected {}"
GATT_CONN_CHANGE_ERR = "GATT Connection Changed event not found. Expected {}"
CHAR_CHANGE_ERR = "GATT Characteristic Changed event not fond. Expected {}"
PHY_READ_ERR = "Phy Read event not fond. Expected {}"
PHY_UPDATE_ERR = "Phy Update event not fond. Expected {}"
EXEC_WRITE_ERR = "GATT Execute Write event not found. Expected {}"
class GattCbStrings(Enum):
CHAR_WRITE_REQ = "GattServer{}onCharacteristicWriteRequest"
EXEC_WRITE = "GattServer{}onExecuteWrite"
CHAR_WRITE = "GattConnect{}onCharacteristicWrite"
DESC_WRITE_REQ = "GattServer{}onDescriptorWriteRequest"
DESC_WRITE = "GattConnect{}onDescriptorWrite"
CHAR_READ = "GattConnect{}onCharacteristicRead"
CHAR_READ_REQ = "GattServer{}onCharacteristicReadRequest"
DESC_READ = "GattConnect{}onDescriptorRead"
DESC_READ_REQ = "GattServer{}onDescriptorReadRequest"
RD_REMOTE_RSSI = "GattConnect{}onReadRemoteRssi"
GATT_SERV_DISC = "GattConnect{}onServicesDiscovered"
SERV_ADDED = "GattServer{}onServiceAdded"
MTU_CHANGED = "GattConnect{}onMtuChanged"
MTU_SERV_CHANGED = "GattServer{}onMtuChanged"
GATT_CONN_CHANGE = "GattConnect{}onConnectionStateChange"
CHAR_CHANGE = "GattConnect{}onCharacteristicChanged"
PHY_READ = "GattConnect{}onPhyRead"
PHY_UPDATE = "GattConnect{}onPhyUpdate"
SERV_PHY_READ = "GattServer{}onPhyRead"
SERV_PHY_UPDATE = "GattServer{}onPhyUpdate"
class GattEvent(Enum):
CHAR_WRITE_REQ = {
"evt": GattCbStrings.CHAR_WRITE_REQ.value,
"err": GattCbErr.CHAR_WRITE_REQ_ERR.value
}
EXEC_WRITE = {
"evt": GattCbStrings.EXEC_WRITE.value,
"err": GattCbErr.EXEC_WRITE_ERR.value
}
CHAR_WRITE = {
"evt": GattCbStrings.CHAR_WRITE.value,
"err": GattCbErr.CHAR_WRITE_ERR.value
}
DESC_WRITE_REQ = {
"evt": GattCbStrings.DESC_WRITE_REQ.value,
"err": GattCbErr.DESC_WRITE_REQ_ERR.value
}
DESC_WRITE = {
"evt": GattCbStrings.DESC_WRITE.value,
"err": GattCbErr.DESC_WRITE_ERR.value
}
CHAR_READ = {
"evt": GattCbStrings.CHAR_READ.value,
"err": GattCbErr.CHAR_READ_ERR.value
}
CHAR_READ_REQ = {
"evt": GattCbStrings.CHAR_READ_REQ.value,
"err": GattCbErr.CHAR_READ_REQ_ERR.value
}
DESC_READ = {
"evt": GattCbStrings.DESC_READ.value,
"err": GattCbErr.DESC_READ_ERR.value
}
DESC_READ_REQ = {
"evt": GattCbStrings.DESC_READ_REQ.value,
"err": GattCbErr.DESC_READ_REQ_ERR.value
}
RD_REMOTE_RSSI = {
"evt": GattCbStrings.RD_REMOTE_RSSI.value,
"err": GattCbErr.RD_REMOTE_RSSI_ERR.value
}
GATT_SERV_DISC = {
"evt": GattCbStrings.GATT_SERV_DISC.value,
"err": GattCbErr.GATT_SERV_DISC_ERR.value
}
SERV_ADDED = {
"evt": GattCbStrings.SERV_ADDED.value,
"err": GattCbErr.SERV_ADDED_ERR.value
}
MTU_CHANGED = {
"evt": GattCbStrings.MTU_CHANGED.value,
"err": GattCbErr.MTU_CHANGED_ERR.value
}
GATT_CONN_CHANGE = {
"evt": GattCbStrings.GATT_CONN_CHANGE.value,
"err": GattCbErr.GATT_CONN_CHANGE_ERR.value
}
CHAR_CHANGE = {
"evt": GattCbStrings.CHAR_CHANGE.value,
"err": GattCbErr.CHAR_CHANGE_ERR.value
}
PHY_READ = {
"evt": GattCbStrings.PHY_READ.value,
"err": GattCbErr.PHY_READ_ERR.value
}
PHY_UPDATE = {
"evt": GattCbStrings.PHY_UPDATE.value,
"err": GattCbErr.PHY_UPDATE_ERR.value
}
SERV_PHY_READ = {
"evt": GattCbStrings.SERV_PHY_READ.value,
"err": GattCbErr.PHY_READ_ERR.value
}
SERV_PHY_UPDATE = {
"evt": GattCbStrings.SERV_PHY_UPDATE.value,
"err": GattCbErr.PHY_UPDATE_ERR.value
}
class GattConnectionState(IntEnum):
STATE_DISCONNECTED = 0
STATE_CONNECTING = 1
STATE_CONNECTED = 2
STATE_DISCONNECTING = 3
class GattCharacteristic(Enum):
PROPERTY_BROADCAST = 0x01
PROPERTY_READ = 0x02
PROPERTY_WRITE_NO_RESPONSE = 0x04
PROPERTY_WRITE = 0x08
PROPERTY_NOTIFY = 0x10
PROPERTY_INDICATE = 0x20
PROPERTY_SIGNED_WRITE = 0x40
PROPERTY_EXTENDED_PROPS = 0x80
PERMISSION_READ = 0x01
PERMISSION_READ_ENCRYPTED = 0x02
PERMISSION_READ_ENCRYPTED_MITM = 0x04
PERMISSION_WRITE = 0x10
PERMISSION_WRITE_ENCRYPTED = 0x20
PERMISSION_WRITE_ENCRYPTED_MITM = 0x40
PERMISSION_WRITE_SIGNED = 0x80
PERMISSION_WRITE_SIGNED_MITM = 0x100
WRITE_TYPE_DEFAULT = 0x02
WRITE_TYPE_NO_RESPONSE = 0x01
WRITE_TYPE_SIGNED = 0x04
FORMAT_UINT8 = 0x11
FORMAT_UINT16 = 0x12
FORMAT_UINT32 = 0x14
FORMAT_SINT8 = 0x21
FORMAT_SINT16 = 0x22
FORMAT_SINT32 = 0x24
FORMAT_SFLOAT = 0x32
FORMAT_FLOAT = 0x34
class GattDescriptor(Enum):
ENABLE_NOTIFICATION_VALUE = [0x01, 0x00]
ENABLE_INDICATION_VALUE = [0x02, 0x00]
DISABLE_NOTIFICATION_VALUE = [0x00, 0x00]
PERMISSION_READ = 0x01
PERMISSION_READ_ENCRYPTED = 0x02
PERMISSION_READ_ENCRYPTED_MITM = 0x04
PERMISSION_WRITE = 0x10
PERMISSION_WRITE_ENCRYPTED = 0x20
PERMISSION_WRITE_ENCRYPTED_MITM = 0x40
PERMISSION_WRITE_SIGNED = 0x80
PERMISSION_WRITE_SIGNED_MITM = 0x100
class GattCharDesc(Enum):
GATT_CHARAC_EXT_PROPER_UUID = '00002900-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_USER_DESC_UUID = '00002901-0000-1000-8000-00805f9b34fb'
GATT_CLIENT_CHARAC_CFG_UUID = '00002902-0000-1000-8000-00805f9b34fb'
GATT_SERVER_CHARAC_CFG_UUID = '00002903-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_FMT_UUID = '00002904-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_AGREG_FMT_UUID = '00002905-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_VALID_RANGE_UUID = '00002906-0000-1000-8000-00805f9b34fb'
GATT_EXTERNAL_REPORT_REFERENCE = '00002907-0000-1000-8000-00805f9b34fb'
GATT_REPORT_REFERENCE = '00002908-0000-1000-8000-00805f9b34fb'
class GattCharTypes(Enum):
GATT_CHARAC_DEVICE_NAME = '00002a00-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_APPEARANCE = '00002a01-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_PERIPHERAL_PRIV_FLAG = '00002a02-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_RECONNECTION_ADDRESS = '00002a03-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_PERIPHERAL_PREF_CONN = '00002a04-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_SERVICE_CHANGED = '00002a05-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_SYSTEM_ID = '00002a23-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_MODEL_NUMBER_STRING = '00002a24-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_SERIAL_NUMBER_STRING = '00002a25-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_FIRMWARE_REVISION_STRING = '00002a26-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_HARDWARE_REVISION_STRING = '00002a27-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_SOFTWARE_REVISION_STRING = '00002a28-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_MANUFACTURER_NAME_STRING = '00002a29-0000-1000-8000-00805f9b34fb'
GATT_CHARAC_PNP_ID = '00002a50-0000-1000-8000-00805f9b34fb'
class GattCharacteristicAttrLength(Enum):
MTU_ATTR_1 = 1
MTU_ATTR_2 = 3
MTU_ATTR_3 = 15
class CharacteristicValueFormat(Enum):
STRING = 0x1
BYTE = 0x2
FORMAT_SINT8 = 0x21
FORMAT_UINT8 = 0x11
FORMAT_SINT16 = 0x22
FORMAT_UINT16 = 0x12
FORMAT_SINT32 = 0x24
FORMAT_UINT32 = 0x14
class GattService(IntEnum):
SERVICE_TYPE_PRIMARY = 0
SERVICE_TYPE_SECONDARY = 1
class GattConnectionPriority(IntEnum):
CONNECTION_PRIORITY_BALANCED = 0
CONNECTION_PRIORITY_HIGH = 1
CONNECTION_PRIORITY_LOW_POWER = 2
class MtuSize(IntEnum):
MIN = 23
MAX = 217
class GattCharacteristicAttrLength(IntEnum):
MTU_ATTR_1 = 1
MTU_ATTR_2 = 3
MTU_ATTR_3 = 15
class BluetoothGatt(Enum):
GATT_SUCCESS = 0
GATT_FAILURE = 0x101
class GattTransport(IntEnum):
TRANSPORT_AUTO = 0x00
TRANSPORT_BREDR = 0x01
TRANSPORT_LE = 0x02
class GattPhy(IntEnum):
PHY_LE_1M = 1
PHY_LE_2M = 2
PHY_LE_CODED = 3
class GattPhyMask(IntEnum):
PHY_LE_1M_MASK = 1
PHY_LE_2M_MASK = 2
PHY_LE_CODED_MASK = 4
# TODO Decide whether to continue with Enums or move to dictionaries
GattServerResponses = {
"GATT_SUCCESS": 0x0,
"GATT_FAILURE": 0x1,
"GATT_READ_NOT_PERMITTED": 0x2,
"GATT_WRITE_NOT_PERMITTED": 0x3,
"GATT_INVALID_PDU": 0x4,
"GATT_INSUFFICIENT_AUTHENTICATION": 0x5,
"GATT_REQUEST_NOT_SUPPORTED": 0x6,
"GATT_INVALID_OFFSET": 0x7,
"GATT_INSUFFICIENT_AUTHORIZATION": 0x8,
"GATT_INVALID_ATTRIBUTE_LENGTH": 0xD,
"GATT_INSUFFICIENT_ENCRYPTION": 0xF,
"GATT_CONNECTION_CONGESTED": 0x8F,
"GATT_13_ERR": 0x13,
"GATT_12_ERR": 0x12,
"GATT_0C_ERR": 0x0C,
"GATT_16": 0x16
}