Coverage for src / bluetooth_sig / types / gatt_enums.py: 100%
563 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-18 11:17 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-18 11:17 +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 COSINE_OF_THE_ANGLE = "Cosine of the Angle"
379 COUNTRY_CODE = "Country Code"
380 DATE_UTC = "Date UTC"
381 DOOR_WINDOW_STATUS = "Door/Window Status"
382 ENERGY = "Energy"
383 ENERGY_32 = "Energy 32"
384 ESTIMATED_SERVICE_DATE = "Estimated Service Date"
385 FIXED_STRING_8 = "Fixed String 8"
386 FIXED_STRING_16 = "Fixed String 16"
387 FIXED_STRING_24 = "Fixed String 24"
388 FIXED_STRING_36 = "Fixed String 36"
389 FIXED_STRING_64 = "Fixed String 64"
390 GENERIC_LEVEL = "Generic Level"
391 GLOBAL_TRADE_ITEM_NUMBER = "Global Trade Item Number"
392 HIGH_TEMPERATURE = "High Temperature"
393 HUMIDITY_8 = "Humidity 8"
394 ILLUMINANCE_16 = "Illuminance 16"
395 LIGHT_DISTRIBUTION = "Light Distribution"
396 LIGHT_OUTPUT = "Light Output"
397 LIGHT_SOURCE_TYPE = "Light Source Type"
398 LUMINOUS_EFFICACY = "Luminous Efficacy"
399 LUMINOUS_ENERGY = "Luminous Energy"
400 LUMINOUS_EXPOSURE = "Luminous Exposure"
401 LUMINOUS_FLUX = "Luminous Flux"
402 LUMINOUS_INTENSITY = "Luminous Intensity"
403 MASS_FLOW = "Mass Flow"
404 PERCEIVED_LIGHTNESS = "Perceived Lightness"
405 PERCENTAGE_8 = "Percentage 8"
406 PERCENTAGE_8_STEPS = "Percentage 8 Steps"
407 POWER = "Power"
408 PUSHBUTTON_STATUS_8 = "Pushbutton Status 8"
409 SENSOR_LOCATION = "Sensor Location"
410 SULFUR_HEXAFLUORIDE_CONCENTRATION = "Sulfur Hexafluoride Concentration"
411 TEMPERATURE_8 = "Temperature 8"
412 TIME_DECIHOUR_8 = "Time Decihour 8"
413 TIME_EXPONENTIAL_8 = "Time Exponential 8"
414 TIME_HOUR_24 = "Time Hour 24"
415 TIME_MILLISECOND_24 = "Time Millisecond 24"
416 TIME_SECOND_8 = "Time Second 8"
417 TIME_SECOND_16 = "Time Second 16"
418 TIME_SECOND_32 = "Time Second 32"
419 TORQUE = "Torque"
420 VOLUME_FLOW = "Volume Flow"
422 # Not implemented characteristics - listed for completeness
423 ACS_CONTROL_POINT = "ACS Control Point"
424 ACS_DATA_IN = "ACS Data In"
425 ACS_DATA_OUT_INDICATE = "ACS Data Out Indicate"
426 ACS_DATA_OUT_NOTIFY = "ACS Data Out Notify"
427 ACS_STATUS = "ACS Status"
428 AP_SYNC_KEY_MATERIAL = "AP Sync Key Material"
429 ASE_CONTROL_POINT = "ASE Control Point"
430 ACTIVE_PRESET_INDEX = "Active Preset Index"
431 ADVERTISING_CONSTANT_TONE_EXTENSION_INTERVAL = "Advertising Constant Tone Extension Interval"
432 ADVERTISING_CONSTANT_TONE_EXTENSION_MINIMUM_LENGTH = "Advertising Constant Tone Extension Minimum Length"
433 ADVERTISING_CONSTANT_TONE_EXTENSION_MINIMUM_TRANSMIT_COUNT = (
434 "Advertising Constant Tone Extension Minimum Transmit Count"
435 )
436 ADVERTISING_CONSTANT_TONE_EXTENSION_PHY = "Advertising Constant Tone Extension PHY"
437 ADVERTISING_CONSTANT_TONE_EXTENSION_TRANSMIT_DURATION = "Advertising Constant Tone Extension Transmit Duration"
438 AGGREGATE = "Aggregate"
439 AUDIO_INPUT_CONTROL_POINT = "Audio Input Control Point"
440 AUDIO_INPUT_DESCRIPTION = "Audio Input Description"
441 AUDIO_INPUT_STATE = "Audio Input State"
442 AUDIO_INPUT_STATUS = "Audio Input Status"
443 AUDIO_INPUT_TYPE = "Audio Input Type"
444 AUDIO_LOCATION = "Audio Location"
445 AUDIO_OUTPUT_DESCRIPTION = "Audio Output Description"
446 AVAILABLE_AUDIO_CONTEXTS = "Available Audio Contexts"
447 BGR_FEATURES = "BGR Features"
448 BGS_FEATURES = "BGS Features"
449 BR_EDR_HANDOVER_DATA = "BR-EDR Handover Data"
450 BSS_CONTROL_POINT = "BSS Control Point"
451 BSS_RESPONSE = "BSS Response"
452 BATTERY_ENERGY_STATUS = "Battery Energy Status"
453 BATTERY_HEALTH_INFORMATION = "Battery Health Information"
454 BATTERY_HEALTH_STATUS = "Battery Health Status"
455 BATTERY_INFORMATION = "Battery Information"
456 BATTERY_TIME_STATUS = "Battery Time Status"
457 BEARER_LIST_CURRENT_CALLS = "Bearer List Current Calls"
458 BEARER_PROVIDER_NAME = "Bearer Provider Name"
459 BEARER_SIGNAL_STRENGTH = "Bearer Signal Strength"
460 BEARER_SIGNAL_STRENGTH_REPORTING_INTERVAL = "Bearer Signal Strength Reporting Interval"
461 BEARER_TECHNOLOGY = "Bearer Technology"
462 BEARER_UCI = "Bearer UCI"
463 BEARER_URI_SCHEMES_SUPPORTED_LIST = "Bearer URI Schemes Supported List"
464 BLOOD_PRESSURE_RECORD = "Blood Pressure Record"
465 BLUETOOTH_SIG_DATA = "Bluetooth SIG Data"
466 BROADCAST_AUDIO_SCAN_CONTROL_POINT = "Broadcast Audio Scan Control Point"
467 BROADCAST_RECEIVE_STATE = "Broadcast Receive State"
468 CGM_FEATURE = "CGM Feature"
469 CGM_MEASUREMENT = "CGM Measurement"
470 CGM_SESSION_RUN_TIME = "CGM Session Run Time"
471 CGM_SESSION_START_TIME = "CGM Session Start Time"
472 CGM_SPECIFIC_OPS_CONTROL_POINT = "CGM Specific Ops Control Point"
473 CGM_STATUS = "CGM Status"
474 CALL_CONTROL_POINT = "Call Control Point"
475 CALL_CONTROL_POINT_OPTIONAL_OPCODES = "Call Control Point Optional Opcodes"
476 CALL_FRIENDLY_NAME = "Call Friendly Name"
477 CALL_STATE = "Call State"
478 CARDIORESPIRATORY_ACTIVITY_INSTANTANEOUS_DATA = "CardioRespiratory Activity Instantaneous Data"
479 CARDIORESPIRATORY_ACTIVITY_SUMMARY_DATA = "CardioRespiratory Activity Summary Data"
480 CENTRAL_ADDRESS_RESOLUTION = "Central Address Resolution"
481 CHROMATICITY_COORDINATES = "Chromaticity Coordinates"
482 CHROMATICITY_IN_CCT_AND_DUV_VALUES = "Chromaticity in CCT and Duv Values"
483 CLIENT_SUPPORTED_FEATURES = "Client Supported Features"
484 CONSTANT_TONE_EXTENSION_ENABLE = "Constant Tone Extension Enable"
485 COORDINATED_SET_SIZE = "Coordinated Set Size"
486 CURRENT_ELAPSED_TIME = "Current Elapsed Time"
487 CURRENT_GROUP_OBJECT_ID = "Current Group Object ID"
488 CURRENT_TRACK_OBJECT_ID = "Current Track Object ID"
489 CURRENT_TRACK_SEGMENTS_OBJECT_ID = "Current Track Segments Object ID"
490 DATABASE_HASH = "Database Hash"
491 DESCRIPTOR_VALUE_CHANGED = "Descriptor Value Changed"
492 DEVICE_TIME = "Device Time"
493 DEVICE_TIME_CONTROL_POINT = "Device Time Control Point"
494 DEVICE_TIME_FEATURE = "Device Time Feature"
495 DEVICE_TIME_PARAMETERS = "Device Time Parameters"
496 ESL_ADDRESS = "ESL Address"
497 ESL_CONTROL_POINT = "ESL Control Point"
498 ESL_CURRENT_ABSOLUTE_TIME = "ESL Current Absolute Time"
499 ESL_DISPLAY_INFORMATION = "ESL Display Information"
500 ESL_IMAGE_INFORMATION = "ESL Image Information"
501 ESL_LED_INFORMATION = "ESL LED Information"
502 ESL_RESPONSE_KEY_MATERIAL = "ESL Response Key Material"
503 ESL_SENSOR_INFORMATION = "ESL Sensor Information"
504 EMERGENCY_ID = "Emergency ID"
505 EMERGENCY_TEXT = "Emergency Text"
506 ENCRYPTED_DATA_KEY_MATERIAL = "Encrypted Data Key Material"
507 ENERGY_IN_A_PERIOD_OF_DAY = "Energy in a Period of Day"
508 ENHANCED_BLOOD_PRESSURE_MEASUREMENT = "Enhanced Blood Pressure Measurement"
509 ENHANCED_INTERMEDIATE_CUFF_PRESSURE = "Enhanced Intermediate Cuff Pressure"
510 EVENT_STATISTICS = "Event Statistics"
511 FIRST_USE_DATE = "First Use Date"
512 GHS_CONTROL_POINT = "GHS Control Point"
513 GMAP_ROLE = "GMAP Role"
514 GAIN_SETTINGS_ATTRIBUTE = "Gain Settings Attribute"
515 GENERAL_ACTIVITY_INSTANTANEOUS_DATA = "General Activity Instantaneous Data"
516 GENERAL_ACTIVITY_SUMMARY_DATA = "General Activity Summary Data"
517 HID_ISO_PROPERTIES = "HID ISO Properties"
518 HTTP_CONTROL_POINT = "HTTP Control Point"
519 HTTP_ENTITY_BODY = "HTTP Entity Body"
520 HTTP_HEADERS = "HTTP Headers"
521 HTTP_STATUS_CODE = "HTTP Status Code"
522 HTTPS_SECURITY = "HTTPS Security"
523 HEALTH_SENSOR_FEATURES = "Health Sensor Features"
524 HEARING_AID_FEATURES = "Hearing Aid Features"
525 HEARING_AID_PRESET_CONTROL_POINT = "Hearing Aid Preset Control Point"
526 IDD_ANNUNCIATION_STATUS = "IDD Annunciation Status"
527 IDD_COMMAND_CONTROL_POINT = "IDD Command Control Point"
528 IDD_COMMAND_DATA = "IDD Command Data"
529 IDD_FEATURES = "IDD Features"
530 IDD_HISTORY_DATA = "IDD History Data"
531 IDD_RECORD_ACCESS_CONTROL_POINT = "IDD Record Access Control Point"
532 IDD_STATUS = "IDD Status"
533 IDD_STATUS_CHANGED = "IDD Status Changed"
534 IDD_STATUS_READER_CONTROL_POINT = "IDD Status Reader Control Point"
535 IEEE_11073_20601_REGULATORY_CERTIFICATION_DATA_LIST = "IEEE 11073-20601 Regulatory Certification Data List"
536 IMD_CONTROL = "IMD Control"
537 IMD_HISTORICAL_DATA = "IMD Historical Data"
538 IMD_STATUS = "IMD Status"
539 IMDS_DESCRIPTOR_VALUE_CHANGED = "IMDS Descriptor Value Changed"
540 INCOMING_CALL = "Incoming Call"
541 INCOMING_CALL_TARGET_BEARER_URI = "Incoming Call Target Bearer URI"
542 LE_GATT_SECURITY_LEVELS = "LE GATT Security Levels"
543 LE_HID_OPERATION_MODE = "LE HID Operation Mode"
544 LENGTH = "Length"
545 LIFE_CYCLE_DATA = "Life Cycle Data"
546 LIVE_HEALTH_OBSERVATIONS = "Live Health Observations"
547 LUMINOUS_FLUX_RANGE = "Luminous Flux Range"
548 MEDIA_CONTROL_POINT = "Media Control Point"
549 MEDIA_CONTROL_POINT_OPCODES_SUPPORTED = "Media Control Point Opcodes Supported"
550 MEDIA_PLAYER_ICON_OBJECT_ID = "Media Player Icon Object ID"
551 MEDIA_PLAYER_ICON_URL = "Media Player Icon URL"
552 MEDIA_PLAYER_NAME = "Media Player Name"
553 MEDIA_STATE = "Media State"
554 MESH_PROVISIONING_DATA_IN = "Mesh Provisioning Data In"
555 MESH_PROVISIONING_DATA_OUT = "Mesh Provisioning Data Out"
556 MESH_PROXY_DATA_IN = "Mesh Proxy Data In"
557 MESH_PROXY_DATA_OUT = "Mesh Proxy Data Out"
558 MUTE = "Mute"
559 NEXT_TRACK_OBJECT_ID = "Next Track Object ID"
560 OTS_FEATURE = "OTS Feature"
561 OBJECT_ACTION_CONTROL_POINT = "Object Action Control Point"
562 OBJECT_CHANGED = "Object Changed"
563 OBJECT_FIRST_CREATED = "Object First-Created"
564 OBJECT_ID = "Object ID"
565 OBJECT_LAST_MODIFIED = "Object Last-Modified"
566 OBJECT_LIST_CONTROL_POINT = "Object List Control Point"
567 OBJECT_LIST_FILTER = "Object List Filter"
568 OBJECT_NAME = "Object Name"
569 OBJECT_PROPERTIES = "Object Properties"
570 OBJECT_SIZE = "Object Size"
571 OBJECT_TYPE = "Object Type"
572 OBSERVATION_SCHEDULE_CHANGED = "Observation Schedule Changed"
573 ON_DEMAND_RANGING_DATA = "On-demand Ranging Data"
574 PARENT_GROUP_OBJECT_ID = "Parent Group Object ID"
575 PHYSICAL_ACTIVITY_CURRENT_SESSION = "Physical Activity Current Session"
576 PHYSICAL_ACTIVITY_MONITOR_CONTROL_POINT = "Physical Activity Monitor Control Point"
577 PHYSICAL_ACTIVITY_MONITOR_FEATURES = "Physical Activity Monitor Features"
578 PHYSICAL_ACTIVITY_SESSION_DESCRIPTOR = "Physical Activity Session Descriptor"
579 PLAYBACK_SPEED = "Playback Speed"
580 PLAYING_ORDER = "Playing Order"
581 PLAYING_ORDERS_SUPPORTED = "Playing Orders Supported"
582 PRECISE_ACCELERATION_3D = "Precise Acceleration 3D"
583 RAS_CONTROL_POINT = "RAS Control Point"
584 RAS_FEATURES = "RAS Features"
585 RC_FEATURE = "RC Feature"
586 RC_SETTINGS = "RC Settings"
587 RANGING_DATA_OVERWRITTEN = "Ranging Data Overwritten"
588 RANGING_DATA_READY = "Ranging Data Ready"
589 REAL_TIME_RANGING_DATA = "Real-time Ranging Data"
590 RECONNECTION_CONFIGURATION_CONTROL_POINT = "Reconnection Configuration Control Point"
591 RECORD_ACCESS_CONTROL_POINT = "Record Access Control Point"
592 REGISTERED_USER = "Registered User"
593 RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE = (
594 "Relative Runtime in a Correlated Color Temperature Range"
595 )
596 RELATIVE_RUNTIME_IN_A_CURRENT_RANGE = "Relative Runtime in a Current Range"
597 RELATIVE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE = "Relative Runtime in a Generic Level Range"
598 RELATIVE_VALUE_IN_A_PERIOD_OF_DAY = "Relative Value in a Period of Day"
599 RELATIVE_VALUE_IN_A_TEMPERATURE_RANGE = "Relative Value in a Temperature Range"
600 RELATIVE_VALUE_IN_A_VOLTAGE_RANGE = "Relative Value in a Voltage Range"
601 RELATIVE_VALUE_IN_AN_ILLUMINANCE_RANGE = "Relative Value in an Illuminance Range"
602 RESOLVABLE_PRIVATE_ADDRESS_ONLY = "Resolvable Private Address Only"
603 SC_CONTROL_POINT = "SC Control Point"
604 SEARCH_CONTROL_POINT = "Search Control Point"
605 SEARCH_RESULTS_OBJECT_ID = "Search Results Object ID"
606 SEEKING_SPEED = "Seeking Speed"
607 SERVER_SUPPORTED_FEATURES = "Server Supported Features"
608 SERVICE_CYCLE_DATA = "Service Cycle Data"
609 SET_IDENTITY_RESOLVING_KEY = "Set Identity Resolving Key"
610 SET_MEMBER_LOCK = "Set Member Lock"
611 SET_MEMBER_RANK = "Set Member Rank"
612 SINK_ASE = "Sink ASE"
613 SINK_AUDIO_LOCATIONS = "Sink Audio Locations"
614 SINK_PAC = "Sink PAC"
615 SLEEP_ACTIVITY_INSTANTANEOUS_DATA = "Sleep Activity Instantaneous Data"
616 SLEEP_ACTIVITY_SUMMARY_DATA = "Sleep Activity Summary Data"
617 SOURCE_ASE = "Source ASE"
618 SOURCE_AUDIO_LOCATIONS = "Source Audio Locations"
619 SOURCE_PAC = "Source PAC"
620 STATUS_FLAGS = "Status Flags"
621 STEP_COUNTER_ACTIVITY_SUMMARY_DATA = "Step Counter Activity Summary Data"
622 STORED_HEALTH_OBSERVATIONS = "Stored Health Observations"
623 SUPPORTED_AUDIO_CONTEXTS = "Supported Audio Contexts"
624 TDS_CONTROL_POINT = "TDS Control Point"
625 TMAP_ROLE = "TMAP Role"
626 TEMPERATURE_8_STATISTICS = "Temperature 8 Statistics"
627 TEMPERATURE_8_IN_A_PERIOD_OF_DAY = "Temperature 8 in a Period of Day"
628 TEMPERATURE_RANGE = "Temperature Range"
629 TEMPERATURE_STATISTICS = "Temperature Statistics"
630 TERMINATION_REASON = "Termination Reason"
631 TIME_CHANGE_LOG_DATA = "Time Change Log Data"
632 TRACK_CHANGED = "Track Changed"
633 TRACK_DURATION = "Track Duration"
634 TRACK_POSITION = "Track Position"
635 TRACK_TITLE = "Track Title"
636 UDI_FOR_MEDICAL_DEVICES = "UDI for Medical Devices"
637 UGG_FEATURES = "UGG Features"
638 UGT_FEATURES = "UGT Features"
639 URI = "URI"
640 USER_CONTROL_POINT = "User Control Point"
641 VOLUME_CONTROL_POINT = "Volume Control Point"
642 VOLUME_FLAGS = "Volume Flags"
643 VOLUME_OFFSET_CONTROL_POINT = "Volume Offset Control Point"
644 VOLUME_OFFSET_STATE = "Volume Offset State"
645 VOLUME_STATE = "Volume State"
646 WORK_CYCLE_DATA = "Work Cycle Data"
649class ServiceName(Enum):
650 """Enumeration of all supported GATT service names."""
652 GAP = "GAP"
653 GATT = "GATT"
654 IMMEDIATE_ALERT = "Immediate Alert"
655 LINK_LOSS = "Link Loss"
656 TX_POWER = "Tx Power"
657 NEXT_DST_CHANGE = "Next DST Change"
658 DEVICE_INFORMATION = "Device Information"
659 BATTERY = "Battery"
660 HEART_RATE = "Heart Rate"
661 BLOOD_PRESSURE = "Blood Pressure"
662 HEALTH_THERMOMETER = "Health Thermometer"
663 GLUCOSE = "Glucose"
664 CYCLING_SPEED_AND_CADENCE = "Cycling Speed and Cadence"
665 CYCLING_POWER = "Cycling Power"
666 RUNNING_SPEED_AND_CADENCE = "Running Speed and Cadence"
667 AUTOMATION_IO = "Automation IO"
668 ENVIRONMENTAL_SENSING = "Environmental Sensing"
669 ALERT_NOTIFICATION = "Alert Notification"
670 BODY_COMPOSITION = "Body Composition"
671 USER_DATA = "User Data"
672 WEIGHT_SCALE = "Weight Scale"
673 LOCATION_AND_NAVIGATION = "Location and Navigation"
674 PHONE_ALERT_STATUS = "Phone Alert Status"
675 REFERENCE_TIME_UPDATE = "Reference Time Update"
676 CURRENT_TIME = "Current Time"
677 SCAN_PARAMETERS = "Scan Parameters"
678 BOND_MANAGEMENT = "Bond Management"
679 INDOOR_POSITIONING = "Indoor Positioning"
680 HUMAN_INTERFACE_DEVICE = "Human Interface Device"
681 PULSE_OXIMETER = "Pulse Oximeter"
682 FITNESS_MACHINE = "Fitness Machine"