Coverage for d7a/system_files/factory_settings.py: 38%

102 statements  

« prev     ^ index     » next       coverage.py v7.5.0, created at 2024-05-24 08:03 +0200

1# 

2# Copyright (c) 2015-2021 University of Antwerp, Aloxy NV. 

3# 

4# This file is part of pyd7a. 

5# See https://github.com/Sub-IoT/pyd7a for further info. 

6# 

7# Licensed under the Apache License, Version 2.0 (the "License"); 

8# you may not use this file except in compliance with the License. 

9# You may obtain a copy of the License at 

10# 

11# http://www.apache.org/licenses/LICENSE-2.0 

12# 

13# Unless required by applicable law or agreed to in writing, software 

14# distributed under the License is distributed on an "AS IS" BASIS, 

15# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 

16# See the License for the specific language governing permissions and 

17# limitations under the License. 

18# 

19import struct 

20 

21from d7a.support.schema import Validatable, Types 

22from d7a.system_files.file import File 

23from d7a.system_files.system_file_ids import SystemFileIds 

24 

25from math import log, ceil 

26 

27class FactorySettingsFile(File, Validatable): 

28 

29 SCHEMA = [{ 

30 "gain": Types.INTEGER(min=-128, max=127), 

31 "rx_bw_low_rate": Types.INTEGER(min=0, max=0xFFFFFFFF), 

32 "rx_bw_normal_rate": Types.INTEGER(min=0, max=0xFFFFFFFF), 

33 "rx_bw_high_rate": Types.INTEGER(min=0, max=0xFFFFFFFF), 

34 "bitrate_lo_rate": Types.INTEGER(min=0, max=0xFFFFFFFF), 

35 "fdev_lo_rate": Types.INTEGER(min=0, max=0xFFFFFFFF), 

36 "bitrate_normal_rate": Types.INTEGER(min=0, max=0xFFFFFFFF), 

37 "fdev_normal_rate": Types.INTEGER(min=0, max=0xFFFFFFFF), 

38 "bitrate_hi_rate": Types.INTEGER(min=0, max=0xFFFFFFFF), 

39 "fdev_hi_rate": Types.INTEGER(min=0, max=0xFFFFFFFF), 

40 "preamble_size_lo_rate": Types.INTEGER(min=0, max=255), 

41 "preamble_size_normal_rate": Types.INTEGER(min=0, max=255), 

42 "preamble_size_hi_rate": Types.INTEGER(min=0, max=255), 

43 "preamble_detector_size_lo_rate": Types.INTEGER(min=0, max=255), 

44 "preamble_detector_size_normal_rate": Types.INTEGER(min=0, max=255), 

45 "preamble_detector_size_hi_rate": Types.INTEGER(min=0, max=255), 

46 "preamble_tol": Types.INTEGER(min=0, max=255), 

47 "rssi_smoothing": Types.INTEGER(min=0, max=255), 

48 "rssi_offset": Types.INTEGER(min=-126, max=125), 

49 "lora_bw": Types.INTEGER(min=0, max=0xFFFFFFFF), 

50 "lora_SF": Types.INTEGER(min=6, max=12), 

51 "gaussian" : Types.INTEGER(min=0, max=3), 

52 "paramp" : Types.INTEGER(min=0, max=0xFFFF) 

53 }] 

54 

55 def __init__(self, gain=0, rx_bw_low_rate=10468, rx_bw_normal_rate=78646, rx_bw_high_rate=125868, 

56 bitrate_lo_rate=9600, fdev_lo_rate=4800, 

57 bitrate_normal_rate=55555, fdev_normal_rate=50000, bitrate_hi_rate=166667, fdev_hi_rate=41667, 

58 preamble_size_lo_rate=5, preamble_size_normal_rate=5, preamble_size_hi_rate=7, 

59 preamble_detector_size_lo_rate=3, preamble_detector_size_normal_rate=3, preamble_detector_size_hi_rate=3, 

60 preamble_tol_lo_rate=15, preamble_tol_normal_rate=10, preamble_tol_hi_rate=10, 

61 rssi_smoothing=8, rssi_offset=0, 

62 lora_bw=125000, lora_SF=9, 

63 gaussian=2, paramp=40): 

64 self.gain = gain 

65 self.rx_bw_low_rate = rx_bw_low_rate 

66 self.rx_bw_normal_rate = rx_bw_normal_rate 

67 self.rx_bw_high_rate = rx_bw_high_rate 

68 self.bitrate_lo_rate = bitrate_lo_rate 

69 self.fdev_lo_rate = fdev_lo_rate 

70 self.bitrate_normal_rate = bitrate_normal_rate 

71 self.fdev_normal_rate = fdev_normal_rate 

72 self.bitrate_hi_rate = bitrate_hi_rate 

73 self.fdev_hi_rate = fdev_hi_rate 

74 self.preamble_size_lo_rate = preamble_size_lo_rate 

75 self.preamble_size_normal_rate = preamble_size_normal_rate 

76 self.preamble_size_hi_rate = preamble_size_hi_rate 

77 self.preamble_detector_size_lo_rate = preamble_detector_size_lo_rate 

78 self.preamble_detector_size_normal_rate = preamble_detector_size_normal_rate 

79 self.preamble_detector_size_hi_rate = preamble_detector_size_hi_rate 

80 self.preamble_tol_lo_rate = preamble_tol_lo_rate 

81 self.preamble_tol_normal_rate = preamble_tol_normal_rate 

82 self.preamble_tol_hi_rate = preamble_tol_hi_rate 

83 self.rssi_smoothing = int(ceil(log(rssi_smoothing, 2)))-1 

84 self.rssi_offset = rssi_offset 

85 self.lora_bw = lora_bw 

86 self.lora_SF = lora_SF 

87 self.gaussian = gaussian 

88 self.paramp = paramp 

89 File.__init__(self, SystemFileIds.FACTORY_SETTINGS.value, 56) 

90 Validatable.__init__(self) 

91 

92 @staticmethod 

93 def parse(s, offset=0, length=56): 

94 gain = s.read("int:8") 

95 rx_bw_low_rate = s.read("uint:32") 

96 rx_bw_normal_rate = s.read("uint:32") 

97 rx_bw_high_rate = s.read("uint:32") 

98 bitrate_lo_rate = s.read("uint:32") 

99 fdev_lo_rate = s.read("uint:32") 

100 bitrate_normal_rate = s.read("uint:32") 

101 fdev_normal_rate = s.read("uint:32") 

102 bitrate_hi_rate = s.read("uint:32") 

103 fdev_hi_rate = s.read("uint:32") 

104 

105 preamble_size_lo_rate = s.read("uint:8") 

106 preamble_size_normal_rate = s.read("uint:8") 

107 preamble_size_hi_rate = s.read("uint:8") 

108 

109 preamble_detector_size_lo_rate = s.read("uint:8") 

110 preamble_detector_size_normal_rate = s.read("uint:8") 

111 preamble_detector_size_hi_rate = s.read("uint:8") 

112 preamble_tol_lo_rate = s.read("uint:8") 

113 preamble_tol_normal_rate = s.read("uint:8") 

114 preamble_tol_hi_rate = s.read("uint:8") 

115 

116 rssi_smoothing = s.read("uint:8") 

117 rssi_offset = s.read("uint:8") 

118 

119 lora_bw = s.read("uint:32") 

120 lora_SF = s.read("uint:8") 

121 

122 gaussian = s.read("uint:8") 

123 paramp = s.read("uint:16") 

124 

125 return FactorySettingsFile(gain=gain, rx_bw_low_rate=rx_bw_low_rate, rx_bw_normal_rate=rx_bw_normal_rate, rx_bw_high_rate=rx_bw_high_rate, 

126 bitrate_lo_rate=bitrate_lo_rate, fdev_lo_rate=fdev_lo_rate, 

127 bitrate_normal_rate=bitrate_normal_rate, fdev_normal_rate=fdev_normal_rate, 

128 bitrate_hi_rate=bitrate_hi_rate, fdev_hi_rate=fdev_hi_rate, 

129 preamble_size_lo_rate=preamble_size_lo_rate, preamble_size_normal_rate=preamble_size_normal_rate, 

130 preamble_size_hi_rate=preamble_size_hi_rate, preamble_detector_size_lo_rate = preamble_detector_size_lo_rate, 

131 preamble_detector_size_normal_rate=preamble_detector_size_normal_rate, preamble_detector_size_hi_rate = preamble_detector_size_hi_rate, 

132 preamble_tol_lo_rate = preamble_tol_lo_rate, preamble_tol_normal_rate = preamble_tol_normal_rate, 

133 preamble_tol_hi_rate = preamble_tol_hi_rate, 

134 rssi_smoothing=rssi_smoothing, rssi_offset=rssi_offset, 

135 lora_bw=lora_bw, lora_SF=lora_SF, 

136 gaussian=gaussian, paramp=paramp) 

137 

138 def __iter__(self): 

139 yield self.gain 

140 for byte in bytearray(struct.pack(">I", self.rx_bw_low_rate)): 

141 yield byte 

142 for byte in bytearray(struct.pack(">I", self.rx_bw_normal_rate)): 

143 yield byte 

144 for byte in bytearray(struct.pack(">I", self.rx_bw_high_rate)): 

145 yield byte 

146 for byte in bytearray(struct.pack(">I", self.bitrate_lo_rate)): 

147 yield byte 

148 for byte in bytearray(struct.pack(">I", self.fdev_lo_rate)): 

149 yield byte 

150 for byte in bytearray(struct.pack(">I", self.bitrate_normal_rate)): 

151 yield byte 

152 for byte in bytearray(struct.pack(">I", self.fdev_normal_rate)): 

153 yield byte 

154 for byte in bytearray(struct.pack(">I", self.bitrate_hi_rate)): 

155 yield byte 

156 for byte in bytearray(struct.pack(">I", self.fdev_hi_rate)): 

157 yield byte 

158 yield self.preamble_size_lo_rate 

159 yield self.preamble_size_normal_rate 

160 yield self.preamble_size_hi_rate 

161 yield self.preamble_detector_size_lo_rate 

162 yield self.preamble_detector_size_normal_rate 

163 yield self.preamble_detector_size_hi_rate 

164 yield self.preamble_tol_lo_rate 

165 yield self.preamble_tol_normal_rate 

166 yield self.preamble_tol_hi_rate 

167 yield self.rssi_smoothing 

168 yield self.rssi_offset 

169 for byte in bytearray(struct.pack(">I", self.lora_bw)): 

170 yield byte 

171 yield self.lora_SF 

172 yield self.gaussian 

173 for byte in bytearray(struct.pack(">H", self.paramp)): 

174 yield byte 

175 

176 def __str__(self): 

177 return "gain={}, rx_bw_low_rate={}, rx_bw_normal_rate={}, rx_bw_high_rate={}, low rate={} : {}, normal rate={} : {}, high rate={} : {}, preamble sizes {} : {} : {}, preamble detector size {} : {} : {} with tol {} : {} : {}, rssi smoothing {} with offset {}\nlora sf set to {}, bw to {}\ngaussian set to {} and paramp to {} microseconds".format(self.gain, self.rx_bw_low_rate, self.rx_bw_normal_rate, self.rx_bw_high_rate, 

178 self.bitrate_lo_rate, self.fdev_lo_rate, 

179 self.bitrate_normal_rate, self.fdev_normal_rate, self.bitrate_hi_rate, self.fdev_hi_rate, 

180 self.preamble_size_lo_rate, self.preamble_size_normal_rate, self.preamble_size_hi_rate, 

181 self.preamble_detector_size_lo_rate, self.preamble_detector_size_normal_rate, self.preamble_detector_size_hi_rate, 

182 self.preamble_tol_lo_rate, self.preamble_tol_normal_rate, self.preamble_tol_hi_rate, 

183 self.rssi_smoothing, self.rssi_offset, 

184 self.lora_bw, self.lora_SF, 

185 self.gaussian, self.paramp)