• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1from abc import ABC, abstractmethod
2import dataclasses
3from enum import IntEnum
4from typing import Tuple, List, Optional
5from lib.cs import CsRangingParams
6from lib.rtt import RttRangingParams
7from lib.uwb import UwbRangingParams
8from lib.rssi import BleRssiRangingParams
9
10
11class DeviceRole(IntEnum):
12  RESPONDER = 0
13  INITIATOR = 1
14
15
16class RangingSessionType(IntEnum):
17  RAW = 0
18  OOB = 1
19
20class SecurityLevel(IntEnum):
21  BASIC = 0
22  SECURE = 1
23
24class RangingMode(IntEnum):
25  AUTO = 0
26  HIGH_ACCURACY = 1
27  HIGH_ACCURACY_PREFERRED = 2
28  FUSED = 3
29
30@dataclasses.dataclass(kw_only=True, frozen=True)
31class DeviceParams:
32  peer_id: str
33  uwb_params: Optional[UwbRangingParams] = None
34  cs_params: Optional[CsRangingParams] = None
35  rtt_params: Optional[RttRangingParams] = None
36  rssi_params: Optional[BleRssiRangingParams] = None
37
38
39@dataclasses.dataclass(kw_only=True, frozen=True)
40class RangingParams(ABC):
41  session_type: RangingSessionType
42
43@dataclasses.dataclass(kw_only=True, frozen=True)
44class OobInitiatorRangingParams(RangingParams):
45  session_type: RangingSessionType = RangingSessionType.OOB
46  ranging_interval_ms: Tuple[int, int] = (100, 5000)
47  security_level: SecurityLevel = SecurityLevel.BASIC
48  ranging_mode: RangingMode = RangingMode.AUTO
49  peer_ids: List[str]
50
51@dataclasses.dataclass(kw_only=True, frozen=True)
52class OobResponderRangingParams(RangingParams):
53  session_type: RangingSessionType = RangingSessionType.OOB
54  peer_id: str
55
56@dataclasses.dataclass(kw_only=True, frozen=True)
57class RawInitiatorRangingParams(RangingParams):
58  session_type: RangingSessionType = RangingSessionType.RAW
59  peer_params: List[DeviceParams]
60
61
62@dataclasses.dataclass(kw_only=True, frozen=True)
63class RawResponderRangingParams(RangingParams):
64  session_type: RangingSessionType = RangingSessionType.RAW
65  peer_params: DeviceParams
66
67
68@dataclasses.dataclass(kw_only=True, frozen=True)
69class SensorFusionParams:
70  is_sensor_fusion_enabled: bool = True
71
72
73@dataclasses.dataclass(kw_only=True, frozen=True)
74class RangingPreference:
75  device_role: DeviceRole
76  ranging_params: RangingParams
77  sensor_fusion_params: SensorFusionParams = dataclasses.field(
78      default_factory=SensorFusionParams
79  )
80  enable_range_data_notifications: bool = True
81  measurement_limit: int = 0
82