Coverage for src / bluetooth_sig / gatt / characteristics / server_supported_features.py: 100%

21 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-04-03 16:41 +0000

1"""Server Supported Features characteristic (0x2B3A).""" 

2 

3from __future__ import annotations 

4 

5from enum import IntFlag 

6 

7from ..context import CharacteristicContext 

8from .base import BaseCharacteristic 

9 

10 

11class ServerFeatures(IntFlag): 

12 """GATT server supported feature flags.""" 

13 

14 EATT = 0x01 

15 

16 

17class ServerSupportedFeaturesCharacteristic(BaseCharacteristic[ServerFeatures]): 

18 """Server Supported Features characteristic (0x2B3A). 

19 

20 org.bluetooth.characteristic.server_supported_features 

21 

22 Variable-length bitfield indicating GATT features supported by the server. 

23 """ 

24 

25 allow_variable_length: bool = True 

26 min_length: int = 1 

27 

28 def _decode_value( 

29 self, data: bytearray, ctx: CharacteristicContext | None = None, *, validate: bool = True 

30 ) -> ServerFeatures: 

31 result = 0 

32 for i, byte in enumerate(data): 

33 result |= byte << (8 * i) 

34 return ServerFeatures(result) 

35 

36 def _encode_value(self, data: ServerFeatures) -> bytearray: 

37 result = bytearray() 

38 val = int(data) 

39 while val > 0: 

40 result.append(val & 0xFF) 

41 val >>= 8 

42 return result or bytearray([0])