Home | History | Annotate | Download | only in bt
      1 #/usr/bin/env python3.4
      2 #
      3 # Copyright (C) 2016 The Android Open Source Project
      4 #
      5 # Licensed under the Apache License, Version 2.0 (the "License"); you may not
      6 # use this file except in compliance with the License. You may obtain a copy of
      7 # the License at
      8 #
      9 # http://www.apache.org/licenses/LICENSE-2.0
     10 #
     11 # Unless required by applicable law or agreed to in writing, software
     12 # distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
     13 # WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
     14 # License for the specific language governing permissions and limitations under
     15 # the License.
     16 
     17 from enum import Enum
     18 from enum import IntEnum
     19 
     20 
     21 class GattCbErr(Enum):
     22     CHAR_WRITE_REQ_ERR = "Characteristic Write Request event not found. Expected {}"
     23     CHAR_WRITE_ERR = "Characteristic Write event not found. Expected {}"
     24     DESC_WRITE_REQ_ERR = "Descriptor Write Request event not found. Expected {}"
     25     DESC_WRITE_ERR = "Descriptor Write event not found. Expected {}"
     26     CHAR_READ_ERR = "Characteristic Read event not found. Expected {}"
     27     CHAR_READ_REQ_ERR = "Characteristic Read Request not found. Expected {}"
     28     DESC_READ_ERR = "Descriptor Read event not found. Expected {}"
     29     DESC_READ_REQ_ERR = "Descriptor Read Request event not found. Expected {}"
     30     RD_REMOTE_RSSI_ERR = "Read Remote RSSI event not found. Expected {}"
     31     GATT_SERV_DISC_ERR = "GATT Services Discovered event not found. Expected {}"
     32     SERV_ADDED_ERR = "Service Added event not found. Expected {}"
     33     MTU_CHANGED_ERR = "MTU Changed event not found. Expected {}"
     34     MTU_SERV_CHANGED_ERR = "MTU Server Changed event not found. Expected {}"
     35     GATT_CONN_CHANGE_ERR = "GATT Connection Changed event not found. Expected {}"
     36     CHAR_CHANGE_ERR = "GATT Characteristic Changed event not fond. Expected {}"
     37     PHY_READ_ERR = "Phy Read event not fond. Expected {}"
     38     PHY_UPDATE_ERR = "Phy Update event not fond. Expected {}"
     39     EXEC_WRITE_ERR = "GATT Execute Write event not found. Expected {}"
     40 
     41 
     42 class GattCbStrings(Enum):
     43     CHAR_WRITE_REQ = "GattServer{}onCharacteristicWriteRequest"
     44     EXEC_WRITE = "GattServer{}onExecuteWrite"
     45     CHAR_WRITE = "GattConnect{}onCharacteristicWrite"
     46     DESC_WRITE_REQ = "GattServer{}onDescriptorWriteRequest"
     47     DESC_WRITE = "GattConnect{}onDescriptorWrite"
     48     CHAR_READ = "GattConnect{}onCharacteristicRead"
     49     CHAR_READ_REQ = "GattServer{}onCharacteristicReadRequest"
     50     DESC_READ = "GattConnect{}onDescriptorRead"
     51     DESC_READ_REQ = "GattServer{}onDescriptorReadRequest"
     52     RD_REMOTE_RSSI = "GattConnect{}onReadRemoteRssi"
     53     GATT_SERV_DISC = "GattConnect{}onServicesDiscovered"
     54     SERV_ADDED = "GattServer{}onServiceAdded"
     55     MTU_CHANGED = "GattConnect{}onMtuChanged"
     56     MTU_SERV_CHANGED = "GattServer{}onMtuChanged"
     57     GATT_CONN_CHANGE = "GattConnect{}onConnectionStateChange"
     58     CHAR_CHANGE = "GattConnect{}onCharacteristicChanged"
     59     PHY_READ = "GattConnect{}onPhyRead"
     60     PHY_UPDATE = "GattConnect{}onPhyUpdate"
     61     SERV_PHY_READ = "GattServer{}onPhyRead"
     62     SERV_PHY_UPDATE = "GattServer{}onPhyUpdate"
     63 
     64 
     65 class GattEvent(Enum):
     66     CHAR_WRITE_REQ = {
     67         "evt": GattCbStrings.CHAR_WRITE_REQ.value,
     68         "err": GattCbErr.CHAR_WRITE_REQ_ERR.value
     69     }
     70     EXEC_WRITE = {
     71         "evt": GattCbStrings.EXEC_WRITE.value,
     72         "err": GattCbErr.EXEC_WRITE_ERR.value
     73     }
     74     CHAR_WRITE = {
     75         "evt": GattCbStrings.CHAR_WRITE.value,
     76         "err": GattCbErr.CHAR_WRITE_ERR.value
     77     }
     78     DESC_WRITE_REQ = {
     79         "evt": GattCbStrings.DESC_WRITE_REQ.value,
     80         "err": GattCbErr.DESC_WRITE_REQ_ERR.value
     81     }
     82     DESC_WRITE = {
     83         "evt": GattCbStrings.DESC_WRITE.value,
     84         "err": GattCbErr.DESC_WRITE_ERR.value
     85     }
     86     CHAR_READ = {
     87         "evt": GattCbStrings.CHAR_READ.value,
     88         "err": GattCbErr.CHAR_READ_ERR.value
     89     }
     90     CHAR_READ_REQ = {
     91         "evt": GattCbStrings.CHAR_READ_REQ.value,
     92         "err": GattCbErr.CHAR_READ_REQ_ERR.value
     93     }
     94     DESC_READ = {
     95         "evt": GattCbStrings.DESC_READ.value,
     96         "err": GattCbErr.DESC_READ_ERR.value
     97     }
     98     DESC_READ_REQ = {
     99         "evt": GattCbStrings.DESC_READ_REQ.value,
    100         "err": GattCbErr.DESC_READ_REQ_ERR.value
    101     }
    102     RD_REMOTE_RSSI = {
    103         "evt": GattCbStrings.RD_REMOTE_RSSI.value,
    104         "err": GattCbErr.RD_REMOTE_RSSI_ERR.value
    105     }
    106     GATT_SERV_DISC = {
    107         "evt": GattCbStrings.GATT_SERV_DISC.value,
    108         "err": GattCbErr.GATT_SERV_DISC_ERR.value
    109     }
    110     SERV_ADDED = {
    111         "evt": GattCbStrings.SERV_ADDED.value,
    112         "err": GattCbErr.SERV_ADDED_ERR.value
    113     }
    114     MTU_CHANGED = {
    115         "evt": GattCbStrings.MTU_CHANGED.value,
    116         "err": GattCbErr.MTU_CHANGED_ERR.value
    117     }
    118     GATT_CONN_CHANGE = {
    119         "evt": GattCbStrings.GATT_CONN_CHANGE.value,
    120         "err": GattCbErr.GATT_CONN_CHANGE_ERR.value
    121     }
    122     CHAR_CHANGE = {
    123         "evt": GattCbStrings.CHAR_CHANGE.value,
    124         "err": GattCbErr.CHAR_CHANGE_ERR.value
    125     }
    126     PHY_READ = {
    127         "evt": GattCbStrings.PHY_READ.value,
    128         "err": GattCbErr.PHY_READ_ERR.value
    129     }
    130     PHY_UPDATE = {
    131         "evt": GattCbStrings.PHY_UPDATE.value,
    132         "err": GattCbErr.PHY_UPDATE_ERR.value
    133     }
    134     SERV_PHY_READ = {
    135         "evt": GattCbStrings.SERV_PHY_READ.value,
    136         "err": GattCbErr.PHY_READ_ERR.value
    137     }
    138     SERV_PHY_UPDATE = {
    139         "evt": GattCbStrings.SERV_PHY_UPDATE.value,
    140         "err": GattCbErr.PHY_UPDATE_ERR.value
    141     }
    142 
    143 
    144 class GattConnectionState(IntEnum):
    145     STATE_DISCONNECTED = 0
    146     STATE_CONNECTING = 1
    147     STATE_CONNECTED = 2
    148     STATE_DISCONNECTING = 3
    149 
    150 
    151 class GattCharacteristic(Enum):
    152     PROPERTY_BROADCAST = 0x01
    153     PROPERTY_READ = 0x02
    154     PROPERTY_WRITE_NO_RESPONSE = 0x04
    155     PROPERTY_WRITE = 0x08
    156     PROPERTY_NOTIFY = 0x10
    157     PROPERTY_INDICATE = 0x20
    158     PROPERTY_SIGNED_WRITE = 0x40
    159     PROPERTY_EXTENDED_PROPS = 0x80
    160     PERMISSION_READ = 0x01
    161     PERMISSION_READ_ENCRYPTED = 0x02
    162     PERMISSION_READ_ENCRYPTED_MITM = 0x04
    163     PERMISSION_WRITE = 0x10
    164     PERMISSION_WRITE_ENCRYPTED = 0x20
    165     PERMISSION_WRITE_ENCRYPTED_MITM = 0x40
    166     PERMISSION_WRITE_SIGNED = 0x80
    167     PERMISSION_WRITE_SIGNED_MITM = 0x100
    168     WRITE_TYPE_DEFAULT = 0x02
    169     WRITE_TYPE_NO_RESPONSE = 0x01
    170     WRITE_TYPE_SIGNED = 0x04
    171     FORMAT_UINT8 = 0x11
    172     FORMAT_UINT16 = 0x12
    173     FORMAT_UINT32 = 0x14
    174     FORMAT_SINT8 = 0x21
    175     FORMAT_SINT16 = 0x22
    176     FORMAT_SINT32 = 0x24
    177     FORMAT_SFLOAT = 0x32
    178     FORMAT_FLOAT = 0x34
    179 
    180 
    181 class GattDescriptor(Enum):
    182     ENABLE_NOTIFICATION_VALUE = [0x01, 0x00]
    183     ENABLE_INDICATION_VALUE = [0x02, 0x00]
    184     DISABLE_NOTIFICATION_VALUE = [0x00, 0x00]
    185     PERMISSION_READ = 0x01
    186     PERMISSION_READ_ENCRYPTED = 0x02
    187     PERMISSION_READ_ENCRYPTED_MITM = 0x04
    188     PERMISSION_WRITE = 0x10
    189     PERMISSION_WRITE_ENCRYPTED = 0x20
    190     PERMISSION_WRITE_ENCRYPTED_MITM = 0x40
    191     PERMISSION_WRITE_SIGNED = 0x80
    192     PERMISSION_WRITE_SIGNED_MITM = 0x100
    193 
    194 
    195 class GattCharDesc(Enum):
    196     GATT_CHARAC_EXT_PROPER_UUID = '00002900-0000-1000-8000-00805f9b34fb'
    197     GATT_CHARAC_USER_DESC_UUID = '00002901-0000-1000-8000-00805f9b34fb'
    198     GATT_CLIENT_CHARAC_CFG_UUID = '00002902-0000-1000-8000-00805f9b34fb'
    199     GATT_SERVER_CHARAC_CFG_UUID = '00002903-0000-1000-8000-00805f9b34fb'
    200     GATT_CHARAC_FMT_UUID = '00002904-0000-1000-8000-00805f9b34fb'
    201     GATT_CHARAC_AGREG_FMT_UUID = '00002905-0000-1000-8000-00805f9b34fb'
    202     GATT_CHARAC_VALID_RANGE_UUID = '00002906-0000-1000-8000-00805f9b34fb'
    203     GATT_EXTERNAL_REPORT_REFERENCE = '00002907-0000-1000-8000-00805f9b34fb'
    204     GATT_REPORT_REFERENCE = '00002908-0000-1000-8000-00805f9b34fb'
    205 
    206 
    207 class GattCharTypes(Enum):
    208     GATT_CHARAC_DEVICE_NAME = '00002a00-0000-1000-8000-00805f9b34fb'
    209     GATT_CHARAC_APPEARANCE = '00002a01-0000-1000-8000-00805f9b34fb'
    210     GATT_CHARAC_PERIPHERAL_PRIV_FLAG = '00002a02-0000-1000-8000-00805f9b34fb'
    211     GATT_CHARAC_RECONNECTION_ADDRESS = '00002a03-0000-1000-8000-00805f9b34fb'
    212     GATT_CHARAC_PERIPHERAL_PREF_CONN = '00002a04-0000-1000-8000-00805f9b34fb'
    213     GATT_CHARAC_SERVICE_CHANGED = '00002a05-0000-1000-8000-00805f9b34fb'
    214     GATT_CHARAC_SYSTEM_ID = '00002a23-0000-1000-8000-00805f9b34fb'
    215     GATT_CHARAC_MODEL_NUMBER_STRING = '00002a24-0000-1000-8000-00805f9b34fb'
    216     GATT_CHARAC_SERIAL_NUMBER_STRING = '00002a25-0000-1000-8000-00805f9b34fb'
    217     GATT_CHARAC_FIRMWARE_REVISION_STRING = '00002a26-0000-1000-8000-00805f9b34fb'
    218     GATT_CHARAC_HARDWARE_REVISION_STRING = '00002a27-0000-1000-8000-00805f9b34fb'
    219     GATT_CHARAC_SOFTWARE_REVISION_STRING = '00002a28-0000-1000-8000-00805f9b34fb'
    220     GATT_CHARAC_MANUFACTURER_NAME_STRING = '00002a29-0000-1000-8000-00805f9b34fb'
    221     GATT_CHARAC_PNP_ID = '00002a50-0000-1000-8000-00805f9b34fb'
    222 
    223 
    224 class GattCharacteristicAttrLength(Enum):
    225     MTU_ATTR_1 = 1
    226     MTU_ATTR_2 = 3
    227     MTU_ATTR_3 = 15
    228 
    229 
    230 class CharacteristicValueFormat(Enum):
    231     STRING = 0x1
    232     BYTE = 0x2
    233     FORMAT_SINT8 = 0x21
    234     FORMAT_UINT8 = 0x11
    235     FORMAT_SINT16 = 0x22
    236     FORMAT_UINT16 = 0x12
    237     FORMAT_SINT32 = 0x24
    238     FORMAT_UINT32 = 0x14
    239 
    240 
    241 class GattService(IntEnum):
    242     SERVICE_TYPE_PRIMARY = 0
    243     SERVICE_TYPE_SECONDARY = 1
    244 
    245 
    246 class GattConnectionPriority(IntEnum):
    247     CONNECTION_PRIORITY_BALANCED = 0
    248     CONNECTION_PRIORITY_HIGH = 1
    249     CONNECTION_PRIORITY_LOW_POWER = 2
    250 
    251 
    252 class MtuSize(IntEnum):
    253     MIN = 23
    254     MAX = 217
    255 
    256 
    257 class GattCharacteristicAttrLength(IntEnum):
    258     MTU_ATTR_1 = 1
    259     MTU_ATTR_2 = 3
    260     MTU_ATTR_3 = 15
    261 
    262 
    263 class BluetoothGatt(Enum):
    264     GATT_SUCCESS = 0
    265     GATT_FAILURE = 0x101
    266 
    267 
    268 class GattTransport(IntEnum):
    269     TRANSPORT_AUTO = 0x00
    270     TRANSPORT_BREDR = 0x01
    271     TRANSPORT_LE = 0x02
    272 
    273 
    274 class GattPhy(IntEnum):
    275     PHY_LE_1M = 1
    276     PHY_LE_2M = 2
    277     PHY_LE_CODED = 3
    278 
    279 
    280 class GattPhyMask(IntEnum):
    281     PHY_LE_1M_MASK = 1
    282     PHY_LE_2M_MASK = 2
    283     PHY_LE_CODED_MASK = 4
    284 
    285 
    286 # TODO Decide whether to continue with Enums or move to dictionaries
    287 GattServerResponses = {
    288     "GATT_SUCCESS": 0x0,
    289     "GATT_FAILURE": 0x1,
    290     "GATT_READ_NOT_PERMITTED": 0x2,
    291     "GATT_WRITE_NOT_PERMITTED": 0x3,
    292     "GATT_INVALID_PDU": 0x4,
    293     "GATT_INSUFFICIENT_AUTHENTICATION": 0x5,
    294     "GATT_REQUEST_NOT_SUPPORTED": 0x6,
    295     "GATT_INVALID_OFFSET": 0x7,
    296     "GATT_INSUFFICIENT_AUTHORIZATION": 0x8,
    297     "GATT_INVALID_ATTRIBUTE_LENGTH": 0xD,
    298     "GATT_INSUFFICIENT_ENCRYPTION": 0xF,
    299     "GATT_CONNECTION_CONGESTED": 0x8F,
    300     "GATT_13_ERR": 0x13,
    301     "GATT_12_ERR": 0x12,
    302     "GATT_0C_ERR": 0x0C,
    303     "GATT_16": 0x16
    304 }
    305