Coverage for tropicsquare / config / uap_operations.py: 76%
37 statements
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-27 21:24 +0000
« prev ^ index » next coverage.py v7.13.5, created at 2026-03-27 21:24 +0000
1"""UAP Operation configuration classes
3These classes control permissions for various TROPIC01 operations.
4"""
6from tropicsquare.config.uap_base import UapSingleFieldConfig, UapMultiSlotConfig, UapPermissionField
7from tropicsquare.config.constants import (
8 UAP_MACANDD_0_31_POS,
9 UAP_MACANDD_32_63_POS,
10 UAP_MACANDD_64_95_POS,
11 UAP_MACANDD_96_127_POS
12)
15class PingConfig(UapSingleFieldConfig):
16 """UAP PING configuration (CFG_UA`P_PING @ 0x100).
18 Controls which pairing key slots can execute PING command.
19 Single 8-bit permission field.
20 """
23class RandomValueGetConfig(UapSingleFieldConfig):
24 """UAP Random Value Get configuration (CFG_UAP_RANDOM_VALUE_GET @ 0x120).
26 Controls which pairing key slots can get random values.
27 Single 8-bit permission field.
28 """
31class MacAndDestroyConfig(UapMultiSlotConfig):
32 """UAP MAC and Destroy configuration (CFG_UAP_MAC_AND_DESTROY @ 0x160).
34 Controls access privileges to MAC-and-Destroy partition slots.
35 Has 4 permission fields, each controlling access to a range of MAC-and-Destroy slots.
36 """
38 @property
39 def macandd0_31(self) -> UapPermissionField:
40 """Permission field for MAC-and-Destroy slots 0-31."""
41 return self._get_slot_field(UAP_MACANDD_0_31_POS)
43 @macandd0_31.setter
44 def macandd0_31(self, field: UapPermissionField) -> None:
45 self._set_slot_field(UAP_MACANDD_0_31_POS, field)
47 @property
48 def macandd32_63(self) -> UapPermissionField:
49 """Permission field for MAC-and-Destroy slots 32-63."""
50 return self._get_slot_field(UAP_MACANDD_32_63_POS)
52 @macandd32_63.setter
53 def macandd32_63(self, field: UapPermissionField) -> None:
54 self._set_slot_field(UAP_MACANDD_32_63_POS, field)
56 @property
57 def macandd64_95(self) -> UapPermissionField:
58 """Permission field for MAC-and-Destroy slots 64-95."""
59 return self._get_slot_field(UAP_MACANDD_64_95_POS)
61 @macandd64_95.setter
62 def macandd64_95(self, field: UapPermissionField) -> None:
63 self._set_slot_field(UAP_MACANDD_64_95_POS, field)
65 @property
66 def macandd96_127(self) -> UapPermissionField:
67 """Permission field for MAC-and-Destroy slots 96-127."""
68 return self._get_slot_field(UAP_MACANDD_96_127_POS)
70 @macandd96_127.setter
71 def macandd96_127(self, field: UapPermissionField) -> None:
72 self._set_slot_field(UAP_MACANDD_96_127_POS, field)
74 def to_dict(self) -> dict:
75 """Export fields as dictionary."""
76 return {
77 'macandd0_31': self.macandd0_31.to_dict(),
78 'macandd32_63': self.macandd32_63.to_dict(),
79 'macandd64_95': self.macandd64_95.to_dict(),
80 'macandd96_127': self.macandd96_127.to_dict()
81 }
83 def __str__(self) -> str:
84 """Table row with MAC-and-Destroy specific field names."""
85 s0 = str(self.macandd0_31)
86 s1 = str(self.macandd32_63)
87 s2 = str(self.macandd64_95)
88 s3 = str(self.macandd96_127)
89 return "{:26s} | {} || {} || {} || {} |".format(
90 self.__class__.__name__,
91 s0, s1, s2, s3
92 )