Coverage for src/bluetooth_sig/types/gatt_enums.py: 99%

630 statements  

« prev     ^ index     » next       coverage.py v7.14.3, created at 2026-06-28 01:26 +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 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 COOKING_TEMPERATURE = "Cooking Temperature" 

388 COOKING_ZONE_PERCEIVED_POWER = "Cooking Zone Perceived Power" 

389 KITCHEN_APPLIANCE_AIRFLOW = "Kitchen Appliance Airflow" 

390 COSINE_OF_THE_ANGLE = "Cosine of the Angle" 

391 COUNTRY_CODE = "Country Code" 

392 DATE_UTC = "Date UTC" 

393 DOOR_WINDOW_STATUS = "Door/Window Status" 

394 ENERGY = "Energy" 

395 ENERGY_32 = "Energy 32" 

396 ELAPSED_TIME = "Elapsed Time" 

397 ESTIMATED_SERVICE_DATE = "Estimated Service Date" 

398 FIXED_STRING_8 = "Fixed String 8" 

399 FIXED_STRING_16 = "Fixed String 16" 

400 FIXED_STRING_24 = "Fixed String 24" 

401 FIXED_STRING_36 = "Fixed String 36" 

402 FIXED_STRING_64 = "Fixed String 64" 

403 GENERIC_LEVEL = "Generic Level" 

404 GLOBAL_TRADE_ITEM_NUMBER = "Global Trade Item Number" 

405 HIGH_TEMPERATURE = "High Temperature" 

406 HUMIDITY_8 = "Humidity 8" 

407 ILLUMINANCE_16 = "Illuminance 16" 

408 INSTALLED_LOCATION = "Installed Location" 

409 LIGHT_DISTRIBUTION = "Light Distribution" 

410 LIGHT_OUTPUT = "Light Output" 

411 LIGHT_SOURCE_TYPE = "Light Source Type" 

412 LUMINOUS_EFFICACY = "Luminous Efficacy" 

413 LUMINOUS_ENERGY = "Luminous Energy" 

414 LUMINOUS_EXPOSURE = "Luminous Exposure" 

415 LUMINOUS_FLUX = "Luminous Flux" 

416 LUMINOUS_INTENSITY = "Luminous Intensity" 

417 MASS_FLOW = "Mass Flow" 

418 PERCEIVED_LIGHTNESS = "Perceived Lightness" 

419 PERCENTAGE_8 = "Percentage 8" 

420 PERCENTAGE_8_STEPS = "Percentage 8 Steps" 

421 POWER = "Power" 

422 PUSHBUTTON_STATUS_8 = "Pushbutton Status 8" 

423 SENSOR_LOCATION = "Sensor Location" 

424 SULFUR_HEXAFLUORIDE_CONCENTRATION = "Sulfur Hexafluoride Concentration" 

425 TEMPERATURE_8 = "Temperature 8" 

426 TIME_DECIHOUR_8 = "Time Decihour 8" 

427 TIME_EXPONENTIAL_8 = "Time Exponential 8" 

428 TIME_HOUR_24 = "Time Hour 24" 

429 TIME_MILLISECOND_24 = "Time Millisecond 24" 

430 TIME_SECOND_8 = "Time Second 8" 

431 TIME_SECOND_16 = "Time Second 16" 

432 TIME_SECOND_32 = "Time Second 32" 

433 TORQUE = "Torque" 

434 VOLUME_FLOW = "Volume Flow" 

435 ACS_CONTROL_POINT = "ACS Control Point" 

436 ACS_DATA_IN = "ACS Data In" 

437 ACS_DATA_OUT_INDICATE = "ACS Data Out Indicate" 

438 ACS_DATA_OUT_NOTIFY = "ACS Data Out Notify" 

439 ACS_STATUS = "ACS Status" 

440 AP_SYNC_KEY_MATERIAL = "AP Sync Key Material" 

441 ASE_CONTROL_POINT = "ASE Control Point" 

442 ACTIVE_PRESET_INDEX = "Active Preset Index" 

443 ADVERTISING_CONSTANT_TONE_EXTENSION_INTERVAL = "Advertising Constant Tone Extension Interval" 

444 ADVERTISING_CONSTANT_TONE_EXTENSION_MINIMUM_LENGTH = "Advertising Constant Tone Extension Minimum Length" 

445 ADVERTISING_CONSTANT_TONE_EXTENSION_MINIMUM_TRANSMIT_COUNT = ( 

446 "Advertising Constant Tone Extension Minimum Transmit Count" 

447 ) 

448 ADVERTISING_CONSTANT_TONE_EXTENSION_PHY = "Advertising Constant Tone Extension PHY" 

449 ADVERTISING_CONSTANT_TONE_EXTENSION_TRANSMIT_DURATION = "Advertising Constant Tone Extension Transmit Duration" 

450 AGGREGATE = "Aggregate" 

451 ANALOG = "Analog" 

452 AUDIO_INPUT_CONTROL_POINT = "Audio Input Control Point" 

453 AUDIO_INPUT_DESCRIPTION = "Audio Input Description" 

454 AUDIO_INPUT_STATE = "Audio Input State" 

455 AUDIO_INPUT_STATUS = "Audio Input Status" 

456 AUDIO_INPUT_TYPE = "Audio Input Type" 

457 AUDIO_LOCATION = "Audio Location" 

458 AUDIO_OUTPUT_DESCRIPTION = "Audio Output Description" 

459 AVAILABLE_AUDIO_CONTEXTS = "Available Audio Contexts" 

460 BGR_FEATURES = "BGR Features" 

461 BGS_FEATURES = "BGS Features" 

462 BR_EDR_HANDOVER_DATA = "BR-EDR Handover Data" 

463 BSS_CONTROL_POINT = "BSS Control Point" 

464 BSS_RESPONSE = "BSS Response" 

465 BATTERY_ENERGY_STATUS = "Battery Energy Status" 

466 BATTERY_HEALTH_INFORMATION = "Battery Health Information" 

467 BATTERY_HEALTH_STATUS = "Battery Health Status" 

468 BATTERY_INFORMATION = "Battery Information" 

469 BATTERY_TIME_STATUS = "Battery Time Status" 

470 BEARER_LIST_CURRENT_CALLS = "Bearer List Current Calls" 

471 BEARER_PROVIDER_NAME = "Bearer Provider Name" 

472 BEARER_SIGNAL_STRENGTH = "Bearer Signal Strength" 

473 BEARER_SIGNAL_STRENGTH_REPORTING_INTERVAL = "Bearer Signal Strength Reporting Interval" 

474 BEARER_TECHNOLOGY = "Bearer Technology" 

475 BEARER_UCI = "Bearer UCI" 

476 BEARER_URI_SCHEMES_SUPPORTED_LIST = "Bearer URI Schemes Supported List" 

477 BLOOD_PRESSURE_RECORD = "Blood Pressure Record" 

478 BLUETOOTH_SIG_DATA = "Bluetooth SIG Data" 

479 BROADCAST_AUDIO_SCAN_CONTROL_POINT = "Broadcast Audio Scan Control Point" 

480 BROADCAST_RECEIVE_STATE = "Broadcast Receive State" 

481 CGM_FEATURE = "CGM Feature" 

482 CGM_MEASUREMENT = "CGM Measurement" 

483 CGM_SESSION_RUN_TIME = "CGM Session Run Time" 

484 CGM_SESSION_START_TIME = "CGM Session Start Time" 

485 CGM_SPECIFIC_OPS_CONTROL_POINT = "CGM Specific Ops Control Point" 

486 CGM_STATUS = "CGM Status" 

487 CALL_CONTROL_POINT = "Call Control Point" 

488 CALL_CONTROL_POINT_OPTIONAL_OPCODES = "Call Control Point Optional Opcodes" 

489 CALL_FRIENDLY_NAME = "Call Friendly Name" 

490 CALL_STATE = "Call State" 

491 CARDIORESPIRATORY_ACTIVITY_INSTANTANEOUS_DATA = "CardioRespiratory Activity Instantaneous Data" 

492 CARDIORESPIRATORY_ACTIVITY_SUMMARY_DATA = "CardioRespiratory Activity Summary Data" 

493 CENTRAL_ADDRESS_RESOLUTION = "Central Address Resolution" 

494 CHROMATICITY_COORDINATES = "Chromaticity Coordinates" 

495 CHROMATICITY_IN_CCT_AND_DUV_VALUES = "Chromaticity in CCT and Duv Values" 

496 CLIENT_SUPPORTED_FEATURES = "Client Supported Features" 

497 CONSTANT_TONE_EXTENSION_ENABLE = "Constant Tone Extension Enable" 

498 COORDINATED_SET_NAME = "Coordinated Set Name" 

499 COORDINATED_SET_SIZE = "Coordinated Set Size" 

500 CURRENT_GROUP_OBJECT_ID = "Current Group Object ID" 

501 CURRENT_TRACK_OBJECT_ID = "Current Track Object ID" 

502 CURRENT_TRACK_SEGMENTS_OBJECT_ID = "Current Track Segments Object ID" 

503 DATABASE_HASH = "Database Hash" 

504 DESCRIPTOR_VALUE_CHANGED = "Descriptor Value Changed" 

505 DIGITAL = "Digital" 

506 DEVICE_TIME = "Device Time" 

507 DEVICE_TIME_CONTROL_POINT = "Device Time Control Point" 

508 DEVICE_TIME_FEATURE = "Device Time Feature" 

509 DEVICE_TIME_PARAMETERS = "Device Time Parameters" 

510 ESL_ADDRESS = "ESL Address" 

511 ESL_CONTROL_POINT = "ESL Control Point" 

512 ESL_CURRENT_ABSOLUTE_TIME = "ESL Current Absolute Time" 

513 ESL_DISPLAY_INFORMATION = "ESL Display Information" 

514 ESL_IMAGE_INFORMATION = "ESL Image Information" 

515 ESL_LED_INFORMATION = "ESL LED Information" 

516 ESL_RESPONSE_KEY_MATERIAL = "ESL Response Key Material" 

517 ESL_SENSOR_INFORMATION = "ESL Sensor Information" 

518 EMERGENCY_ID = "Emergency ID" 

519 EMERGENCY_TEXT = "Emergency Text" 

520 ENCRYPTED_DATA_KEY_MATERIAL = "Encrypted Data Key Material" 

521 ENERGY_IN_A_PERIOD_OF_DAY = "Energy in a Period of Day" 

522 ENHANCED_BLOOD_PRESSURE_MEASUREMENT = "Enhanced Blood Pressure Measurement" 

523 ENHANCED_INTERMEDIATE_CUFF_PRESSURE = "Enhanced Intermediate Cuff Pressure" 

524 EVENT_STATISTICS = "Event Statistics" 

525 FIRST_USE_DATE = "First Use Date" 

526 GHS_CONTROL_POINT = "GHS Control Point" 

527 GMAP_ROLE = "GMAP Role" 

528 GAIN_SETTINGS_ATTRIBUTE = "Gain Settings Attribute" 

529 GENERAL_ACTIVITY_INSTANTANEOUS_DATA = "General Activity Instantaneous Data" 

530 GENERAL_ACTIVITY_SUMMARY_DATA = "General Activity Summary Data" 

531 HID_ISO_PROPERTIES = "HID ISO Properties" 

532 HTTP_CONTROL_POINT = "HTTP Control Point" 

533 HTTP_ENTITY_BODY = "HTTP Entity Body" 

534 HTTP_HEADERS = "HTTP Headers" 

535 HTTP_STATUS_CODE = "HTTP Status Code" 

536 HTTPS_SECURITY = "HTTPS Security" 

537 HEALTH_SENSOR_FEATURES = "Health Sensor Features" 

538 HEARING_AID_FEATURES = "Hearing Aid Features" 

539 HEARING_AID_PRESET_CONTROL_POINT = "Hearing Aid Preset Control Point" 

540 IDD_ANNUNCIATION_STATUS = "IDD Annunciation Status" 

541 IDD_COMMAND_CONTROL_POINT = "IDD Command Control Point" 

542 IDD_COMMAND_DATA = "IDD Command Data" 

543 IDD_FEATURES = "IDD Features" 

544 IDD_HISTORY_DATA = "IDD History Data" 

545 IDD_RECORD_ACCESS_CONTROL_POINT = "IDD Record Access Control Point" 

546 IDD_STATUS = "IDD Status" 

547 IDD_STATUS_CHANGED = "IDD Status Changed" 

548 IDD_STATUS_READER_CONTROL_POINT = "IDD Status Reader Control Point" 

549 IEEE_11073_20601_REGULATORY_CERTIFICATION_DATA_LIST = "IEEE 11073-20601 Regulatory Certification Data List" 

550 IMD_CONTROL = "IMD Control" 

551 IMD_HISTORICAL_DATA = "IMD Historical Data" 

552 IMD_STATUS = "IMD Status" 

553 IMDS_DESCRIPTOR_VALUE_CHANGED = "IMDS Descriptor Value Changed" 

554 INCOMING_CALL = "Incoming Call" 

555 INCOMING_CALL_TARGET_BEARER_URI = "Incoming Call Target Bearer URI" 

556 LE_GATT_SECURITY_LEVELS = "LE GATT Security Levels" 

557 LE_HID_OPERATION_MODE = "LE HID Operation Mode" 

558 LENGTH = "Length" 

559 LIFE_CYCLE_DATA = "Life Cycle Data" 

560 LIVE_HEALTH_OBSERVATIONS = "Live Health Observations" 

561 LUMINOUS_FLUX_RANGE = "Luminous Flux Range" 

562 MEDIA_CONTROL_POINT = "Media Control Point" 

563 MEDIA_CONTROL_POINT_OPCODES_SUPPORTED = "Media Control Point Opcodes Supported" 

564 MEDIA_PLAYER_ICON_OBJECT_ID = "Media Player Icon Object ID" 

565 MEDIA_PLAYER_ICON_URL = "Media Player Icon URL" 

566 MEDIA_PLAYER_NAME = "Media Player Name" 

567 MEDIA_STATE = "Media State" 

568 MESH_PROVISIONING_DATA_IN = "Mesh Provisioning Data In" 

569 MESH_PROVISIONING_DATA_OUT = "Mesh Provisioning Data Out" 

570 MESH_PROXY_DATA_IN = "Mesh Proxy Data In" 

571 MESH_PROXY_DATA_OUT = "Mesh Proxy Data Out" 

572 MUTE = "Mute" 

573 NEXT_TRACK_OBJECT_ID = "Next Track Object ID" 

574 OTS_FEATURE = "OTS Feature" 

575 OBJECT_ACTION_CONTROL_POINT = "Object Action Control Point" 

576 OBJECT_CHANGED = "Object Changed" 

577 OBJECT_FIRST_CREATED = "Object First-Created" 

578 OBJECT_ID = "Object ID" 

579 OBJECT_LAST_MODIFIED = "Object Last-Modified" 

580 OBJECT_LIST_CONTROL_POINT = "Object List Control Point" 

581 OBJECT_LIST_FILTER = "Object List Filter" 

582 OBJECT_NAME = "Object Name" 

583 OBJECT_PROPERTIES = "Object Properties" 

584 OBJECT_SIZE = "Object Size" 

585 OBJECT_TYPE = "Object Type" 

586 OBSERVATION_SCHEDULE_CHANGED = "Observation Schedule Changed" 

587 ON_DEMAND_RANGING_DATA = "On-demand Ranging Data" 

588 PARENT_GROUP_OBJECT_ID = "Parent Group Object ID" 

589 PHYSICAL_ACTIVITY_CURRENT_SESSION = "Physical Activity Current Session" 

590 PHYSICAL_ACTIVITY_MONITOR_CONTROL_POINT = "Physical Activity Monitor Control Point" 

591 PHYSICAL_ACTIVITY_MONITOR_FEATURES = "Physical Activity Monitor Features" 

592 PHYSICAL_ACTIVITY_SESSION_DESCRIPTOR = "Physical Activity Session Descriptor" 

593 PLAYBACK_SPEED = "Playback Speed" 

594 PLAYING_ORDER = "Playing Order" 

595 PLAYING_ORDERS_SUPPORTED = "Playing Orders Supported" 

596 PRECISE_ACCELERATION_3D = "Precise Acceleration - 3D" 

597 RAS_CONTROL_POINT = "RAS Control Point" 

598 RAS_FEATURES = "RAS Features" 

599 RC_FEATURE = "RC Feature" 

600 RC_SETTINGS = "RC Settings" 

601 RANGING_DATA_OVERWRITTEN = "Ranging Data Overwritten" 

602 RANGING_DATA_READY = "Ranging Data Ready" 

603 REAL_TIME_RANGING_DATA = "Real-time Ranging Data" 

604 RECONNECTION_CONFIGURATION_CONTROL_POINT = "Reconnection Configuration Control Point" 

605 RECORD_ACCESS_CONTROL_POINT = "Record Access Control Point" 

606 REGISTERED_USER = "Registered User" 

607 RELATIVE_RUNTIME_IN_A_CORRELATED_COLOR_TEMPERATURE_RANGE = ( 

608 "Relative Runtime in a Correlated Color Temperature Range" 

609 ) 

610 RELATIVE_RUNTIME_IN_A_CURRENT_RANGE = "Relative Runtime in a Current Range" 

611 RELATIVE_RUNTIME_IN_A_GENERIC_LEVEL_RANGE = "Relative Runtime in a Generic Level Range" 

612 RELATIVE_VALUE_IN_A_PERIOD_OF_DAY = "Relative Value in a Period of Day" 

613 RELATIVE_VALUE_IN_A_TEMPERATURE_RANGE = "Relative Value in a Temperature Range" 

614 RELATIVE_VALUE_IN_A_VOLTAGE_RANGE = "Relative Value in a Voltage Range" 

615 RELATIVE_VALUE_IN_AN_ILLUMINANCE_RANGE = "Relative Value in an Illuminance Range" 

616 RESOLVABLE_PRIVATE_ADDRESS_ONLY = "Resolvable Private Address Only" 

617 SC_CONTROL_POINT = "SC Control Point" 

618 SEARCH_CONTROL_POINT = "Search Control Point" 

619 SEARCH_RESULTS_OBJECT_ID = "Search Results Object ID" 

620 SEEKING_SPEED = "Seeking Speed" 

621 SERVER_SUPPORTED_FEATURES = "Server Supported Features" 

622 SERVICE_CYCLE_DATA = "Service Cycle Data" 

623 SET_IDENTITY_RESOLVING_KEY = "Set Identity Resolving Key" 

624 SET_MEMBER_LOCK = "Set Member Lock" 

625 SET_MEMBER_RANK = "Set Member Rank" 

626 SINK_ASE = "Sink ASE" 

627 SINK_AUDIO_LOCATIONS = "Sink Audio Locations" 

628 SINK_PAC = "Sink PAC" 

629 SLEEP_ACTIVITY_INSTANTANEOUS_DATA = "Sleep Activity Instantaneous Data" 

630 SLEEP_ACTIVITY_SUMMARY_DATA = "Sleep Activity Summary Data" 

631 SOURCE_ASE = "Source ASE" 

632 SOURCE_AUDIO_LOCATIONS = "Source Audio Locations" 

633 SOURCE_PAC = "Source PAC" 

634 STATUS_FLAGS = "Status Flags" 

635 STEP_COUNTER_ACTIVITY_SUMMARY_DATA = "Step Counter Activity Summary Data" 

636 STORED_HEALTH_OBSERVATIONS = "Stored Health Observations" 

637 SUPPORTED_AUDIO_CONTEXTS = "Supported Audio Contexts" 

638 TDS_CONTROL_POINT = "TDS Control Point" 

639 TMAP_ROLE = "TMAP Role" 

640 TEMPERATURE_8_STATISTICS = "Temperature 8 Statistics" 

641 TEMPERATURE_8_IN_A_PERIOD_OF_DAY = "Temperature 8 in a Period of Day" 

642 TEMPERATURE_RANGE = "Temperature Range" 

643 TEMPERATURE_STATISTICS = "Temperature Statistics" 

644 TERMINATION_REASON = "Termination Reason" 

645 TIME_CHANGE_LOG_DATA = "Time Change Log Data" 

646 TRACK_CHANGED = "Track Changed" 

647 TRACK_DURATION = "Track Duration" 

648 TRACK_POSITION = "Track Position" 

649 TRACK_TITLE = "Track Title" 

650 UDI_FOR_MEDICAL_DEVICES = "UDI for Medical Devices" 

651 UGG_FEATURES = "UGG Features" 

652 UGT_FEATURES = "UGT Features" 

653 URI = "URI" 

654 USER_CONTROL_POINT = "User Control Point" 

655 VOICE_ASSISTANT_NAME = "Voice Assistant Name" 

656 VOICE_ASSISTANT_UUID = "Voice Assistant UUID" 

657 VOICE_ASSISTANT_SERVICE_CONTROL_POINT = "Voice Assistant Service Control Point" 

658 VOICE_ASSISTANT_SESSION_STATE = "Voice Assistant Session State" 

659 VOICE_ASSISTANT_SESSION_FLAG = "Voice Assistant Session Flag" 

660 VOICE_ASSISTANT_SUPPORTED_LANGUAGES = "Voice Assistant Supported Languages" 

661 VOICE_ASSISTANT_SUPPORTED_FEATURES = "Voice Assistant Supported Features" 

662 VOLUME_CONTROL_POINT = "Volume Control Point" 

663 VOLUME_FLAGS = "Volume Flags" 

664 VOLUME_OFFSET_CONTROL_POINT = "Volume Offset Control Point" 

665 VOLUME_OFFSET_STATE = "Volume Offset State" 

666 VOLUME_STATE = "Volume State" 

667 WORK_CYCLE_DATA = "Work Cycle Data" 

668 

669 

670class ServiceName(Enum): 

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

672 

673 GAP = "GAP" 

674 GATT = "GATT" 

675 IMMEDIATE_ALERT = "Immediate Alert" 

676 LINK_LOSS = "Link Loss" 

677 TX_POWER = "Tx Power" 

678 NEXT_DST_CHANGE = "Next DST Change" 

679 DEVICE_INFORMATION = "Device Information" 

680 BATTERY = "Battery" 

681 HEART_RATE = "Heart Rate" 

682 BLOOD_PRESSURE = "Blood Pressure" 

683 HEALTH_THERMOMETER = "Health Thermometer" 

684 GLUCOSE = "Glucose" 

685 CYCLING_SPEED_AND_CADENCE = "Cycling Speed and Cadence" 

686 CYCLING_POWER = "Cycling Power" 

687 RUNNING_SPEED_AND_CADENCE = "Running Speed and Cadence" 

688 AUTOMATION_IO = "Automation IO" 

689 ENVIRONMENTAL_SENSING = "Environmental Sensing" 

690 ALERT_NOTIFICATION = "Alert Notification" 

691 BODY_COMPOSITION = "Body Composition" 

692 USER_DATA = "User Data" 

693 WEIGHT_SCALE = "Weight Scale" 

694 LOCATION_AND_NAVIGATION = "Location and Navigation" 

695 PHONE_ALERT_STATUS = "Phone Alert Status" 

696 REFERENCE_TIME_UPDATE = "Reference Time Update" 

697 CURRENT_TIME = "Current Time" 

698 SCAN_PARAMETERS = "Scan Parameters" 

699 BOND_MANAGEMENT = "Bond Management" 

700 INDOOR_POSITIONING = "Indoor Positioning" 

701 HUMAN_INTERFACE_DEVICE = "Human Interface Device" 

702 PULSE_OXIMETER = "Pulse Oximeter" 

703 FITNESS_MACHINE = "Fitness Machine" 

704 CONTINUOUS_GLUCOSE_MONITORING = "Continuous Glucose Monitoring" 

705 INSULIN_DELIVERY = "Insulin Delivery" 

706 PHYSICAL_ACTIVITY_MONITOR = "Physical Activity Monitor" 

707 GENERIC_HEALTH_SENSOR = "Generic Health Sensor" 

708 INDUSTRIAL_MEASUREMENT_DEVICE = "Industrial Measurement Device" 

709 AUDIO_STREAM_CONTROL = "Audio Stream Control" 

710 AUDIO_INPUT_CONTROL = "Audio Input Control" 

711 VOLUME_CONTROL = "Volume Control" 

712 VOLUME_OFFSET_CONTROL = "Volume Offset Control" 

713 MEDIA_CONTROL = "Media Control" 

714 GENERIC_MEDIA_CONTROL = "Generic Media Control" 

715 PUBLISHED_AUDIO_CAPABILITIES = "Published Audio Capabilities" 

716 BASIC_AUDIO_ANNOUNCEMENT = "Basic Audio Announcement" 

717 BROADCAST_AUDIO_ANNOUNCEMENT = "Broadcast Audio Announcement" 

718 COMMON_AUDIO = "Common Audio" 

719 BROADCAST_AUDIO_SCAN = "Broadcast Audio Scan" 

720 HEARING_ACCESS = "Hearing Access" 

721 GAMING_AUDIO = "Gaming Audio" 

722 TELEPHONY_AND_MEDIA_AUDIO = "Telephony and Media Audio" 

723 PUBLIC_BROADCAST_ANNOUNCEMENT = "Public Broadcast Announcement" 

724 MICROPHONE_CONTROL = "Microphone Control" 

725 TELEPHONE_BEARER = "Telephone Bearer" 

726 GENERIC_TELEPHONE_BEARER = "Generic Telephone Bearer" 

727 INTERNET_PROTOCOL_SUPPORT = "Internet Protocol Support" 

728 HTTP_PROXY = "HTTP Proxy" 

729 TRANSPORT_DISCOVERY = "Transport Discovery" 

730 OBJECT_TRANSFER = "Object Transfer" 

731 RECONNECTION_CONFIGURATION = "Reconnection Configuration" 

732 BINARY_SENSOR = "Binary Sensor" 

733 EMERGENCY_CONFIGURATION = "Emergency Configuration" 

734 AUTHORIZATION_CONTROL = "Authorization Control" 

735 ELAPSED_TIME = "Elapsed Time" 

736 DEVICE_TIME = "Device Time" 

737 COORDINATED_SET_IDENTIFICATION = "Coordinated Set Identification" 

738 CONSTANT_TONE_EXTENSION = "Constant Tone Extension" 

739 MESH_PROVISIONING = "Mesh Provisioning" 

740 MESH_PROXY = "Mesh Proxy" 

741 MESH_PROXY_SOLICITATION = "Mesh Proxy Solicitation" 

742 ELECTRONIC_SHELF_LABEL = "Electronic Shelf Label" 

743 RANGING = "Ranging" 

744 HID_ISO = "HID ISO" 

745 COOKWARE = "Cookware" 

746 VOICE_ASSISTANT = "Voice Assistant" 

747 GENERIC_VOICE_ASSISTANT = "Generic Voice Assistant"