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

1"""UAP Operation configuration classes 

2 

3These classes control permissions for various TROPIC01 operations. 

4""" 

5 

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) 

13 

14 

15class PingConfig(UapSingleFieldConfig): 

16 """UAP PING configuration (CFG_UA`P_PING @ 0x100). 

17 

18 Controls which pairing key slots can execute PING command. 

19 Single 8-bit permission field. 

20 """ 

21 

22 

23class RandomValueGetConfig(UapSingleFieldConfig): 

24 """UAP Random Value Get configuration (CFG_UAP_RANDOM_VALUE_GET @ 0x120). 

25 

26 Controls which pairing key slots can get random values. 

27 Single 8-bit permission field. 

28 """ 

29 

30 

31class MacAndDestroyConfig(UapMultiSlotConfig): 

32 """UAP MAC and Destroy configuration (CFG_UAP_MAC_AND_DESTROY @ 0x160). 

33 

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 """ 

37 

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) 

42 

43 @macandd0_31.setter 

44 def macandd0_31(self, field: UapPermissionField) -> None: 

45 self._set_slot_field(UAP_MACANDD_0_31_POS, field) 

46 

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) 

51 

52 @macandd32_63.setter 

53 def macandd32_63(self, field: UapPermissionField) -> None: 

54 self._set_slot_field(UAP_MACANDD_32_63_POS, field) 

55 

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) 

60 

61 @macandd64_95.setter 

62 def macandd64_95(self, field: UapPermissionField) -> None: 

63 self._set_slot_field(UAP_MACANDD_64_95_POS, field) 

64 

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) 

69 

70 @macandd96_127.setter 

71 def macandd96_127(self, field: UapPermissionField) -> None: 

72 self._set_slot_field(UAP_MACANDD_96_127_POS, field) 

73 

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 } 

82 

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 )