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

1"""Core GATT enumerations for strong typing. 

2 

3Defines enums for GATT properties, value types, characteristic names, 

4and other core BLE concepts to replace string usage with type-safe 

5alternatives. 

6""" 

7 

8from __future__ import annotations 

9 

10import logging 

11from enum import Enum, IntEnum, IntFlag 

12 

13logger = logging.getLogger(__name__) 

14 

15 

16class DayOfWeek(IntEnum): 

17 """Day of week enumeration per ISO 8601. 

18 

19 Used by Current Time Service and other time-related characteristics. 

20 Values follow ISO 8601 standard (Monday=1, Sunday=7, Unknown=0). 

21 """ 

22 

23 UNKNOWN = 0 

24 MONDAY = 1 

25 TUESDAY = 2 

26 WEDNESDAY = 3 

27 THURSDAY = 4 

28 FRIDAY = 5 

29 SATURDAY = 6 

30 SUNDAY = 7 

31 

32 

33class AdjustReason(IntFlag): 

34 """Time adjustment reason flags. 

35 

36 Used by Current Time Service to indicate why time was adjusted. 

37 Can be combined as bitfield flags. 

38 """ 

39 

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 

45 

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) 

54 

55 

56class GattProperty(IntFlag): 

57 """GATT characteristic properties defined by Bluetooth SIG. 

58 

59 Uses IntFlag for bitwise operations when combining properties. 

60 Bit values match the Bluetooth Core Specification. 

61 """ 

62 

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 

80 

81 

82class CharacteristicRole(Enum): 

83 """Inferred purpose of a GATT characteristic. 

84 

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. 

89 

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 """ 

105 

106 MEASUREMENT = "measurement" 

107 STATUS = "status" 

108 FEATURE = "feature" 

109 CONTROL = "control" 

110 INFO = "info" 

111 UNKNOWN = "unknown" 

112 

113 

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} 

141 

142 

143class CharacteristicName(Enum): 

144 """Enumeration of all supported GATT characteristic names.""" 

145 

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" 

421 

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" 

647 

648 

649class ServiceName(Enum): 

650 """Enumeration of all supported GATT service names.""" 

651 

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"