fix bashism that prevents building with /bin/sh->/bin/dash
[fw/altos] / altosui / AltosEepromLog.java
index f284f1038894267fb219880f33b29a2719f32626..ee77e5c84046fee5f1e4a4fa75e00b7cd8932948 100644 (file)
@@ -41,74 +41,69 @@ public class AltosEepromLog {
        int             start_block;
        int             end_block;
 
-       boolean         has_gps;
        int             year, month, day;
-       int             hour, minute, second;
-       double          lat, lon;
 
        boolean         download;
        boolean         delete;
 
-       public AltosEepromLog(AltosSerial serial_line, int in_serial,
-                             int in_start_block, int in_end_block)
+       public AltosEepromLog(AltosConfigData config_data,
+                             AltosSerial serial_line,
+                             int in_flight, int in_start_block,
+                             int in_end_block)
                throws InterruptedException, TimeoutException {
 
                int             block;
-               boolean         has_date = false, has_time = false, has_lat = false, has_lon = false;
+               boolean         has_date = false;
 
+               flight = in_flight;
+               if (flight != 0)
+                       has_flight = true;
                start_block = in_start_block;
                end_block = in_end_block;
-               serial = in_serial;
+               serial = config_data.serial;
 
                /*
                 * By default, request that every log be downloaded but not deleted
                 */
                download = true;
                delete = false;
+
                /*
-                * Only look in the first two blocks so that this
-                * process doesn't take a long time
+                * Look in TeleMetrum log data for date
                 */
-               if (in_end_block > in_start_block + 2)
-                       in_end_block = in_start_block + 2;
+               if (config_data.log_format == Altos.AO_LOG_FORMAT_UNKNOWN ||
+                   config_data.log_format == Altos.AO_LOG_FORMAT_FULL)
+               {
+                       /*
+                        * Only look in the first two blocks so that this
+                        * process doesn't take a long time
+                        */
+                       if (in_end_block > in_start_block + 2)
+                               in_end_block = in_start_block + 2;
 
-               for (block = in_start_block; block < in_end_block; block++) {
-                       AltosEepromBlock eeblock = new AltosEepromBlock(serial_line, block);
-                       if (eeblock.has_flight) {
-                               flight = eeblock.flight;
-                               has_flight = true;
-                       }
-                       if (eeblock.has_date) {
-                               year = eeblock.year;
-                               month = eeblock.month;
-                               day = eeblock.day;
-                               has_date = true;
-                       }
-                       if (eeblock.has_time) {
-                               hour = eeblock.hour;
-                               minute = eeblock.minute;
-                               second = eeblock.second;
-                               has_time = true;
-                       }
-                       if (eeblock.has_lat) {
-                               lat = eeblock.lat;
-                               has_lat = true;
-                       }
-                       if (eeblock.has_lon) {
-                               lon = eeblock.lon;
-                               has_lon = true;
+                       for (block = in_start_block; block < in_end_block; block++) {
+                               AltosEepromChunk eechunk = new AltosEepromChunk(serial_line, block, block == in_start_block);
+
+                               for (int i = 0; i < eechunk.chunk_size; i += AltosEepromRecord.record_length) {
+                                       try {
+                                               AltosEepromRecord r = new AltosEepromRecord(eechunk, i);
+
+                                               if (r.cmd == Altos.AO_LOG_FLIGHT) {
+                                                       flight = r.b;
+                                                       has_flight = true;
+                                               }
+                                               if (r.cmd == Altos.AO_LOG_GPS_DATE) {
+                                                       year = 2000 + (r.a & 0xff);
+                                                       month = (r.a >> 8) & 0xff;
+                                                       day = (r.b & 0xff);
+                                                       has_date = true;
+                                               }
+                                       } catch (ParseException pe) {
+                                       }
+                               }
+                               if (has_date && has_flight)
+                                       break;
                        }
-                       if (has_date && has_time && has_lat && has_lon)
-                               has_gps = true;
-                       if (has_gps && has_flight)
-                               break;
                }
-               System.out.printf("Serial %d start block %d end block %d\n",
-                                 serial, start_block, end_block);
-               if (has_flight)
-                       System.out.printf("Flight %d\n", flight);
-               if (has_gps)
-                       System.out.printf("%d-%d-%d %d:%02d:%02d Lat %f Lon %f\n",
-                                         year, month, day, hour, minute, second, lat, lon);
        }
 }