33
33
34
34
#include " liboculus/SonarConfiguration.h"
35
35
#include " liboculus/DataTypes.h"
36
+ #include " liboculus/Constants.h"
36
37
37
38
#include < boost/asio.hpp>
38
39
#include < g3log/g3log.hpp>
39
40
40
41
namespace liboculus {
41
42
42
43
SonarConfiguration::SonarConfiguration ()
43
- : _rangeAsMeters(true ),
44
+ : _sendRangeAsMeters(true ),
45
+ _rangeInMeters (5 ),
44
46
_sendGain(true ),
45
47
_simpleReturn(true ),
46
48
_gainAssistance(true ),
@@ -73,7 +75,7 @@ SonarConfiguration &SonarConfiguration::setRange(double input) {
73
75
// 40 meters is the max range for the 1200d model
74
76
// may need to use a double instead of uint8_t (depends on flags)
75
77
if (input <= 40 && input > 0 ) {
76
- _sfm. rangePercent = input;
78
+ _rangeInMeters = input;
77
79
} else {
78
80
LOG (WARNING) << " Requested invalid range: " << input;
79
81
}
@@ -113,8 +115,8 @@ SonarConfiguration &SonarConfiguration::setDataSize(DataSizeType sz) {
113
115
return *this ;
114
116
}
115
117
116
- SonarConfiguration &SonarConfiguration::setRangeAsMeters (bool v) {
117
- _rangeAsMeters = v;
118
+ SonarConfiguration &SonarConfiguration::sendRangeAsMeters (bool v) {
119
+ _sendRangeAsMeters = v;
118
120
return *this ;
119
121
}
120
122
@@ -145,9 +147,22 @@ template <>
145
147
std::vector<uint8_t > SonarConfiguration::serialize<OculusSimpleFireMessage2>() const {
146
148
updateFlags ();
147
149
150
+ // Corner case. If in 32bit mode, range is always a percentage of max range
151
+ // if ((_dataSize == dataSize32Bit) || (!_sendRangeAsMeters)) {
152
+ // const float maxRange = ((getFreqMode()==OCULUS_LOW_FREQ) ? Oculus_1200MHz::MaxRange : Oculus_2100MHz::MaxRange);
153
+
154
+ // _sfm.rangePercent = std::min(_rangeInMeters/maxRange * 100.0,100.0);
155
+
156
+
157
+ // LOG(INFO) << "In 32bit mode, setting range to " << _rangeInMeters << " which is " << _sfm.rangePercent << " percent";
158
+ // } else {
159
+ _sfm.rangePercent = _rangeInMeters;
160
+ // }
161
+
148
162
std::vector<uint8_t > v;
149
163
const auto ptr = reinterpret_cast <const char *>(&_sfm);
150
164
v.insert (v.end (), ptr, ptr + sizeof (OculusSimpleFireMessage2));
165
+
151
166
return v;
152
167
}
153
168
@@ -179,7 +194,7 @@ void SonarConfiguration::updateFlags() const {
179
194
if (_dataSize == dataSize32Bit)
180
195
_sfm.extFlags |= 0x00000200 ;
181
196
182
- _sfm.flags = (_rangeAsMeters ? FlagBits::RangeAsMeters : 0 ) |
197
+ _sfm.flags = (_rangeInMeters ? FlagBits::RangeAsMeters : 0 ) |
183
198
(((_dataSize == dataSize16Bit) || (_dataSize == dataSize32Bit)) ? FlagBits::Data16Bits : 0 ) |
184
199
(_sendGain ? FlagBits::DoSendGain : 0 ) |
185
200
(_simpleReturn ? FlagBits::SimpleReturn : 0 ) |
@@ -195,15 +210,15 @@ void SonarConfiguration::dump() const {
195
210
<< std::hex << std::setw (2 ) << std::setfill (' 0' )
196
211
<< static_cast <unsigned int >(_sfm.flags )
197
212
<< std::setw (8 )
198
- << " \n Ext flags 0x"
213
+ << " \n Ext flags 0x"
199
214
<< std::setw (8 ) << static_cast <uint32_t >(_sfm.extFlags )
200
215
<< std::dec << std::setw (0 )
201
- << " \n range is meters " << getRangeAsMeters ()
202
- << " \n data size " << DataSizeToString (getDataSize ())
203
- << " \n send gain " << getSendGain ()
204
- << " \n simple return " << getSimpleReturn ()
205
- << " \n gain assistance " << getGainAssistance ()
206
- << " \n use 512 beams " << get512Beams ();
216
+ << " \n send range is meters " << getSendRangeAsMeters ()
217
+ << " \n data size " << DataSizeToString (getDataSize ())
218
+ << " \n send gain " << getSendGain ()
219
+ << " \n simple return " << getSimpleReturn ()
220
+ << " \n gain assistance " << getGainAssistance ()
221
+ << " \n use 512 beams " << get512Beams ();
207
222
}
208
223
209
224
0 commit comments