Coverage for src / bluetooth_sig / gatt / services / user_data.py: 100%

6 statements  

« prev     ^ index     » next       coverage.py v7.13.1, created at 2026-01-11 20:14 +0000

1"""User Data Service implementation.""" 

2 

3from __future__ import annotations 

4 

5from typing import ClassVar 

6 

7from ..characteristics.registry import CharacteristicName 

8from .base import BaseGattService 

9 

10 

11class UserDataService(BaseGattService): 

12 """User Data Service implementation. 

13 

14 Contains characteristics related to user profile and fitness data: 

15 - First Name - Optional 

16 - Last Name - Optional 

17 - Email Address - Optional 

18 - Age - Optional 

19 - Date of Birth - Optional 

20 - Gender - Optional 

21 - Weight - Optional 

22 - Height - Optional 

23 - VO2 Max - Optional 

24 - Heart Rate Max - Optional 

25 - Resting Heart Rate - Optional 

26 - Maximum Recommended Heart Rate - Optional 

27 - Aerobic Threshold - Optional 

28 - Anaerobic Threshold - Optional 

29 - Sport Type for Aerobic and Anaerobic Thresholds - Optional 

30 - Date of Threshold Assessment - Optional 

31 - Waist Circumference - Optional 

32 - Hip Circumference - Optional 

33 - Fat Burn Heart Rate Lower Limit - Optional 

34 - Fat Burn Heart Rate Upper Limit - Optional 

35 - Aerobic Heart Rate Lower Limit - Optional 

36 - Aerobic Heart Rate Upper Limit - Optional 

37 - Anaerobic Heart Rate Lower Limit - Optional 

38 - Anaerobic Heart Rate Upper Limit - Optional 

39 - Two Zone Heart Rate Limits - Optional 

40 - Three Zone Heart Rate Limits - Optional 

41 - Four Zone Heart Rate Limits - Optional 

42 - Five Zone Heart Rate Limits - Optional 

43 - High Intensity Exercise Threshold - Optional 

44 - Activity Goal - Optional 

45 - Sedentary Interval Notification - Optional 

46 - Caloric Intake - Optional 

47 - Stride Length - Optional 

48 - Preferred Units - Optional 

49 - Language - Optional 

50 - Handedness - Optional 

51 - Device Wearing Position - Optional 

52 - Middle Name - Optional 

53 - High Resolution Height - Optional 

54 """ 

55 

56 service_characteristics: ClassVar[dict[CharacteristicName, bool]] = { 

57 CharacteristicName.FIRST_NAME: False, # optional 

58 CharacteristicName.LAST_NAME: False, # optional 

59 CharacteristicName.EMAIL_ADDRESS: False, # optional 

60 CharacteristicName.AGE: False, # optional 

61 CharacteristicName.DATE_OF_BIRTH: False, # optional 

62 CharacteristicName.GENDER: False, # optional 

63 CharacteristicName.WEIGHT: False, # optional 

64 CharacteristicName.HEIGHT: False, # optional 

65 CharacteristicName.VO2_MAX: False, # optional 

66 CharacteristicName.HEART_RATE_MAX: False, # optional 

67 CharacteristicName.RESTING_HEART_RATE: False, # optional 

68 CharacteristicName.MAXIMUM_RECOMMENDED_HEART_RATE: False, # optional 

69 CharacteristicName.AEROBIC_THRESHOLD: False, # optional 

70 CharacteristicName.ANAEROBIC_THRESHOLD: False, # optional 

71 CharacteristicName.SPORT_TYPE_FOR_AEROBIC_AND_ANAEROBIC_THRESHOLDS: False, # optional 

72 CharacteristicName.DATE_OF_THRESHOLD_ASSESSMENT: False, # optional 

73 CharacteristicName.WAIST_CIRCUMFERENCE: False, # optional 

74 CharacteristicName.HIP_CIRCUMFERENCE: False, # optional 

75 CharacteristicName.FAT_BURN_HEART_RATE_LOWER_LIMIT: False, # optional 

76 CharacteristicName.FAT_BURN_HEART_RATE_UPPER_LIMIT: False, # optional 

77 CharacteristicName.AEROBIC_HEART_RATE_LOWER_LIMIT: False, # optional 

78 CharacteristicName.AEROBIC_HEART_RATE_UPPER_LIMIT: False, # optional 

79 CharacteristicName.ANAEROBIC_HEART_RATE_LOWER_LIMIT: False, # optional 

80 CharacteristicName.ANAEROBIC_HEART_RATE_UPPER_LIMIT: False, # optional 

81 CharacteristicName.TWO_ZONE_HEART_RATE_LIMITS: False, # optional 

82 CharacteristicName.THREE_ZONE_HEART_RATE_LIMITS: False, # optional 

83 CharacteristicName.FOUR_ZONE_HEART_RATE_LIMITS: False, # optional 

84 CharacteristicName.FIVE_ZONE_HEART_RATE_LIMITS: False, # optional 

85 CharacteristicName.HIGH_INTENSITY_EXERCISE_THRESHOLD: False, # optional 

86 CharacteristicName.ACTIVITY_GOAL: False, # optional 

87 CharacteristicName.SEDENTARY_INTERVAL_NOTIFICATION: False, # optional 

88 CharacteristicName.CALORIC_INTAKE: False, # optional 

89 CharacteristicName.STRIDE_LENGTH: False, # optional 

90 CharacteristicName.PREFERRED_UNITS: False, # optional 

91 CharacteristicName.LANGUAGE: False, # optional 

92 CharacteristicName.HANDEDNESS: False, # optional 

93 CharacteristicName.DEVICE_WEARING_POSITION: False, # optional 

94 CharacteristicName.MIDDLE_NAME: False, # optional 

95 CharacteristicName.HIGH_RESOLUTION_HEIGHT: False, # optional 

96 }