Skip to content

Commit ae9de21

Browse files
committed
Mice device id decoding and formatting
1 parent 6ba59b3 commit ae9de21

File tree

4 files changed

+41
-8
lines changed

4 files changed

+41
-8
lines changed

codec2talkie/src/main/java/com/radio/codec2talkie/maps/MapStations.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -212,7 +212,7 @@ private String getStatus(StationItem station) {
212212
String status = station.getStatus();
213213
String comment = station.getComment();
214214
if (!status.isBlank() || !comment.isBlank())
215-
data += "<br><i>" + status + " " + comment + "</i></hr>";
215+
data += "<br><i><font color='#006400'>" + status + " " + comment + "</font></i></hr>";
216216

217217
// device id description
218218
String deviceIdDescription = station.getDeviceIdDescription();

codec2talkie/src/main/java/com/radio/codec2talkie/protocol/aprs/AprsDataPositionReport.java

Lines changed: 12 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -250,14 +250,24 @@ private boolean fromUncompressedBinary(byte[] infoData) {
250250
_position.privacyLevel = TextTools.countChars(lat, ' ');
251251
// NOTE, ambiguity, replace with 0
252252
lat = lat.replace(' ', '0');
253-
_position.latitude = UnitTools.nmeaToDecimal(lat, latSuffix);
253+
try {
254+
_position.latitude = UnitTools.nmeaToDecimal(lat, latSuffix);
255+
} catch (NumberFormatException e) {
256+
e.printStackTrace();
257+
return false;
258+
}
254259
String table = latLonMatcher.group(3);
255260
String lon = latLonMatcher.group(4);
256261
String lonSuffix = latLonMatcher.group(5);
257262
if (lon == null || lonSuffix == null) return false;
258263
// NOTE, ambiguity, replace with 0
259264
lon = lon.replace(' ', '0');
260-
_position.longitude = UnitTools.nmeaToDecimal(lon, lonSuffix);
265+
try {
266+
_position.longitude = UnitTools.nmeaToDecimal(lon, lonSuffix);
267+
} catch (NumberFormatException e) {
268+
e.printStackTrace();
269+
return false;
270+
}
261271
String symbol = latLonMatcher.group(6);
262272
_position.symbolCode = String.format("%s%s", table, symbol);
263273
strTail = latLonMatcher.group(7);

codec2talkie/src/main/java/com/radio/codec2talkie/protocol/aprs/AprsDataPositionReportMicE.java

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,12 @@
11
package com.radio.codec2talkie.protocol.aprs;
22

3+
import android.icu.number.FormattedNumber;
4+
import android.util.Log;
5+
36
import com.radio.codec2talkie.protocol.aprs.tools.AprsTools;
47
import com.radio.codec2talkie.protocol.message.TextMessage;
58
import com.radio.codec2talkie.protocol.position.Position;
9+
import com.radio.codec2talkie.tools.DeviceIdTools;
610
import com.radio.codec2talkie.tools.TextTools;
711
import com.radio.codec2talkie.tools.UnitTools;
812

@@ -191,7 +195,12 @@ public void fromBinary(String srcCallsign, String dstCallsign, String digipath,
191195
latitude.append(c);
192196
}
193197

194-
_position.latitude = UnitTools.nmeaToDecimal(latitude.toString(), Character.toString(ns));
198+
try {
199+
_position.latitude = UnitTools.nmeaToDecimal(latitude.toString(), Character.toString(ns));
200+
} catch (NumberFormatException e) {
201+
e.printStackTrace();
202+
return;
203+
}
195204
_position.status = isCustom
196205
? _miceMessageReverseTypeMapCustom.get(messageId)
197206
: _miceMessageReverseTypeMapStd.get(messageId);
@@ -207,7 +216,12 @@ public void fromBinary(String srcCallsign, String dstCallsign, String digipath,
207216
int h = ((int)infoData[2] - 28);
208217

209218
String longitude = String.format(Locale.US, "%03d%02d.%02d", d, m, h);
210-
_position.longitude = UnitTools.nmeaToDecimal(longitude, Character.toString(we));
219+
try {
220+
_position.longitude = UnitTools.nmeaToDecimal(longitude, Character.toString(we));
221+
} catch (NumberFormatException e) {
222+
e.printStackTrace();
223+
return;
224+
}
211225

212226
// read course/speed
213227
int sp = 10 * ((int)infoData[3] - 28);
@@ -244,7 +258,16 @@ public void fromBinary(String srcCallsign, String dstCallsign, String digipath,
244258
} else {
245259
i--;
246260
}
247-
_position.comment = TextTools.stripNulls(new String(Arrays.copyOfRange(infoData, i + 1, infoData.length), StandardCharsets.UTF_8));
261+
String comment = new String(Arrays.copyOfRange(infoData, i + 1, infoData.length), StandardCharsets.UTF_8).strip();
262+
if (comment.length() >= 2) {
263+
String deviceId = comment.substring(comment.length() - 2);
264+
String deviceIdDescription = DeviceIdTools.getMiceDeviceDescription(deviceId);
265+
if (deviceIdDescription != null) {
266+
_position.deviceIdDescription = deviceIdDescription;
267+
comment = comment.substring(0, comment.length() - 2);
268+
}
269+
}
270+
_position.comment = TextTools.stripNulls(comment);
248271
}
249272

250273
_position.maidenHead = UnitTools.decimalToMaidenhead(_position.latitude, _position.longitude);

codec2talkie/src/main/java/com/radio/codec2talkie/tools/DeviceIdTools.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -59,8 +59,8 @@ public static void loadDeviceIdMap(Context context) {
5959
JSONObject miceJsonObject = jsonObject.getJSONObject("mice");
6060
Iterator<String> miceDeviceIds = miceJsonObject.keys();
6161
while (miceDeviceIds.hasNext()) {
62-
String miceDeviceId = deviceIds.next();
63-
JSONObject jsonDeviceEntry = tocallsJsonObject.getJSONObject(miceDeviceId);
62+
String miceDeviceId = miceDeviceIds.next();
63+
JSONObject jsonDeviceEntry = miceJsonObject.getJSONObject(miceDeviceId);
6464
String description = toDescription(jsonDeviceEntry);
6565
if (description == null) continue;
6666
_deviceIdMiceMap.put(miceDeviceId, description);

0 commit comments

Comments
 (0)