94 lines
2.4 KiB
Python
94 lines
2.4 KiB
Python
"""
|
|
Bluetooth Assigned Numbers
|
|
--------------------------
|
|
|
|
This module contains useful assigned numbers from the Bluetooth spec.
|
|
|
|
See <https://www.bluetooth.com/specifications/assigned-numbers/>.
|
|
"""
|
|
|
|
from enum import IntEnum
|
|
from typing import Literal
|
|
|
|
|
|
class AdvertisementDataType(IntEnum):
|
|
"""
|
|
Generic Access Profile advertisement data types.
|
|
|
|
`Source <https://btprodspecificationrefs.blob.core.windows.net/assigned-numbers/Assigned%20Number%20Types/Generic%20Access%20Profile.pdf>`.
|
|
|
|
.. versionadded:: 0.15
|
|
"""
|
|
|
|
FLAGS = 0x01
|
|
INCOMPLETE_LIST_SERVICE_UUID16 = 0x02
|
|
COMPLETE_LIST_SERVICE_UUID16 = 0x03
|
|
INCOMPLETE_LIST_SERVICE_UUID32 = 0x04
|
|
COMPLETE_LIST_SERVICE_UUID32 = 0x05
|
|
INCOMPLETE_LIST_SERVICE_UUID128 = 0x06
|
|
COMPLETE_LIST_SERVICE_UUID128 = 0x07
|
|
SHORTENED_LOCAL_NAME = 0x08
|
|
COMPLETE_LOCAL_NAME = 0x09
|
|
TX_POWER_LEVEL = 0x0A
|
|
CLASS_OF_DEVICE = 0x0D
|
|
|
|
SERVICE_DATA_UUID16 = 0x16
|
|
SERVICE_DATA_UUID32 = 0x20
|
|
SERVICE_DATA_UUID128 = 0x21
|
|
|
|
MANUFACTURER_SPECIFIC_DATA = 0xFF
|
|
|
|
|
|
# NOTE: these must match BlueZ name mapping
|
|
CharacteristicPropertyName = Literal[
|
|
"broadcast",
|
|
"read",
|
|
"write-without-response",
|
|
"write",
|
|
"notify",
|
|
"indicate",
|
|
"authenticated-signed-writes",
|
|
"extended-properties",
|
|
"reliable-write",
|
|
"writable-auxiliaries",
|
|
"encrypt-read",
|
|
"encrypt-write",
|
|
# "encrypt-notify" and "encrypt-indicate" are server-only
|
|
"encrypt-authenticated-read",
|
|
"encrypt-authenticated-write",
|
|
# "encrypt-authenticated-notify", "encrypt-authenticated-indicate",
|
|
# "secure-read", "secure-write", "secure-notify", "secure-indicate"
|
|
# are server-only
|
|
"authorize",
|
|
]
|
|
|
|
CHARACTERISTIC_PROPERTIES: dict[int, CharacteristicPropertyName] = {
|
|
0x1: "broadcast",
|
|
0x2: "read",
|
|
0x4: "write-without-response",
|
|
0x8: "write",
|
|
0x10: "notify",
|
|
0x20: "indicate",
|
|
0x40: "authenticated-signed-writes",
|
|
0x80: "extended-properties",
|
|
0x100: "reliable-write",
|
|
0x200: "writable-auxiliaries",
|
|
}
|
|
|
|
|
|
def gatt_char_props_to_strs(
|
|
props: int,
|
|
) -> frozenset[CharacteristicPropertyName]:
|
|
"""
|
|
Convert a GATT characteristic properties bitmask to a set of strings.
|
|
|
|
Args:
|
|
props: The GATT characteristic properties bitmask.
|
|
|
|
Returns:
|
|
A set of strings representing the GATT characteristic properties.
|
|
"""
|
|
return frozenset(
|
|
CHARACTERISTIC_PROPERTIES[i] for i in (1 << n for n in range(16)) if props & i
|
|
)
|