Merge branch 'master'
authorKeith Packard <keithp@keithp.com>
Sat, 26 Nov 2022 17:52:37 +0000 (09:52 -0800)
committerKeith Packard <keithp@keithp.com>
Sat, 26 Nov 2022 17:53:56 +0000 (09:53 -0800)
1  2 
Releasing
altoslib/AltosConfigData.java
altosui/Makefile.am
altosui/altos-windows.nsi.in
src/kernel/ao_telemetry.c

diff --combined Releasing
index 7bfb3ae8bcbeab276d96ebe4c090181356124c5b,e59ca5b357da34c5512834b926e52d8d4715784a..939b10b71eb7872e01f8d8542e51fa1675d41c3c
+++ b/Releasing
@@@ -48,8 -48,6 +48,8 @@@ These are Bdale's notes on how to do a 
                        gcc-i686-linux-gnu gcc-aarch64-linux-gnu \
                        gcc-arm-linux-gnueabi gcc-arm-linux-gnueabihf
  
 +      - make sure jsign is installed so we can sign Windows installers
 +
        - make sure ~/web/altusmetrum has no pending pullable commits
  
        git checkout master
@@@ -82,7 -80,6 +82,7 @@@
  
        - verify debian/changelog is "clean" ending in last release version
        - craft a suitable debian/changelog entry, possibly using:
 +      export EMAIL=bdale@gag.com
        gbp dch --release --multimaint-merge --new-version=<version>-1 
  
          git commit -n debian/changelog -m "update changelog for Debian build"
  
        cp src/chaoskey-v1.0/{*.elf,*.ihx,*.bin,*.map} \
           src/easymega-v[1-2].0/{*.elf,*.ihx,*.map} \
 -         src/easymini-v[1-2].0/{*.elf,*.ihx,*.map} \
 -         src/easymotor-v2/{*.elf,*.ihx,*.map} \
 +         src/easymini-v[1-3].0/{*.elf,*.ihx,*.map} \
 +         src/easymotor-v3/{*.elf,*.ihx,*.map} \
           src/easytimer-v1/{*.elf,*.ihx,*.map} \
           src/telebt-v[3-4].0/{*.elf,*.ihx,*.map} \
           src/teledongle-v3.0/{*.elf,*.ihx,*.map} \
           src/telegps-v[1-2].0/{*.elf,*.ihx,*.map} \
           src/telemega-v[1-5].0/{*.elf,*.ihx,*.map} \
-          src/telemetrum-v[2-3].0/{*.elf,*.ihx,*.map} \
+          src/telemetrum-v[2-4].0/{*.elf,*.ihx,*.map} \
           src/telemini-v3.0/{*.elf,*.ihx,*.map} \
           src/telelco-v2.0/{*.elf,*.ihx,*.map} \
           src/telefireeight-v[1-2].0/{*.elf,*.ihx,*.map} \
           ~/altusmetrumllc/Binaries/
        cp src/chaoskey-v1.0/flash-loader/{*.elf,*.bin,*.map} \
           src/easymega-v[1-2].0/flash-loader/*.elf \
 -         src/easymini-v[1-2].0/flash-loader/*.elf \
 -         src/easymotor-v2/flash-loader/*.elf \
 +         src/easymini-v[1-3].0/flash-loader/*.elf \
 +         src/easymotor-v3/flash-loader/*.elf \
           src/easytimer-v1/flash-loader/*.elf \
           src/telebt-v[3-4].0/flash-loader/{*.elf,*.bin,*.map} \
           src/teledongle-v3.0/flash-loader/*.elf \
           src/telegps-v[1-2].0/flash-loader/{*.elf,*.bin,*.map} \
           src/telemega-v[1-5].0/flash-loader/*.elf \
-          src/telemetrum-v[2-3].0/flash-loader/*.elf \
+          src/telemetrum-v[2-4].0/flash-loader/*.elf \
           src/telemini-v3.0/flash-loader/{*.elf,*.bin,*.map} \
           src/telelco-v2.0/flash-loader/*.elf \
           src/telefireeight-v[1-2].0/flash-loader/*.elf \
index 5b9ee03120689d829d7f789a40218c143837daa8,18815cf4b26a86b3c8ccec7f23b5ba2944dbb73e..5797f6325c64071226ccdb256eb059d1f90242b3
@@@ -86,8 -86,6 +86,8 @@@ public class AltosConfigData 
        /* HAS_RADIO_10MW */
        public int              radio_10mw;
  
 +      public int              report_feet;
 +
        /* Storage info replies */
        public int      storage_size;
        public int      storage_erase_unit;
  
                radio_10mw = AltosLib.MISSING;
  
 +              report_feet = AltosLib.MISSING;
 +
                tracker_motion = AltosLib.MISSING;
                tracker_interval = AltosLib.MISSING;
  
                /* HAS_RADIO_10MW */
                try { radio_10mw = get_int(line, "Radio 10mw limit:"); } catch (Exception e) {}
  
 +              try { report_feet = get_int(line, "Report in feet:"); } catch (Exception e) {}
 +
                /* HAS_TRACKER */
                try {
                        int[] values = get_values(line, "Tracker setting:");
                        return false;
                if (product.startsWith("TeleMetrum-v3"))
                        return false;
+               if (product.startsWith("TeleMetrum-v4"))
+                       return true;
                if (product.startsWith("EasyMega"))
                        return false;
                return true;
                                return true;
                        if (product.startsWith("TeleMetrum-v3"))
                                return true;
+                       if (product.startsWith("TeleMetrum-v4"))
+                               return true;
                        if (product.startsWith("TeleMega-v4"))
                                return true;
                        if (product.startsWith("EasyMotor-v2"))
                                return true;
 +                      if (product.startsWith("EasyMotor-v3"))
 +                              return true;
                }
                throw new AltosUnknownProduct(product);
        }
                                return AltosAdxl375.X_AXIS;
                        if (product.startsWith("TeleMetrum-v3"))
                                return AltosAdxl375.X_AXIS;
+                       if (product.startsWith("TeleMetrum-v4"))
+                               return AltosAdxl375.X_AXIS;
                        if (product.startsWith("TeleMega-v4"))
                                return AltosAdxl375.X_AXIS;
                        if (product.startsWith("EasyMotor-v2"))
                                return AltosAdxl375.X_AXIS;
 +                      if (product.startsWith("EasyMotor-v3"))
 +                              return AltosAdxl375.X_AXIS;
  
                }
                throw new AltosUnknownProduct(product);
                if (radio_10mw != AltosLib.MISSING)
                        radio_10mw = source.radio_10mw();
  
 +              if (report_feet != AltosLib.MISSING)
 +                      report_feet = source.report_feet();
 +
                /* HAS_TRACKER */
                if (tracker_motion != AltosLib.MISSING)
                        tracker_motion = source.tracker_motion();
                dest.set_aprs_offset(aprs_offset);
                dest.set_beep(beep);
                dest.set_radio_10mw(radio_10mw);
 +              dest.set_report_feet(report_feet);
                dest.set_tracker_motion(tracker_motion);
                dest.set_tracker_interval(tracker_interval);
        }
                if (radio_10mw != AltosLib.MISSING)
                        link.printf("c p %d\n", radio_10mw);
  
 +              /* HAS_RADIO_10MW */
 +              if (report_feet != AltosLib.MISSING)
 +                      link.printf("c u %d\n", report_feet);
 +
                /* HAS_TRACKER */
                if (tracker_motion != AltosLib.MISSING && tracker_interval != AltosLib.MISSING)
                        link.printf("c t %d %d\n", tracker_motion, tracker_interval);
diff --combined altosui/Makefile.am
index 41f0d6ad4085de9ecc283b5cdd1cd19f27a9a3e4,e4993663bf06e0c4dd706e66939e80abb13c0ac4..765ad58c3cca4298cc4519b024fcb2e233ae50a9
@@@ -1,4 -1,3 +1,4 @@@
 +# location of code signing key, et al
  
  JAVAROOT=classes
  AM_JAVACFLAGS=$(JAVAC_VERSION_FLAGS) -encoding UTF-8 -Xlint:deprecation -Xlint:unchecked
@@@ -124,7 -123,8 +124,8 @@@ FIRMWARE_TD=$(FIRMWARE_TD_3_0
  
  FIRMWARE_TM_2_0=$(top_srcdir)/src/telemetrum-v2.0/telemetrum-v2.0-$(VERSION).ihx
  FIRMWARE_TM_3_0=$(top_srcdir)/src/telemetrum-v3.0/telemetrum-v3.0-$(VERSION).ihx
- FIRMWARE_TM=$(FIRMWARE_TM_2_0) $(FIRMWARE_TM_3_0)
+ FIRMWARE_TM_4_0=$(top_srcdir)/src/telemetrum-v4.0/telemetrum-v4.0-$(VERSION).ihx
+ FIRMWARE_TM=$(FIRMWARE_TM_2_0) $(FIRMWARE_TM_3_0) $(FIRMWARE_TM_4_0)
  
  FIRMWARE_TELEMINI_3_0=$(top_srcdir)/src/telemini-v3.0/telemini-v3.0-$(VERSION).ihx
  FIRMWARE_TELEMINI=$(FIRMWARE_TELEMINI_3_0)
@@@ -142,15 -142,14 +143,15 @@@ FIRMWARE_TMEGA=$(FIRMWARE_TMEGA_1_0) $(
  
  FIRMWARE_EMINI_1_0=$(top_srcdir)/src/easymini-v1.0/easymini-v1.0-$(VERSION).ihx
  FIRMWARE_EMINI_2_0=$(top_srcdir)/src/easymini-v2.0/easymini-v2.0-$(VERSION).ihx
 -FIRMWARE_EMINI=$(FIRMWARE_EMINI_1_0) $(FIRMWARE_EMINI_2_0)
 +FIRMWARE_EMINI_3_0=$(top_srcdir)/src/easymini-v3.0/easymini-v3.0-$(VERSION).ihx
 +FIRMWARE_EMINI=$(FIRMWARE_EMINI_1_0) $(FIRMWARE_EMINI_2_0) $(FIRMWARE_EMINI_3_0)
  
  FIRMWARE_EMEGA_1_0=$(top_srcdir)/src/easymega-v1.0/easymega-v1.0-$(VERSION).ihx
  FIRMWARE_EMEGA_2_0=$(top_srcdir)/src/easymega-v2.0/easymega-v2.0-$(VERSION).ihx
  FIRMWARE_EMEGA=$(FIRMWARE_EMEGA_1_0) $(FIRMWARE_EMEGA_2_0)
  
 -FIRMWARE_EMOTOR_2=$(top_srcdir)/src/easymotor-v2/easymotor-v2-$(VERSION).ihx
 -FIRMWARE_EMOTOR=$(FIRMWARE_EMOTOR_2)
 +FIRMWARE_EMOTOR_3=$(top_srcdir)/src/easymotor-v3/easymotor-v3-$(VERSION).ihx
 +FIRMWARE_EMOTOR=$(FIRMWARE_EMOTOR_3)
  
  FIRMWARE_ETIMER_1=$(top_srcdir)/src/easytimer-v1/easytimer-v1-$(VERSION).ihx
  FIRMWARE_ETIMER=$(FIRMWARE_ETIMER_1)
@@@ -171,7 -170,6 +172,7 @@@ FIRMWARE=$(FIRMWARE_TM) $(FIRMWARE_TELE
  ALTUSMETRUM_DOC=$(top_srcdir)/doc/altusmetrum.pdf
  ALTOS_DOC=$(top_srcdir)/doc/altos.pdf
  TELEMETRY_DOC=$(top_srcdir)/doc/telemetry.pdf
 +MOTORTEST_DOC=$(top_srcdir)/doc/motortest.pdf
  TEMPLATE_DOC=\
        $(top_srcdir)/doc/telemetrum-outline.pdf \
        $(top_srcdir)/doc/easymini-outline.pdf \
        $(top_srcdir)/doc/telemini-v1-outline.pdf \
        $(top_srcdir)/doc/telemini-v3-outline.pdf
  
 -DOC=$(ALTUSMETRUM_DOC) $(ALTOS_DOC) $(TELEMETRY_DOC) $(TEMPLATE_DOC)
 +DOC=$(ALTUSMETRUM_DOC) $(ALTOS_DOC) $(TELEMETRY_DOC) $(MOTORTEST_DOC) $(TEMPLATE_DOC)
  
  # Distribution targets
  LINUX_DIST=Altos-Linux-$(VERSION).tar.bz2
@@@ -412,8 -410,3 +413,8 @@@ $(MACOSX_DIST): $(MACOSX_FILES) $(MACOS
  $(WINDOWS_DIST): $(WINDOWS_FILES) altos-windows.nsi Instdrv/NSIS/Includes/java.nsh
        -rm -f $@
        makensis -Oaltos-windows.log "-XOutFile $@" "-DVERSION=$(VERSION)" altos-windows.nsi || (cat altos-windows.log && exit 1)
 +      if [ "$(HAVE_WINDOWS_KEY)" = "yes" ]; then \
 +      jsign --keystore "$(WINDOWSKEYFILE)" --alias 1 \
 +              --storetype PKCS12 --storepass `cat "$(WINDOWSKEYPASSFILE)"` \
 +              --tsaurl http://ts.ssl.com --tsmode RFC3161 $@ ; \
 +      fi
index 7abd4d03f15ce4d2205ae0b1d7dd097fa41fe322,98156e611081aadba07f2d115cdf5bf56cae78dd..6cb9cd42d024c40cae236d84dc44004107808f12
@@@ -122,6 -122,7 +122,7 @@@ Section "Firmware
  
        File "../src/telemetrum-v2.0/telemetrum-v2.0-${VERSION}.ihx"
        File "../src/telemetrum-v3.0/telemetrum-v3.0-${VERSION}.ihx"
+       File "../src/telemetrum-v4.0/telemetrum-v4.0-${VERSION}.ihx"
        File "../src/telemini-v3.0/telemini-v3.0-${VERSION}.ihx"
        File "../src/telegps-v1.0/telegps-v1.0-${VERSION}.ihx"
        File "../src/telegps-v2.0/telegps-v2.0-${VERSION}.ihx"
        File "../src/telemega-v5.0/telemega-v5.0-${VERSION}.ihx"
        File "../src/easymini-v1.0/easymini-v1.0-${VERSION}.ihx"
        File "../src/easymini-v2.0/easymini-v2.0-${VERSION}.ihx"
 +      File "../src/easymini-v3.0/easymini-v3.0-${VERSION}.ihx"
        File "../src/easymega-v1.0/easymega-v1.0-${VERSION}.ihx"
        File "../src/easymega-v2.0/easymega-v2.0-${VERSION}.ihx"
 -      File "../src/easymotor-v2/easymotor-v2-${VERSION}.ihx"
 +      File "../src/easymotor-v3/easymotor-v3-${VERSION}.ihx"
        File "../src/easytimer-v1/easytimer-v1-${VERSION}.ihx"
        File "../src/telelco-v2.0/telelco-v2.0-${VERSION}.ihx"
        File "../src/telefireeight-v1.0/telefireeight-v1.0-${VERSION}.ihx"
@@@ -153,7 -153,6 +154,7 @@@ Section "Documentation
        File "../doc/altusmetrum.pdf"
        File "../doc/altos.pdf"
        File "../doc/telemetry.pdf"
 +      File "../doc/motortest.pdf"
        File "../doc/telemetrum-outline.pdf"
        File "../doc/telemega-outline.pdf"
        File "../doc/easymini-outline.pdf"
index 1fd4037f540b8d0d01618b6a22672cd613bb187b,b1a1db1626695c576bdbd9628f27ee794231f64f..e0f4d8c22aea4f6399cf03c4b46ad3915b63b335
@@@ -58,7 -58,7 +58,7 @@@ static AO_TICK_TYPE ao_aprs_time
  #define AO_SEND_MEGA  1
  #endif
  
- #if defined (TELEMETRUM_V_2_0) || defined (TELEMETRUM_V_3_0)
+ #if defined (TELEMETRUM_V_2_0) || defined (TELEMETRUM_V_3_0) || defined (TELEMETRUM_V_4_0)
  #define AO_SEND_METRUM        1
  #endif
  
@@@ -490,7 -490,10 +490,10 @@@ ao_set_aprs_time(void
                } else {
                        delta = second - ao_gps_data.second;
                }
-               ao_aprs_time = ao_gps_tick + AO_SEC_TO_TICKS(delta);
+               if (delta < (interval >> 1))
+                       delta += interval;
+               ao_aprs_time = ao_gps_utc_tick + AO_SEC_TO_TICKS(delta);
        } else {
                ao_aprs_time += AO_SEC_TO_TICKS(ao_config.aprs_interval);
        }
@@@ -636,47 -639,45 +639,47 @@@ ao_telemetry_set_interval(uint16_t inte
                interval = min_interval[ao_config.radio_rate];
  #endif
        ao_telemetry_interval = interval;
 +      if (interval) {
  #if AO_SEND_MEGA
 -      if (interval > 1)
 -              ao_telemetry_mega_data_max = 1;
 -      else
 -              ao_telemetry_mega_data_max = 2;
 -      if (ao_telemetry_mega_data_max > cur)
 -              cur++;
 -      ao_telemetry_mega_data_cur = cur;
 +              if (interval > 1)
 +                      ao_telemetry_mega_data_max = 1;
 +              else
 +                      ao_telemetry_mega_data_max = 2;
 +              if (ao_telemetry_mega_data_max > cur)
 +                      cur++;
 +              ao_telemetry_mega_data_cur = cur;
  #endif
  #if AO_SEND_METRUM
 -      ao_telemetry_metrum_data_max = (int16_t) (AO_SEC_TO_TICKS(1) / interval);
 -      if (ao_telemetry_metrum_data_max > cur)
 -              cur++;
 -      ao_telemetry_metrum_data_cur = cur;
 +              ao_telemetry_metrum_data_max = (int16_t) (AO_SEC_TO_TICKS(1) / interval);
 +              if (ao_telemetry_metrum_data_max > cur)
 +                      cur++;
 +              ao_telemetry_metrum_data_cur = cur;
  #endif
  
  #if HAS_COMPANION
 -      if (!ao_companion_setup.update_period)
 -              ao_companion_setup.update_period = AO_SEC_TO_TICKS(1);
 -      ao_telemetry_companion_max = (int16_t) (ao_companion_setup.update_period / interval);
 -      if (ao_telemetry_companion_max > cur)
 -              cur++;
 -      ao_telemetry_companion_cur = cur;
 +              if (!ao_companion_setup.update_period)
 +                      ao_companion_setup.update_period = AO_SEC_TO_TICKS(1);
 +              ao_telemetry_companion_max = (int16_t) (ao_companion_setup.update_period / interval);
 +              if (ao_telemetry_companion_max > cur)
 +                      cur++;
 +              ao_telemetry_companion_cur = cur;
  #endif
  
  #if HAS_GPS
 -      ao_telemetry_gps_max = (int16_t) (AO_SEC_TO_TICKS(1) / interval);
 -      if (ao_telemetry_gps_max > cur)
 -              cur++;
 -      ao_telemetry_loc_cur = cur;
 -      if (ao_telemetry_gps_max > cur)
 -              cur++;
 -      ao_telemetry_sat_cur = cur;
 -#endif
 -
 -      ao_telemetry_config_max = (int16_t) (AO_SEC_TO_TICKS(5) / interval);
 -      if (ao_telemetry_config_max > cur)
 -              cur++;
 -      ao_telemetry_config_cur = cur;
 +              ao_telemetry_gps_max = (int16_t) (AO_SEC_TO_TICKS(1) / interval);
 +              if (ao_telemetry_gps_max > cur)
 +                      cur++;
 +              ao_telemetry_loc_cur = cur;
 +              if (ao_telemetry_gps_max > cur)
 +                      cur++;
 +              ao_telemetry_sat_cur = cur;
 +#endif
 +
 +              ao_telemetry_config_max = (int16_t) (AO_SEC_TO_TICKS(5) / interval);
 +              if (ao_telemetry_config_max > cur)
 +                      cur++;
 +              ao_telemetry_config_cur = cur;
 +      }
  
  #ifndef SIMPLIFY
        ao_telemetry_time =