11
02
2010
Decoding Falcom Mambo2 binary format in Java
Posted by: Paul René Jørgensen in Java, tags: binary, decode, falcom, Java, mamboI’ll post this piece of code since it could come in handy for more developers than me.
private static HashMapdecode(int[] data) { HashMap m = new HashMap (); // Extract date information int date = data[0] << 8 | data[1]; int year = 2000 + (date & 0x7f); // 7 bits int month = (date >>> 7) & 0xf; // 4 bits int day = (date >>> 11) & 0×1f; // 5 bits // Extract time information int millis = data[4] << 8 | data[5]; // 16 bits int time = data[2] << 8 | data[3]; int minute = time & 0x3f; // 6 bits int hour = (time >>> 6) & 0×1f; // 5 bits int second = millis / 1000; millis = millis % 1000; // Construct Date object Calendar c = Calendar.getInstance(TimeZone.getTimeZone(”GMT+00″)); c.set(year, month-1, day, hour, minute, second); c.set(Calendar.MILLISECOND, millis); m.put(”gpsTime”, c.getTime()); // Extract validity m.put(”valid”, (time >> 31) == 1); // Extract latitude int latValue = data[6] << 24 | data [7] << 16 | data [8] << 8 | data[9]; if((latValue>>>31) == 1) latValue = - ((~latValue) + 1); m.put(”latitude”, latValue * 0.0000001); // Extract longitude int lngValue = data[10] << 24 | data [11] << 16 | data [12] << 8 | data[13]; if((lngValue>>>31) == 1) lngValue = - ((~lngValue) + 1); m.put(”longitude”, lngValue * 0.0000001); // Extract speed int speedValue = data[14] << 8 | data[15]; m.put("speed", speedValue * 0.01); // Extract course int courseValue = data[16] << 8 | data[17]; m.put("course", courseValue * 0.01); // Extract altitude int altValue = data[18] << 8 | data[19]; m.put("altitude", altValue); return m; }
I hereby put this code into the public domain.



Entries (RSS)