Coverage for src / bluetooth_sig / types / gatt_enums.py: 99%
627 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-03 16:41 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-04-03 16:41 +0000
1"""Core GATT enumerations for strong typing.
3Defines enums for GATT properties, value types, characteristic names,
4and other core BLE concepts to replace string usage with type-safe
5alternatives.
6"""
8from __future__ import annotations
10import logging
11from enum import Enum, IntEnum, IntFlag
13logger = logging.getLogger(__name__)
16class DayOfWeek(IntEnum):
17 """Day of week enumeration per ISO 8601.
19 Used by Current Time Service and other time-related characteristics.
20 Values follow ISO 8601 standard (Monday=1, Sunday=7, Unknown=0).
21 """
23 UNKNOWN = 0
24 MONDAY = 1
25 TUESDAY = 2
26 WEDNESDAY = 3
27 THURSDAY = 4
28 FRIDAY = 5
29 SATURDAY = 6
30 SUNDAY = 7
33class AdjustReason(IntFlag):
34 """Time adjustment reason flags.
36 Used by Current Time Service to indicate why time was adjusted.
37 Can be combined as bitfield flags.
38 """
40 MANUAL_TIME_UPDATE = 1 << 0 # Bit 0
41 EXTERNAL_REFERENCE_TIME_UPDATE = 1 << 1 # Bit 1
42 CHANGE_OF_TIME_ZONE = 1 << 2 # Bit 2
43 CHANGE_OF_DST = 1 << 3 # Bit 3
44 # Bits 4-7: Reserved for future use
46 @classmethod
47 def from_raw(cls, value: int) -> AdjustReason:
48 """Create AdjustReason from raw byte value, masking reserved bits."""
49 if value & 0xF0:
50 logger.warning("AdjustReason: Reserved bits set in raw value %d, masking to valid bits only", value)
51 # Only bits 0-3 are defined, mask out bits 4-7 for forward compatibility
52 masked_value = value & 0x0F
53 return cls(masked_value)
56class GattProperty(IntFlag):
57 """GATT characteristic properties defined by Bluetooth SIG.
59 Uses IntFlag for bitwise operations when combining properties.
60 Bit values match the Bluetooth Core Specification.
61 """
63 BROADCAST = 0x0001
64 READ = 0x0002
65 WRITE_WITHOUT_RESPONSE = 0x0004
66 WRITE = 0x0008
67 NOTIFY = 0x0010
68 INDICATE = 0x0020
69 AUTHENTICATED_SIGNED_WRITES = 0x0040
70 EXTENDED_PROPERTIES = 0x0080
71 RELIABLE_WRITE = 0x0100
72 WRITABLE_AUXILIARIES = 0x0200
73 # Encryption and authentication properties (extended)
74 ENCRYPT_READ = 0x0400
75 ENCRYPT_WRITE = 0x0800
76 ENCRYPT_NOTIFY = 0x1000
77 AUTH_READ = 0x2000
78 AUTH_WRITE = 0x4000
79 AUTH_NOTIFY = 0x8000
82class CharacteristicRole(Enum):
83 """Inferred purpose of a GATT characteristic.
85 Derived algorithmically from SIG spec metadata (name patterns,
86 python_type, unit presence, field structure). No per-characteristic
87 maintenance is required — the classification is computed at
88 instantiation time from data already parsed from the SIG YAML specs.
90 Members:
91 MEASUREMENT — value represents something measured or observed from
92 a device or environment (temperature, heart rate, SpO2,
93 acceleration, concentration, range statistics, etc.).
94 STATUS — discrete operational state (mode, trend, boolean flag,
95 categorical state snapshot).
96 FEATURE — capability declaration or supported option bitmask,
97 not a live measured value.
98 CONTROL — command/control endpoint used to change behaviour.
99 INFO — contextual metadata or identifiers that are not
100 measured values (device identity, names, indices,
101 topology/location context such as floor number).
102 UNKNOWN — cannot be classified from available spec metadata alone;
103 use per-characteristic manual overrides where required.
104 """
106 MEASUREMENT = "measurement"
107 STATUS = "status"
108 FEATURE = "feature"
109 CONTROL = "control"
110 INFO = "info"
111 UNKNOWN = "unknown"
114# Wire-type lookup: maps YAML/GSS data type strings to Python types.
115WIRE_TYPE_MAP: dict[str, type] = {
116 # Integer types
117 "uint8": int,
118 "uint16": int,
119 "uint24": int,
120 "uint32": int,
121 "uint64": int,
122 "sint8": int,
123 "sint16": int,
124 "sint24": int,
125 "sint32": int,
126 "sint64": int,
127 # Boolean
128 "boolean": bool,
129 # Float types (including IEEE-11073 medical floats)
130 "float32": float,
131 "float64": float,
132 "medfloat16": float,
133 "medfloat32": float,
134 # Aliases
135 "sfloat": float,
136 "float": float,
137 # String types
138 "utf8s": str,
139 "utf16s": str,
140}
143class CharacteristicName(Enum):
144 """Enumeration of all supported GATT characteristic names."""
146 BATTERY_LEVEL = "Battery Level"
147 BATTERY_LEVEL_STATUS = "Battery Level Status"
148 BATTERY_CRITICAL_STATUS = "Battery Critical Status"
149 TEMPERATURE = "Temperature"
150 TEMPERATURE_MEASUREMENT = "Temperature Measurement"
151 TEMPERATURE_TYPE = "Temperature Type"
152 INTERMEDIATE_TEMPERATURE = "Intermediate Temperature"
153 MEASUREMENT_INTERVAL = "Measurement Interval"
154 HUMIDITY = "Humidity"
155 PRESSURE = "Pressure"
156 UV_INDEX = "UV Index"
157 ILLUMINANCE = "Illuminance"
158 POWER_SPECIFICATION = "Power Specification"
159 HEART_RATE_MEASUREMENT = "Heart Rate Measurement"
160 HEART_RATE_CONTROL_POINT = "Heart Rate Control Point"
161 BLOOD_PRESSURE_MEASUREMENT = "Blood Pressure Measurement"
162 INTERMEDIATE_CUFF_PRESSURE = "Intermediate Cuff Pressure"
163 BLOOD_PRESSURE_FEATURE = "Blood Pressure Feature"
164 CSC_MEASUREMENT = "CSC Measurement"
165 CSC_FEATURE = "CSC Feature"
166 RSC_MEASUREMENT = "RSC Measurement"
167 RSC_FEATURE = "RSC Feature"
168 CYCLING_POWER_MEASUREMENT = "Cycling Power Measurement"
169 CYCLING_POWER_FEATURE = "Cycling Power Feature"
170 CYCLING_POWER_VECTOR = "Cycling Power Vector"
171 CYCLING_POWER_CONTROL_POINT = "Cycling Power Control Point"
172 GLUCOSE_MEASUREMENT = "Glucose Measurement"
173 GLUCOSE_MEASUREMENT_CONTEXT = "Glucose Measurement Context"
174 GLUCOSE_FEATURE = "Glucose Feature"
175 MANUFACTURER_NAME_STRING = "Manufacturer Name String"
176 MODEL_NUMBER_STRING = "Model Number String"
177 SERIAL_NUMBER_STRING = "Serial Number String"
178 FIRMWARE_REVISION_STRING = "Firmware Revision String"
179 HARDWARE_REVISION_STRING = "Hardware Revision String"
180 SOFTWARE_REVISION_STRING = "Software Revision String"
181 SYSTEM_ID = "System ID"
182 PNP_ID = "PnP ID"
183 DEVICE_NAME = "Device Name"
184 APPEARANCE = "Appearance"
185 WEIGHT_MEASUREMENT = "Weight Measurement"
186 WEIGHT_SCALE_FEATURE = "Weight Scale Feature"
187 BODY_COMPOSITION_MEASUREMENT = "Body Composition Measurement"
188 BODY_COMPOSITION_FEATURE = "Body Composition Feature"
189 BODY_SENSOR_LOCATION = "Body Sensor Location"
190 # Environmental characteristics
191 ACCELERATION = "Acceleration"
192 ACCELERATION_3D = "Acceleration - 3D"
193 ACCELERATION_DETECTION_STATUS = "Acceleration Detection Status"
194 ALTITUDE = "Altitude"
195 DEW_POINT = "Dew Point"
196 ELEVATION = "Elevation"
197 FORCE = "Force"
198 GUST_FACTOR = "Gust Factor"
199 HEAT_INDEX = "Heat Index"
200 IRRADIANCE = "Irradiance"
201 LINEAR_POSITION = "Linear Position"
202 WIND_CHILL = "Wind Chill"
203 TRUE_WIND_SPEED = "True Wind Speed"
204 TRUE_WIND_DIRECTION = "True Wind Direction"
205 APPARENT_WIND_SPEED = "Apparent Wind Speed"
206 APPARENT_WIND_DIRECTION = "Apparent Wind Direction"
207 MAGNETIC_DECLINATION = "Magnetic Declination"
208 MAGNETIC_FLUX_DENSITY_2D = "Magnetic Flux Density - 2D"
209 MAGNETIC_FLUX_DENSITY_3D = "Magnetic Flux Density - 3D"
210 BAROMETRIC_PRESSURE_TREND = "Barometric Pressure Trend"
211 POLLEN_CONCENTRATION = "Pollen Concentration"
212 RAINFALL = "Rainfall"
213 ROTATIONAL_SPEED = "Rotational Speed"
214 TIME_ZONE = "Time Zone"
215 LOCAL_TIME_INFORMATION = "Local Time Information"
216 # Gas sensor characteristics
217 AMMONIA_CONCENTRATION = "Ammonia Concentration"
218 CARBON_MONOXIDE_CONCENTRATION = "Carbon Monoxide Concentration"
219 CO2_CONCENTRATION = r"CO\textsubscript{2} Concentration"
220 METHANE_CONCENTRATION = "Methane Concentration"
221 NITROGEN_DIOXIDE_CONCENTRATION = "Nitrogen Dioxide Concentration"
222 NON_METHANE_VOC_CONCENTRATION = "Non-Methane Volatile Organic Compounds Concentration"
223 OZONE_CONCENTRATION = "Ozone Concentration"
224 PM1_CONCENTRATION = "Particulate Matter - PM1 Concentration"
225 PM10_CONCENTRATION = "Particulate Matter - PM10 Concentration"
226 PM25_CONCENTRATION = "Particulate Matter - PM2.5 Concentration"
227 SULFUR_DIOXIDE_CONCENTRATION = "Sulfur Dioxide Concentration"
228 VOC_CONCENTRATION = "VOC Concentration"
229 # Power characteristics
230 APPARENT_ENERGY_32 = "Apparent Energy 32"
231 APPARENT_POWER = "Apparent Power"
232 ELECTRIC_CURRENT = "Electric Current"
233 ELECTRIC_CURRENT_RANGE = "Electric Current Range"
234 ELECTRIC_CURRENT_SPECIFICATION = "Electric Current Specification"
235 ELECTRIC_CURRENT_STATISTICS = "Electric Current Statistics"
236 VOLTAGE = "Voltage"
237 VOLTAGE_FREQUENCY = "Voltage Frequency"
238 VOLTAGE_SPECIFICATION = "Voltage Specification"
239 VOLTAGE_STATISTICS = "Voltage Statistics"
240 HIGH_VOLTAGE = "High Voltage"
241 AVERAGE_CURRENT = "Average Current"
242 AVERAGE_VOLTAGE = "Average Voltage"
243 SUPPORTED_POWER_RANGE = "Supported Power Range"
244 # Audio characteristics
245 NOISE = "Noise"
246 # Pulse oximetry
247 PLX_CONTINUOUS_MEASUREMENT = "PLX Continuous Measurement"
248 PLX_SPOT_CHECK_MEASUREMENT = "PLX Spot-Check Measurement"
249 PLX_FEATURES = "PLX Features"
250 LOCATION_AND_SPEED = "Location and Speed"
251 NAVIGATION = "Navigation"
252 POSITION_QUALITY = "Position Quality"
253 LN_FEATURE = "LN Feature"
254 LN_CONTROL_POINT = "LN Control Point"
255 SERVICE_CHANGED = "Service Changed"
256 ALERT_LEVEL = "Alert Level"
257 ALERT_CATEGORY_ID_BIT_MASK = "Alert Category ID Bit Mask"
258 ALERT_CATEGORY_ID = "Alert Category ID"
259 ALERT_STATUS = "Alert Status"
260 RINGER_SETTING = "Ringer Setting"
261 RINGER_CONTROL_POINT = "Ringer Control Point"
262 # Alert Notification Service characteristics
263 NEW_ALERT = "New Alert"
264 SUPPORTED_NEW_ALERT_CATEGORY = "Supported New Alert Category"
265 UNREAD_ALERT_STATUS = "Unread Alert Status"
266 SUPPORTED_UNREAD_ALERT_CATEGORY = "Supported Unread Alert Category"
267 ALERT_NOTIFICATION_CONTROL_POINT = "Alert Notification Control Point"
268 # Time characteristics
269 CURRENT_TIME = "Current Time"
270 DATE_TIME = "Date Time"
271 DAY_DATE_TIME = "Day Date Time"
272 DAY_OF_WEEK = "Day of Week"
273 DST_OFFSET = "DST Offset"
274 EXACT_TIME_256 = "Exact Time 256"
275 REFERENCE_TIME_INFORMATION = "Reference Time Information"
276 TIME_ACCURACY = "Time Accuracy"
277 TIME_SOURCE = "Time Source"
278 TIME_WITH_DST = "Time with DST"
279 TIME_UPDATE_CONTROL_POINT = "Time Update Control Point"
280 TIME_UPDATE_STATE = "Time Update State"
281 # Power level
282 TX_POWER_LEVEL = "Tx Power Level"
283 SCAN_INTERVAL_WINDOW = "Scan Interval Window"
284 SCAN_REFRESH = "Scan Refresh"
285 BOND_MANAGEMENT_FEATURE = "Bond Management Feature"
286 BOND_MANAGEMENT_CONTROL_POINT = "Bond Management Control Point"
287 # GAP characteristics
288 PERIPHERAL_PREFERRED_CONNECTION_PARAMETERS = "Peripheral Preferred Connection Parameters"
289 PERIPHERAL_PRIVACY_FLAG = "Peripheral Privacy Flag"
290 RECONNECTION_ADDRESS = "Reconnection Address"
291 # Indoor positioning characteristics
292 INDOOR_POSITIONING_CONFIGURATION = "Indoor Positioning Configuration"
293 LATITUDE = "Latitude"
294 LOCAL_EAST_COORDINATE = "Local East Coordinate"
295 LOCAL_NORTH_COORDINATE = "Local North Coordinate"
296 LONGITUDE = "Longitude"
297 FLOOR_NUMBER = "Floor Number"
298 LOCATION_NAME = "Location Name"
299 UNCERTAINTY = "Uncertainty"
300 # HID characteristics
301 BOOT_KEYBOARD_INPUT_REPORT = "Boot Keyboard Input Report"
302 BOOT_KEYBOARD_OUTPUT_REPORT = "Boot Keyboard Output Report"
303 BOOT_MOUSE_INPUT_REPORT = "Boot Mouse Input Report"
304 HID_INFORMATION = "HID Information"
305 REPORT_MAP = "Report Map"
306 HID_CONTROL_POINT = "HID Control Point"
307 REPORT = "Report"
308 PROTOCOL_MODE = "Protocol Mode"
309 FITNESS_MACHINE_FEATURE = "Fitness Machine Feature"
310 TREADMILL_DATA = "Treadmill Data"
311 CROSS_TRAINER_DATA = "Cross Trainer Data"
312 STEP_CLIMBER_DATA = "Step Climber Data"
313 STAIR_CLIMBER_DATA = "Stair Climber Data"
314 ROWER_DATA = "Rower Data"
315 INDOOR_BIKE_DATA = "Indoor Bike Data"
316 TRAINING_STATUS = "Training Status"
317 SUPPORTED_SPEED_RANGE = "Supported Speed Range"
318 SUPPORTED_INCLINATION_RANGE = "Supported Inclination Range"
319 SUPPORTED_RESISTANCE_LEVEL_RANGE = "Supported Resistance Level Range"
320 SUPPORTED_HEART_RATE_RANGE = "Supported Heart Rate Range"
321 FITNESS_MACHINE_CONTROL_POINT = "Fitness Machine Control Point"
322 FITNESS_MACHINE_STATUS = "Fitness Machine Status"
323 # Lighting characteristics
324 CHROMATICITY_COORDINATE = "Chromaticity Coordinate"
325 CORRELATED_COLOR_TEMPERATURE = "Correlated Color Temperature"
326 # User Data Service characteristics
327 ACTIVITY_GOAL = "Activity Goal"
328 AEROBIC_HEART_RATE_LOWER_LIMIT = "Aerobic Heart Rate Lower Limit"
329 AEROBIC_HEART_RATE_UPPER_LIMIT = "Aerobic Heart Rate Upper Limit"
330 AEROBIC_THRESHOLD = "Aerobic Threshold"
331 AGE = "Age"
332 ANAEROBIC_HEART_RATE_LOWER_LIMIT = "Anaerobic Heart Rate Lower Limit"
333 ANAEROBIC_HEART_RATE_UPPER_LIMIT = "Anaerobic Heart Rate Upper Limit"
334 ANAEROBIC_THRESHOLD = "Anaerobic Threshold"
335 CALORIC_INTAKE = "Caloric Intake"
336 DATABASE_CHANGE_INCREMENT = "Database Change Increment"
337 DATE_OF_BIRTH = "Date of Birth"
338 DATE_OF_THRESHOLD_ASSESSMENT = "Date of Threshold Assessment"
339 DEVICE_WEARING_POSITION = "Device Wearing Position"
340 EMAIL_ADDRESS = "Email Address"
341 FAT_BURN_HEART_RATE_LOWER_LIMIT = "Fat Burn Heart Rate Lower Limit"
342 FAT_BURN_HEART_RATE_UPPER_LIMIT = "Fat Burn Heart Rate Upper Limit"
343 FIRST_NAME = "First Name"
344 FIVE_ZONE_HEART_RATE_LIMITS = "Five Zone Heart Rate Limits"
345 FOUR_ZONE_HEART_RATE_LIMITS = "Four Zone Heart Rate Limits"
346 GENDER = "Gender"
347 HANDEDNESS = "Handedness"
348 HEART_RATE_MAX = "Heart Rate Max"
349 HEIGHT = "Height"
350 HIGH_INTENSITY_EXERCISE_THRESHOLD = "High Intensity Exercise Threshold"
351 HIGH_RESOLUTION_HEIGHT = "High Resolution Height"
352 HIP_CIRCUMFERENCE = "Hip Circumference"
353 LANGUAGE = "Language"
354 LAST_NAME = "Last Name"
355 MAXIMUM_RECOMMENDED_HEART_RATE = "Maximum Recommended Heart Rate"
356 MIDDLE_NAME = "Middle Name"
357 PREFERRED_UNITS = "Preferred Units"
358 RESTING_HEART_RATE = "Resting Heart Rate"
359 SEDENTARY_INTERVAL_NOTIFICATION = "Sedentary Interval Notification"
360 SPORT_TYPE_FOR_AEROBIC_AND_ANAEROBIC_THRESHOLDS = "Sport Type for Aerobic and Anaerobic Thresholds"
361 STRIDE_LENGTH = "Stride Length"
362 THREE_ZONE_HEART_RATE_LIMITS = "Three Zone Heart Rate Limits"
363 TWO_ZONE_HEART_RATE_LIMITS = "Two Zone Heart Rate Limits"
364 USER_INDEX = "User Index"
365 VO2_MAX = "VO2 Max"
366 WAIST_CIRCUMFERENCE = "Waist Circumference"
367 WEIGHT = "Weight"
368 # Generic value characteristics
369 BOOLEAN = "Boolean"
370 COEFFICIENT = "Coefficient"
371 COUNT_16 = "Count 16"
372 COUNT_24 = "Count 24"
373 CHROMATICITY_TOLERANCE = "Chromaticity Tolerance"
374 CHROMATIC_DISTANCE_FROM_PLANCKIAN = "Chromatic Distance from Planckian"
375 CIE_13_3_1995_COLOR_RENDERING_INDEX = "CIE 13.3-1995 Color Rendering Index"
376 CONTACT_STATUS_8 = "Contact Status 8"
377 CONTENT_CONTROL_ID = "Content Control ID"
378 COOKWARE_DESCRIPTION = "Cookware Description"
379 RECIPE_CONTROL = "Recipe Control"
380 RECIPE_PARAMETERS = "Recipe Parameters"
381 COOKING_STEP_STATUS = "Cooking Step Status"
382 COOKING_ZONE_CAPABILITIES = "Cooking Zone Capabilities"
383 COOKING_ZONE_DESIRED_COOKING_CONDITIONS = "Cooking Zone Desired Cooking Conditions"
384 COOKING_ZONE_ACTUAL_COOKING_CONDITIONS = "Cooking Zone Actual Cooking Conditions"
385 COOKWARE_SENSOR_DATA = "Cookware Sensor Data"
386 COOKWARE_SENSOR_AGGREGATE = "Cookware Sensor Aggregate"
387 COSINE_OF_THE_ANGLE = "Cosine of the Angle"
388 COUNTRY_CODE = "Country Code"
389 DATE_UTC = "Date UTC"
390 DOOR_WINDOW_STATUS = "Door/Window Status"
391 ENERGY = "Energy"
392 ENERGY_32 = "Energy 32"
393 ELAPSED_TIME = "Elapsed Time"
394 ESTIMATED_SERVICE_DATE = "Estimated Service Date"
395 FIXED_STRING_8 = "Fixed String 8"
396 FIXED_STRING_16 = "Fixed String 16"
397 FIXED_STRING_24 = "Fixed String 24"
398 FIXED_STRING_36 = "Fixed String 36"
399 FIXED_STRING_64 = "Fixed String 64"
400 GENERIC_LEVEL = "Generic Level"
401 GLOBAL_TRADE_ITEM_NUMBER = "Global Trade Item Number"
402 HIGH_TEMPERATURE = "High Temperature"
403 HUMIDITY_8 = "Humidity 8"
404 ILLUMINANCE_16 = "Illuminance 16"
405 INSTALLED_LOCATION = "Installed Location"
406 LIGHT_DISTRIBUTION = "Light Distribution"
407 LIGHT_OUTPUT = "Light Output"
408 LIGHT_SOURCE_TYPE = "Light Source Type"
409 LUMINOUS_EFFICACY = "Luminous Efficacy"
410 LUMINOUS_ENERGY = "Luminous Energy"
411 LUMINOUS_EXPOSURE = "Luminous Exposure"
412 LUMINOUS_FLUX = "Luminous Flux"
413 LUMINOUS_INTENSITY = "Luminous Intensity"
414 MASS_FLOW = "Mass Flow"
415 PERCEIVED_LIGHTNESS = "Perceived Lightness"
416 PERCENTAGE_8 = "Percentage 8"
417 PERCENTAGE_8_STEPS = "Percentage 8 Steps"
418 POWER = "Power"
419 PUSHBUTTON_STATUS_8 = "Pushbutton Status 8"
420 SENSOR_LOCATION = "Sensor Location"
421 SULFUR_HEXAFLUORIDE_CONCENTRATION = "Sulfur Hexafluoride Concentration"
422 TEMPERATURE_8 = "Temperature 8"
423 TIME_DECIHOUR_8 = "Time Decihour 8"
424 TIME_EXPONENTIAL_8 = "Time Exponential 8"
425 TIME_HOUR_24 = "Time Hour 24"
426 TIME_MILLISECOND_24 = "Time Millisecond 24"
427 TIME_SECOND_8 = "Time Second 8"
428 TIME_SECOND_16 = "Time Second 16"
429 TIME_SECOND_32 = "Time Second 32"
430 TORQUE = "Torque"
431 VOLUME_FLOW = "Volume Flow"
432 ACS_CONTROL_POINT = "ACS Control Point"
433 ACS_DATA_IN = "ACS Data In"
434 ACS_DATA_OUT_INDICATE = "ACS Data Out Indicate"
435 ACS_DATA_OUT_NOTIFY = "ACS Data Out Notify"
436 ACS_STATUS = "ACS Status"
437 AP_SYNC_KEY_MATERIAL = "AP Sync Key Material"
438 ASE_CONTROL_POINT = "ASE Control Point"
439 ACTIVE_PRESET_INDEX = "Active Preset Index"
440 ADVERTISING_CONSTANT_TONE_EXTENSION_INTERVAL = "Advertising Constant Tone Extension Interval"
441 ADVERTISING_CONSTANT_TONE_EXTENSION_MINIMUM_LENGTH = "Advertising Constant Tone Extension Minimum Length"
442 ADVERTISING_CONSTANT_TONE_EXTENSION_MINIMUM_TRANSMIT_COUNT = (
443 "Advertising Constant Tone Extension Minimum Transmit Count"
444 )
445 ADVERTISING_CONSTANT_TONE_EXTENSION_PHY = "Advertising Constant Tone Extension PHY"
446 ADVERTISING_CONSTANT_TONE_EXTENSION_TRANSMIT_DURATION = "Advertising Constant Tone Extension Transmit Duration"
447 AGGREGATE = "Aggregate"
448 ANALOG = "Analog"
449 AUDIO_INPUT_CONTROL_POINT = "Audio Input Control Point"
450 AUDIO_INPUT_DESCRIPTION = "Audio Input Description"
451 AUDIO_INPUT_STATE = "Audio Input State"
452 AUDIO_INPUT_STATUS = "Audio Input Status"
453 AUDIO_INPUT_TYPE = "Audio Input Type"
454 AUDIO_LOCATION = "Audio Location"
455 AUDIO_OUTPUT_DESCRIPTION = "Audio Output Description"
456 AVAILABLE_AUDIO_CONTEXTS = "Available Audio Contexts"
457 BGR_FEATURES = "BGR Features"
458 BGS_FEATURES = "BGS Features"
459 BR_EDR_HANDOVER_DATA = "BR-EDR Handover Data"
460 BSS_CONTROL_POINT = "BSS Control Point"
461 BSS_RESPONSE = "BSS Response"
462 BATTERY_ENERGY_STATUS = "Battery Energy Status"
463 BATTERY_HEALTH_INFORMATION = "Battery Health Information"
464 BATTERY_HEALTH_STATUS = "Battery Health Status"
465 BATTERY_INFORMATION = "Battery Information"
466 BATTERY_TIME_STATUS = "Battery Time Status"
467 BEARER_LIST_CURRENT_CALLS = "Bearer List Current Calls"
468 BEARER_PROVIDER_NAME = "Bearer Provider Name"
469 BEARER_SIGNAL_STRENGTH = "Bearer Signal Strength"
470 BEARER_SIGNAL_STRENGTH_REPORTING_INTERVAL = "Bearer Signal Strength Reporting Interval"
471 BEARER_TECHNOLOGY = "Bearer Technology"
472 BEARER_UCI = "Bearer UCI"
473 BEARER_URI_SCHEMES_SUPPORTED_LIST = "Bearer URI Schemes Supported List"
474 BLOOD_PRESSURE_RECORD = "Blood Pressure Record"
475 BLUETOOTH_SIG_DATA = "Bluetooth SIG Data"
476 BROADCAST_AUDIO_SCAN_CONTROL_POINT = "Broadcast Audio Scan Control Point"
477 BROADCAST_RECEIVE_STATE = "Broadcast Receive State"
478 CGM_FEATURE = "CGM Feature"
479 CGM_MEASUREMENT = "CGM Measurement"
480 CGM_SESSION_RUN_TIME = "CGM Session Run Time"
481 CGM_SESSION_START_TIME = "CGM Session Start Time"
482 CGM_SPECIFIC_OPS_CONTROL_POINT = "CGM Specific Ops Control Point"
483 CGM_STATUS = "CGM Status"
484 CALL_CONTROL_POINT = "Call Control Point"
485 CALL_CONTROL_POINT_OPTIONAL_OPCODES = "Call Control Point Optional Opcodes"
486 CALL_FRIENDLY_NAME = "Call Friendly Name"
487 CALL_STATE = "Call State"
488 CARDIORESPIRATORY_ACTIVITY_INSTANTANEOUS_DATA = "CardioRespiratory Activity Instantaneous Data"
489 CARDIORESPIRATORY_ACTIVITY_SUMMARY_DATA = "CardioRespiratory Activity Summary Data"
490 CENTRAL_ADDRESS_RESOLUTION = "Central Address Resolution"
491 CHROMATICITY_COORDINATES = "Chromaticity Coordinates"
492 CHROMATICITY_IN_CCT_AND_DUV_VALUES = "Chromaticity in CCT and Duv Values"
493 CLIENT_SUPPORTED_FEATURES = "Client Supported Features"
494 CONSTANT_TONE_EXTENSION_ENABLE = "Constant Tone Extension Enable"
495 COORDINATED_SET_NAME = "Coordinated Set Name"
496 COORDINATED_SET_SIZE = "Coordinated Set Size"
497 CURRENT_GROUP_OBJECT_ID = "Current Group Object ID"
498 CURRENT_TRACK_OBJECT_ID = "Current Track Object ID"
499 CURRENT_TRACK_SEGMENTS_OBJECT_ID = "Current Track Segments Object ID"
500 DATABASE_HASH = "Database Hash"
501 DESCRIPTOR_VALUE_CHANGED = "Descriptor Value Changed"
502 DIGITAL = "Digital"
503 DEVICE_TIME = "Device Time"
504 DEVICE_TIME_CONTROL_POINT = "Device Time Control Point"
505 DEVICE_TIME_FEATURE = "Device Time Feature"
506 DEVICE_TIME_PARAMETERS = "Device Time Parameters"
507 ESL_ADDRESS = "ESL Address"
508 ESL_CONTROL_POINT = "ESL Control Point"
509 ESL_CURRENT_ABSOLUTE_TIME = "ESL Current Absolute Time"
510 ESL_DISPLAY_INFORMATION = "ESL Display Information"
511 ESL_IMAGE_INFORMATION = "ESL Image Information"
512 ESL_LED_INFORMATION = "ESL LED Information"
513 ESL_RESPONSE_KEY_MATERIAL = "ESL Response Key Material"
514 ESL_SENSOR_INFORMATION = "ESL Sensor Information"
515 EMERGENCY_ID = "Emergency ID"
516 EMERGENCY_TEXT = "Emergency Text"
517 ENCRYPTED_DATA_KEY_MATERIAL = "Encrypted Data Key Material"
518 ENERGY_IN_A_PERIOD_OF_DAY = "Energy in a Period of Day"
519 ENHANCED_BLOOD_PRESSURE_MEASUREMENT = "Enhanced Blood Pressure Measurement"
520 ENHANCED_INTERMEDIATE_CUFF_PRESSURE = "Enhanced Intermediate Cuff Pressure"
521 EVENT_STATISTICS = "Event Statistics"
522 FIRST_USE_DATE = "First Use Date"
523 GHS_CONTROL_POINT = "GHS Control Point"
524 GMAP_ROLE = "GMAP Role"
525 GAIN_SETTINGS_ATTRIBUTE = "Gain Settings Attribute"
526 GENERAL_ACTIVITY_INSTANTANEOUS_DATA = "General Activity Instantaneous Data"
527 GENERAL_ACTIVITY_SUMMARY_DATA = "General Activity Summary Data"
528 HID_ISO_PROPERTIES = "HID ISO Properties"
529 HTTP_CONTROL_POINT = "HTTP Control Point"
530 HTTP_ENTITY_BODY = "HTTP Entity Body"
531 HTTP_HEADERS = "HTTP Headers"
532 HTTP_STATUS_CODE = "HTTP Status Code"
533 HTTPS_SECURITY = "HTTPS Security"
534 HEALTH_SENSOR_FEATURES = "Health Sensor Features"
535 HEARING_AID_FEATURES = "Hearing Aid Features"
536 HEARING_AID_PRESET_CONTROL_POINT = "Hearing Aid Preset Control Point"
537 IDD_ANNUNCIATION_STATUS = "IDD Annunciation Status"
538 IDD_COMMAND_CONTROL_POINT = "IDD Command Control Point"
539 IDD_COMMAND_DATA = "IDD Command Data"
540 IDD_FEATURES = "IDD Features"
541 IDD_HISTORY_DATA = "IDD History Data"
542 IDD_RECORD_ACCESS_CONTROL_POINT = "IDD Record Access Control Point"
543 IDD_STATUS = "IDD Status"
544 IDD_STATUS_CHANGED = "IDD Status Changed"
545 IDD_STATUS_READER_CONTROL_POINT = "IDD Status Reader Control Point"
546 IEEE_11073_20601_REGULATORY_CERTIFICATION_DATA_LIST = "IEEE 11073-20601 Regulatory Certification Data List"
547 IMD_CONTROL = "IMD Control"
548 IMD_HISTORICAL_DATA = "IMD Historical Data"
549 IMD_STATUS = "IMD Status"
550 IMDS_DESCRIPTOR_VALUE_CHANGED = "IMDS Descriptor Value Changed"
551 INCOMING_CALL = "Incoming Call"
552 INCOMING_CALL_TARGET_BEARER_URI = "Incoming Call Target Bearer URI"
553 LE_GATT_SECURITY_LEVELS = "LE GATT Security Levels"
554 LE_HID_OPERATION_MODE = "LE HID Operation Mode"
555 LENGTH = "Length"
556 LIFE_CYCLE_DATA = "Life Cycle Data"
557 LIVE_HEALTH_OBSERVATIONS = "Live Health Observations"
558 LUMINOUS_FLUX_RANGE = "Luminous Flux Range"
559 MEDIA_CONTROL_POINT = "Media Control Point"
560 MEDIA_CONTROL_POINT_OPCODES_SUPPORTED = "Media Control Point Opcodes Supported"
561 MEDIA_PLAYER_ICON_OBJECT_ID = "Media Player Icon Object ID"
562 MEDIA_PLAYER_ICON_URL = "Media Player Icon URL"
563 MEDIA_PLAYER_NAME = "Media Player Name"
564 MEDIA_STATE = "Media State"
565 MESH_PROVISIONING_DATA_IN = "Mesh Provisioning Data In"
566 MESH_PROVISIONING_DATA_OUT = "Mesh Provisioning Data Out"
567 MESH_PROXY_DATA_IN = "Mesh Proxy Data In"
568 MESH_PROXY_DATA_OUT = "Mesh Proxy Data Out"
569 MUTE = "Mute"
570 NEXT_TRACK_OBJECT_ID = "Next Track Object ID"
571 OTS_FEATURE = "OTS Feature"
572 OBJECT_ACTION_CONTROL_POINT = "Object Action Control Point"
573 OBJECT_CHANGED = "Object Changed"
574 OBJECT_FIRST_CREATED = "Object First-Created"
575 OBJECT_ID = "Object ID"
576 OBJECT_LAST_MODIFIED = "Object Last-Modified"
577 OBJECT_LIST_CONTROL_POINT = "Object List Control Point"
578 OBJECT_LIST_FILTER = "Object List Filter"
579 OBJECT_NAME = "Object Name"
580 OBJECT_PROPERTIES = "Object Properties"
581 OBJECT_SIZE = "Object Size"
582 OBJECT_TYPE = "Object Type"
583 OBSERVATION_SCHEDULE_CHANGED = "Observation Schedule Changed"
584 ON_DEMAND_RANGING_DATA = "On-demand Ranging Data"
585 PARENT_GROUP_OBJECT_ID = "Parent Group Object ID"
586 PHYSICAL_ACTIVITY_CURRENT_SESSION = "Physical Activity Current Session"
587 PHYSICAL_ACTIVITY_MONITOR_CONTROL_POINT = "Physical Activity Monitor Control Point"
588 PHYSICAL_ACTIVITY_MONITOR_FEATURES = "Physical Activity Monitor Features"
589 PHYSICAL_ACTIVITY_SESSION_DESCRIPTOR = "Physical Activity Session Descriptor"
590 PLAYBACK_SPEED = "Playback Speed"
591 PLAYING_ORDER = "Playing Order"
592 PLAYING_ORDERS_SUPPORTED = "Playing Orders Supported"
593 PRECISE_ACCELERATION_3D = "Precise Acceleration - 3D"
594 RAS_CONTROL_POINT = "RAS Control Point"
595 RAS_FEATURES = "RAS Features"
596 RC_FEATURE = "RC Feature"
597 RC_SETTINGS = "RC Settings"
598 RANGING_DATA_OVERWRITTEN = "Ranging Data Overwritten"
599 RANGING_DATA_READY = "Ranging Data Ready"
600 REAL_TIME_RANGING_DATA = "Real-time Ranging Data"
601 RECONNECTION_CONFIGURATION_CONTROL_POINT = "Reconnection Configuration Control Point"
602 RECORD_ACCESS_CONTROL_POINT = "Record Access Control Point"
603 REGISTERED_USER = "Registered User"
604 RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE = (
605 "Relative Runtime in a Correlated Color Temperature Range"
606 )
607 RELATIVE_RUNTIME_IN_A_CURRENT_RANGE = "Relative Runtime in a Current Range"
608 RELATIVE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE = "Relative Runtime in a Generic Level Range"
609 RELATIVE_VALUE_IN_A_PERIOD_OF_DAY = "Relative Value in a Period of Day"
610 RELATIVE_VALUE_IN_A_TEMPERATURE_RANGE = "Relative Value in a Temperature Range"
611 RELATIVE_VALUE_IN_A_VOLTAGE_RANGE = "Relative Value in a Voltage Range"
612 RELATIVE_VALUE_IN_AN_ILLUMINANCE_RANGE = "Relative Value in an Illuminance Range"
613 RESOLVABLE_PRIVATE_ADDRESS_ONLY = "Resolvable Private Address Only"
614 SC_CONTROL_POINT = "SC Control Point"
615 SEARCH_CONTROL_POINT = "Search Control Point"
616 SEARCH_RESULTS_OBJECT_ID = "Search Results Object ID"
617 SEEKING_SPEED = "Seeking Speed"
618 SERVER_SUPPORTED_FEATURES = "Server Supported Features"
619 SERVICE_CYCLE_DATA = "Service Cycle Data"
620 SET_IDENTITY_RESOLVING_KEY = "Set Identity Resolving Key"
621 SET_MEMBER_LOCK = "Set Member Lock"
622 SET_MEMBER_RANK = "Set Member Rank"
623 SINK_ASE = "Sink ASE"
624 SINK_AUDIO_LOCATIONS = "Sink Audio Locations"
625 SINK_PAC = "Sink PAC"
626 SLEEP_ACTIVITY_INSTANTANEOUS_DATA = "Sleep Activity Instantaneous Data"
627 SLEEP_ACTIVITY_SUMMARY_DATA = "Sleep Activity Summary Data"
628 SOURCE_ASE = "Source ASE"
629 SOURCE_AUDIO_LOCATIONS = "Source Audio Locations"
630 SOURCE_PAC = "Source PAC"
631 STATUS_FLAGS = "Status Flags"
632 STEP_COUNTER_ACTIVITY_SUMMARY_DATA = "Step Counter Activity Summary Data"
633 STORED_HEALTH_OBSERVATIONS = "Stored Health Observations"
634 SUPPORTED_AUDIO_CONTEXTS = "Supported Audio Contexts"
635 TDS_CONTROL_POINT = "TDS Control Point"
636 TMAP_ROLE = "TMAP Role"
637 TEMPERATURE_8_STATISTICS = "Temperature 8 Statistics"
638 TEMPERATURE_8_IN_A_PERIOD_OF_DAY = "Temperature 8 in a Period of Day"
639 TEMPERATURE_RANGE = "Temperature Range"
640 TEMPERATURE_STATISTICS = "Temperature Statistics"
641 TERMINATION_REASON = "Termination Reason"
642 TIME_CHANGE_LOG_DATA = "Time Change Log Data"
643 TRACK_CHANGED = "Track Changed"
644 TRACK_DURATION = "Track Duration"
645 TRACK_POSITION = "Track Position"
646 TRACK_TITLE = "Track Title"
647 UDI_FOR_MEDICAL_DEVICES = "UDI for Medical Devices"
648 UGG_FEATURES = "UGG Features"
649 UGT_FEATURES = "UGT Features"
650 URI = "URI"
651 USER_CONTROL_POINT = "User Control Point"
652 VOICE_ASSISTANT_NAME = "Voice Assistant Name"
653 VOICE_ASSISTANT_UUID = "Voice Assistant UUID"
654 VOICE_ASSISTANT_SERVICE_CONTROL_POINT = "Voice Assistant Service Control Point"
655 VOICE_ASSISTANT_SESSION_STATE = "Voice Assistant Session State"
656 VOICE_ASSISTANT_SESSION_FLAG = "Voice Assistant Session Flag"
657 VOICE_ASSISTANT_SUPPORTED_LANGUAGES = "Voice Assistant Supported Languages"
658 VOICE_ASSISTANT_SUPPORTED_FEATURES = "Voice Assistant Supported Features"
659 VOLUME_CONTROL_POINT = "Volume Control Point"
660 VOLUME_FLAGS = "Volume Flags"
661 VOLUME_OFFSET_CONTROL_POINT = "Volume Offset Control Point"
662 VOLUME_OFFSET_STATE = "Volume Offset State"
663 VOLUME_STATE = "Volume State"
664 WORK_CYCLE_DATA = "Work Cycle Data"
667class ServiceName(Enum):
668 """Enumeration of all supported GATT service names."""
670 GAP = "GAP"
671 GATT = "GATT"
672 IMMEDIATE_ALERT = "Immediate Alert"
673 LINK_LOSS = "Link Loss"
674 TX_POWER = "Tx Power"
675 NEXT_DST_CHANGE = "Next DST Change"
676 DEVICE_INFORMATION = "Device Information"
677 BATTERY = "Battery"
678 HEART_RATE = "Heart Rate"
679 BLOOD_PRESSURE = "Blood Pressure"
680 HEALTH_THERMOMETER = "Health Thermometer"
681 GLUCOSE = "Glucose"
682 CYCLING_SPEED_AND_CADENCE = "Cycling Speed and Cadence"
683 CYCLING_POWER = "Cycling Power"
684 RUNNING_SPEED_AND_CADENCE = "Running Speed and Cadence"
685 AUTOMATION_IO = "Automation IO"
686 ENVIRONMENTAL_SENSING = "Environmental Sensing"
687 ALERT_NOTIFICATION = "Alert Notification"
688 BODY_COMPOSITION = "Body Composition"
689 USER_DATA = "User Data"
690 WEIGHT_SCALE = "Weight Scale"
691 LOCATION_AND_NAVIGATION = "Location and Navigation"
692 PHONE_ALERT_STATUS = "Phone Alert Status"
693 REFERENCE_TIME_UPDATE = "Reference Time Update"
694 CURRENT_TIME = "Current Time"
695 SCAN_PARAMETERS = "Scan Parameters"
696 BOND_MANAGEMENT = "Bond Management"
697 INDOOR_POSITIONING = "Indoor Positioning"
698 HUMAN_INTERFACE_DEVICE = "Human Interface Device"
699 PULSE_OXIMETER = "Pulse Oximeter"
700 FITNESS_MACHINE = "Fitness Machine"
701 CONTINUOUS_GLUCOSE_MONITORING = "Continuous Glucose Monitoring"
702 INSULIN_DELIVERY = "Insulin Delivery"
703 PHYSICAL_ACTIVITY_MONITOR = "Physical Activity Monitor"
704 GENERIC_HEALTH_SENSOR = "Generic Health Sensor"
705 INDUSTRIAL_MEASUREMENT_DEVICE = "Industrial Measurement Device"
706 AUDIO_STREAM_CONTROL = "Audio Stream Control"
707 AUDIO_INPUT_CONTROL = "Audio Input Control"
708 VOLUME_CONTROL = "Volume Control"
709 VOLUME_OFFSET_CONTROL = "Volume Offset Control"
710 MEDIA_CONTROL = "Media Control"
711 GENERIC_MEDIA_CONTROL = "Generic Media Control"
712 PUBLISHED_AUDIO_CAPABILITIES = "Published Audio Capabilities"
713 BASIC_AUDIO_ANNOUNCEMENT = "Basic Audio Announcement"
714 BROADCAST_AUDIO_ANNOUNCEMENT = "Broadcast Audio Announcement"
715 COMMON_AUDIO = "Common Audio"
716 BROADCAST_AUDIO_SCAN = "Broadcast Audio Scan"
717 HEARING_ACCESS = "Hearing Access"
718 GAMING_AUDIO = "Gaming Audio"
719 TELEPHONY_AND_MEDIA_AUDIO = "Telephony and Media Audio"
720 PUBLIC_BROADCAST_ANNOUNCEMENT = "Public Broadcast Announcement"
721 MICROPHONE_CONTROL = "Microphone Control"
722 TELEPHONE_BEARER = "Telephone Bearer"
723 GENERIC_TELEPHONE_BEARER = "Generic Telephone Bearer"
724 INTERNET_PROTOCOL_SUPPORT = "Internet Protocol Support"
725 HTTP_PROXY = "HTTP Proxy"
726 TRANSPORT_DISCOVERY = "Transport Discovery"
727 OBJECT_TRANSFER = "Object Transfer"
728 RECONNECTION_CONFIGURATION = "Reconnection Configuration"
729 BINARY_SENSOR = "Binary Sensor"
730 EMERGENCY_CONFIGURATION = "Emergency Configuration"
731 AUTHORIZATION_CONTROL = "Authorization Control"
732 ELAPSED_TIME = "Elapsed Time"
733 DEVICE_TIME = "Device Time"
734 COORDINATED_SET_IDENTIFICATION = "Coordinated Set Identification"
735 CONSTANT_TONE_EXTENSION = "Constant Tone Extension"
736 MESH_PROVISIONING = "Mesh Provisioning"
737 MESH_PROXY = "Mesh Proxy"
738 MESH_PROXY_SOLICITATION = "Mesh Proxy Solicitation"
739 ELECTRONIC_SHELF_LABEL = "Electronic Shelf Label"
740 RANGING = "Ranging"
741 HID_ISO = "HID ISO"
742 COOKWARE = "Cookware"
743 VOICE_ASSISTANT = "Voice Assistant"
744 GENERIC_VOICE_ASSISTANT = "Generic Voice Assistant"