]> git.gag.com Git - fw/altos/commitdiff
update ChangeLog for <version> release branch-1.9 1.9.19
authorBdale Garbee <bdale@gag.com>
Mon, 5 Aug 2024 16:38:59 +0000 (10:38 -0600)
committerBdale Garbee <bdale@gag.com>
Mon, 5 Aug 2024 16:38:59 +0000 (10:38 -0600)
71 files changed:
ChangeLog
Makefile.am
Releasing
altoslib/AltosCalData.java
altoslib/AltosConfigData.java
altoslib/AltosDataListener.java
altoslib/AltosEepromRecordSet.java
altoslib/AltosLib.java
altoslib/AltosRecordSet.java
altoslib/AltosTelemetryFile.java
altosui/AltosConfigFCUI.java
altosui/AltosGraphUI.java
altosui/Makefile.am
altosui/altos-windows.nsi.in
altosuilib/AltosFlightConfigTable.java [new file with mode: 0644]
altosuilib/AltosFlightPyroTable.java [new file with mode: 0644]
altosuilib/Makefile.am
ao-bringup/test-easymega [deleted file]
ao-bringup/test-easymega-v2.0 [new file with mode: 0755]
ao-bringup/test-easymega-v3.0 [new file with mode: 0755]
ao-bringup/test-easymini-v2.0 [new file with mode: 0755]
ao-bringup/test-easytimer [deleted file]
ao-bringup/test-easytimer-v1 [new file with mode: 0755]
ao-bringup/test-easytimer-v2 [new file with mode: 0755]
ao-bringup/turnon_easymega [changed from file to symlink]
ao-bringup/turnon_easymega_v2.0 [new file with mode: 0755]
ao-bringup/turnon_easymega_v3.0 [new file with mode: 0755]
ao-bringup/turnon_easymini [changed from file to symlink]
ao-bringup/turnon_easymini_v2.0 [new file with mode: 0755]
ao-bringup/turnon_easymini_v3.0 [new file with mode: 0755]
ao-bringup/turnon_easymotor
ao-bringup/turnon_easytimer
ao-bringup/turnon_easytimer_v1 [new file with mode: 0755]
ao-tools/ao-cal-accel/ao-cal-accel.c
configure.ac
doc/Makefile.am
doc/easymini-release-notes.inc
doc/intro.inc
doc/motortest-intro.inc
doc/motortest-operation.inc
doc/release-notes-1.9.19.inc [new file with mode: 0644]
doc/release-notes.inc
doc/specs.inc
doc/system-operation.inc
doc/telegps-release-notes.inc
doc/telelaunch-acknowledgements.inc
doc/telelaunch-intro.inc
src/Makefile
src/drivers/ao_adxl375.c
src/drivers/ao_lco.h
src/drivers/ao_lco_bits.c
src/easymega-v3.0/Makefile
src/easymini-v2.0/Makefile
src/kernel/ao_config.h
src/kernel/ao_convert_pa_test.c
src/kernel/ao_convert_test.c
src/kernel/ao_host.h
src/kernel/ao_radio_cmac.c
src/kernel/ao_radio_cmac.h
src/telelco-v3.0/Makefile
src/telelco-v3.0/ao_lco_v3.c
src/telelco-v3.0/ao_pins.h
src/telelco-v3.0/ao_telelco.c
src/test/Makefile
src/test/ao_fat_test.c
src/test/ao_flight_test.c
src/test/ao_gps_test.c
src/test/ao_gps_test_skytraq.c
src/test/ao_gps_test_ublox.c
src/test/ao_micropeak_test.c
src/test/plotmm

index a7983f83e219840809644ec94580ce67a334d366..0fed18f5e808605c0ca81dfa91a9714726ca573f 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
+commit 895665eefe846394926d70e4a5d51346841cb251
+Merge: 5d0a76157 36f3368a6
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Mon Aug 5 10:37:52 2024 -0600
+
+    Merge branch 'master' into branch-1.9
+
+commit 36f3368a6dfc61e4391719559efadaac19a566fc
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Aug 2 08:58:44 2024 -0700
+
+    Version 1.9.19
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit fc66c028ff6945edf5aa99d47c21c02a89093e96
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Aug 2 08:57:39 2024 -0700
+
+    Add easymega v3.0 firmware to fat images
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 3d3505186ff0eff219c3c4326288181f4f6f95e1
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Aug 2 08:53:56 2024 -0700
+
+    doc: Version 1.9.19 release notes
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit d5b471c360fc57f924e37e1d4844bb8960470d21
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Fri Aug 2 10:26:43 2024 -0600
+
+    capture link for EasyMini production scripts
+
+commit 44066a8c77cd3b40bba3c58a2b2e5001a8fe99bf
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Fri Aug 2 10:25:15 2024 -0600
+
+    production bench scripts for EasyMega v3
+
+commit e421a62342e3dde9210663d6c8b81e5ee22fe4df
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Wed May 29 13:54:06 2024 -0600
+
+    make EasyMini v2.1 our "current" thing to flash/cal/test
+
+commit 6f4f9015612a18406de7c80e9c4a72544fccc35e
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jul 31 13:12:04 2024 -0700
+
+    ao-accel-cal: Validate ADXL375 sensitivity
+    
+    If the accel device is an ADXL375, make sure the Z axis sensitivity is
+    within the data sheet range of 18.4 to 22.6 g. Allow for rounding as the
+    device only records the integer value (sigh).
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 7da6e6eb53154a8d94513cb4ddb570949ff5d1c9
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jul 31 12:06:43 2024 -0700
+
+    src: Open up the ADXL375 self test range
+    
+    Reading the datasheet more carefully, we discover that it mentions
+    that the self test magnitude can vary within a rather wide range.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 259dbc4202b8980a6983deaa7187188d5cbbca41
+Merge: 955c49611 2009090f5
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Wed Jul 31 12:01:27 2024 -0600
+
+    Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
+
+commit 955c49611be14868252b496fd458f2dc4ab74c2b
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Wed Jul 31 12:01:00 2024 -0600
+
+    include EasyMega v3 firmware in that captured in LLC repo during release
+
+commit 2009090f5a6eed5ecdb59ba0cd6f614f93f327bd
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jul 27 14:59:39 2024 -0700
+
+    ao-bringup: Re-add cal-freq
+    
+    This got deleted by mistake
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 28a42c348d1ec584d0dcdb20cc6ff243aea7575c
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Tue Jul 16 17:49:31 2024 -0600
+
+    doc: reflect move of mailing list from lists.gag.com to groups.io
+
+commit 6db5b9a1a56073d2942a36854fdcff633dfb7aa0
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Tue Jul 16 17:44:51 2024 -0600
+
+    doc: EasyTimer v2.0 also has mag sensor
+
+commit 68f6a5c6d23658c41950ccf0c7533ea0f4cb6a04
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Tue Jul 16 17:41:32 2024 -0600
+
+    docs: correct EasyMotor v3.0 battery in specs table
+
+commit 34fe19d319c8e178171b9d8cc0e6acbf0495c5a9
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Tue Jun 25 12:11:31 2024 -0600
+
+    doc: clarify how EasyMotor gets put into idle mode
+
+commit f8527ffca57c7c7dad33c5788b8a060da84280c9
+Merge: a41cae3fd 3bc1ab004
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Mon Jun 24 09:03:17 2024 -0600
+
+    Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
+
+commit a41cae3fd90509d272146493dd7812e28df0f333
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Mon Jun 24 09:02:46 2024 -0600
+
+    doc: add Terry Lee's TRA and NAR numbers to TeleLaunch doc as his request
+
+commit 3bc1ab0046c4dbebbde8557d3a1f45707aaefa42
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Jun 20 15:35:38 2024 -0700
+
+    altoslib: Check for negative tick wrap when importing flight records
+    
+    If the tick count wraps just as boost is detected, there may be some
+    data records on the device with large tick values which are recorded
+    after the AO_FLIGHT record. Check for these in two places which manage
+    16-bit tick values by wrapping tick values to negative numbers in
+    those cases.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 3e2cadd282479e21ce74f80e4fe844f65db16bab
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Jun 20 15:34:44 2024 -0700
+
+    altosui: Don't add pyro table to graph UI when npyro == MISSING
+    
+    For some reason, npyro is set to MISSING in some flight records. Check
+    for that before adding pyro info.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit ff6116f1a65a1a623a5b00759e5b922c3f482278
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jun 19 23:02:30 2024 -0700
+
+    telelco-v3.0: Support ambient light sensor
+    
+    A TEPT5700 ALS and 15k resistor from 3.3V to ground hooked to ADC10 on
+    PC0.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 18f3c100b7073bd9aeaedfacc25324a7771b0723
+Author: Keith Packard <keithp@keithp.com>
+Date:   Tue Jun 11 20:53:25 2024 -0700
+
+    altos/telelco-v3.0: Merge info into one screen
+    
+    Move all of the info bits from separate screens to a single
+    screen. Eliminate the contrast screen, plan on eliminating the
+    backlight screen once we've switched to an ALS.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 14f82893c918d224f28a79211840a5523684fedc
+Author: Keith Packard <keithp@keithp.com>
+Date:   Tue Jun 11 16:26:16 2024 -0700
+
+    altos/telelco-v3.0: Swap version and serial on info page
+    
+    Rationale is that model and sn are part of the hardware, version is
+    fw, call and freq are config.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 04469f35a791b34b95145e222384f0a4661f10e4
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon Jun 10 14:31:11 2024 -0700
+
+    altos/telelco-v3.0: Display good vs bad packets received
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 934301ca378192aecbaacf345cdb76a4d96c269d
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon Jun 10 13:47:41 2024 -0700
+
+    altos/telelco-v3.0: Add "Scanning..." to startup screen
+    
+    Make it clear what's going on. Had to shrink the logo to make room, so
+    switched from 26 to 24 point text.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 45bcdbdb5c4709646416857c5db7e7f29780b674
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon Jun 10 13:37:47 2024 -0700
+
+    altos/telelco-v3.0: Delete debug code
+    
+    Remove the display debugging code which is no longer used.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 1200e0c549c4b7e3b40d270879af4180cdd5f689
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon Jun 10 13:31:05 2024 -0700
+
+    src/telelco-v3.0: Increase LED test time to 1 second
+    
+    Make it possible to verify all LEDs active during testing.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit bf1e38a6f085c630cf56c3da44fc6d4eb232e373
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon May 20 21:22:33 2024 -0700
+
+    altos/easymega-v3.0: Add combined dfu and ihx targets
+    
+    Build these for testing the boards at Seeed
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 2830a47f142e79b8e4435f3957f19c7858606cd9
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat May 11 19:03:51 2024 -0700
+
+    altosui: Add config and pyro tabs to graph widget
+    
+    Show the flight computer configuration in the graph when available.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 407086a6b36032f0c780d3b3e94101fa96a1c900
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat May 11 17:52:20 2024 -0700
+
+    altos/test: Get the flight software test code working again
+    
+    This had gotten very stale; much hacking was required. I know the
+    TeleMega v4 code works, other things "might". At least it seems to
+    build without errors?
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit db58d8c58fd6dcb4d153d85e3fd37d59956c84db
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Mon Apr 29 11:41:48 2024 -0600
+
+    first cut at turnon scripts for EasyTimer v2
+
+commit 0d8c2354e7c4f7d2671e6c0a0d088fd94de75c46
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Mon Apr 29 11:20:53 2024 -0600
+
+    remove garbage line from easymotor turnon script
+
+commit 5de98063f8e638e18ea0f05f09e31e435dfd7d0a
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Apr 28 21:19:58 2024 -0700
+
+    altos/easymini-v2.0: Remove combined .dfu file
+    
+    This is delivered to seeed for testing the hardware.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 673d326fd861672feaee7c903486e54e8de9471d
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Sun Apr 28 20:44:55 2024 -0600
+
+    capture things learned during 1.9.18 release
+
+commit 5d0a76157ae14b6cc8ff9236db4960dc475905db
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Sun Apr 28 19:40:41 2024 -0600
+
+    update ChangeLog for 1.9.18 release
+
+commit d8a81e14d572c4fa8d1b5aa7cb477654c206ae1d
+Merge: 1311eba0b dce00ba45
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Sun Apr 28 19:40:16 2024 -0600
+
+    Merge branch 'master' into branch-1.9
+
+commit dce00ba450e686e0fef4bd1d6a8b292eca8bfc25
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Apr 28 15:34:13 2024 -0700
+
+    Version 1.9.18
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit b834c989cbddf8db9848af03bb040da1a6a0f651
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Apr 27 22:30:29 2024 -0700
+
+    doc: Add 1.9.18 release notes
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit ae69294526369f251b221ee1f8ca2cb58b63bd7a
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Apr 28 18:34:30 2024 -0700
+
+    altos/draw: Add 'install' target
+    
+    Needed for building packages; install is a no-op in this directory.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 1311eba0bbe32bc1759a3b11b00c78774843383c
+Merge: 7b2588ee7 a0005e3f0
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Sun Apr 28 18:44:32 2024 -0600
+
+    Merge branch 'master' into branch-1.9
+
+commit f89bfb0e1a14c9809d35f60fff448a1b3a2f2b68
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Apr 28 15:49:29 2024 -0700
+
+    Fix up fat build target
+    
+    Depend on all-recursive so everything gets built before we attempt to
+    build the fat bits.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit a0005e3f0cc65f874b112996899a782393a1c12d
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Apr 28 15:34:13 2024 -0700
+
+    Version 1.9.18
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit f5c037001c51609608940cf16e9e99740aad6ebc
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Apr 27 22:30:29 2024 -0700
+
+    doc: Add 1.9.18 release notes
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit f8d943c54b1518e77c884b6dc77ee42dc88aaeab
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Apr 28 15:33:30 2024 -0700
+
+    Add EasyTimer v2 firmware
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 278f686f014e74962721e47aeeb60b59afafb37d
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jan 3 12:31:54 2024 -0800
+
+    altosui: Support gps receiver setting
+    
+    Create a combo box listing the available receiver models and allow the
+    user to select which one to use, including the builtin one.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 5c815c673fa7e82419299d87ffde939fbd842333
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jan 3 12:24:08 2024 -0800
+
+    altosui: Set the beeper to 0 to disable
+    
+    Don't force the beeper to the default value when the frequency is set to 0.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 2bd6698fb9d403931568ddc80266d1bb61c09a8b
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Apr 19 14:07:50 2024 -0700
+
+    altos/test: Add FEC test for simple 'hello' message
+    
+    This just tests the FEC code using a slightly different data source
+    that makes sure odd lengths work correctly.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 19c42c4d97151f2dc38e59cff4d0638694fcd27d
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Mar 28 09:45:38 2024 -0700
+
+    altos/test: Adjust CRC error rate after FEC fix
+    
+    The number of CRC failures during FEC testing is lower now that
+    the packet length bug has been fixed in the FEC encode bits.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit abfa580ad700415f5ea240450a1621f9de35de82
+Author: Keith Packard <keithp@keithp.com>
+Date:   Tue Mar 26 21:38:48 2024 -0700
+
+    altos: ao_fec_prepare using wrong value for input len
+    
+    The FEC code always sends a multiple of four bytes, padding by two
+    bytes for even inputs and one byte for odd. But the preparation step
+    was using the wrong value for the length, so the output was getting
+    mangled.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit d7a91278051ff75e3edc3e999a6d8096fa4deec4
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Mar 3 16:37:09 2024 -0800
+
+    altos/easytimer-v2: Generate combined .ihx file for seeed testing
+    
+    The test plan for seeed requires a combined loader and firmware image
+    for a single flashing step.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit a017cfce31429ef25a53a724e99b53c8267ec4ef
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Mar 2 16:23:57 2024 -0700
+
+    altos/stm32f1: Grab both TX/RX DMA mutexes while doing I2C
+    
+    The I2C engine appears to trigger an extra RX DMA transaction which
+    scrambles anything sharing the same DMA units.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit d9140ea0d6bf6755a2701115273f02a4c3944e17
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Feb 24 12:46:17 2024 -0800
+
+    altos/easymega-v3.0: Update i2c pin usage
+    
+    Found an errata which means we had to swap which i2c to use with the
+    mag sensor. Swap the mag sensor and fire_c/fire_d.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit bb3bfea5462d3f3e1a0a5f4645f67996054a78a3
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Feb 24 12:45:54 2024 -0800
+
+    altos: Build EasyMega v3.0 by defaul
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 22b5d1a98a86ac4d2d0ef12565a01e3591f9afb9
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Feb 24 12:45:09 2024 -0800
+
+    altos/stm32f103: Fix continuous ADC code
+    
+    This needs the same hacks as the manual ADC code.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 6a9721f344d1837c913fee142c875de4d7357820
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Feb 24 12:44:00 2024 -0800
+
+    altoslib: Add EasyMega v3.0 support
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 4da8e047c4df06a0fec2c0cd47d26d5f1bef0e31
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon Feb 12 22:58:45 2024 -0800
+
+    src/easymini-2.0: Add combined .dfu file for Seeed testing
+    
+    Provide a combined .dfu for testing EasyMini at Seeed. This
+    checks the baro sensor (via POST) and SoC.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 94445131d0be72f099985709dda4203259b1d947
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Feb 2 16:31:03 2024 -0800
+
+    stm32f1: Clean up some ADC definitions
+    
+    The CR2 bit is called TSVREFE in the docs, use that consistently
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit bcf9db74705dcd77eccd8f36f73c2eb99a5f1c70
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jan 31 22:05:13 2024 -0800
+
+    altosui: Make accel cal dialog say 'beeper' instead of 'antenna'
+    
+    Quite the plumbing required, but it'll do.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 13befe46b107a88d05710991beab3b7b8478fa09
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon Jan 29 18:40:30 2024 -0800
+
+    altos/easytimer-v2: Fix product name
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 9419cf4f22e5cd337da54d7907fc0a5e848bd464
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon Jan 29 18:40:06 2024 -0800
+
+    altos/easytimer-v2: Set default log size to 192kB
+    
+    This leaves space for 4 flights.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 52d0c638343b2424cae08059f788a02efddee19a
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon Jan 29 18:39:27 2024 -0800
+
+    altoslib: Add EasyTimer-v2 support
+    
+    Log parsing and idle monitor.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit a724a6b223229f8640740874523aee394350e9c6
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon Jan 29 17:58:02 2024 -0800
+
+    altos/easytimer-v2: Fix up ao_pins.h
+    
+    Fix M25 CS pin (PA10).
+    Fix BMI088 axes
+    Fix MMC5983 axes.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit a148876e36bc3f84f11fdac57a9f69171e30c058
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 28 21:14:06 2024 -0800
+
+    altos/telelco-v3: Minor UI tweaks
+    
+    "Box"→"Bank" to match docs.
+    Auto-center text instead of pre-computing. Way easier.
+    Scroll found banks during startup.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 7977ff5291c6161d37b7c1b1548258df2e58c09e
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 28 00:17:27 2024 -0800
+
+    altos/st7565: Set default contrast to 13
+    
+    This seems slightly better than 16. Might need to actually keep this
+    in config space.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit ffaee646efded39c3cdb07948823822ce8df8c4e
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 23:59:43 2024 -0800
+
+    altos/telelco: Add RSSI display to older devices
+    
+    Show RSSI value on TeleLCO v2.0
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 1741039eb3633b3f010ac7fc9e6a055d02aa0a15
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 23:48:51 2024 -0800
+
+    altos/telelco: Add per-box RSSI display screen
+    
+    Shows the last received RSSI value.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 43d1cfd0d1458c2d4c333155902be28bfe17b6ee
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 23:47:45 2024 -0800
+
+    altos/stm32f1: Set beeper pin to 0 while off
+    
+    Make sure we don't let the timer leave it sitting high; the
+    magnetic beepers probably don't do the right thing in that case.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 323a6a44083f865c90c12e93775ac2dbf9352de3
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 23:13:17 2024 -0800
+
+    altos/telelco-v3.0: Show backlight/contrast value as percent
+    
+    Provide a bit more feedback about the setting.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit efe964558805a18f070f405377ef0f437ccce237
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 23:12:05 2024 -0800
+
+    altos/st7565: Diff image during update
+    
+    This minimizes the amount of data sent to the device. Mostly this is
+    useful to skip updates that don't change the display at all.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit bf7d2aaccd41837dd2e032023107616266e22a6d
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 23:11:15 2024 -0800
+
+    altos/telelco: Update backlight/contrast display upon change
+    
+    Don't wait for the 1-second poll interval.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit d1fd9055898fb07033b80f3d9d677a97d485fb2f
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 23:10:28 2024 -0800
+
+    altos/draw: Add ao_text_width
+    
+    Computes the total advance of the given string, not the width of the
+    resulting ink.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit f9103d13f620cb06642aacdff9dcaf05e87d671f
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 22:03:00 2024 -0800
+
+    altos/telelco-v3: Add logo to 'info' page
+    
+    Make the info page a bit more fun
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 936ef3907e956b1a42ad54fe5757bd816b20890f
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 16:35:33 2024 -0800
+
+    telelco-v3.0: Add info page
+    
+    Show model, version, serial, call and freq
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 5cea1324ac4a34a21324c4bb50885ffacb6d29da
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 16:03:35 2024 -0800
+
+    altos/telelco-v3.0: Control LCD backlight with PWM
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 5506b6c1f75d639e2d952213a53bc9ee34e5a79c
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 16:03:20 2024 -0800
+
+    altos: Add support for backlight control in ao_lco_bits
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 7ac9267b156d7bb6e942dd630a9ba142ba0c7a00
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 16:01:20 2024 -0800
+
+    altos/stm32f1: For some reason the DBG registers aren't always available
+    
+    Attempts to discover the device model during flash loading appear to fail
+    for unknown reasons. Switch to basing the memory page size on the total
+    memory size, which should be just as reliable.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit ff21e293ee8185b19a30df74ca7a1610625ef465
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 15:31:04 2024 -0800
+
+    altos/telelco-v3.0: Configure SPI GPIO pins to 50MHz
+    
+    Need enough bandwidth to run at 20MHz
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 3687628cdd964a5e6729b8c9506efa5e2e9d8a84
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 27 15:30:27 2024 -0800
+
+    altos: Bump ST7565 speed to 20MHz
+    
+    Go as fast as we can manage
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit f9e319f5a97df8c0950ec7531d0889cf60e53783
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Jan 26 17:35:43 2024 -0800
+
+    altos/telelco-v3.0: Add contrast setting
+    
+    Provide a UI for setting the LCD contrast.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 23fec388ebdf4230663324e1f0ebfbd79059e841
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Jan 26 17:35:21 2024 -0800
+
+    altos: Build TeleLCO v3.0 bits by default
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 470be148d9a9dcd45609942d17fcf7c1555375f3
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Jan 26 16:06:44 2024 -0800
+
+    telelco-v3.0: Minor setup fixes
+    
+    Change beeper to lower tone. Switch LCD SPI to mode 3. Fix the
+    quadrature device ID.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 54a465d062d9a863f14519267f06927d001e2c23
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Jan 26 16:05:45 2024 -0800
+
+    altos: Fix pretend pad range for TeleLCO
+    
+    Off-by-one when setting up the pretend pads.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit c8e02fea0b6de30c3929bb1551e7de02b7047f3d
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Jan 26 14:03:40 2024 -0800
+
+    altos: Add wiring docs to st-7565 header
+    
+    Write down what worked today.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit d2216717adac7f7e917e13085de6ce8118023d5f
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Jan 26 11:07:55 2024 -0800
+
+    altos: Add SPI bus parameter to ao_spi_speed
+    
+    The stm32f1 series has two SPI busses and they operate from different
+    base clocks, so the computation of the clock divider to get a
+    particular frequency depends upon which SPI bus is being used.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 3fdf2f80ccf3a2b148b63f5fd5de198957719075
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Jan 26 10:59:19 2024 -0800
+
+    stm32f1: make spi speed per-bus
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 044f68d6be05be8b0a6a2432f64b8fb2e94ca956
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Jan 26 10:57:56 2024 -0800
+
+    switch to mode 3 for LCD
+
+commit 9a5cd9e64a66829fb0cd3713c5cbd41085641db3
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jan 24 15:36:34 2024 -0800
+
+    src/stm32f1: Disable extra JTAG pins in ao_clock_init
+    
+    Need to enable AFIO before trying to adjust bits there.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit de37d4a17e8eac517ed00f179c9cd5c09b820dfc
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 13 20:57:38 2024 -0800
+
+    altos/telelco-v3.0: Use timer 2 for fast timer
+    
+    We need timer 1 for PWM on the backlight
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit e82cf4199761e900ef176a2a6ddd5d7cfc38bc07
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 13 20:57:00 2024 -0800
+
+    altos/stm32f1: Support timers 2,3,4 for fast timer
+    
+    Make the code deal with differences between timer 18 and 234
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit d216d17e5317607ced5a2437e5360203647e6eb9
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Jan 11 16:17:32 2024 -0700
+
+    altos/telelco-v3.0: Battery voltage is on PA2
+    
+    Which is ADC input #2
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit e93b73d9adce883e7e4094a06f4de86f5c774567
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Jan 11 16:16:58 2024 -0700
+
+    altos/telelco-v3.0: Don't connect PA6 to SPI
+    
+    MISO is not used, and we need the pin for other stuff.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit a3fd78224f222adc4cec394a2c8f4153d6e8571c
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Jan 11 15:12:34 2024 -0700
+
+    altos/stm32f1: Allow PA6 to be left alone in the SPI code
+    
+    This is MISO, which the LCD driver doesn't use. Leave it alone so we
+    can use it for other stuff.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 2447293cbaaf7b783744ca2f68bf1769a8798841
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Jan 11 15:11:06 2024 -0700
+
+    altos/stm32f1: Poke the ADC harder to get it to sample
+    
+    The ADC requires a bunch of poking to get it started.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 321556be4eda94be40dbefe13f0549ad224c7c33
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jan 10 23:49:00 2024 -0800
+
+    altos/stm32f1: Turn on ADC during initialization sequence
+    
+    The ADC needs to be left 'on' so that it will actually
+    run the conversion sequence when started.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 65cbf1af7a0c5051c75a7e6a104f3ed17cb629a9
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jan 10 17:27:33 2024 -0700
+
+    altos/telelco-v3.0: Add USB pull up
+    
+    And move the ARM LED to PA9
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit fb3cd8d1987b3e4d0a09ece97b3124e954c5f949
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jan 10 17:26:12 2024 -0700
+
+    altos/stm32f1: Add STM_RCC_CFGR_PLLXTPRE_MASK value
+    
+    Necessary when setting the PLLXTPRE value
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit cea7122fc1843b14a179ed9311677f69c10b38eb
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jan 10 17:24:32 2024 -0700
+
+    altos/stm32f1: Set PLLXTPRE value
+    
+    This is the pre-PLL divider value which is needed when we want to
+    use a 16MHz crystal and a 72MHz sysclk
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit c8a0811abf59fb55cb17d2159289621d26e887ad
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jan 10 17:22:57 2024 -0700
+
+    altos/stm32f1: Support beeper on tim3
+    
+    Add a bit more flexibility to the beeper code
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 1b8bc4e4aadd367c40d33afefb526f1c60c7d118
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 7 20:13:04 2024 -0800
+
+    altos/telelco*: Make LCO voltage display work on 2.0 and 3.0
+    
+    Fix up the common code to handle LCO voltage display via box 0
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 6d3b9ca44ffe43bd6285c37af4ee1d6174be8fcd
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 7 19:57:03 2024 -0800
+
+    altos/telelco-v3.0: Fix up search UI
+    
+    Present a progress bar. Show the detected box numbers.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 8c5c7dfe66098bc8af47768146739a7cda605968
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 7 19:14:03 2024 -0800
+
+    altos/telelco-v3.0: Add ao_adc_single usage to get battery voltage
+    
+    Poll the ADC to acquire battery voltage data.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 37de458faea5f67870b80e3549e37130bf43b11b
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 7 19:13:22 2024 -0800
+
+    altos/stm32f1: Add ao_adc_single support
+    
+    This supports polling the ADC for values instead of having
+    them get dumped into a ring at a regular rate.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 1760bec9ed19c64f35ea28904cea433d39dead07
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 7 18:58:41 2024 -0800
+
+    altos: Move ao_adc_single.h API header to kernel/
+    
+    THis was in stm, but will be needed by other architectures.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit a30f526c42177ed7d4ad239f31b7b5163e16a036
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 7 17:05:34 2024 -0800
+
+    altos/telelco-v3.0: Add some real drawing stuff
+    
+    This required enabling devices with 128kB flash.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit edbe6cca1e6b68bcc90064cd70529a9f9b0f9632
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 7 16:48:43 2024 -0800
+
+    altos/telelco-v3.0: Use eeprom emulation for config storage
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit e959061fa17e15dfdd75d35c6c67e68a0e5e98e2
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 7 16:47:47 2024 -0800
+
+    altos/stm32f1: Add eeprom emulation using flash
+    
+    Use the last 2kB of flash to emulate eeprom storage for TeleLCO. This should
+    also be useful for EasyMega.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 31756e065828ca5c1779f1349c38d29196f4798d
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 7 16:21:40 2024 -0800
+
+    altos: Add initial TeleLCO-v3 bits
+    
+    This might light up some of the hardware...
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 2733436da522650d4e918b7bc7d65f966f149792
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 7 16:20:42 2024 -0800
+
+    altos: Build in 'draw' directory first
+    
+    This makes various font bits for targets using graphics
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 96cee909d1392f098c22c0122f12e358a7fe8174
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Jan 7 16:20:18 2024 -0800
+
+    altos/stm32f1: Add ao_fast_timer.c
+    
+    Needed for TeleLCO
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 96459ad1231898c743aacf3fbc1afbf92f5579dc
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 6 23:24:13 2024 -0800
+
+    altos/telelco-v3: Move USB pullup from PA9 to PA10
+    
+    Production boards will have the pull-up on PA10, and Bdale will hack
+    up the protos to match so we don't have to have separate firmware.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 28c389c08a37010fdbb26e9923d16c3204862e67
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Sun Jan 7 15:55:53 2024 -0700
+
+    fix product name
+
+commit 50dea58c0f2ae87827a1a761ea7868e9798a5fd5
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 6 23:16:23 2024 -0800
+
+    altos/telelco-v3: Create initial flash loader setup
+    
+    Copied from easymega-v3 with USB pull-up moved to PA9. Note this
+    assumes the proto boards will have a resistor fitted there, which is
+    not in the artwork.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 2a34be23938cf1b3c3662abe2d39492bda9a4be1
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Mar 30 00:46:36 2023 -0700
+
+    altos/easymega-v3.0: Switch to STM32F103
+    
+    For some reason, there was easymega v3.0 firmware sitting here, but
+    it was mostly a copy of easymega v2.0 bits. Fix that to support the
+    current design based on the STM32F103 SoC.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 4683ef1d97f405fabbc214eb7b83bba15990ff79
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Mar 30 00:45:17 2023 -0700
+
+    drivers: Add real i2c support to mmc5983
+    
+    It only had bit-banging i2c support; go ahead
+    and add "real" i2c support for EasyMega v3
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 1cad5ca2525fbe067f897871bc2c4dc45a13e85a
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Mar 30 00:05:21 2023 -0700
+
+    altos/stm32f1: Add more IP block drivers
+    
+    adc, beep, exti, i2c
+    
+    Also hooked up data sampling bits in ao_timer.c
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 3da00a912b07c77d06785933c92e287ab48b0f79
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Mar 16 10:24:36 2023 -0700
+
+    altos: Fix up stm32f103-nucleo 'lco' demo mode
+    
+    Adjust some layout now that I've got a real screen to play with.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 6f7d530b9ca06272354d1b7c05813a2523b24887
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Mar 16 10:23:05 2023 -0700
+
+    altos: Clean up st7565 LCD driver
+    
+    Get rid of AO_ prefix on chip-specific register values.
+    Declare ao_st7565_instructions to take const uint8_t * so
+    it can accept an array in flash.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit fab278542c9bb31991a93604a9f646e8cd8285af
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Mar 8 17:14:56 2023 -0800
+
+    altos/stm32f103-nucleo: Draw more of the LCO demo screen
+    
+    Add the box/pad screen.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit bfafd5b04f0cca36724f3de0b0f18ffac93be591
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Mar 8 15:54:39 2023 -0800
+
+    altos/stm32f103-nucleo: Drive a screen too
+    
+    Use the ST7565 driver to control an LCD screen.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit a080a564b9b54e6b3495d30703c45ba2850b1703
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Mar 8 15:53:58 2023 -0800
+
+    altos/stm32f1: Add DMA and SPI drivers
+    
+    These came from the code for the stm32l15 chips
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit b0ea39f7eb18aa73160b0b848a9000892f43c0e7
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Mar 8 15:53:03 2023 -0800
+
+    altos/driver: Document setting for AO_ST7565_BIAS
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit b2d2a9de490a140e8f2c5c2fba739662b340fb3b
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Mar 8 15:52:11 2023 -0800
+
+    altos/draw: Have each font declare ao_glyph_temp as .comm
+    
+    Create temporary glyph drawing space by having every glyph declare how
+    much space it needs and letting the linker allocate the largest
+    possible space.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 6394680d1e9ff8596068a73eb43e4adc45722455
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Mar 8 15:50:57 2023 -0800
+
+    altos/draw: Skip line adjustment for vertical/horizontal
+    
+    When e3 is zero, don't adjust the minor position based on
+    the major as it doesn't move.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 8e82ecb3eddd992c1d351ad7489ae5cbdb761cea
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Mar 8 15:50:19 2023 -0800
+
+    altos/draw: Build demos with -O3 to catch more bugs
+    
+    The compiler fails to do a lot of checks in -O0
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 5af8252cb6cf51611963f4df97eee04741438ea5
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Mar 8 15:49:52 2023 -0800
+
+    src/draw: Provide some useful constants
+    
+    The two colors and a stride macro
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit d65652ac9027475d32510feac9eb8b57a2080d48
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Mar 8 15:14:53 2023 -0800
+
+    altos: Add ST7565 LCD driver
+    
+    This is the chip used by various NewHaven LCD displays
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 09a3c086dae1cce43c843626a1c624b4e2ad8d04
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Feb 25 22:41:48 2023 -0800
+
+    altos/stm32f103-nucleo: Add boot loader
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit cea0f40fff14b9d2085e0026a68b742a4b114cb9
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Feb 25 19:24:11 2023 -0800
+
+    stm32f1: Get boot loader working
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 58f013162125b2143a5a9f1c0544cb20817e9524
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Feb 19 16:29:56 2023 -0800
+
+    altos/stm32f1: Start work on self-flash code
+    
+    Looks like this uses the same IP block as the stm32f0 series; copied
+    the code, haven't gotten it working yet.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit b23ac7ea00ec26779354869765ced9caa2d05738
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Feb 19 15:45:29 2023 -0800
+
+    altos/stm32f103-nucleo: Use more bits
+    
+    Get the OS running, use the serial for console
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 87b64a15f55ecb20a0f8bb2556e77b45a4d82b82
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sun Feb 19 15:44:32 2023 -0800
+
+    altos/stm32f1: More stm32f103 work
+    
+    Serial driver works
+    Interrupts work
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit d2cb18542f4f6071232bd046fd1b257228c17a25
+Author: Keith Packard <keithp@keithp.com>
+Date:   Fri Feb 17 23:02:16 2023 -0800
+
+    altos: Start work on stm32f1 support
+    
+    Got clocks working. CPU now running at 72MHz.
+    Got systick timer working. Ticks at 100Hz.
+    Got GPIO working. LED blinks.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit c361192dbeabeb434fd6744e575756c012545d1b
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Feb 25 22:40:29 2023 -0800
+
+    ao-tools: Add flash utility for stm32f1x chips
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit e8b0ac5a17d2fb5a0d99ea86c3a2e1c780d3adf3
+Author: Keith Packard <keithp@keithp.com>
+Date:   Tue Jan 30 12:33:22 2024 -0800
+
+    altos/lpc: Adjust ADC clock from 450kHz to 4.5MHz
+    
+    A missing zero. Also, let products change this value if desired to
+    improve high-impedence performance.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 0d4e2f95e628b693e418ac9825e81792acf9d809
+Author: Keith Packard <keithp@keithp.com>
+Date:   Wed Jan 31 17:47:08 2024 -0800
+
+    Fix configure tests for multi-arch libaltos
+    
+    libaltos builds now require a long list of compilers. Check for all of them
+    before enabling it when building in auto mode.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit cd20605c9b3c8bc9cbbea4eb1252c9282a317c94
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Mon Jan 22 16:15:44 2024 -0700
+
+    kernel: conditionalize config "report in feet" on presence of baro sensor
+
+commit d4ac6abeb89282d9d96979b2a735aa4dc1e4c33d
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 6 22:09:41 2024 -0800
+
+    altos/easytimer-v2: Initialize logging too
+    
+    Now that the logging bits are all written, let's turn it on.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 14f1e175af85c0ef4539316d5ce049798a878fcb
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 6 22:08:54 2024 -0800
+
+    altos: Updating pyro format tried to copy entries with no value
+    
+    Need to check for NO_VALUE before attempting to copy data, otherwise
+    things will go badly.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 3f31012645918097dc426cd6ba8763b30e78bab1
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 6 22:07:29 2024 -0800
+
+    altos/samd21: Enable stdio for USB by default
+    
+    samd21 usb driver didn't bother to enable stdio for USB for some
+    reason.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit e026f1d16eb368d6a27b4c4ffbc4cece3950a07b
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 6 17:06:58 2024 -0800
+
+    altos/easytimer-v2: Update comments in flash loader ao_pins.h
+    
+    No code changes, but the comments were wrong.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit d69b6738040bf751d024b4daceace7aedee6f7c7
+Author: Keith Packard <keithp@keithp.com>
+Date:   Sat Jan 6 17:03:30 2024 -0800
+
+    altos/easytimer-v2: Add logging bits
+    
+    32-byte records with all data in a single record instead of
+    separate volt/sensor bits.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit f2292d66184e7f40336bfc59d2e9388391bd9511
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Mar 16 10:30:24 2023 -0700
+
+    altos: Build easytimer-v2 bits
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 5de0bd66edf15aaaf8d404d59e2740b8e8050587
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Mar 16 10:29:10 2023 -0700
+
+    altos: Initial easytimer-v2 bits
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 05839dccf5afa431d93ae6124ab8b76f09bf6b54
+Author: Keith Packard <keithp@keithp.com>
+Date:   Thu Mar 16 10:25:19 2023 -0700
+
+    altos: Use BMI088 as z-axis accel as needed
+    
+    When there's no high-g accel available, use the 'along' axis
+    to measure acceleration.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 010c65fa82aad9d950df519fa7dc111cfbb02104
+Author: Keith Packard <keithp@keithp.com>
+Date:   Mon Dec 11 13:44:54 2023 -0800
+
+    fixup seven segment debug code
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 83953c145483f4902e31e22062e9261de4c97aa6
+Merge: 7cb9bbe7a 960603c4a
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Thu Nov 16 09:28:44 2023 -0700
+
+    Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
+
+commit 7cb9bbe7a285867d76c9d535709383a425cba7c7
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Thu Nov 16 09:28:21 2023 -0700
+
+    add a paragraph about how to hook up a pressure sensor to an EasyMotor
+
+commit 960603c4a4def375a585b01f8b9356b62893b7f1
+Author: Keith Packard <keithp@keithp.com>
+Date:   Tue Oct 10 11:24:45 2023 -0700
+
+    micropeak: Include firmware in install bits
+    
+    These are useful for people building their own hardware.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit a5de950272ddaefa03f964a8d31d21ffc7dccab4
+Author: Keith Packard <keithp@keithp.com>
+Date:   Tue Oct 10 11:19:54 2023 -0700
+
+    doc: Use -optimize with asciidoctorpdf
+    
+    This does some additional compression on the output to make it
+    smaller.
+    
+    Signed-off-by: Keith Packard <keithp@keithp.com>
+
+commit 33b6f363bd1377c2cc55213a15b70c65f729dfb7
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Wed Aug 30 11:52:44 2023 -0600
+
+    update Releasing with learnings from 1.9.17 release
+
+commit 8f3653c4586358bf02f3fc7fa8f71728c2fee01a
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Thu Jul 20 12:02:36 2023 -0600
+
+    doc: fix a typo in the staging example
+
+commit 7b2588ee723827b9be2a2d5f287afb1b5d351b23
+Author: Bdale Garbee <bdale@gag.com>
+Date:   Wed Aug 30 10:48:52 2023 -0600
+
+    update ChangeLog for 1.9.17 release
+
 commit 63a8707ee4120148f6ec5cb073b349beefe377fa
-Merge: b071450f a4995df3
+Merge: b071450f0 a4995df3d
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Aug 30 10:46:42 2023 -0600
 
@@ -169,7 +1611,7 @@ Date:   Thu Apr 27 23:53:30 2023 -0600
     updte ChangeLog for 1.9.16 release
 
 commit 1605f722a7e0b2ba54620ce334e79374842e6957
-Merge: 459f421a 58fa3379
+Merge: 459f421aa 58fa33796
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Apr 27 23:52:46 2023 -0600
 
@@ -223,7 +1665,7 @@ Date:   Wed Apr 26 17:06:42 2023 -0600
     add production scripts for TeleGPS v3.0
 
 commit 1ab3cdedb83296a3296aeaaf1e0fa6a11800e331
-Merge: 90256e02 38450798
+Merge: 90256e02c 384507982
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Apr 26 15:46:15 2023 -0700
 
@@ -763,7 +2205,7 @@ Date:   Sun Feb 19 18:26:57 2023 -0700
     releasing 1.9.15
 
 commit 38fac9fd1ebdc0900f598c859453b5fc8fc6b4a6
-Merge: 94fdc596 6f1686d7
+Merge: 94fdc596e 6f1686d7a
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Feb 19 18:24:56 2023 -0700
 
@@ -843,7 +2285,7 @@ Date:   Thu Feb 16 15:05:27 2023 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit d5d835d65e909de24538ee0edb37d0ad0877f0c6
-Merge: 4591878f 7e696108
+Merge: 4591878f7 7e6961085
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Feb 16 15:52:56 2023 -0700
 
@@ -884,7 +2326,7 @@ Date:   Tue Feb 14 19:00:29 2023 -0700
     altos: re-number csm85clio outputs 0..49 to match schematic and silkscreen
 
 commit 7b24be27f67f95d909d19d767e4ac5376ea670cf
-Merge: 58d13bd9 36ef74a9
+Merge: 58d13bd9b 36ef74a9c
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Fri Feb 10 06:52:43 2023 -0700
 
@@ -932,7 +2374,7 @@ Date:   Thu Feb 2 12:53:51 2023 -0700
     ChangeLog for releas 1.9.14
 
 commit 0d34cacb37ad37208bd0602364a0be660ddd12bc
-Merge: e6a83e73 360aa73c
+Merge: e6a83e73b 360aa73ce
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Feb 2 12:52:01 2023 -0700
 
@@ -1006,14 +2448,14 @@ Date:   Thu Jan 19 22:57:39 2023 -0700
     releasing 1.9.13
 
 commit 8e42773e7834638464b46495123dbdc2356032bf
-Merge: a6c32739 7fe1408a
+Merge: a6c32739c 7fe1408af
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Jan 19 22:55:56 2023 -0700
 
     Merge branch 'master' into branch-1.9
 
 commit 7fe1408af6fd65c13cebf33d7bb7bf8517d8ce1e
-Merge: 234b275d 5f007934
+Merge: 234b275db 5f007934c
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Jan 19 22:51:27 2023 -0700
 
@@ -1120,7 +2562,7 @@ Date:   Thu Jan 19 13:20:56 2023 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 7b40813fdafce4ebd635aceb4c32355339a4d98d
-Merge: 026ab589 4c61c113
+Merge: 026ab589d 4c61c1132
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Jan 19 12:21:32 2023 -0800
 
@@ -1316,7 +2758,7 @@ Date:   Sat Nov 26 09:57:33 2022 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit c1708f3fa4ff412da8817ba0fa58d05fe7ef44f5
-Merge: 414ad269 999cc72a
+Merge: 414ad2696 999cc72af
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Nov 26 09:52:37 2022 -0800
 
@@ -1555,7 +2997,7 @@ Date:   Thu Nov 10 11:40:29 2022 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 53a9d3b3c2d9fb04d8f5fba42ce19cd13dc65f28
-Merge: 31f32f20 543b6d08
+Merge: 31f32f200 543b6d086
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Nov 10 12:34:49 2022 -0700
 
@@ -1921,7 +3363,7 @@ Date:   Fri Nov 4 02:56:31 2022 -0600
     ao-bringup: final production test script for EasyMotor v3
 
 commit a2fdfd4f9c92c1d3331f8be0e15ae19209b4ee15
-Merge: 28fd8e6f 4a1f441b
+Merge: 28fd8e6f1 4a1f441b7
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Fri Nov 4 02:41:43 2022 -0600
 
@@ -1946,7 +3388,7 @@ Date:   Fri Nov 4 02:39:34 2022 -0600
     ao-tools: don't do 'm 0' after 'E 0' since EasyMotor doesn't support it
 
 commit 4a1f441b746d4c9d1cb4a52401d76b5e81ba6f48
-Merge: e5feac1a d80c1317
+Merge: e5feac1a3 d80c1317f
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Nov 2 11:34:35 2022 -0600
 
@@ -1987,7 +3429,7 @@ Date:   Fri Oct 28 23:10:24 2022 -0600
     updating changelog for 1.9.12 release
 
 commit bdabc6814b066a9b17a6557910f21b1ed03de3f0
-Merge: 37dda254 c5e8826a
+Merge: 37dda2541 c5e8826aa
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Fri Oct 28 23:10:00 2022 -0600
 
@@ -2058,7 +3500,7 @@ Date:   Thu Oct 27 22:20:19 2022 -0600
     fix mailing list reference to use mailman3 path
 
 commit 975e3133e25c6fb5ea0c0b2487ea34e528660a45
-Merge: 05278307 bda33b76
+Merge: 05278307f bda33b769
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Fri Oct 28 21:49:16 2022 -0600
 
@@ -2142,7 +3584,7 @@ Date:   Thu Oct 27 19:19:59 2022 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 611ef4497b97bcf5239d6bc2ee13eeba9efd1503
-Merge: 1e694ad4 083464b5
+Merge: 1e694ad4f 083464b52
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Oct 27 19:16:39 2022 -0700
 
@@ -2470,7 +3912,7 @@ Date:   Sun May 29 21:08:03 2022 -0600
     releasing 1.9.11
 
 commit 7904b36eaae2468d76f2627bebd86b663afea1f8
-Merge: 8970d45e 4e237bd4
+Merge: 8970d45ea 4e237bd43
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun May 29 21:07:44 2022 -0600
 
@@ -2627,14 +4069,14 @@ Date:   Wed Apr 6 22:14:32 2022 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit c49bd3cb0c31a51fae79ddc92237cc309be9a242
-Merge: d225adc3 b140da92
+Merge: d225adc3a b140da925
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Apr 6 22:51:13 2022 -0600
 
     Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
 
 commit b140da92536d7c48ba37868f1c2afce7bb86dfdb
-Merge: 1d208c95 302e9b8f
+Merge: 1d208c950 302e9b8fd
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Apr 5 17:55:06 2022 -0600
 
@@ -2792,7 +4234,7 @@ Date:   Sun Feb 27 16:10:30 2022 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit d225adc3af9e5726d436cbbdbf8dcc5837e50804
-Merge: 3759d670 85dd82b2
+Merge: 3759d6707 85dd82b20
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Apr 4 01:22:04 2022 -0600
 
@@ -3548,7 +4990,7 @@ Date:   Wed Dec 22 11:35:52 2021 -0700
     doc: add an appendix on frequency calibration to the all-in-one manual
 
 commit 66152b176bad12fbff3188397c607793c0bdd380
-Merge: 8e1145b9 0921e8b1
+Merge: 8e1145b98 0921e8b16
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Dec 20 13:49:41 2021 -0700
 
@@ -3561,7 +5003,7 @@ Date:   Mon Dec 20 13:49:28 2021 -0700
     need to capture .bin file for telebt loader, too
 
 commit 0921e8b166c41ea8f65df14cea893481d8e1f0f1
-Merge: 236d80fa 9db486f6
+Merge: 236d80fac 9db486f6d
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Nov 3 13:24:41 2021 -0600
 
@@ -3618,7 +5060,7 @@ Date:   Sun Oct 10 21:42:19 2021 -0600
     releasing 1.9.10
 
 commit ed267e76eb03c34ec233c33a002ec9e5e53ec83a
-Merge: bd71c839 ef70f80b
+Merge: bd71c839b ef70f80b3
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Oct 10 21:41:50 2021 -0600
 
@@ -3703,7 +5145,7 @@ Date:   Thu Oct 7 22:45:37 2021 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 236d80fac2b4293c5750c9d80b387afd4d0fc5cc
-Merge: 047a3f1f 6ef22682
+Merge: 047a3f1f0 6ef226822
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Oct 7 12:11:06 2021 -0600
 
@@ -3727,7 +5169,7 @@ Date:   Thu Oct 7 00:00:42 2021 -0600
     releasing 1.9.9
 
 commit 2f1d5b25e72324512238920b45e864bf7c5d16fe
-Merge: c0fe810e 6ef22682
+Merge: c0fe810e9 6ef226822
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Oct 6 23:59:20 2021 -0600
 
@@ -3808,7 +5250,7 @@ Date:   Mon Sep 20 20:23:10 2021 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 047a3f1f08687113b80123cc7568d7057a23bcc3
-Merge: 01b5d271 e7a19e6d
+Merge: 01b5d271d e7a19e6de
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Sep 22 11:53:17 2021 -0600
 
@@ -3845,7 +5287,7 @@ Date:   Mon Sep 20 21:25:42 2021 -0600
     update ChangeLog for 1.9.8 release
 
 commit 47e98987fd8789583406eba7d2bc2d47bfad1f11
-Merge: 7d52b911 fbf4b677
+Merge: 7d52b9117 fbf4b6778
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Sep 20 21:24:45 2021 -0600
 
@@ -4205,7 +5647,7 @@ Date:   Tue Aug 17 20:02:05 2021 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit ea380005c74ba2ea9738de1d909b5650b2f44706
-Merge: cee8c407 b6619833
+Merge: cee8c407b b6619833a
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sat Aug 28 13:16:45 2021 -0600
 
@@ -4368,7 +5810,7 @@ Date:   Tue Jun 8 22:56:37 2021 -0600
     update ChangeLog for 1.9.7 release
 
 commit 8750dde659cec836fa6354651d5967b7aac1dff0
-Merge: dcd1feb8 24215a4a
+Merge: dcd1feb83 24215a4a2
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Jun 8 22:56:04 2021 -0600
 
@@ -4425,7 +5867,7 @@ Date:   Tue May 11 22:28:32 2021 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 76847aadc1ea770099c6be05727dfa232e53205c
-Merge: daa635de 7643f408
+Merge: daa635de7 7643f4088
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Jun 7 17:11:01 2021 -0600
 
@@ -4508,7 +5950,7 @@ Date:   Tue May 18 23:26:12 2021 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit daa635de77da3a1926ceb2e2d91e31ec169e173c
-Merge: a2e71a40 362f11ff
+Merge: a2e71a40e 362f11fff
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue May 18 23:54:48 2021 -0600
 
@@ -4600,7 +6042,7 @@ Date:   Mon Apr 12 18:36:45 2021 -0600
     ao-bringup: add tools for flash/cal/test of EasyMotor v2
 
 commit 1451e2fd2092d720b0d49b93ac01bed7e88b831f
-Merge: 9c26fe3e b115522c
+Merge: 9c26fe3e4 b115522c4
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Apr 12 18:27:17 2021 -0600
 
@@ -4803,7 +6245,7 @@ Date:   Sat Nov 21 11:22:01 2020 -0700
     doc: add documentation on how to re-flash a TeleMini v3 over USB
 
 commit 6550585af6d80306d037661be66004ccf8d09013
-Merge: c992792b 42226344
+Merge: c992792ba 42226344f
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sat Nov 21 11:00:43 2020 -0700
 
@@ -5018,7 +6460,7 @@ Date:   Thu Oct 22 16:19:33 2020 -0600
     releaseing 1.9.6
 
 commit 38bcc2b8b2b560271902eb8a3eba467866a38628
-Merge: 628da1fe c16cb712
+Merge: 628da1fe4 c16cb712f
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Oct 22 16:17:33 2020 -0600
 
@@ -5490,7 +6932,7 @@ Date:   Wed Sep 30 00:18:31 2020 -0600
     releasing 1.9.5
 
 commit f763dfe6a684a16ec40503149adefdc074a63ad0
-Merge: bfe338d1 a1779f94
+Merge: bfe338d11 a1779f944
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Sep 30 00:17:03 2020 -0600
 
@@ -6174,7 +7616,7 @@ Date:   Tue Jul 28 23:40:36 2020 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 3058ecdeafdee959b1103965f3df4ffcd59683e4
-Merge: 0a53faa8 8ec51d69
+Merge: 0a53faa81 8ec51d698
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Jul 22 15:23:02 2020 -0600
 
@@ -6248,7 +7690,7 @@ Date:   Thu Jul 2 20:21:19 2020 -0600
     releasing 1.9.4
 
 commit 8359fcc23a93a37ee3aee4c5d2ef183f18ea3f27
-Merge: b95d6674 9b62f683
+Merge: b95d6674d 9b62f683f
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Jul 2 20:20:59 2020 -0600
 
@@ -6317,7 +7759,7 @@ Date:   Mon Jun 15 20:34:50 2020 -0600
     releasing 1.9.3
 
 commit f31d842d0e07a1893441cb89fb287b31b86d28c1
-Merge: 0fd503fb f615725c
+Merge: 0fd503fb6 f615725cb
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Jun 15 20:26:35 2020 -0600
 
@@ -6861,14 +8303,14 @@ Date:   Tue Feb 25 23:57:51 2020 -0700
     update ChangeLog for release 1.9.2
 
 commit 28e77f3520095a1e47ab25721b186e42110ffd3e
-Merge: c6ea2666 91ab3acc
+Merge: c6ea26663 91ab3acc1
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Feb 25 23:57:31 2020 -0700
 
     Merge branch 'master' into branch-1.9
 
 commit 91ab3acc113dc24e1ebce89875def646e590fb12
-Merge: 243a6b5e aae87fe9
+Merge: 243a6b5ee aae87fe9f
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Feb 25 23:55:29 2020 -0700
 
@@ -6911,14 +8353,14 @@ Date:   Tue Feb 25 23:18:11 2020 -0700
     update copyright assertion in TeleLaunch manual
 
 commit c6ea266630b9eef7a80e267a4430d22d50954908
-Merge: 12d6b4dc 7d2b2bae
+Merge: 12d6b4dc6 7d2b2bae8
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Feb 25 23:17:22 2020 -0700
 
     Merge branch 'master' into branch-1.9
 
 commit 7d2b2bae8a7ed2e15040c58819c8e96215e8292b
-Merge: af8f0b58 0993f791
+Merge: af8f0b589 0993f7913
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Feb 25 22:56:07 2020 -0700
 
@@ -6952,7 +8394,7 @@ Date:   Tue Feb 25 17:07:15 2020 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit af8f0b5892e01bdcf9fa4ca86a4752a8294992a1
-Merge: 25c1ef61 65df207e
+Merge: 25c1ef61b 65df207e0
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Feb 25 22:44:08 2020 -0700
 
@@ -7386,7 +8828,7 @@ Date:   Wed Feb 12 13:01:08 2020 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit cff5506e97314bf9b34d80a01cbdfcad22f3ce08
-Merge: e220b00d 803e260d
+Merge: e220b00d5 803e260dc
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Feb 12 12:55:04 2020 -0700
 
@@ -7609,7 +9051,7 @@ Date:   Wed Feb 5 10:52:05 2020 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit ad947ec3f313bbd1295af5dc64f1af9ec09bfe27
-Merge: 5b1bd4f8 d8e9d152
+Merge: 5b1bd4f87 d8e9d1529
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Feb 5 11:48:13 2020 -0700
 
@@ -7758,7 +9200,7 @@ Date:   Thu Dec 5 22:22:32 2019 -0700
     update ChangeLog for 1.9.1 release
 
 commit fdf1dbd3d945f6f34f404ffbcb57781f4df23015
-Merge: 5b4da841 bfc4999c
+Merge: 5b4da8414 bfc4999c9
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Dec 5 22:21:29 2019 -0700
 
@@ -8103,7 +9545,7 @@ Date:   Wed Sep 18 17:10:14 2019 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 260dd06107c8f8f5c7e606a283d388cb3ba46465
-Merge: 28618a72 faa5abe0
+Merge: 28618a728 faa5abe0b
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Sep 18 16:26:44 2019 -0700
 
@@ -8976,7 +10418,7 @@ Date:   Tue Mar 12 12:58:20 2019 +0100
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 3a01a7e36dd475adf96468f42c95aa352b5fdf11
-Merge: 338372b9 6b0754ce
+Merge: 338372b97 6b0754cee
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Mar 5 18:31:37 2019 -0700
 
@@ -8995,7 +10437,7 @@ Date:   Tue Mar 5 17:25:44 2019 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 338372b97d441c30d2a23df540163a66a7f8d8c0
-Merge: 8d0df64b cd920a0e
+Merge: 8d0df64bb cd920a0e5
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Feb 25 18:30:08 2019 -0700
 
@@ -9064,7 +10506,7 @@ Date:   Sun Feb 24 10:25:31 2019 -0700
     altos: first cut at ADS124S0X driver interrupt handling
 
 commit 654a23168f59d04d7e9cad657bebf8ecfdd8e41e
-Merge: d0f66918 655c5d2c
+Merge: d0f669180 655c5d2c1
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Feb 21 21:57:26 2019 -0700
 
@@ -9402,7 +10844,7 @@ Date:   Sun Feb 3 12:48:45 2019 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 145e5a1ac557c4990e74fb64b005fc68d6941bdc
-Merge: e2c9ef80 db730875
+Merge: e2c9ef801 db7308750
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Jan 28 13:46:59 2019 -0700
 
@@ -9542,7 +10984,7 @@ Date:   Thu Jan 3 00:49:22 2019 -0700
     updates to Releasing based on 1.9 release process learnings
 
 commit 5b4da841459a650e641924aab132f566c6259c4d
-Merge: 95ffec07 ecf40a3a
+Merge: 95ffec073 ecf40a3a1
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Jan 2 23:03:41 2019 -0700
 
@@ -9808,7 +11250,7 @@ Date:   Sat Oct 20 07:34:57 2018 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 0686a7b8aec524d81bda4c572549a3a068ce0eed
-Merge: 6aa451ce cc528f1f
+Merge: 6aa451ce8 cc528f1ff
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sat Oct 20 01:18:12 2018 -0600
 
@@ -10325,7 +11767,7 @@ Date:   Mon Oct 8 16:27:33 2018 -0600
     doc: correct specs for TeleMega v3.0, which still uses the MMA6555
 
 commit 24db798925e26a4c411afe88f7e4844d6554fe0c
-Merge: 6f25d235 03680c55
+Merge: 6f25d2359 03680c55a
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Oct 8 16:07:32 2018 -0600
 
@@ -10684,7 +12126,7 @@ Date:   Sat Oct 6 19:27:43 2018 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 073ebc77bbd813eb97c515ecf3c2d104d6157843
-Merge: fb167d9f 9e29ac8e
+Merge: fb167d9f5 9e29ac8ed
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sat Oct 6 18:55:05 2018 -0600
 
@@ -11744,7 +13186,7 @@ Date:   Mon May 7 11:26:42 2018 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 1f56dc30a31e3d5c833f73ec9cd31f548a80e154
-Merge: feb881a2 71acc79f
+Merge: feb881a24 71acc79f8
 Author: Keith Packard <keithp@keithp.com>
 Date:   Mon May 7 09:53:52 2018 -0700
 
@@ -12334,7 +13776,7 @@ Date:   Sun Mar 18 15:42:48 2018 -0600
     doc: update copyright year in doc/altusmetrum-docinfo.xml
 
 commit 84146083da782c335ba7f040b238c3f51ba2f484
-Merge: ee79a205 78e5ae58
+Merge: ee79a205e 78e5ae58c
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Mar 18 15:33:44 2018 -0600
 
@@ -12419,7 +13861,7 @@ Date:   Fri Mar 16 14:49:04 2018 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit ee79a205e118ea8730a02cc327d8fb79cc5f74ff
-Merge: 365eee3e 78a90fc7
+Merge: 365eee3eb 78a90fc76
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Feb 12 16:38:57 2018 -0700
 
@@ -13388,7 +14830,7 @@ Date:   Mon Dec 11 10:17:40 2017 -0700
     TeleMega v3.0 turnon scripts
 
 commit d1d98e408311c5ba18138a18f4c88448e4254626
-Merge: 2f8fce1c abb856cd
+Merge: 2f8fce1cf abb856cd6
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Dec 11 10:16:24 2017 -0700
 
@@ -13448,7 +14890,7 @@ Date:   Sat Dec 9 16:56:20 2017 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 2f8fce1cf6ce4bd12a836cc8ee15f4edbc95c95e
-Merge: d314a565 185b1136
+Merge: d314a5654 185b11367
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Dec 5 13:23:09 2017 -0700
 
@@ -14313,7 +15755,7 @@ Date:   Mon Sep 18 14:40:37 2017 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 6e4c104c28952f2010c7b1cbc9ce59e148ab2d8f
-Merge: 63eeaada 4f2cbe0c
+Merge: 63eeaada8 4f2cbe0c5
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Sep 18 16:01:43 2017 -0600
 
@@ -14775,7 +16217,7 @@ Date:   Sat Aug 12 00:05:50 2017 -0400
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 5fdce5b4a70ae59f8ac1ca10d9fadbbbd62412f3
-Merge: f1bbf1bd 2a3db289
+Merge: f1bbf1bd1 2a3db2895
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Aug 11 23:45:25 2017 -0400
 
@@ -14866,7 +16308,7 @@ Date:   Fri Jul 21 17:46:55 2017 -0600
     ignore more build products in telebt-v4.0 tree
 
 commit c8dbcaf69cd538a31ab6e2b568237ae7c8656a9a
-Merge: 0cbfa444 ea3b5815
+Merge: 0cbfa444a ea3b5815b
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Fri Jul 21 17:44:03 2017 -0600
 
@@ -16502,7 +17944,7 @@ Date:   Tue Apr 25 22:10:41 2017 -0600
     telebt-v4.0: add ao_send_packet
 
 commit 30e6e087b639c6d7ec75f21ba8c6fcf6ad50fffe
-Merge: b2a5118d 75881968
+Merge: b2a5118de 75881968f
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Apr 25 22:04:22 2017 -0600
 
@@ -20225,7 +21667,7 @@ Date:   Mon May 9 17:56:28 2016 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit f078235803a80403014b3e54039fd2d0e0704367
-Merge: 04759ddd c457c827
+Merge: 04759ddde c457c827a
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon May 9 15:52:38 2016 -0600
 
@@ -20266,7 +21708,7 @@ Date:   Fri May 6 17:10:14 2016 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit ce4c8a8ad57515e851207b0a82f3af791bb30d3e
-Merge: aa9630c3 320e312d
+Merge: aa9630c30 320e312db
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Fri May 6 17:49:30 2016 -0600
 
@@ -21527,7 +22969,7 @@ Date:   Sun Jan 10 18:58:31 2016 -0700
     submodule madness
 
 commit cbec66452ecd01bbd5aebf6f98443d5e0540f5d2
-Merge: 4043e070 81b8f4da
+Merge: 4043e0707 81b8f4da6
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Jan 10 18:29:07 2016 -0700
 
@@ -21580,7 +23022,7 @@ Date:   Sun Jan 10 17:45:45 2016 -0700
     modify release procedure to reflect Keith setting version in confgure.ac
 
 commit 2f35e0ba52f538ea1061bfff5bbd772b8a241386
-Merge: 86ccbac1 3fdaf745
+Merge: 86ccbac16 3fdaf745f
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Jan 10 17:44:03 2016 -0700
 
@@ -22152,7 +23594,7 @@ Date:   Sat Sep 12 19:20:49 2015 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 7064bc685aebeef07711e525dea4d5fbe33d235b
-Merge: ea1d2415 dda3f459
+Merge: ea1d24151 dda3f459e
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Sep 29 00:46:42 2015 -0600
 
@@ -22287,7 +23729,7 @@ Date:   Tue Jul 28 01:34:25 2015 -0600
     move turnon_teledongle to new cal-freq code
 
 commit 87c8bb3956897830da1f7aaca2990a9571767b73
-Merge: 643c2fb0 d6445b37
+Merge: 643c2fb03 d6445b373
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Jul 16 07:54:35 2015 -0600
 
@@ -22304,7 +23746,7 @@ Date:   Wed Jul 15 18:31:05 2015 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 643c2fb03833d658320f476ef731bbb06fe3cc31
-Merge: e41786fb 271f56a4
+Merge: e41786fb3 271f56a41
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Jul 15 16:43:50 2015 -0600
 
@@ -23024,7 +24466,7 @@ Date:   Tue Jun 16 23:38:07 2015 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit c46c2c5767c6e909fa58587e6c864a4fbaa9fa20
-Merge: 39f43616 6cb7d76c
+Merge: 39f436167 6cb7d76c3
 Author: Robert Garbee <robert@gag.com>
 Date:   Sat Jun 13 17:40:59 2015 -0600
 
@@ -23978,7 +25420,7 @@ Date:   Sat Feb 28 15:07:16 2015 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 4af4e36cda96d053458eeb040e35886890917385
-Merge: 91b1a806 106b16b4
+Merge: 91b1a8065 106b16b4d
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Feb 22 14:55:40 2015 -0700
 
@@ -25030,7 +26472,7 @@ Date:   Sat Dec 6 15:08:29 2014 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 7339d2379713b5b7e4c4fe6bad89ed93f9d39e82
-Merge: d1f91215 b6462ca3
+Merge: d1f912159 b6462ca3a
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sat Dec 6 15:39:53 2014 -0700
 
@@ -25878,7 +27320,7 @@ Date:   Wed Sep 10 00:26:10 2014 -0600
     another build dep
 
 commit 615b69b19557a9683eeb0475b30a053a35ca51ac
-Merge: a72b7683 03654934
+Merge: a72b76836 036549343
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Sep 10 01:30:37 2014 -0600
 
@@ -25988,7 +27430,7 @@ Date:   Sat Sep 6 22:56:25 2014 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit f0d2d34f84980ab45ecedae17546f4d71e020c5e
-Merge: 8c212cd5 6c812f10
+Merge: 8c212cd5b 6c812f107
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sat Sep 6 23:42:47 2014 -0600
 
@@ -26055,7 +27497,7 @@ Date:   Sat Sep 6 20:39:37 2014 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 8c212cd5bfa03f71a31d84bd0051314e77d88461
-Merge: e9714e34 dd26ec2e
+Merge: e9714e340 dd26ec2e7
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sat Sep 6 13:41:36 2014 -0600
 
@@ -26502,7 +27944,7 @@ Date:   Thu Aug 14 18:16:14 2014 -0600
     change easymega from v0.1 to v1.0, tweak to build on master, add to Makefile
 
 commit 4828be0ca5252ac9cd6061209385dcd6c4c57965
-Merge: 17e894d1 165b7dcf
+Merge: 17e894d1b 165b7dcf6
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Aug 14 17:08:36 2014 -0600
 
@@ -27185,7 +28627,7 @@ Date:   Tue Jun 24 21:22:26 2014 -0600
     need the api key in Bdale's root too
 
 commit bd440afc2a6e37b74fffcf1b977e149485095316
-Merge: 5d4f912b a0ccab8e
+Merge: 5d4f912bc a0ccab8e4
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Jun 24 21:17:53 2014 -0600
 
@@ -27567,7 +29009,7 @@ Date:   Sun Jun 15 17:40:27 2014 -0600
     tweaks
 
 commit a6c61fb993d3fd15183f8755d9058f05c606c9c0
-Merge: 0634119d 43848991
+Merge: 0634119df 43848991d
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sun Jun 15 16:31:01 2014 -0700
 
@@ -29805,7 +31247,7 @@ Date:   Tue May 13 17:30:47 2014 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 8124af8c27b2b9e446aa3a4f1da83d4db7c1ea87
-Merge: 6dd7eae5 3bcf4bdd
+Merge: 6dd7eae5e 3bcf4bdd3
 Author: Keith Packard <keithp@keithp.com>
 Date:   Mon May 12 23:21:55 2014 -0700
 
@@ -30545,7 +31987,7 @@ Date:   Sun Feb 23 17:42:08 2014 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 104b8bfc9b37fda175f2cb2a1e33601fbf6f48f6
-Merge: 403b95ee 1edf7ef8
+Merge: 403b95ee2 1edf7ef80
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Feb 20 13:23:52 2014 -0700
 
@@ -30686,7 +32128,7 @@ Date:   Sun Feb 16 14:57:38 2014 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 95f5a6ef52947088993d395874cf6aa502fd2503
-Merge: 135b6d40 de2a6199
+Merge: 135b6d401 de2a61990
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Feb 16 15:53:35 2014 -0700
 
@@ -31198,7 +32640,7 @@ Date:   Tue Jan 21 21:34:58 2014 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 13cf4000bd53ac4af66231d56e24c9eb11178a5f
-Merge: 7a8551fe 99fedbf0
+Merge: 7a8551fe8 99fedbf0e
 Author: Keith Packard <keithp@keithp.com>
 Date:   Tue Jan 21 20:59:06 2014 -0800
 
@@ -31700,7 +33142,7 @@ Date:   Thu Dec 19 03:22:21 2013 -0700
     updated notes from 1.3 release
 
 commit 27528961457865acc3a38b822268df6d7cb86cfd
-Merge: 4006effc a31629df
+Merge: 4006effc5 a31629dfc
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Dec 19 02:00:10 2013 -0700
 
@@ -31803,7 +33245,7 @@ Date:   Wed Dec 18 21:02:15 2013 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 39cb8c2896317b7538353be979ac99baffc14489
-Merge: 2a6016cf ee427961
+Merge: 2a6016cfa ee4279613
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Dec 18 21:53:52 2013 -0700
 
@@ -31855,7 +33297,7 @@ Date:   Wed Dec 18 18:30:54 2013 -0700
     update release docs to include option for submodules
 
 commit d9982c257463f23be940eea66bd4dc3aadff0043
-Merge: 1b97ed2b b63fc054
+Merge: 1b97ed2b6 b63fc0548
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Dec 18 18:25:35 2013 -0700
 
@@ -31982,7 +33424,7 @@ Date:   Wed Dec 18 11:25:05 2013 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 6df58bb0115a8da13d35ab38861f6231bea7f2a7
-Merge: 4383bafc 02195f29
+Merge: 4383bafc6 02195f297
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Dec 18 12:19:31 2013 -0700
 
@@ -32189,7 +33631,7 @@ Date:   Tue Dec 17 14:53:59 2013 -0700
     further documentation tweaks
 
 commit 90c88bab305c43eb62f964fd3ff350b8b0b5320d
-Merge: d5d6d10c dffbdd93
+Merge: d5d6d10ce dffbdd93d
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Dec 17 14:09:30 2013 -0700
 
@@ -33482,7 +34924,7 @@ Date:   Tue Oct 8 09:39:29 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 488a527267decece48e6682e0e0c7fc29cbed329
-Merge: 6a1e398e f6661cc0
+Merge: 6a1e398e5 f6661cc01
 Author: Keith Packard <keithp@keithp.com>
 Date:   Tue Oct 8 09:26:41 2013 -0700
 
@@ -34048,7 +35490,7 @@ Date:   Sat Aug 31 23:10:56 2013 -0500
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 7ec1b97d278c7aec3199fb7270f0dcf9484c879f
-Merge: 017ed54f 41881535
+Merge: 017ed54ff 418815354
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Aug 31 08:22:09 2013 -0500
 
@@ -34117,7 +35559,7 @@ Date:   Tue Aug 27 21:28:07 2013 -0600
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit dcc51bb18985c24fa35bce0dd42ea3d847b960bf
-Merge: 7c82acc1 a73b0251
+Merge: 7c82acc1c a73b02518
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Aug 28 22:52:58 2013 -0600
 
@@ -34504,7 +35946,7 @@ Date:   Sun Aug 25 22:22:55 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 203951f6e049ec7e95489849a2bfaa01aa19c0c9
-Merge: 4babe731 b363a628
+Merge: 4babe7310 b363a628f
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sun Aug 25 22:00:27 2013 -0700
 
@@ -34660,7 +36102,7 @@ Date:   Sat Aug 17 17:35:08 2013 +0200
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit f0e126251360f050b7121f167771c057bda8747e
-Merge: d95a2c5d 4fe47adc
+Merge: d95a2c5d1 4fe47adc7
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Aug 17 17:33:31 2013 +0200
 
@@ -34677,7 +36119,7 @@ Date:   Sat Aug 17 17:30:52 2013 +0200
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 4ff54bb96f6c00c0c2c7dd32f81403bac331621a
-Merge: fa0859a5 01f8df08
+Merge: fa0859a51 01f8df088
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Aug 17 16:03:26 2013 +0200
 
@@ -34695,7 +36137,7 @@ Date:   Sat Aug 17 16:01:44 2013 +0200
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 01f8df088759ee7e6bc3900a013e0ea4fafaf984
-Merge: e2ebe60a 15063cbb
+Merge: e2ebe60ad 15063cbb8
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Jul 30 00:15:06 2013 -0600
 
@@ -35165,7 +36607,7 @@ Date:   Tue May 21 11:30:44 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit fd5567882b732f8947b44b217552077c82a3d28e
-Merge: fd55c1fe 57b4d82d
+Merge: fd55c1fe5 57b4d82de
 Author: Keith Packard <keithp@keithp.com>
 Date:   Tue May 21 11:16:54 2013 -0700
 
@@ -35209,7 +36651,7 @@ Date:   Sun May 19 23:07:54 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 27e9b93f3d35890a49575b2ead1983ce3c2fc213
-Merge: a4df2575 d9cbef8c
+Merge: a4df2575b d9cbef8cd
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sun May 19 20:40:42 2013 -0700
 
@@ -36043,7 +37485,7 @@ Date:   Fri May 10 19:21:18 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 106d212ff5920c39d95751ef6249dc141970412c
-Merge: ecb12857 09d5d6f5
+Merge: ecb128579 09d5d6f54
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu May 9 21:06:52 2013 -0700
 
@@ -36898,7 +38340,7 @@ Date:   Thu May 2 23:14:02 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 7cce6c205e4595894e033ab8f0acc8064bf9f561
-Merge: 75f8229d 55915098
+Merge: 75f8229d4 55915098f
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Apr 29 17:24:43 2013 -0600
 
@@ -36943,7 +38385,7 @@ Date:   Sat Apr 27 00:36:11 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit cef4e3ee95037050ae859fb2fdc0a57373764bd8
-Merge: fefc0210 f3ee7deb
+Merge: fefc02104 f3ee7deb6
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Apr 25 22:22:50 2013 -0700
 
@@ -37116,7 +38558,7 @@ Date:   Sun Apr 21 14:52:56 2013 +1200
     Signed-off-by: Mike Beattie <mike@ethernal.org>
 
 commit 49caac78786014d443d9c05f47b5eb3070ec9bd3
-Merge: 5b7bbf18 cbf38c55
+Merge: 5b7bbf183 cbf38c557
 Author: Mike Beattie <mike@ethernal.org>
 Date:   Sun Apr 21 14:51:07 2013 +1200
 
@@ -37193,7 +38635,7 @@ Date:   Sat Apr 20 12:22:38 2013 -0600
     improve text in telebt turn-on script
 
 commit ff332e640b27c6be37dabef58ebac350ac2347b2
-Merge: b3000609 87d6ed24
+Merge: b3000609e 87d6ed24f
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Apr 17 10:41:05 2013 -0700
 
@@ -37246,7 +38688,7 @@ Date:   Tue Apr 16 14:22:23 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit d5a557004c00d1ae25da04dc63c78b816562a236
-Merge: 6592a5be 5b041769
+Merge: 6592a5be1 5b041769d
 Author: Keith Packard <keithp@keithp.com>
 Date:   Mon Apr 15 23:26:33 2013 -0700
 
@@ -37261,7 +38703,7 @@ Date:   Mon Apr 15 23:25:55 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 6592a5be127a9c95d3b2e7d5aa6ffba71c6748b9
-Merge: c6f85cb1 eba3aa94
+Merge: c6f85cb14 eba3aa949
 Author: Keith Packard <keithp@keithp.com>
 Date:   Mon Apr 15 23:19:44 2013 -0700
 
@@ -37281,7 +38723,7 @@ Date:   Mon Apr 15 23:14:22 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit c6f85cb149dff8732104521cb62b355e8a0d7148
-Merge: 3cd8ff18 58dd4b88
+Merge: 3cd8ff18a 58dd4b88f
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sun Apr 14 20:02:10 2013 -0700
 
@@ -37332,7 +38774,7 @@ Date:   Sat Apr 13 11:39:14 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 2f7015afcca7c6042365d2124d3a5b7219e8e588
-Merge: 5077f3ad 778daf0c
+Merge: 5077f3ad1 778daf0cc
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Apr 13 10:51:04 2013 -0700
 
@@ -37535,7 +38977,7 @@ Date:   Mon Apr 8 17:42:18 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 6ba0df9b440b69bf5bc5f4e435b431adf303fee2
-Merge: 1d3ab47d 28adf554
+Merge: 1d3ab47d8 28adf5541
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Apr 8 18:02:37 2013 -0600
 
@@ -38228,7 +39670,7 @@ Date:   Mon Mar 11 18:16:55 2013 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 90ee11542b111befa0e96e27292dc548e5c37396
-Merge: 97efce5f d7973de3
+Merge: 97efce5f7 d7973de32
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sun Mar 10 11:43:06 2013 -0700
 
@@ -38273,7 +39715,7 @@ Date:   Sun Mar 10 20:40:13 2013 +1300
     Signed-off-by: Mike Beattie <mike@ethernal.org>
 
 commit 8adadf6bd2ba623642675e4beafac4ac98b1916d
-Merge: d029acad 0c0c6d60
+Merge: d029acad6 0c0c6d60c
 Author: Mike Beattie <mike@ethernal.org>
 Date:   Sun Mar 10 20:24:56 2013 +1300
 
@@ -38304,7 +39746,7 @@ Date:   Sun Mar 10 20:22:09 2013 +1300
     Signed-off-by: Mike Beattie <mike@ethernal.org>
 
 commit d029acad6a992be9b7b4498e70605f8a1e1a4ef6
-Merge: eba7b2ef 72c5b142
+Merge: eba7b2ef8 72c5b1429
 Author: Mike Beattie <mike@ethernal.org>
 Date:   Sun Mar 10 19:07:01 2013 +1300
 
@@ -38349,7 +39791,7 @@ Date:   Fri Mar 8 19:41:32 2013 +1300
     Signed-off-by: Mike Beattie <mike@ethernal.org>
 
 commit 84d35e4cbd7ea2f681c43496b9b9db84f9dd923f
-Merge: 760b1f02 e0d9128b
+Merge: 760b1f02c e0d9128b7
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Mar 7 13:00:44 2013 -0800
 
@@ -38499,7 +39941,7 @@ Date:   Thu Mar 7 18:54:45 2013 +1300
     Signed-off-by: Mike Beattie <mike@ethernal.org>
 
 commit 760b1f02c178c600226f39b5e66d8cbadbf4a29b
-Merge: afd26742 cbad587b
+Merge: afd267426 cbad587b4
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Mar 6 21:53:22 2013 -0800
 
@@ -38623,7 +40065,7 @@ Date:   Sun Feb 24 01:20:16 2013 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 2120d362cefceba69e75996b6391d9558978c01d
-Merge: 5246acb7 a04c4f7b
+Merge: 5246acb70 a04c4f7b0
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sun Feb 24 00:20:54 2013 -0800
 
@@ -38806,7 +40248,7 @@ Date:   Sun Feb 10 11:58:36 2013 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit bf88c5f829ea5d32043431945e862a9f6c96740a
-Merge: 32270296 d05a7799
+Merge: 322702966 d05a77992
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sun Feb 10 01:21:52 2013 -0800
 
@@ -39144,7 +40586,7 @@ Date:   Wed Jan 16 22:05:32 2013 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit a04c4f7b07e97d568f8f6f56dd363329817fb52c
-Merge: 0c2fa961 bd84dfd8
+Merge: 0c2fa9614 bd84dfd8e
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Jan 16 15:22:46 2013 -0800
 
@@ -39212,14 +40654,14 @@ Date:   Wed Jan 16 15:01:12 2013 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 0c2fa9614ffe22901ba0fd089e1e02c362f9fbe0
-Merge: 456120d2 f2b59cf3
+Merge: 456120d20 f2b59cf3d
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Jan 16 10:40:28 2013 -0800
 
     Merge remote-tracking branch 'origin/telescience-v0.2' into telescience-v0.2
 
 commit 456120d201d72c89576a0c8d69b2fcba44169507
-Merge: f24c4219 994ff76a
+Merge: f24c4219d 994ff76a0
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Jan 16 10:39:40 2013 -0800
 
@@ -39311,7 +40753,7 @@ Date:   Sat Jan 12 20:11:38 2013 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 670034eef48d63cdaec8d271fa93da984ffe2ea9
-Merge: 8c5ebaf8 d374d6be
+Merge: 8c5ebaf88 d374d6be7
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sat Jan 12 10:57:22 2013 -0700
 
@@ -39416,7 +40858,7 @@ Date:   Thu Jan 10 21:26:20 2013 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 1ed6b13e87c1cc2d6618b6ba3a293ea6e3b5752e
-Merge: acff2f46 d409417f
+Merge: acff2f466 d409417ff
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Jan 10 21:48:12 2013 -0800
 
@@ -39461,7 +40903,7 @@ Date:   Wed Jan 9 15:23:46 2013 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 8c5ebaf88b459b09924753a8077393a7b0639133
-Merge: 59f355f5 d7d259c7
+Merge: 59f355f52 d7d259c7b
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Jan 8 22:12:17 2013 -0700
 
@@ -39798,7 +41240,7 @@ Date:   Tue Jan 1 15:30:11 2013 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 65b512c890a3ccf487655b79305ab1cfcf49259c
-Merge: 434e946a d7d259c7
+Merge: 434e946aa d7d259c7b
 Author: Keith Packard <keithp@keithp.com>
 Date:   Mon Dec 31 14:24:59 2012 -0800
 
@@ -39868,14 +41310,14 @@ Date:   Fri Dec 28 23:05:31 2012 -0700
     Signed-off-by: Keith Packard <keithp@gag.com>
 
 commit f7a56152808c7838c1886884bb77de2705ab076c
-Merge: daf8776f b70ca5ea
+Merge: daf8776f8 b70ca5eaf
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Dec 28 21:50:13 2012 -0800
 
     Merge remote-tracking branch 'origin/master' into micropeak-logging
 
 commit 59f355f5288b42b2e47743d06e41e55819a55f64
-Merge: 099d2b0e b70ca5ea
+Merge: 099d2b0ea b70ca5eaf
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Fri Dec 28 22:30:26 2012 -0700
 
@@ -39937,7 +41379,7 @@ Date:   Tue Dec 25 14:23:29 2012 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 868ef0c9c4b208c02a87180b0eede329369bdc77
-Merge: 669cde8a 57487e78
+Merge: 669cde8a8 57487e78b
 Author: Keith Packard <keithp@keithp.com>
 Date:   Tue Dec 25 14:20:42 2012 -0800
 
@@ -40031,7 +41473,7 @@ Date:   Sun Dec 16 16:08:33 2012 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit dfff41c2bec16fe4c7b198a4720eb40d8e740ac4
-Merge: 22a58b0f 00bc1a09
+Merge: 22a58b0f9 00bc1a090
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sun Dec 16 16:06:41 2012 -0800
 
@@ -40119,7 +41561,7 @@ Date:   Sat Dec 15 14:47:22 2012 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 6fa1ec0dbf2a4eda8d061c67b3779b83b88f29f0
-Merge: f1409311 73422bf7
+Merge: f14093117 73422bf72
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Dec 14 19:29:50 2012 -0800
 
@@ -40173,7 +41615,7 @@ Date:   Wed Dec 12 22:53:36 2012 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 688a9458bb03a81e71554c14295d1baacbbbd530
-Merge: 816c6b5d c8866fba
+Merge: 816c6b5d0 c8866fbae
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Dec 12 22:36:59 2012 -0800
 
@@ -40188,7 +41630,7 @@ Date:   Wed Dec 12 22:35:05 2012 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 816c6b5d087694a9db9c34cc5ec7671a1487d9b9
-Merge: a4a84182 a4678cd8
+Merge: a4a841828 a4678cd84
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Dec 12 11:10:14 2012 -0800
 
@@ -40228,7 +41670,7 @@ Date:   Tue Dec 11 23:43:30 2012 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit a4a841828924ee37f5201d4ff0aec38459f2d802
-Merge: b26e837a d309fcff
+Merge: b26e837a6 d309fcff5
 Author: Keith Packard <keithp@keithp.com>
 Date:   Tue Dec 11 14:42:43 2012 -0800
 
@@ -40246,7 +41688,7 @@ Date:   Tue Dec 11 14:41:53 2012 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit b26e837a6f18641aae9372aab22168849ff10812
-Merge: 1489c7f7 c233ef67
+Merge: 1489c7f75 c233ef67f
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sun Dec 9 18:33:31 2012 -0800
 
@@ -40313,7 +41755,7 @@ Date:   Fri Dec 7 17:35:15 2012 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit bd05421991b596fe9cf73ee25c9046b0fb4e32f7
-Merge: 1f797066 1489c7f7
+Merge: 1f7970668 1489c7f75
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Dec 7 17:34:10 2012 -0800
 
@@ -40365,7 +41807,7 @@ Date:   Fri Dec 7 10:15:25 2012 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 748e42ebf1dfb1efd5dec6ddd93f5c7aeedeb01d
-Merge: 75912f8a c10f9a43
+Merge: 75912f8af c10f9a438
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Dec 7 10:14:11 2012 -0800
 
@@ -40817,7 +42259,7 @@ Date:   Thu Nov 29 20:36:51 2012 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit ceea0e75ac42acac4a20bf88f34bb93fd2768f4c
-Merge: 7738ddc5 285fccfa
+Merge: 7738ddc5d 285fccfa8
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Nov 20 12:37:38 2012 -0700
 
@@ -41093,7 +42535,7 @@ Date:   Mon Oct 29 11:43:02 2012 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit a46c9398a5f02ff4b52b7a4309a51498560cadb5
-Merge: e57ab2a7 56023cf5
+Merge: e57ab2a7b 56023cf5d
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Oct 26 14:08:32 2012 -0700
 
@@ -41188,7 +42630,7 @@ Date:   Thu Oct 25 00:12:57 2012 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 282f0451dd141db3304ab73e4020a849e59721eb
-Merge: 0680d62d 78e1de48
+Merge: 0680d62d5 78e1de481
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Oct 25 00:09:01 2012 -0700
 
@@ -41316,7 +42758,7 @@ Date:   Wed Oct 24 20:52:09 2012 +1300
     Signed-off-by: Mike Beattie <mike@ethernal.org>
 
 commit 055f3232decc07e064d596469b81cf9869411c2d
-Merge: 8ca58e20 9e60fa21
+Merge: 8ca58e202 9e60fa214
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Oct 23 09:38:36 2012 -0600
 
@@ -41344,7 +42786,7 @@ Date:   Tue Oct 23 19:22:52 2012 +1300
     Signed-off-by: Mike Beattie <mike@ethernal.org>
 
 commit 9e60fa214ad2c48fbe8f7e5c437681aa35d249fa
-Merge: 27c31572 4b41561a
+Merge: 27c31572f 4b41561ab
 Author: Keith Packard <keithp@keithp.com>
 Date:   Mon Oct 22 22:39:31 2012 -0700
 
@@ -41576,7 +43018,7 @@ Date:   Sun Oct 21 13:01:03 2012 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 7f664da148ae15d46d179d8ecede6fc0bc710ffb
-Merge: 3aba5eb5 23b0c2fe
+Merge: 3aba5eb5a 23b0c2fe9
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Oct 18 16:49:28 2012 -0700
 
@@ -41614,7 +43056,7 @@ Date:   Thu Oct 18 15:34:41 2012 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 5a55501660ebab3b858a48483c5df1cfb4e858e4
-Merge: 0361235c 440365bd
+Merge: 0361235c9 440365bd1
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Oct 18 15:18:52 2012 -0700
 
@@ -42181,7 +43623,7 @@ Date:   Sat Oct 6 17:05:59 2012 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 82fdc42d61340e6b76580ff12a9e1bea59eb8079
-Merge: 6b8881a7 2cac8c57
+Merge: 6b8881a7b 2cac8c572
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Oct 3 10:44:28 2012 -0700
 
@@ -42240,21 +43682,21 @@ Date:   Thu Sep 20 11:33:24 2012 +0200
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 2f2734bb418f5c3a89fa3f1bf1b98ce4cfe432e1
-Merge: e69a433f 3fe5c2f9
+Merge: e69a433fd 3fe5c2f9f
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Sep 20 11:30:19 2012 +0200
 
     Merge remote-tracking branch 'mjb/altosdroid'
 
 commit e69a433fd93b9f6bd2297d8045eb075fee29e73b
-Merge: 19243ecc 6e0d672b
+Merge: 19243ecc9 6e0d672b8
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Sep 20 11:30:11 2012 +0200
 
     Merge remote-tracking branch 'mjb/prefs_interface'
 
 commit 19243ecc9b5bbdcc069ae24acf1ca807322c84d8
-Merge: 90c1b6db 0ef8b714
+Merge: 90c1b6db8 0ef8b7148
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Sep 20 11:29:55 2012 +0200
 
@@ -42342,7 +43784,7 @@ Date:   Mon Sep 17 01:29:33 2012 +1200
     Signed-off-by: Mike Beattie <mike@ethernal.org>
 
 commit 52d3cad4f744140e1aa06fdfc0d49a0cf8734fd4
-Merge: 31f5a026 6e0d672b
+Merge: 31f5a0265 6e0d672b8
 Author: Mike Beattie <mike@ethernal.org>
 Date:   Sun Sep 16 22:27:04 2012 +1200
 
@@ -42597,7 +44039,7 @@ Date:   Thu Sep 13 15:12:33 2012 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 320d90c376dccfe1599505e3b485df8d46e34bb3
-Merge: 9a7d6431 2e6c6a6c
+Merge: 9a7d64317 2e6c6a6c1
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Sep 13 15:36:37 2012 -0600
 
@@ -42614,7 +44056,7 @@ Date:   Thu Sep 13 00:35:27 2012 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 9a7d6431777ce3377b788ddac6cb9fadd53c039c
-Merge: 2439f53e 9728b20a
+Merge: 2439f53ea 9728b20a4
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Sep 13 00:58:30 2012 -0600
 
@@ -42671,7 +44113,7 @@ Date:   Wed Sep 12 19:50:07 2012 -0600
     update Releasing for non-native versioning and builds on debian branch
 
 commit fe009534ce6846b6db96cac8f6c2d53ba8010d91
-Merge: 69d42b26 8ee29fe4
+Merge: 69d42b262 8ee29fe48
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Sep 12 19:49:51 2012 -0600
 
@@ -42759,7 +44201,7 @@ Date:   Tue Sep 11 23:36:26 2012 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 69d42b26223b45df4167aa3baafba100ad71baab
-Merge: 3e9078cb 3fa5fbdf
+Merge: 3e9078cb1 3fa5fbdfd
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Sep 12 00:26:21 2012 -0600
 
@@ -42796,7 +44238,7 @@ Date:   Tue Sep 11 22:17:22 2012 -0600
     releasing 1.1
 
 commit 4563624638884b7b2f16cd4d396c00690e045999
-Merge: 11fbcf5e e5a55dbf
+Merge: 11fbcf5e3 e5a55dbf2
 Author: Tom Marble <tmarble@info9.net>
 Date:   Tue Sep 11 22:50:18 2012 -0500
 
@@ -42854,7 +44296,7 @@ Date:   Tue Sep 11 12:44:24 2012 -0500
     Add appropriate Java build deps as given from autoconf
 
 commit 8e506274a35eccacd2d4523faa08d279a201753f
-Merge: 0bc3ed53 1fc97dd9
+Merge: 0bc3ed53a 1fc97dd98
 Author: Tom Marble <tmarble@info9.net>
 Date:   Tue Sep 11 11:39:22 2012 -0500
 
@@ -42867,7 +44309,7 @@ Date:   Tue Sep 11 11:37:14 2012 -0500
     Use explicit build deps for altosui (avoids * wildcarding)
 
 commit 1fc97dd9875a7639533a34438c4c7c999412eb3a
-Merge: 8397d2b0 4420d4a9
+Merge: 8397d2b04 4420d4a9f
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Sep 11 10:35:04 2012 -0600
 
@@ -43033,7 +44475,7 @@ Date:   Sun Sep 9 13:09:27 2012 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit e2b458a448106ba1ab207f0ea6824b56927d8547
-Merge: 9682e9e6 3fe93220
+Merge: 9682e9e6f 3fe932206
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sun Sep 9 13:03:47 2012 -0700
 
@@ -43213,7 +44655,7 @@ Date:   Sat Sep 1 00:14:27 2012 -0500
     This reverts commit ada6f2dfc045e77cb9499f20cdec1b4a54ef0db1.
 
 commit ec9e1186dce079a2f2b7be8050216ddb1bc1af66
-Merge: 503eabd0 6d31f8d1
+Merge: 503eabd0e 6d31f8d15
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Aug 31 22:24:16 2012 -0500
 
@@ -43320,7 +44762,7 @@ Date:   Thu Aug 30 16:28:53 2012 -0500
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit b635cb26ba54c8f5c6a958e0ab0bc4d34d33b635
-Merge: 354c1fed a8ecf3aa
+Merge: 354c1fed7 a8ecf3aa4
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Aug 30 16:24:38 2012 -0500
 
@@ -43424,7 +44866,7 @@ Date:   Thu Aug 30 13:13:20 2012 +1200
     Signed-off-by: Mike Beattie <mike@ethernal.org>
 
 commit 583458772746317b98fced907ec780edff465888
-Merge: aea10c10 17b6ffb6
+Merge: aea10c107 17b6ffb6c
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Aug 29 11:29:24 2012 -0700
 
@@ -43645,7 +45087,7 @@ Date:   Mon Aug 27 22:45:20 2012 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 5ed88fb72c3e3ecf3333c700d838667db71cfbdc
-Merge: adbe64c5 621d0930
+Merge: adbe64c5a 621d09302
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Aug 28 23:39:53 2012 -0600
 
@@ -44618,21 +46060,21 @@ Date:   Wed Aug 8 07:07:49 2012 +1200
     Signed-off-by: Mike Beattie <mike@ethernal.org>
 
 commit 9456332fc16269270a2e9b7ef0b54523800cfe27
-Merge: bd023491 4d4ad34a
+Merge: bd0234911 4d4ad34ae
 Author: Mike Beattie <mike@ethernal.org>
 Date:   Wed Aug 8 06:49:15 2012 +1200
 
     Merge branch 'master' of git://git.gag.com/fw/altos
 
 commit 4d4ad34aec0c75c66162b992f1e52947e4685730
-Merge: c7f22850 8e4ebd1f
+Merge: c7f228503 8e4ebd1f6
 Author: Keith Packard <keithp@keithp.com>
 Date:   Tue Aug 7 11:48:20 2012 -0700
 
     Merge remote-tracking branch 'mjb/master'
 
 commit bd02349111ae0f39b320e6a10a330051ddc39fdf
-Merge: 8e4ebd1f c7f22850
+Merge: 8e4ebd1f6 c7f228503
 Author: Mike Beattie <mike@ethernal.org>
 Date:   Wed Aug 8 06:46:56 2012 +1200
 
@@ -44819,7 +46261,7 @@ Date:   Thu Aug 2 21:20:23 2012 +1200
     Signed-off-by: Mike Beattie <mike@ethernal.org>
 
 commit 7481d06bebc2dc1473f451971d8b744c9da4e726
-Merge: 599e28b2 c56dead7
+Merge: 599e28b22 c56dead72
 Author: Mike Beattie <mike@ethernal.org>
 Date:   Thu Aug 2 21:18:15 2012 +1200
 
@@ -44976,7 +46418,7 @@ Date:   Wed Jul 18 18:41:00 2012 -0600
     telescience: correctly calculating rate values with higher resolution
 
 commit e2b472bbb2418fc13be42dbc7c52beb88479c46d
-Merge: 75d6aa6f b242f275
+Merge: 75d6aa6f7 b242f2756
 Author: Robert Garbee <robert@gag.com>
 Date:   Wed Jul 18 14:25:27 2012 -0600
 
@@ -47282,7 +48724,7 @@ Date:   Mon May 7 23:14:14 2012 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 6a973f788563ccc66b01cc7557a004dabef18d09
-Merge: d387f246 da2c920b
+Merge: d387f246b da2c920b9
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed May 16 09:13:53 2012 -0600
 
@@ -49615,7 +51057,7 @@ Date:   Fri Oct 7 09:53:09 2011 -0600
     Fix up the new makefiles
 
 commit 128bbfa150f88c09f7adde2434b7bf0b5a9ed556
-Merge: f6f54d70 246864b0
+Merge: f6f54d70b 246864b05
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Oct 7 08:41:56 2011 -0600
 
@@ -49627,7 +51069,7 @@ Date:   Fri Oct 7 08:41:56 2011 -0600
     fix version number
 
 commit f6f54d70b768dca1715ddddea64a4df00d82b09e
-Merge: 1c344b76 0d10e257
+Merge: 1c344b760 0d10e2576
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Oct 7 08:40:14 2011 -0600
 
@@ -49668,7 +51110,7 @@ Date:   Mon Sep 26 11:50:28 2011 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 1c344b760776cd5d8c0297d8db9bf02687381b4e
-Merge: 4ed53ef8 fc4173ff
+Merge: 4ed53ef83 fc4173ff8
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Oct 7 08:34:59 2011 -0600
 
@@ -49686,7 +51128,7 @@ Date:   Tue Sep 27 00:59:08 2011 -0600
     add run-time dependency on libjfreechart-java
 
 commit 989aae5b18856e3420ea5b7a26ddd8dccae9d6d3
-Merge: 0552fbed e44f1ffb
+Merge: 0552fbed3 e44f1ffb7
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sat Sep 24 15:34:59 2011 -0600
 
@@ -50252,7 +51694,7 @@ Date:   Fri Aug 26 09:41:46 2011 -0600
     get ready for a 1.0.1 release
 
 commit 674231773256bacd7acb4b5718c47412e47b813f
-Merge: 08e3d54b 3bfe8df4
+Merge: 08e3d54ba 3bfe8df44
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Fri Aug 26 09:37:01 2011 -0600
 
@@ -50412,7 +51854,7 @@ Date:   Thu Aug 25 01:11:47 2011 -0600
     prepare to release
 
 commit 73abe19acf709c00f5352ec12e8cd6edae1d1963
-Merge: 1bd781da 5158493c
+Merge: 1bd781da9 5158493c8
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Aug 25 00:34:49 2011 -0600
 
@@ -50439,7 +51881,7 @@ Date:   Wed Aug 24 23:21:02 2011 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit e268798dc260311f5f0167909481b41c9d27fc1c
-Merge: 458f816a 242344d3
+Merge: 458f816ad 242344d3e
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Aug 24 23:06:44 2011 -0700
 
@@ -50456,7 +51898,7 @@ Date:   Wed Aug 24 23:06:01 2011 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 242344d3e32e7c7cd9270d708555923fa888e4d8
-Merge: 5c1cf749 94a1b220
+Merge: 5c1cf7492 94a1b220b
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Aug 24 23:51:38 2011 -0600
 
@@ -50480,7 +51922,7 @@ Date:   Wed Aug 24 22:29:56 2011 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit edfb553bb4fa5b0c7c6c658505b2a99d05fb13bf
-Merge: c74ab82a ec96f116
+Merge: c74ab82a7 ec96f1166
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Aug 24 23:23:56 2011 -0600
 
@@ -50514,7 +51956,7 @@ Date:   Wed Aug 24 22:18:29 2011 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 50769fbbeaaf61111d363411e0ef0b2868681cf4
-Merge: 425fa995 d92c1736
+Merge: 425fa995a d92c17361
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Aug 24 23:15:20 2011 -0600
 
@@ -50544,7 +51986,7 @@ Date:   Wed Aug 24 23:03:23 2011 -0600
     more tweaks
 
 commit 09981cd024297fd4ef093c7468de2b9d5f3c2691
-Merge: a476e766 03c8b270
+Merge: a476e7662 03c8b2702
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Aug 24 22:42:39 2011 -0600
 
@@ -50611,7 +52053,7 @@ Date:   Wed Aug 24 21:39:21 2011 -0600
     doc tweaks through chap 3
 
 commit 3d88e0493ab446d7c7011786390d30618a72d045
-Merge: 02d65453 5a9972d4
+Merge: 02d654532 5a9972d41
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Aug 24 21:26:26 2011 -0600
 
@@ -50686,7 +52128,7 @@ Date:   Wed Aug 24 01:41:53 2011 -0600
     another test round
 
 commit 4d94e8f9f807a0bbeab0cdead011e74eeca1d1b6
-Merge: 4b5369dc 3b0a9a1c
+Merge: 4b5369dc3 3b0a9a1c8
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Aug 24 01:38:58 2011 -0600
 
@@ -50938,7 +52380,7 @@ Date:   Sun Aug 21 22:12:04 2011 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit a08826292ebd802a1ff2effccac3b96fd061c47d
-Merge: 3366cfe6 55be3db2
+Merge: 3366cfe61 55be3db2e
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Aug 22 16:08:55 2011 -0600
 
@@ -52012,7 +53454,7 @@ Date:   Sun Jul 17 11:25:47 2011 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit f7cd8317bf78ece334e1ceb0263b875ca43bbbd2
-Merge: 51796e2f a482d904
+Merge: 51796e2f1 a482d904a
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sun Jul 17 08:17:44 2011 -0700
 
@@ -52070,7 +53512,7 @@ Date:   Sat Jul 16 22:34:44 2011 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit abb8510b97ce9cbbff0275cc31f74780fe1ce138
-Merge: 0929ee32 00e6981c
+Merge: 0929ee32f 00e6981c2
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Jul 16 21:06:37 2011 -0700
 
@@ -52936,7 +54378,7 @@ Date:   Tue Apr 19 15:29:39 2011 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 44fb71ca3e5bccd5f601fc5a2d5da7292050b1d6
-Merge: 2ebdb888 c269e263
+Merge: 2ebdb888f c269e263a
 Author: Keith Packard <keithp@keithp.com>
 Date:   Tue Apr 19 14:06:39 2011 -0700
 
@@ -53145,7 +54587,7 @@ Date:   Thu Apr 7 22:00:38 2011 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit f28efe271f9670473249574f6bcf6e160fe58c7b
-Merge: 8db5c52f 835ab3a8
+Merge: 8db5c52f1 835ab3a8c
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Apr 1 19:35:22 2011 -0700
 
@@ -53937,7 +55379,7 @@ Date:   Fri Mar 18 20:26:12 2011 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 5db94e1e230bade966a997aa83165405a9ec9d83
-Merge: 1a8f45e7 cbb968f5
+Merge: 1a8f45e7b cbb968f5c
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Fri Mar 18 21:12:39 2011 -0600
 
@@ -54444,7 +55886,7 @@ Date:   Tue Jan 18 17:27:11 2011 -0700
     update changelogs for Debian build
 
 commit da42f406e88ccc821cd45d5a94d5afec65ec50e9
-Merge: ea4cdfb8 cf550f9b
+Merge: ea4cdfb87 cf550f9b9
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Jan 17 09:50:17 2011 -0700
 
@@ -55441,7 +56883,7 @@ Date:   Wed Nov 24 21:39:18 2010 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 51c7741040d95c5deece939dae5e4136cc04afc4
-Merge: d1dbe3b6 4e47c44d
+Merge: d1dbe3b69 4e47c44d3
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Nov 24 21:00:52 2010 -0800
 
@@ -55473,7 +56915,7 @@ Date:   Wed Nov 24 20:53:36 2010 -0700
     fix missing section close in Site Map content
 
 commit db2b19b8f0d452d682d53c7ed0ff6e359b46efa0
-Merge: b372f3c0 915f881d
+Merge: b372f3c0e 915f881d6
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Nov 24 18:57:35 2010 -0800
 
@@ -55494,7 +56936,7 @@ Date:   Thu Nov 25 09:52:30 2010 +1000
     doc: Document altosui "Site Map" tab
 
 commit f01096c4b42f9a4720ed0414826c2a283a992545
-Merge: 357826aa 3fbefb3e
+Merge: 357826aa9 3fbefb3ee
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Thu Nov 25 09:10:50 2010 +1000
 
@@ -55515,7 +56957,7 @@ Date:   Thu Nov 25 09:07:34 2010 +1000
     docs: Document altosui "Graph Data" button
 
 commit 7811e6dfa6caf10251da7df7c24b98cdc3787892
-Merge: 71b1949e 7a50837e
+Merge: 71b1949e5 7a50837ea
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Thu Nov 25 08:47:36 2010 +1000
 
@@ -55617,7 +57059,7 @@ Date:   Tue Nov 23 18:56:46 2010 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 71b1949e50f4533bcf44537da65b19bc67863c8e
-Merge: a79225c2 f1892b13
+Merge: a79225c21 f1892b137
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Wed Nov 24 12:14:11 2010 +1000
 
@@ -55631,7 +57073,7 @@ Date:   Tue Nov 23 18:58:11 2010 -0700
     while before I tackle that, if ever.
 
 commit a79225c215f17fa5218ddd9db4fc3f5c563a9f74
-Merge: 84cd5d42 853b7112
+Merge: 84cd5d42d 853b7112e
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Wed Nov 24 11:55:14 2010 +1000
 
@@ -55656,7 +57098,7 @@ Date:   Wed Nov 24 02:11:36 2010 +1000
     altosui: don't switch away from user selected tab
 
 commit ae55a107f12546dc65f04618c7abc17beb920d73
-Merge: d1005f68 737f2fdd
+Merge: d1005f683 737f2fdd0
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Wed Nov 24 01:53:46 2010 +1000
 
@@ -55677,14 +57119,14 @@ Date:   Mon Nov 22 21:07:10 2010 -0700
     add a rudimentary --help for command line use
 
 commit d1005f68376d695039c314b8d7a68bbf9acbca4f
-Merge: 9a83e0dc 22c09781
+Merge: 9a83e0dc7 22c09781a
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Tue Nov 23 10:14:55 2010 +1000
 
     Merge branch 'buttonbox' of git://git.gag.com/fw/altos into buttonbox
 
 commit 22c09781af1df4b38562b577e9926c23e4a397f2
-Merge: b27327a0 a79606a6
+Merge: b27327a05 a79606a65
 Author: Keith Packard <keithp@keithp.com>
 Date:   Mon Nov 22 16:02:22 2010 -0800
 
@@ -55714,7 +57156,7 @@ Date:   Mon Nov 22 15:53:27 2010 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 9a83e0dc79f7a7467c7814d58daa2a2b89e50972
-Merge: 902735ff a79606a6
+Merge: 902735ffb a79606a65
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Tue Nov 23 08:07:04 2010 +1000
 
@@ -55755,7 +57197,7 @@ Date:   Sun Nov 21 17:39:50 2010 +1000
     AltosSiteMap: ensure buffer around active tile
 
 commit ec47bc93a487614714a752cb30ec9fe3d8f72929
-Merge: 0393830f e7954c82
+Merge: 0393830f8 e7954c820
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Sun Nov 21 16:08:37 2010 +1000
 
@@ -55813,7 +57255,7 @@ Date:   Sun Nov 21 13:07:11 2010 +1000
     AltosSiteMap: extend map if rocket goes far away
 
 commit 835b903727a2eabda8d9659cc46e53301f92897c
-Merge: 440a0f3f 87891355
+Merge: 440a0f3f5 878913551
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Sun Nov 21 11:15:02 2010 +1000
 
@@ -55839,7 +57281,7 @@ Date:   Sat Nov 20 16:55:12 2010 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 2a7dc3ba36bac81640a9498e0d0caf1470b57c19
-Merge: e5b1adae ece2c86e
+Merge: e5b1adae9 ece2c86e2
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Sun Nov 21 10:45:15 2010 +1000
 
@@ -55849,7 +57291,7 @@ Date:   Sun Nov 21 10:45:15 2010 +1000
             ao-tools/altosui/AltosFlightUI.java
 
 commit 8df185cd95cfecbed8272dd1275d077c5b45535b
-Merge: ece2c86e 1e712647
+Merge: ece2c86e2 1e712647d
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Nov 20 16:35:48 2010 -0800
 
@@ -55888,7 +57330,7 @@ Date:   Sun Nov 21 08:58:44 2010 +1000
     altosui: reindent
 
 commit a59a204e188e40ec8848a0dc63d6de710cee3039
-Merge: 82636305 37f0201d
+Merge: 826363050 37f0201d7
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Sun Nov 21 08:56:13 2010 +1000
 
@@ -55966,14 +57408,14 @@ Date:   Sat Nov 20 21:06:37 2010 +1000
     AltosSiteMap: add autoscroll and grabndrag scroll
 
 commit 74cab8503b51ba6fb05a4d12a031c749e870b0ef
-Merge: 0ecf0331 9a99cabc
+Merge: 0ecf03311 9a99cabc1
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Sat Nov 20 18:20:45 2010 +1000
 
     Merge branch 'buttonbox' of git://git.gag.com/fw/altos into buttonbox
 
 commit 0ecf033110084f1a8be98282d7029dc14f70dab5
-Merge: 081fbd57 71c41ead
+Merge: 081fbd571 71c41eadd
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Sat Nov 20 18:14:30 2010 +1000
 
@@ -56004,7 +57446,7 @@ Date:   Sat Nov 20 00:09:03 2010 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 081fbd5715f9d3d81d98e149fb95d40447c07a79
-Merge: 90b9bc44 7920ed5c
+Merge: 90b9bc447 7920ed5c3
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Sat Nov 20 17:40:49 2010 +1000
 
@@ -56155,7 +57597,7 @@ Date:   Fri Nov 19 12:09:46 2010 +1000
     altosui: tile site maps
 
 commit 939be6793238a275b7682ecc376fed14379cf044
-Merge: e68fe945 1a4b6e96
+Merge: e68fe9454 1a4b6e96f
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Thu Nov 18 05:54:06 2010 +1000
 
@@ -56305,7 +57747,7 @@ Date:   Sun Nov 14 00:57:45 2010 +1000
     AltosTelemetryReader: actually open serial port
 
 commit 9c32b93ef5fb43558fb0179ea1b047e35b7ed6e8
-Merge: 991541f5 a6f30fae
+Merge: 991541f57 a6f30fae9
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Sun Nov 14 00:29:11 2010 +1000
 
@@ -56322,7 +57764,7 @@ Date:   Fri Nov 12 17:02:22 2010 -0800
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 1bdc6166f3bc5ce3f8e55acb1484923781412e21
-Merge: f1118717 5c6a5335
+Merge: f11187177 5c6a5335a
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Fri Nov 12 17:32:43 2010 -0700
 
@@ -56372,7 +57814,7 @@ Date:   Fri Nov 12 02:07:41 2010 +1000
     add site map tab, at least for QRS launches
 
 commit 5394548fa5c7bdbfcc01e8aa19e93e1cf6345e2a
-Merge: 891e629f 75f7698b
+Merge: 891e629f6 75f7698b9
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Nov 10 22:11:21 2010 -0800
 
@@ -56588,7 +58030,7 @@ Date:   Tue Sep 28 17:56:49 2010 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 5a119fd92532d53e552efe1f7c61e87181fcace0
-Merge: 28da3406 82744c34
+Merge: 28da34064 82744c349
 Author: Keith Packard <keithp@keithp.com>
 Date:   Mon Sep 27 22:28:07 2010 -0700
 
@@ -56617,7 +58059,7 @@ Date:   Tue Sep 28 14:45:01 2010 +1000
     Hax0r graphing to support telem/eeprom files
 
 commit e2b9f47a205348d38756c70e928a2a9183de6884
-Merge: 7ef3ad0c 80320319
+Merge: 7ef3ad0c9 803203197
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Tue Sep 28 12:55:47 2010 +1000
 
@@ -56665,7 +58107,7 @@ Date:   Mon Sep 27 17:11:48 2010 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 7ef3ad0c9354c0484c25badc69334b59c7f355e2
-Merge: eb74866e e66919aa
+Merge: eb74866e9 e66919aa4
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Fri Sep 24 10:28:06 2010 +1000
 
@@ -56704,7 +58146,7 @@ Date:   Mon Aug 30 14:00:04 2010 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit eb74866e919e8c661153847871f5a79e66d37296
-Merge: af404b42 12605899
+Merge: af404b428 126058997
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Mon Sep 20 22:05:26 2010 +1000
 
@@ -56747,7 +58189,7 @@ Date:   Wed Sep 15 06:51:05 2010 +1000
     Add graphing.
 
 commit 3d64f5a6511529ca53699190f4d54de1ba62a9bd
-Merge: ec6da082 b9623f8e
+Merge: ec6da0824 b9623f8ef
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Sat Sep 11 15:15:14 2010 +1000
 
@@ -56782,7 +58224,7 @@ Date:   Fri Sep 10 10:42:35 2010 -0600
     make the column headers comma separated, too, so they align with the data
 
 commit ec6da0824474e46de842845d7b53fe1a1dde33ed
-Merge: 7c2e4114 10310672
+Merge: 7c2e4114a 10310672a
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Fri Sep 10 16:11:34 2010 +1000
 
@@ -56845,7 +58287,7 @@ Date:   Thu Sep 9 23:51:23 2010 -0600
     rewind packaging changelog
 
 commit 7c2e4114a3a43f919a7a6c967d3f16e5d630f90f
-Merge: ddc83b4c af200f5b
+Merge: ddc83b4c4 af200f5b8
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Fri Sep 10 15:50:01 2010 +1000
 
@@ -56950,7 +58392,7 @@ Date:   Thu Sep 9 20:06:09 2010 -0600
     update changelogs for Debian build
 
 commit 0ea75761416bff299233991e961ba25b6c7dcf89
-Merge: 35d70c92 8ee3464d
+Merge: 35d70c923 8ee3464d8
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu Sep 9 20:05:27 2010 -0600
 
@@ -57063,7 +58505,7 @@ Date:   Thu Sep 9 15:43:47 2010 -0600
     update changelogs for Debian build
 
 commit ddc83b4c401be965a9947782becf20cc8c54e6a2
-Merge: afea6c26 3d49d5f6
+Merge: afea6c264 3d49d5f69
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Sun Sep 5 20:49:34 2010 +1000
 
@@ -57875,7 +59317,7 @@ Date:   Fri Aug 27 12:41:26 2010 -0600
     update changelogs for Debian build
 
 commit cf65c6b8056c4af7c26b52ec6f9fbd3400cef638
-Merge: 5f2f6a8f ae5eff7b
+Merge: 5f2f6a8f9 ae5eff7bc
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Fri Aug 27 12:38:25 2010 -0600
 
@@ -57924,7 +59366,7 @@ Date:   Fri Aug 27 12:04:13 2010 -0600
     fix up the wrapper's path to the jar file
 
 commit 5f2f6a8f9ba56be867888758848bc7f152ccbd47
-Merge: 63bd34cd 9d1b27fa
+Merge: 63bd34cd1 9d1b27fa1
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Aug 27 11:00:31 2010 -0700
 
@@ -57963,7 +59405,7 @@ Date:   Fri Aug 27 11:17:54 2010 -0600
     add a dummy install target
 
 commit c443f43f8dee6e0fcbcecf9d09e948fd928b7af4
-Merge: 29504311 2923cf50
+Merge: 295043112 2923cf505
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Fri Aug 27 03:08:53 2010 -0600
 
@@ -58188,7 +59630,7 @@ Date:   Mon Aug 23 23:15:05 2010 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit afea6c264c5ebf12f1d629bd4bc724da86d11b7a
-Merge: 0e17853c 9d1b27fa
+Merge: 0e17853c0 9d1b27fa1
 Author: Anthony Towns <aj@erisian.com.au>
 Date:   Tue Aug 24 00:02:31 2010 -0600
 
@@ -58206,7 +59648,7 @@ Date:   Mon Aug 23 23:01:36 2010 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 295043112ccde35092945c286596f9045ee6fa05
-Merge: 2007288d ef8376c4
+Merge: 2007288da ef8376c4d
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Aug 23 23:11:22 2010 -0600
 
@@ -58608,7 +60050,7 @@ Date:   Thu Jul 29 13:30:36 2010 -0600
     update changelogs for Debian build
 
 commit 7877496d47ce6d25210c0e1c6500666dbfc0876c
-Merge: c71061a3 4cf39b13
+Merge: c71061a37 4cf39b13a
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Jul 29 12:07:49 2010 -0700
 
@@ -58827,7 +60269,7 @@ Date:   Wed Jul 28 15:41:34 2010 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 8a6040e143ecc7830cc1c0114de85f3b72c067eb
-Merge: 024d0773 554a97ef
+Merge: 024d07730 554a97ef4
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Jul 28 13:29:51 2010 -0700
 
@@ -58871,7 +60313,7 @@ Date:   Wed Jul 28 12:24:53 2010 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 172a2817dde6718724f2b5fad5a7761801446fa0
-Merge: f2a006fd 81bf2042
+Merge: f2a006fd9 81bf2042c
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Jul 28 11:20:22 2010 -0700
 
@@ -59114,7 +60556,7 @@ Date:   Tue Jul 20 22:08:56 2010 -0600
     update changelogs for Debian build
 
 commit e747954b6a9e71705f619684df8a118a909b1039
-Merge: bd40a5b4 695879db
+Merge: bd40a5b43 695879dbc
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Jul 20 22:07:22 2010 -0600
 
@@ -59185,14 +60627,14 @@ Date:   Mon Jun 21 11:44:32 2010 -0700
     ao-postflight: was walking off state.data array
 
 commit 11d155d558d0b121b66f089adee0a47d71f65a78
-Merge: 544003a8 24393eab
+Merge: 544003a8d 24393eab0
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Jun 16 21:54:06 2010 -0700
 
     Merge remote branch 'mjb/master'
 
 commit 544003a8da0248fd6f3c62ded86af74ab7cdadf6
-Merge: 267923e5 93c1e29b
+Merge: 267923e56 93c1e29b0
 Author: Keith Packard <keithp@keithp.com>
 Date:   Wed Jun 16 21:52:23 2010 -0700
 
@@ -59266,7 +60708,7 @@ Date:   Tue May 18 00:24:03 2010 -0600
     merge the altusmetrum-themes package
 
 commit 0c6cf621dfd8339b8bc3915750a3147235f1331b
-Merge: 32e430b8 563a9dcd
+Merge: 32e430b8a 563a9dcdf
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon May 17 23:59:43 2010 -0600
 
@@ -59291,7 +60733,7 @@ Date:   Mon May 17 21:30:57 2010 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 69092ffd23ac1928d5c84413fd00c2423f313fc2
-Merge: 3c2211ad cc002c0a
+Merge: 3c2211ad7 cc002c0a4
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon May 17 20:10:46 2010 -0600
 
@@ -59393,7 +60835,7 @@ Date:   Thu May 6 12:48:00 2010 -0600
     update changelogs for Debian build
 
 commit 314d27a73c903fef2968dabac3d5313573713460
-Merge: fa77db2f 823fc0ac
+Merge: fa77db2ff 823fc0ac2
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Thu May 6 12:47:30 2010 -0600
 
@@ -59501,7 +60943,7 @@ Date:   Tue Apr 27 00:18:43 2010 -0600
     update changelogs for Debian build
 
 commit 99094f02bf4849ba1f6b9842ded6c39d894320f7
-Merge: 641e76c5 75d8ffd4
+Merge: 641e76c5d 75d8ffd4e
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Apr 27 00:17:37 2010 -0600
 
@@ -59543,7 +60985,7 @@ Date:   Thu Apr 22 14:53:44 2010 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit f4383394b5d2b275b21e3ce8040d8cb9e48bb375
-Merge: 5f93cf8c c879b178
+Merge: 5f93cf8c7 c879b178d
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Apr 18 08:36:07 2010 -0600
 
@@ -59648,7 +61090,7 @@ Date:   Thu Apr 8 17:28:17 2010 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit baaaac499cfbc1286ae55374cfdc796d32983b92
-Merge: a4356b9b dec9971d
+Merge: a4356b9bc dec9971d7
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Apr 8 13:31:23 2010 -0700
 
@@ -59661,7 +61103,7 @@ Date:   Thu Apr 8 13:30:16 2010 -0700
     Use 16-bit flite voice (which appears to have changed symbols recently)
 
 commit 447c121fc1ceb878e45718ad1364a5349965a59a
-Merge: 10330d23 53ca3f98
+Merge: 10330d235 53ca3f98a
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Apr 8 11:46:56 2010 -0700
 
@@ -59935,7 +61377,7 @@ Date:   Tue Mar 30 23:18:37 2010 -0600
     update changelogs for Debian build
 
 commit b41e617080fe825f7810ee5eee52ea37f7618ec6
-Merge: 28e40ccf df7bda1f
+Merge: 28e40ccfc df7bda1f3
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Mar 30 23:15:32 2010 -0600
 
@@ -59963,7 +61405,7 @@ Date:   Mon Mar 15 12:04:18 2010 -0600
     move gbp.conf into debian/
 
 commit df7bda1f32b0049c3878c325ea0b55999f3980e3
-Merge: 23da4f3b a7042fe7
+Merge: 23da4f3bc a7042fe7d
 Author: Keith Packard <keithp@keithp.com>
 Date:   Fri Mar 12 10:38:26 2010 -0800
 
@@ -60025,7 +61467,7 @@ Date:   Sat Feb 27 17:36:13 2010 -0700
     update changelogs for Debian build
 
 commit a1478f65538fdaac7b58ffbd958a035b74956099
-Merge: 901fce5f bbf8c9f1
+Merge: 901fce5fe bbf8c9f17
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Feb 27 15:19:33 2010 -0800
 
@@ -60986,7 +62428,7 @@ Date:   Mon Nov 2 16:54:06 2009 -0700
     update changelogs for Debian build
 
 commit 7db9d86178ecfd58cc1c17ac9fcbdcfd2f13aaec
-Merge: b219801f f9de2000
+Merge: b219801fb f9de20000
 Author: Keith Packard <keithp@keithp.com>
 Date:   Mon Nov 2 15:47:40 2009 -0800
 
@@ -61035,7 +62477,7 @@ Date:   Mon Nov 2 15:56:42 2009 -0700
     de-version the libreadline-dev build dependency
 
 commit 0b483233118673cbc2cda1be6acd379df82bc95a
-Merge: ca5d323a 550482d9
+Merge: ca5d323a3 550482d95
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sun Nov 1 20:59:02 2009 -0800
 
@@ -61224,14 +62666,14 @@ Date:   Mon Oct 12 15:57:19 2009 -0600
     update changelogs for Debian build
 
 commit c57bd7fd2f80e50b0b4c87fccb024ab07c93773d
-Merge: adf8764b 2b765728
+Merge: adf8764bc 2b765728c
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Oct 12 15:57:08 2009 -0600
 
     Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
 
 commit 69b6f6bb465163cf767bb68e0e4a716d8ad2b39c
-Merge: bc77da68 2b765728
+Merge: bc77da68c 2b765728c
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Oct 10 17:16:21 2009 -0700
 
@@ -61249,7 +62691,7 @@ Date:   Sat Oct 10 17:15:38 2009 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit bc77da68c9cb7d4cca483eadbbb7e9ccf71c0060
-Merge: 46cccf62 8f7ea3de
+Merge: 46cccf62f 8f7ea3de7
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Oct 10 15:09:48 2009 -0700
 
@@ -61278,14 +62720,14 @@ Date:   Sat Oct 10 15:11:23 2009 -0600
     update changelogs for Debian build
 
 commit 541da6f3bbf81be93dfe3c01f7c8cfd757b28a2b
-Merge: dfc73cba 5f26ad66
+Merge: dfc73cba1 5f26ad663
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sat Oct 10 15:05:50 2009 -0600
 
     Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
 
 commit 46cccf62fb40514b5930fcb2ffdaf2735415c764
-Merge: fb8f3fee 5f26ad66
+Merge: fb8f3fee6 5f26ad663
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Oct 10 14:00:03 2009 -0700
 
@@ -61306,7 +62748,7 @@ Date:   Sat Oct 10 13:58:16 2009 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit fb8f3fee6a1bab1e46d782e84405845cee2dadb4
-Merge: 22856cf8 b8fc3975
+Merge: 22856cf8b b8fc3975b
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Oct 10 13:41:00 2009 -0700
 
@@ -61326,7 +62768,7 @@ Date:   Sat Oct 10 13:39:01 2009 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 22856cf8bb0f5e1f37c9b774132d9ef6934526ed
-Merge: 2f760349 e29961fd
+Merge: 2f7603490 e29961fdb
 Author: Keith Packard <keithp@keithp.com>
 Date:   Sat Oct 10 11:44:20 2009 -0700
 
@@ -61395,7 +62837,7 @@ Date:   Mon Sep 21 11:00:32 2009 -0700
     update changelogs for Debian build
 
 commit 327c64305a59f48ababf19875874a550af6b9cef
-Merge: c8a81a41 74f0fb4d
+Merge: c8a81a419 74f0fb4dd
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Sep 21 11:00:22 2009 -0700
 
@@ -61426,7 +62868,7 @@ Date:   Sun Sep 20 09:21:00 2009 -0600
     update changelogs for Debian build
 
 commit df42ccaaf468cdc5d93cbd1c001f58df58419722
-Merge: 0b24e403 078e9cdb
+Merge: 0b24e4034 078e9cdbd
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Sep 20 09:19:28 2009 -0600
 
@@ -61522,7 +62964,7 @@ Date:   Sun Sep 6 17:46:39 2009 -0600
     update changelogs for Debian build
 
 commit 37e6c9a492a1d51373bf9333fb3172e0c377720f
-Merge: d256f820 2e6686b1
+Merge: d256f8204 2e6686b1e
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Sep 6 17:46:10 2009 -0600
 
@@ -61535,7 +62977,7 @@ Date:   Sun Sep 6 16:45:47 2009 -0700
     Use plplotd instead of plplotd-gnome2
 
 commit d256f8204e9fce53ae4309562bb4c0cde1fae43e
-Merge: 0fc344df 32d35367
+Merge: 0fc344dfc 32d353670
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Sep 6 17:34:08 2009 -0600
 
@@ -61558,7 +63000,7 @@ Date:   Sun Sep 6 14:15:57 2009 -0600
     update changelogs for Debian build
 
 commit 4b0de757874c0ecaf38e3dfd3beefc398150e3d5
-Merge: 773c4ffb d0eac989
+Merge: 773c4ffbc d0eac989b
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Sep 6 14:15:53 2009 -0600
 
@@ -61591,7 +63033,7 @@ Date:   Sun Sep 6 14:05:55 2009 -0600
     update changelogs for Debian build
 
 commit 45ede4a4b203ef9da5bf05c49cb9c5a2e6382ec5
-Merge: 45e29381 e35e485f
+Merge: 45e293812 e35e485ff
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Sep 6 14:05:51 2009 -0600
 
@@ -61614,7 +63056,7 @@ Date:   Sun Sep 6 14:02:14 2009 -0600
     update changelogs for Debian build
 
 commit d42ebf0661ecf15455e5051de1e16ae66f8dd857
-Merge: 384dbe9f 7a19aac5
+Merge: 384dbe9fc 7a19aac5e
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Sep 6 14:02:09 2009 -0600
 
@@ -61639,7 +63081,7 @@ Date:   Sun Sep 6 10:40:06 2009 -0600
     update changelogs for Debian build
 
 commit 35c54b3a278fa9bc2bc7f4b5ee04866697c93ba0
-Merge: 4f8eff74 6d018ab9
+Merge: 4f8eff740 6d018ab93
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Sun Sep 6 10:39:23 2009 -0600
 
@@ -61789,7 +63231,7 @@ Date:   Wed Sep 2 23:18:15 2009 -0600
     update changelogs for Debian build
 
 commit cb4a73f3b65ba72f645fd37ab8712829c9537bf8
-Merge: 9ddd8696 e2e449d5
+Merge: 9ddd8696b e2e449d5c
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Sep 2 23:17:37 2009 -0600
 
@@ -61865,7 +63307,7 @@ Date:   Mon Aug 31 16:26:00 2009 -0600
     update changelogs for Debian build
 
 commit b34474c1f3083e73b7184d519f54d4c8031836fd
-Merge: 8df16979 0d65bff4
+Merge: 8df169791 0d65bff44
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Mon Aug 31 16:25:32 2009 -0600
 
@@ -61933,7 +63375,7 @@ Date:   Wed Aug 19 00:52:57 2009 -0600
     update changelogs for Debian build
 
 commit 4486d9156e19e4280b42bcd422d81d04f2d04a92
-Merge: dd09f0bc 33edd629
+Merge: dd09f0bc2 33edd6299
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Wed Aug 19 00:49:24 2009 -0600
 
@@ -61975,7 +63417,7 @@ Date:   Tue Aug 18 21:49:39 2009 -0600
     add support for building Debian package
 
 commit d996aa9b32fb0eb385bd3d158256c29788a42fe3
-Merge: b3b2d3c4 7d4ceb75
+Merge: b3b2d3c47 7d4ceb75a
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Aug 18 18:56:09 2009 -0600
 
@@ -61992,7 +63434,7 @@ Date:   Tue Aug 18 17:55:22 2009 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit b3b2d3c475a135084b5628c730fc6fca1ba0817b
-Merge: 4685fc54 da12b89f
+Merge: 4685fc541 da12b89fb
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Aug 18 18:36:03 2009 -0600
 
@@ -62011,7 +63453,7 @@ Date:   Tue Aug 18 17:29:29 2009 -0700
     Fix ao-bitbang examples to not have . in the first column
 
 commit 4685fc541466afbeefc151bcb64cd054739c048b
-Merge: 1c2a0b66 c29275b7
+Merge: 1c2a0b665 c29275b72
 Author: Bdale Garbee <bdale@gag.com>
 Date:   Tue Aug 18 18:09:38 2009 -0600
 
@@ -62511,7 +63953,7 @@ Date:   Thu Jun 4 11:20:10 2009 -0700
     Signed-off-by: Keith Packard <keithp@keithp.com>
 
 commit 17d2432a8b9c15963cd3b821f025ad33972ef477
-Merge: 210dbaa2 8a9a3f02
+Merge: 210dbaa23 8a9a3f02b
 Author: Keith Packard <keithp@keithp.com>
 Date:   Thu Jun 4 11:13:15 2009 -0700
 
index 8bb1830a17b50c1ea9b661a7964efa549f714d32..7e56ebc404c23246d6bb07022a6a4f5a463154e5 100644 (file)
@@ -49,6 +49,7 @@ fat_android = \
 fat_altos = \
        src/easymega-v1.0/easymega-v1.0-$(VERSION).ihx \
        src/easymega-v2.0/easymega-v2.0-$(VERSION).ihx \
+       src/easymega-v3.0/easymega-v3.0-$(VERSION).ihx \
        src/easymini-v1.0/easymini-v1.0-$(VERSION).ihx \
        src/easymini-v2.0/easymini-v2.0-$(VERSION).ihx \
        src/easymini-v3.0/easymini-v3.0-$(VERSION).ihx \
index 4e0e2829c0fbe3d3e2e7d7f0e7e7c6a39d92b7be..a6a793ba3f8d76a6f06cd77cc1ff464db864b315 100644 (file)
--- a/Releasing
+++ b/Releasing
@@ -44,7 +44,7 @@ These are Bdale's notes on how to do a release.
          installers for Windows and Mac OS X
 
                sudo apt update
-               sudo apt install genisoimage nsis \
+               sudo apt install genisoimage nsis gcc-avr avr-libc \
                        gcc-i686-linux-gnu gcc-aarch64-linux-gnu \
                        gcc-arm-linux-gnueabi gcc-arm-linux-gnueabihf \
                        gcc-mingw-w64-i686-posix gcc-mingw-w64-x86-64-win32
@@ -114,11 +114,10 @@ These are Bdale's notes on how to do a release.
        - store a stable copy of ARM binaries for production use
 
        cp src/chaoskey-v1.0/{*.elf,*.ihx,*.bin,*.map} \
-          src/easymega-v[1-2].0/{*.elf,*.ihx,*.map} \
+          src/easymega-v[1-3].0/{*.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/easytimer-v2/{*.elf,*.ihx,*.map} \
+          src/easytimer-v[1-2]/{*.elf,*.ihx,*.map} \
           src/telebt-v[3-4].0/{*.elf,*.ihx,*.map} \
           src/teledongle-v3.0/{*.elf,*.ihx,*.map} \
           src/telegps-v[1-3].0/{*.elf,*.ihx,*.map} \
@@ -129,11 +128,10 @@ These are Bdale's notes on how to do a release.
           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/easymega-v[1-3].0/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/easytimer-v2/flash-loader/*.elf \
+          src/easytimer-v[1-2]/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-3].0/flash-loader/{*.elf,*.bin,*.map} \
index c90534a924e4159ea62cc0a1db5575e8493a67d0..53e3b8fb6c4bbb271db9c6af215e3e9ddbaca48b 100644 (file)
@@ -202,9 +202,12 @@ public class AltosCalData {
        public void set_tick(int tick) {
                if (tick != AltosLib.MISSING) {
                        if (prev_tick != AltosLib.MISSING) {
-                               while (tick < prev_tick - 1000) {
+                               while (tick < prev_tick - 32767) {
                                        tick += 65536;
                                }
+                               while (tick > prev_tick + 32767) {
+                                       tick -= 65536;
+                               }
                        }
                        if (first_tick == AltosLib.MISSING)
                                first_tick = tick;
index 6b980be6b641dd784e06c020d07a743eea036b0c..b076357d77af888e0030919548dbbbfe9529df8c 100644 (file)
@@ -245,6 +245,10 @@ public class AltosConfigData {
                return false;
        }
 
+       public boolean has_radio() {
+               return product.startsWith("Tele");
+       }
+
        int[] parse_version(String v) {
                String[] parts = v.split("\\.");
                int r[] = new int[parts.length];
index b19cbedbbdb513b914a6edf1bbe55cf58af2608f..18ffd988299a63cb2821d1c0eae5df6221f016dd 100644 (file)
@@ -39,6 +39,10 @@ public abstract class AltosDataListener {
                return cal_data;
        }
 
+       public AltosConfigData config_data() {
+               return null;
+       }
+
        public void set_time(double time) {
                if (time != AltosLib.MISSING)
                        this.time = time;
index 8f3fa4590e43bcecd060b1d287bf09490a7a23db..f0819a8108d9c5212697524a2290609eac0508e1 100644 (file)
@@ -138,6 +138,8 @@ public class AltosEepromRecordSet implements AltosRecordSet {
                        } else {
                                while (t < tick - 32767)
                                        t += 65536;
+                               while (t > tick + 32767)
+                                       t -= 65536;
                                tick = t;
                        }
                        record.wide_tick = tick;
index fbbfd63c3e7cc7f207ace6907b83ea0e73e4d16a..dd2a4baea86563e24ad5a305e8f649dd84ba1d5c 100644 (file)
@@ -235,6 +235,30 @@ public class AltosLib {
                "Compressed", "Uncompressed"
        };
 
+       public static final String[] ignite_mode_values = {
+               "Dual Deploy",
+               "Redundant Apogee",
+               "Redundant Main",
+               "Separation & Apogee",
+       };
+
+       public static final String[]    pad_orientation_values_radio = {
+               "Antenna Up",
+               "Antenna Down",
+       };
+
+       public static final String[]    pad_orientation_values_no_radio = {
+               "Beeper Up",
+               "Beeper Down",
+       };
+
+       public static String[] pad_orientation_values(boolean radio) {
+               if (radio)
+                       return pad_orientation_values_radio;
+               else
+                       return pad_orientation_values_no_radio;
+       }
+
        public static final String launch_sites_url = "https://maps.altusmetrum.org/launch-sites.txt";
        public static final String launch_sites_env = "LAUNCH_SITES";
 //     public static final String launch_sites_url = "file:///home/keithp/misc/text/altusmetrum/AltOS/launch-sites.txt";
index c889cdab0619acf33be7748579f08e18465a91ba..b6be02a58c787595e55220409d274553f97a6276 100644 (file)
@@ -18,6 +18,7 @@ import java.util.*;
 
 public interface AltosRecordSet {
        public AltosCalData cal_data();
+       public AltosConfigData config_data();
        public void capture_series(AltosDataListener listener);
        public boolean valid();
 }
index 6f01f51c180be81d53f54471401a14c328ef23bc..5ba32518a3fff5fb1dedef4e757578f550574660 100644 (file)
@@ -138,6 +138,10 @@ public class AltosTelemetryFile implements AltosRecordSet {
                listener.finish();
        }
 
+       public AltosConfigData config_data() {
+               return null;
+       }
+
        public AltosTelemetryFile(FileInputStream input) throws IOException {
                telems = new AltosTelemetryIterable(input);
        }
index 3e5bede5169718a291533600d878fe50589a86fc..9d39cda1bf820e0c898b8a3b1d5633881c57b5f2 100644 (file)
@@ -123,13 +123,6 @@ public class AltosConfigFCUI
                "0", "5", "10", "15", "20"
        };
 
-       static String[]         ignite_mode_values = {
-               "Dual Deploy",
-               "Redundant Apogee",
-               "Redundant Main",
-               "Separation & Apogee",
-       };
-
        static String[]         aprs_interval_values = {
                "Disabled",
                "2",
@@ -154,16 +147,6 @@ public class AltosConfigFCUI
                "4250",
        };
 
-       static String[]         pad_orientation_values_radio = {
-               "Antenna Up",
-               "Antenna Down",
-       };
-
-       static String[]         pad_orientation_values_no_radio = {
-               "Beeper Up",
-               "Beeper Down",
-       };
-
        String[] pad_orientation_values;
 
        static String[]         tracker_motion_values_m = {
@@ -328,11 +311,7 @@ public class AltosConfigFCUI
        }
 
        void set_pad_orientation_values() {
-               String [] new_values;
-               if (has_radio())
-                       new_values = pad_orientation_values_radio;
-               else
-                       new_values = pad_orientation_values_no_radio;
+               String [] new_values = AltosLib.pad_orientation_values(has_radio());
                if (new_values != pad_orientation_values) {
                        int id = pad_orientation_value.getSelectedIndex();
                        pad_orientation_value.removeAllItems();
@@ -893,7 +872,7 @@ public class AltosConfigFCUI
                c.anchor = GridBagConstraints.LINE_START;
                c.insets = ir;
                c.ipady = 5;
-               ignite_mode_value = new JComboBox<String>(ignite_mode_values);
+               ignite_mode_value = new JComboBox<String>(AltosLib.ignite_mode_values);
                ignite_mode_value.setEditable(false);
                ignite_mode_value.addItemListener(this);
                pane.add(ignite_mode_value, c);
@@ -919,7 +898,7 @@ public class AltosConfigFCUI
                c.anchor = GridBagConstraints.LINE_START;
                c.insets = ir;
                c.ipady = 5;
-               pad_orientation_values = pad_orientation_values_no_radio;
+               pad_orientation_values = AltosLib.pad_orientation_values(false);
 
                pad_orientation_value = new JComboBox<String>(pad_orientation_values);
                pad_orientation_value.setEditable(false);
@@ -1453,7 +1432,7 @@ public class AltosConfigFCUI
 
        public void set_ignite_mode(int new_ignite_mode) {
                if (new_ignite_mode != AltosLib.MISSING) {
-                       if (new_ignite_mode >= ignite_mode_values.length)
+                       if (new_ignite_mode >= AltosLib.ignite_mode_values.length)
                                new_ignite_mode = 0;
                        if (new_ignite_mode < 0) {
                                ignite_mode_value.setEnabled(false);
index 127a5beb0fd1566dc8ca28ca56a25b68ca892f15..47ba3d4275d0ca3f04a7913e680b7e9aaf2985e9 100644 (file)
@@ -39,6 +39,8 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
        AltosUIMap              map;
        AltosFlightStats        stats;
        AltosFlightStatsTable   statsTable;
+       AltosFlightConfigTable  configTable;
+       AltosFlightPyroTable    pyroTable;
        AltosGPS                gps;
        boolean                 has_gps;
 
@@ -77,6 +79,10 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
                        map.font_size_changed(font_size);
                if (statsTable != null)
                        statsTable.font_size_changed(font_size);
+               if (configTable != null)
+                       configTable.font_size_changed(font_size);
+               if (pyroTable != null)
+                       pyroTable.font_size_changed(font_size);
        }
 
        public void units_changed(boolean imperial_units) {
@@ -84,6 +90,10 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
                        map.units_changed(imperial_units);
                if (enable != null)
                        enable.units_changed(imperial_units);
+               if (configTable != null)
+                       configTable.units_changed(imperial_units);
+               if (pyroTable != null)
+                       pyroTable.units_changed(imperial_units);
        }
 
        AltosUIFlightSeries flight_series;
@@ -106,7 +116,7 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
        AltosGraphUI(AltosRecordSet set, File file) throws InterruptedException, IOException {
                super(file.getName());
                AltosCalData    cal_data = set.cal_data();
-
+               AltosConfigData config_data = set.config_data();
 
                pane = new JTabbedPane();
 
@@ -127,6 +137,14 @@ public class AltosGraphUI extends AltosUIFrame implements AltosFontListener, Alt
                pane.add("Flight Graph", graph.panel);
                pane.add("Configure Graph", enable);
                pane.add("Flight Statistics", statsTable);
+               if (config_data != null) {
+                       configTable = new AltosFlightConfigTable(config_data);
+                       pane.add("Configuration", configTable);
+                       if (config_data.npyro > 0 && config_data.npyro != AltosLib.MISSING) {
+                               pyroTable = new AltosFlightPyroTable(config_data.pyros, config_data.npyro);
+                               pane.add("Pyros", pyroTable);
+                       }
+               }
 
                has_gps = false;
                fill_map(flight_series);
index bfea181074d28805b472e4d2cc493caec6505e81..de60fc5c652c085100a3a4385705d9b723429e20 100644 (file)
@@ -149,7 +149,8 @@ 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_EMEGA_3_0=$(top_srcdir)/src/easymega-v3.0/easymega-v3.0-$(VERSION).ihx
+FIRMWARE_EMEGA=$(FIRMWARE_EMEGA_1_0) $(FIRMWARE_EMEGA_2_0) $(FIRMWARE_EMEGA_3_0)
 
 FIRMWARE_EMOTOR_3=$(top_srcdir)/src/easymotor-v3/easymotor-v3-$(VERSION).ihx
 FIRMWARE_EMOTOR=$(FIRMWARE_EMOTOR_3)
index fbed399e9adff74c937e2181a326cde886b20c10..39f609a347dfc86130865055f925f7ad2ddefe37 100644 (file)
@@ -141,6 +141,7 @@ Section "Firmware"
        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/easymega-v3.0/easymega-v3.0-${VERSION}.ihx"
        File "../src/easymotor-v3/easymotor-v3-${VERSION}.ihx"
        File "../src/easytimer-v1/easytimer-v1-${VERSION}.ihx"
        File "../src/easytimer-v2/easytimer-v2-${VERSION}.ihx"
diff --git a/altosuilib/AltosFlightConfigTable.java b/altosuilib/AltosFlightConfigTable.java
new file mode 100644 (file)
index 0000000..4f9714f
--- /dev/null
@@ -0,0 +1,189 @@
+/*
+ * Copyright © 2024 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altosuilib_14;
+
+import java.awt.*;
+import javax.swing.*;
+import java.util.*;
+import org.altusmetrum.altoslib_14.*;
+
+public class AltosFlightConfigTable extends JComponent
+       implements AltosFontListener, AltosUnitsListener
+{
+       GridBagLayout   layout;
+
+       FlightConfig[] flight_configs;
+       AltosConfigData config_data;
+
+       class FlightConfig implements AltosFontListener {
+               JLabel          label;
+               JLabel[]        value;
+
+               public void font_size_changed(int font_size) {
+                       label.setFont(AltosUILib.label_font);
+                       for (int i = 0; i < value.length; i++)
+                               value[i].setFont(AltosUILib.value_font);
+               }
+
+               public void set(String l, String[] values) {
+                       label.setText(l);
+                       for (int j = 0; j < values.length; j++)
+                               value[j].setText(values[j]);
+               }
+
+               public FlightConfig(GridBagLayout layout, int y, String label_text, String ... values) {
+                       GridBagConstraints      c = new GridBagConstraints();
+                       c.insets = new Insets(AltosUILib.tab_elt_pad, AltosUILib.tab_elt_pad, AltosUILib.tab_elt_pad, AltosUILib.tab_elt_pad);
+                       c.weighty = 1;
+
+                       label = new JLabel(label_text);
+                       label.setFont(AltosUILib.label_font);
+                       label.setHorizontalAlignment(SwingConstants.LEFT);
+                       c.gridx = 0; c.gridy = y;
+                       c.anchor = GridBagConstraints.WEST;
+                       c.fill = GridBagConstraints.VERTICAL;
+                       c.weightx = 0;
+                       layout.setConstraints(label, c);
+                       add(label);
+
+                       value = new JLabel[values.length];
+                       for (int j = 0; j < values.length; j++) {
+                               value[j] = new JLabel(values[j]);
+                               value[j].setFont(AltosUILib.value_font);
+                               c.gridx = j+1; c.gridy = y;
+                               c.anchor = GridBagConstraints.CENTER;
+                               c.fill = GridBagConstraints.BOTH;
+                               c.weightx = 1;
+                               layout.setConstraints(value[j], c);
+                               add(value[j]);
+                       }
+                       flight_configs[y] = this;
+               }
+
+       }
+
+       private FlightConfig set_config(int y, String label, String ... values) {
+               if (flight_configs[y] == null)
+                       flight_configs[y] = new FlightConfig(layout, y, label, values);
+               else
+                       flight_configs[y].set(label, values);
+               return flight_configs[y];
+       }
+
+       public void font_size_changed(int font_size) {
+               for (int y = 0; flight_configs[y] != null; y++)
+                       flight_configs[y].font_size_changed(font_size);
+       }
+
+       private String main_deploy_label() {
+               return String.format("Main Deploy Altitude(%s)", AltosConvert.height.parse_units());
+       }
+
+       private String main_deploy_value() {
+               return String.format("%-6.1f", AltosConvert.height.value(config_data.main_deploy, AltosConvert.imperial_units));
+       }
+
+       public void set_config() {
+               int y = 0;
+               if (config_data.serial != AltosLib.MISSING) {
+                       if (config_data.product != null && config_data.version != null)
+                               set_config(y++, "Device",
+                                          config_data.product,
+                                          String.format("version %s", config_data.version),
+                                          String.format("serial %d", config_data.serial));
+                       else
+                               set_config(y++, "Serial", String.format("%d", config_data.serial));
+               }
+               if (config_data.flight != AltosLib.MISSING)
+                       set_config(y++, "Flight", String.format("%d", config_data.flight));
+               if (config_data.main_deploy != AltosLib.MISSING)
+                       set_config(y++, main_deploy_label(), main_deploy_value());
+               if (config_data.apogee_delay != AltosLib.MISSING)
+                       set_config(y++, "Apogee Delay(s)", String.format("%d", config_data.apogee_delay));
+               if (config_data.apogee_lockout != AltosLib.MISSING)
+                       set_config(y++, "Apogee Lockout(s)", String.format("%d", config_data.apogee_lockout));
+               if (config_data.radio_frequency != AltosLib.MISSING)
+                       set_config(y++, "Radio Frequency (MHz)", String.format("%-7.3f", config_data.radio_frequency / 1000.0));
+               if (config_data.radio_calibration != AltosLib.MISSING)
+                       set_config(y++, "Radio Calibration", String.format("%d", config_data.radio_calibration));
+               if (config_data.radio_enable != AltosLib.MISSING)
+                       set_config(y++, "Radio Enable", String.format("%b", config_data.radio_enable != 0));
+               if (config_data.radio_10mw != AltosLib.MISSING)
+                       set_config(y++, "Limit transmit to 10mW", String.format("%b", config_data.radio_10mw != 0));
+               if (config_data.report_feet != AltosLib.MISSING)
+                       set_config(y++, "Beep max height in", config_data.report_feet == 0 ? "Meters" : "Feet");
+               if (config_data.gps_receiver != AltosLib.MISSING)
+                       set_config(y++, "GPS Receiver", AltosLib.gps_receiver_names[config_data.gps_receiver]);
+               if (config_data.telemetry_rate != AltosLib.MISSING)
+                       set_config(y++, "Telemetry baud rate", String.format("%d", AltosLib.ao_telemetry_rate_values[config_data.telemetry_rate]));
+               if (config_data.aprs_interval != AltosLib.MISSING)
+                       set_config(y++, "APRS Interval(s)", String.format("%d", config_data.aprs_interval));
+               if (config_data.aprs_ssid != AltosLib.MISSING)
+                       set_config(y++, "APRS SSID", String.format("%d", config_data.aprs_ssid));
+               if (config_data.aprs_format != AltosLib.MISSING)
+                       set_config(y++, "APRS Format", AltosLib.ao_aprs_format_name[config_data.aprs_format]);
+               if (config_data.callsign != null)
+                       set_config(y++, "Callsign", config_data.callsign);
+               if (config_data.flight_log_max != AltosLib.MISSING)
+                       set_config(y++, "Maximum Flight Log Size(kB)", String.format("%d", config_data.flight_log_max));
+               if (config_data.ignite_mode != AltosLib.MISSING)
+                       set_config(y++, "Igniter Firing Mode", AltosLib.ignite_mode_values[config_data.ignite_mode]);
+               if (config_data.pad_orientation != AltosLib.MISSING)
+                       set_config(y++, "Pad Orientation", AltosLib.pad_orientation_values(config_data.has_radio())[config_data.pad_orientation]);
+               if (config_data.accel_cal_plus != AltosLib.MISSING)
+                       set_config(y++, "Accel Calibration",
+                                  String.format("Plus %d", config_data.accel_cal_plus),
+                                  String.format("Minus %d", config_data.accel_cal_minus));
+               if (config_data.beep != AltosLib.MISSING)
+                       set_config(y++, "Beeper(Hz)",
+                                  config_data.beep == 0 ? "Disabled" :
+                                  String.format("%-7.1f", AltosConvert.beep_value_to_freq(config_data.beep)));
+               if (config_data.tracker_motion != AltosLib.MISSING)
+                       set_config(y++,
+                                  String.format("Logging Trigger Motion (%s):", AltosConvert.height.parse_units()),
+                                  String.format("%-6.1f",
+                                                AltosConvert.height.value(config_data.tracker_motion, AltosConvert.imperial_units)));
+               if (config_data.tracker_interval != AltosLib.MISSING)
+                       set_config(y++, "Position Reporting Interval(s)",
+                                  String.format("%d", config_data.tracker_interval));
+       }
+
+       public void units_changed(boolean imperial_units) {
+               set_config();
+       }
+
+       public void tell_closing() {
+               AltosUIPreferences.unregister_font_listener(this);
+       }
+
+       public AltosFlightConfigTable() {
+               layout = new GridBagLayout();
+
+               setLayout(layout);
+
+               AltosUIPreferences.register_font_listener(this);
+       }
+
+       public AltosFlightConfigTable(AltosConfigData config_data) {
+               this();
+               this.config_data = config_data;
+               flight_configs = new FlightConfig[30];
+               set_config();
+       }
+}
diff --git a/altosuilib/AltosFlightPyroTable.java b/altosuilib/AltosFlightPyroTable.java
new file mode 100644 (file)
index 0000000..5e27a2f
--- /dev/null
@@ -0,0 +1,184 @@
+/*
+ * Copyright © 2024 Keith Packard <keithp@keithp.com>
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful, but
+ * WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+ * General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License along
+ * with this program; if not, write to the Free Software Foundation, Inc.,
+ * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
+ */
+
+package org.altusmetrum.altosuilib_14;
+
+import java.awt.*;
+import javax.swing.*;
+import java.util.*;
+import org.altusmetrum.altoslib_14.*;
+
+public class AltosFlightPyroTable extends JComponent
+       implements AltosFontListener, AltosUnitsListener
+{
+       GridBagLayout   layout;
+       AltosPyro[]     pyros;
+       int             npyro;
+       FlightPyro[]    flight_pyros;
+
+       class FlightPyro implements AltosFontListener {
+               JLabel          label;
+               JTextField[]    text_fields;
+
+               public void font_size_changed(int font_size) {
+                       label.setFont(AltosUILib.label_font);
+                       for (int i = 0; i < text_fields.length; i++)
+                               text_fields[i].setFont(AltosUILib.value_font);
+               }
+
+               public void set_value(int y, int p, String value) {
+                       GridBagConstraints      c = new GridBagConstraints();
+                       c.insets = new Insets(AltosUILib.tab_elt_pad, AltosUILib.tab_elt_pad, AltosUILib.tab_elt_pad, AltosUILib.tab_elt_pad);
+                       c.weighty = 1;
+                       JTextField      text_field;
+
+                       if (text_fields[p] == null) {
+                               text_field = new JTextField(value);
+                               text_field.setEditable(false);
+                               text_field.setFont(AltosUILib.value_font);
+                               text_field.setHorizontalAlignment(SwingConstants.RIGHT);
+                               c.gridx = p+1; c.gridy = y;
+                               c.anchor = GridBagConstraints.EAST;
+                               c.fill = GridBagConstraints.BOTH;
+                               c.weightx = 1;
+                               layout.setConstraints(text_field, c);
+                               add(text_field);
+                               text_fields[p] = text_field;
+                       } else {
+                               text_fields[p].setText(value);
+                       }
+               }
+
+               public void set_label(String text) {
+                       label.setText(text);
+               }
+
+               public FlightPyro(GridBagLayout layout, int y, String label_text, int npyro) {
+                       GridBagConstraints      c = new GridBagConstraints();
+                       c.insets = new Insets(AltosUILib.tab_elt_pad, AltosUILib.tab_elt_pad, AltosUILib.tab_elt_pad, AltosUILib.tab_elt_pad);
+                       c.weighty = 1;
+
+                       if (label_text != null) {
+                               label = new JLabel(label_text);
+                               label.setFont(AltosUILib.label_font);
+                               label.setHorizontalAlignment(SwingConstants.LEFT);
+                               c.gridx = 0; c.gridy = y;
+                               c.anchor = GridBagConstraints.WEST;
+                               c.fill = GridBagConstraints.VERTICAL;
+                               c.weightx = 0;
+                               layout.setConstraints(label, c);
+                               add(label);
+                       }
+
+                       text_fields = new JTextField[npyro];
+               }
+       }
+
+       public void font_size_changed(int font_size) {
+               for (int i = 0; i < flight_pyros.length; i++)
+                       flight_pyros[i].font_size_changed(font_size);
+       }
+
+       public void set_pyros() {
+               int nrow = 1;
+               for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) {
+                       if ((AltosPyro.pyro_all_useful & flag) != 0) {
+                               for (int p = 0; p < npyro; p++) {
+                                       if ((pyros[p].flags & flag) != 0) {
+                                               String text;
+                                               double  value = pyros[p].get_value(flag);
+                                               if ((flag & AltosPyro.pyro_state_value) != 0) {
+                                                       text = AltosLib.state_name_capital((int) value);
+                                               } else {
+                                                       double  scale = AltosPyro.pyro_to_scale(flag);
+                                                       double  unit_value = value;
+                                                       AltosUnits units = AltosPyro.pyro_to_units(flag);
+                                                       if (units != null)
+                                                               unit_value = units.parse_value(value);
+                                                       String  format;
+                                                       if (scale >= 100)
+                                                               format = "%6.2f";
+                                                       else if (scale >= 10)
+                                                               format = "%6.1f";
+                                                       else
+                                                               format = "%6.0f";
+                                                       text = String.format(format, unit_value);
+                                               }
+                                               flight_pyros[nrow].set_value(nrow, p, text);
+                                       }
+                               }
+                               nrow++;
+                       }
+               }
+       }
+
+       public void units_changed(boolean imperial_units) {
+               System.out.printf("units changed\n");
+               int nrow = 1;
+               for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) {
+                       if ((AltosPyro.pyro_all_useful & flag) != 0) {
+                               String name = AltosPyro.pyro_to_name(flag);
+                               flight_pyros[nrow].set_label(name);
+                       }
+               }
+               set_pyros();
+       }
+
+       public void tell_closing() {
+               AltosUIPreferences.unregister_font_listener(this);
+       }
+
+       public AltosFlightPyroTable(AltosPyro[] pyros, int npyro) {
+               layout = new GridBagLayout();
+
+               int nrow = 0;
+
+               for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) {
+                       if ((AltosPyro.pyro_all_useful & flag) != 0) {
+                               nrow++;
+                       }
+               }
+
+               flight_pyros = new FlightPyro[nrow + 1];
+
+               nrow = 0;
+
+               flight_pyros[0] = new FlightPyro(layout, 0, null, npyro);
+
+               for (int p = 0; p < npyro; p++) {
+                       flight_pyros[0].set_value(0, p, String.format("Channel %c", 'A' + p));
+               }
+               nrow++;
+               for (int flag = 1; flag < AltosPyro.pyro_all; flag <<= 1) {
+                       if ((AltosPyro.pyro_all_useful & flag) != 0) {
+                               String name = AltosPyro.pyro_to_name(flag);
+                               flight_pyros[nrow] = new FlightPyro(layout, nrow, name, npyro);
+                               nrow++;
+                       }
+               }
+
+
+               this.pyros = pyros;
+               this.npyro = npyro;
+
+               set_pyros();
+
+               setLayout(layout);
+               AltosUIPreferences.register_font_listener(this);
+       }
+}
index 10a5b494d3883477f3030aaeeaaebab22cb491d8..12bdaaa778ea7c9ae1169e12ff6cc987f1e5e510 100644 (file)
@@ -51,7 +51,9 @@ altosuilib_JAVA = \
        AltosFlashUI.java \
        AltosRomconfigUI.java \
        AltosInfoTable.java \
+       AltosFlightConfigTable.java \
        AltosFlightInfoTableModel.java \
+       AltosFlightPyroTable.java \
        AltosFlightStatsTable.java \
        AltosBTDevice.java \
        AltosBTDeviceIterator.java \
diff --git a/ao-bringup/test-easymega b/ao-bringup/test-easymega
deleted file mode 100755 (executable)
index 04dfb44..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-#!/bin/sh
-
-VERSION=2.0
-PRODUCT=EasyMega
-BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
-
-echo "$PRODUCT-v$VERSION Test Program"
-echo "Copyright 2018 by Bdale Garbee.  Released under GPL v2"
-echo
-echo "Expectations:"
-echo "\t$PRODUCT v$VERSION powered from USB"
-echo
-
-ret=1
-ao-list | while read product serial dev; do
-    case "$product" in
-       "$PRODUCT-v$VERSION")
-
-           echo "Testing $product $serial $dev"
-           echo ""
-
-           ./test-igniters $dev --rplus=100 --rminus=27 --adcmax=4095 main drogue 3 0 1 2
-           echo""
-
-           echo "Testing baro sensor"
-           ../ao-tools/ao-test-baro/ao-test-baro --tty="$dev"
-
-           case $? in
-               0)
-                   ;;
-               *)
-                   echo "failed"
-                   exit 1
-           esac
-           echo""
-
-           FLASHSIZE=8388608
-
-           echo "Testing flash"
-           ../ao-tools/ao-test-flash/ao-test-flash --tty="$dev" "$FLASHSIZE"
-
-           case $? in
-               0)
-                   ;;
-               *)
-                   echo "failed"
-                   exit 1
-           esac
-           echo""
-
-           echo "$PRODUCT-v$VERSION" serial "$serial" is ready to ship
-           ret=0
-           ;;
-    esac
-done
diff --git a/ao-bringup/test-easymega-v2.0 b/ao-bringup/test-easymega-v2.0
new file mode 100755 (executable)
index 0000000..04dfb44
--- /dev/null
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+VERSION=2.0
+PRODUCT=EasyMega
+BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
+
+echo "$PRODUCT-v$VERSION Test Program"
+echo "Copyright 2018 by Bdale Garbee.  Released under GPL v2"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT v$VERSION powered from USB"
+echo
+
+ret=1
+ao-list | while read product serial dev; do
+    case "$product" in
+       "$PRODUCT-v$VERSION")
+
+           echo "Testing $product $serial $dev"
+           echo ""
+
+           ./test-igniters $dev --rplus=100 --rminus=27 --adcmax=4095 main drogue 3 0 1 2
+           echo""
+
+           echo "Testing baro sensor"
+           ../ao-tools/ao-test-baro/ao-test-baro --tty="$dev"
+
+           case $? in
+               0)
+                   ;;
+               *)
+                   echo "failed"
+                   exit 1
+           esac
+           echo""
+
+           FLASHSIZE=8388608
+
+           echo "Testing flash"
+           ../ao-tools/ao-test-flash/ao-test-flash --tty="$dev" "$FLASHSIZE"
+
+           case $? in
+               0)
+                   ;;
+               *)
+                   echo "failed"
+                   exit 1
+           esac
+           echo""
+
+           echo "$PRODUCT-v$VERSION" serial "$serial" is ready to ship
+           ret=0
+           ;;
+    esac
+done
diff --git a/ao-bringup/test-easymega-v3.0 b/ao-bringup/test-easymega-v3.0
new file mode 100755 (executable)
index 0000000..1d000bf
--- /dev/null
@@ -0,0 +1,55 @@
+#!/bin/sh
+
+VERSION=3.0
+PRODUCT=EasyMega
+BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
+
+echo "$PRODUCT-v$VERSION Test Program"
+echo "Copyright 2024 by Bdale Garbee.  Released under GPL v3"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT v$VERSION powered from USB"
+echo
+
+ret=1
+ao-list | while read product serial dev; do
+    case "$product" in
+       "$PRODUCT-v$VERSION")
+
+           echo "Testing $product $serial $dev"
+           echo ""
+
+           ./test-igniters $dev --rplus=100 --rminus=27 --adcmax=4095 main drogue 3 0 1 2
+           echo""
+
+           echo "Testing baro sensor"
+           ../ao-tools/ao-test-baro/ao-test-baro --tty="$dev"
+
+           case $? in
+               0)
+                   ;;
+               *)
+                   echo "failed"
+                   exit 1
+           esac
+           echo""
+
+           FLASHSIZE=8388608
+
+           echo "Testing flash"
+           ../ao-tools/ao-test-flash/ao-test-flash --tty="$dev" "$FLASHSIZE"
+
+           case $? in
+               0)
+                   ;;
+               *)
+                   echo "failed"
+                   exit 1
+           esac
+           echo""
+
+           echo "$PRODUCT-v$VERSION" serial "$serial" is ready to ship
+           ret=0
+           ;;
+    esac
+done
diff --git a/ao-bringup/test-easymini-v2.0 b/ao-bringup/test-easymini-v2.0
new file mode 100755 (executable)
index 0000000..7850b55
--- /dev/null
@@ -0,0 +1,62 @@
+#!/bin/bash
+
+VERSION=2.0
+PRODUCT=EasyMini
+BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
+
+echo "$PRODUCT-v$VERSION Test Program"
+echo "Copyright 2014 by Keith Packard.  Released under GPL v2"
+echo
+echo "Expectations:"
+echo -e "\t$PRODUCT v$VERSION powered from USB"
+echo
+
+found=0
+while [ $found -eq 0 ]; do
+    (ao-list; echo END END END END) | while read product serial dev; do
+       case "$product" in
+           "$PRODUCT-v$VERSION")
+
+               found=1
+               echo -e '\e[34m'Testing $product $serial $dev'\e[39m'
+               echo ""
+               
+               ./test-igniters "$dev" drogue main
+               echo ""
+
+               echo "Testing baro sensor"
+               ../ao-tools/ao-test-baro/ao-test-baro --tty="$dev"
+
+               if [ $? -ne 0 ]; then
+                   echo -e '\e[31m'"$PRODUCT-$VERSION serial $serial failed"'\e[39m'
+                   exit 1
+               fi
+               echo""
+
+               FLASHSIZE=1048576
+
+               echo "Testing flash"
+               ../ao-tools/ao-test-flash/ao-test-flash --tty="$dev" "$FLASHSIZE"
+
+               if [ $? -ne 0 ]; then
+                   echo -e '\e[31m'"$PRODUCT-$VERSION serial $serial failed"'\e[39m'
+                   exit 1
+               fi
+
+               echo ""
+
+               echo -e '\e[32m'"$PRODUCT-v$VERSION" serial "$serial" is ready to ship'\e[39m'
+               exit 0
+               ;;
+           END)
+               exit 2
+               ;;
+       esac
+    done
+    result=$?
+    if [ $result -ne 2 ]; then
+       exit $result
+    fi
+    echo 'No device, sleeping...'
+    sleep 1
+done
diff --git a/ao-bringup/test-easytimer b/ao-bringup/test-easytimer
deleted file mode 100755 (executable)
index f93164c..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#!/bin/sh
-
-VERSION=1
-PRODUCT=EasyTimer
-BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
-
-echo "$PRODUCT-v$VERSION Test Program"
-echo "Copyright 2020 by Bdale Garbee.  Released under GPL v3"
-echo
-echo "Expectations:"
-echo "\t$PRODUCT v$VERSION powered from USB"
-echo
-
-ret=1
-ao-list | while read product serial dev; do
-    case "$product" in
-       "$PRODUCT-v$VERSION")
-
-           echo "Testing $product $serial $dev"
-
-           ./test-igniters $dev 0 1
-           echo""
-
-           case $? in
-               0)
-                   ;;
-               *)
-                   echo "failed"
-                   exit 1
-           esac
-           echo""
-
-           echo "$PRODUCT-v$VERSION" serial "$serial" is ready to ship
-           echo "\007"
-           ret=0
-           ;;
-    esac
-done
diff --git a/ao-bringup/test-easytimer-v1 b/ao-bringup/test-easytimer-v1
new file mode 100755 (executable)
index 0000000..f93164c
--- /dev/null
@@ -0,0 +1,38 @@
+#!/bin/sh
+
+VERSION=1
+PRODUCT=EasyTimer
+BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
+
+echo "$PRODUCT-v$VERSION Test Program"
+echo "Copyright 2020 by Bdale Garbee.  Released under GPL v3"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT v$VERSION powered from USB"
+echo
+
+ret=1
+ao-list | while read product serial dev; do
+    case "$product" in
+       "$PRODUCT-v$VERSION")
+
+           echo "Testing $product $serial $dev"
+
+           ./test-igniters $dev 0 1
+           echo""
+
+           case $? in
+               0)
+                   ;;
+               *)
+                   echo "failed"
+                   exit 1
+           esac
+           echo""
+
+           echo "$PRODUCT-v$VERSION" serial "$serial" is ready to ship
+           echo "\007"
+           ret=0
+           ;;
+    esac
+done
diff --git a/ao-bringup/test-easytimer-v2 b/ao-bringup/test-easytimer-v2
new file mode 100755 (executable)
index 0000000..023f27b
--- /dev/null
@@ -0,0 +1,51 @@
+#!/bin/sh
+
+VERSION=2
+PRODUCT=EasyTimer
+BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
+
+echo "$PRODUCT-v$VERSION Test Program"
+echo "Copyright 2024 by Bdale Garbee.  Released under GPL v3"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT v$VERSION powered from USB"
+echo
+
+ret=1
+ao-list | while read product serial dev; do
+    case "$product" in
+       "$PRODUCT-v$VERSION")
+
+           echo "Testing $product $serial $dev"
+
+           ./test-igniters $dev 0 1
+           echo""
+
+           case $? in
+               0)
+                   ;;
+               *)
+                   echo "failed"
+                   exit 1
+           esac
+           echo""
+
+
+           FLASHSIZE=1048576
+
+           echo "Testing flash"
+           ../ao-tools/ao-test-flash/ao-test-flash --tty="$dev" "$FLASHSIZE"
+
+           if [ $? -ne 0 ]; then
+               echo -e '\e[31m'"$PRODUCT-$VERSION serial $serial failed"'\e[39m'
+               exit 1
+           fi
+           echo ""
+
+
+           echo "$PRODUCT-v$VERSION" serial "$serial" is ready to ship
+           echo "\007"
+           ret=0
+           ;;
+    esac
+done
deleted file mode 100755 (executable)
index 64180bd3b9a3976fd41649c294f02a5063fb2bd9..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1,79 +0,0 @@
-#!/bin/sh
-
-PRODUCT=EasyMega
-VERSION=2.0
-REPO=~/altusmetrumllc/Binaries
-
-if [ -x /usr/bin/ao-flash-stm ]; then
-       FLASH_STM=/usr/bin/ao-flash-stm
-else
-       echo "Can't find ao-flash-stm!  Aborting."
-       exit 1
-fi
-
-if [ -x /usr/bin/ao-usbload ]; then
-       USBLOAD=/usr/bin/ao-usbload
-else
-       echo "Can't find ao-usbload!  Aborting."
-       exit 1
-fi
-
-echo "$PRODUCT v$VERSION Turn-On and Calibration Program"
-echo "Copyright 2018 by Bdale Garbee.  Released under GPL v2"
-echo
-echo "Expectations:"
-echo "\t$PRODUCT v$VERSION"
-echo "\t\twith USB cable attached"
-echo "\t\twith ST-Link-V2 cabled to debug header"
-echo
-
-case $# in
-    1)
-       SERIAL="$1"
-       echo "$PRODUCT-$VERSION serial number: $SERIAL" 
-       ;;
-    0)
-       echo -n "$PRODUCT-$VERSION serial number: "
-       read SERIAL
-       ;;
-    *)
-       echo "Usage: $0 <serial-number>" 1>&2
-       exit 1;
-       ;;
-esac
-
-echo $FLASH_STM
-
-$FLASH_STM $REPO/loaders/easymega-v$VERSION*.elf
-
-sleep 3
-
-$USBLOAD --serial=$SERIAL $REPO/easymega-v$VERSION*.elf || exit 1
-
-sleep 5
-
-dev=`ao-list | awk '/'"$PRODUCT"'-v'"$VERSION"'/ { print $3; exit(0); }'`
-
-case "$dev" in
-/dev/tty*)
-       echo "$PRODUCT found on $dev"
-       ;;
-*)
-       echo 'No '"$PRODUCT"'-v'"$VERSION"' found'
-       exit 1
-       ;;
-esac
-
-echo 'E 0' > $dev
-
-failed=1
-while [ $failed =  1 ]; do
-    ../ao-tools/ao-cal-accel/ao-cal-accel $dev
-    failed=$?
-done
-
-echo 'E 1' > $dev
-
-./test-easymega
-
-exit $?
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..b4661b042dd92758c69ed50d6d52a7671bb31c5d
--- /dev/null
@@ -0,0 +1 @@
+turnon_easymega_v3.0
\ No newline at end of file
diff --git a/ao-bringup/turnon_easymega_v2.0 b/ao-bringup/turnon_easymega_v2.0
new file mode 100755 (executable)
index 0000000..95b843b
--- /dev/null
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+PRODUCT=EasyMega
+VERSION=2.0
+REPO=~/altusmetrumllc/Binaries
+
+if [ -x /usr/bin/ao-flash-stm ]; then
+       FLASH_STM=/usr/bin/ao-flash-stm
+else
+       echo "Can't find ao-flash-stm!  Aborting."
+       exit 1
+fi
+
+if [ -x /usr/bin/ao-usbload ]; then
+       USBLOAD=/usr/bin/ao-usbload
+else
+       echo "Can't find ao-usbload!  Aborting."
+       exit 1
+fi
+
+echo "$PRODUCT v$VERSION Turn-On and Calibration Program"
+echo "Copyright 2018 by Bdale Garbee.  Released under GPL v2"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT v$VERSION"
+echo "\t\twith USB cable attached"
+echo "\t\twith ST-Link-V2 cabled to debug header"
+echo
+
+case $# in
+    1)
+       SERIAL="$1"
+       echo "$PRODUCT-$VERSION serial number: $SERIAL" 
+       ;;
+    0)
+       echo -n "$PRODUCT-$VERSION serial number: "
+       read SERIAL
+       ;;
+    *)
+       echo "Usage: $0 <serial-number>" 1>&2
+       exit 1;
+       ;;
+esac
+
+echo $FLASH_STM
+
+$FLASH_STM $REPO/loaders/easymega-v$VERSION*.elf
+
+sleep 3
+
+$USBLOAD --serial=$SERIAL $REPO/easymega-v$VERSION*.elf || exit 1
+
+sleep 5
+
+dev=`ao-list | awk '/'"$PRODUCT"'-v'"$VERSION"'/ { print $3; exit(0); }'`
+
+case "$dev" in
+/dev/tty*)
+       echo "$PRODUCT found on $dev"
+       ;;
+*)
+       echo 'No '"$PRODUCT"'-v'"$VERSION"' found'
+       exit 1
+       ;;
+esac
+
+echo 'E 0' > $dev
+
+failed=1
+while [ $failed =  1 ]; do
+    ../ao-tools/ao-cal-accel/ao-cal-accel $dev
+    failed=$?
+done
+
+echo 'E 1' > $dev
+
+./test-easymega-v2.0
+
+exit $?
diff --git a/ao-bringup/turnon_easymega_v3.0 b/ao-bringup/turnon_easymega_v3.0
new file mode 100755 (executable)
index 0000000..59d06ba
--- /dev/null
@@ -0,0 +1,65 @@
+#!/bin/sh
+
+PRODUCT=EasyMega
+VERSION=3.0
+REPO=~/altusmetrumllc/Binaries
+
+if [ -x /usr/bin/ao-usbload ]; then
+       USBLOAD=/usr/bin/ao-usbload
+else
+       echo "Can't find ao-usbload!  Aborting."
+       exit 1
+fi
+
+echo "$PRODUCT v$VERSION Turn-On and Calibration Program"
+echo "Copyright 2024 by Bdale Garbee.  Released under GPL v3"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT v$VERSION"
+echo "\t\twith USB cable attached"
+echo
+
+case $# in
+    1)
+       SERIAL="$1"
+       echo "$PRODUCT-$VERSION serial number: $SERIAL" 
+       ;;
+    0)
+       echo -n "$PRODUCT-$VERSION serial number: "
+       read SERIAL
+       ;;
+    *)
+       echo "Usage: $0 <serial-number>" 1>&2
+       exit 1;
+       ;;
+esac
+
+$USBLOAD --serial=$SERIAL $REPO/easymega-v$VERSION*.elf || exit 1
+
+sleep 5
+
+dev=`ao-list | awk '/'"$PRODUCT"'-v'"$VERSION"'/ { print $3; exit(0); }'`
+
+case "$dev" in
+/dev/tty*)
+       echo "$PRODUCT found on $dev"
+       ;;
+*)
+       echo 'No '"$PRODUCT"'-v'"$VERSION"' found'
+       exit 1
+       ;;
+esac
+
+echo 'E 0' > $dev
+
+failed=1
+while [ $failed =  1 ]; do
+    ../ao-tools/ao-cal-accel/ao-cal-accel $dev
+    failed=$?
+done
+
+echo 'E 1' > $dev
+
+./test-easymega-v3.0
+
+exit $?
deleted file mode 100755 (executable)
index 1960c4d679d314529b58a8bcaf6b7524a46409b0..0000000000000000000000000000000000000000
+++ /dev/null
@@ -1,69 +0,0 @@
-#!/bin/sh
-
-if [ -x ../ao-tools/ao-flash/ao-flash-lpc ]; then
-       FLASH_LPC=../ao-tools/ao-flash/ao-flash-lpc
-elif [ -x /usr/bin/ao-flash-lpc ]; then
-       FLASH_LPC=/usr/bin/ao-flash-lpc
-else
-       echo "Can't find ao-flash-lpc!  Aborting."
-       exit 1
-fi
-
-if [ -x ../ao-tools/ao-usbload/ao-usbload ]; then
-       USBLOAD=../ao-tools/ao-usbload/ao-usbload
-elif [ -x /usr/bin/ao-usbload ]; then
-       USBLOAD=/usr/bin/ao-usbload
-else
-       echo "Can't find ao-usbload!  Aborting."
-       exit 1
-fi
-
-VERSION=3.0
-PRODUCT=EasyMini
-BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
-echo $FILE
-
-echo "$PRODUCT v$VERSION Turn-On and Calibration Program"
-echo "Copyright 2022 by Bdale Garbee.  Released under GPL v3"
-echo
-echo "Expectations:"
-echo "\t$PRODUCT v$VERSION powered from USB"
-echo "\t\twith ST-Link-V2 cabled to debug header"
-echo
-
-case $# in
-    1)
-       SERIAL="$1"
-       echo "$PRODUCT-$VERSION serial number: $SERIAL" 
-       ;;
-    0)
-       echo -n "$PRODUCT-$VERSION serial number: "
-       read SERIAL
-       ;;
-    *)
-       echo "Usage: $0 <serial-number>" 1>&2
-       exit 1;
-       ;;
-esac
-
-#
-# Use released versions of everything
-#
-FLASH_FILE=~/altusmetrumllc/Binaries/loaders/easymini-v3.0-altos-flash-*.elf
-ALTOS_FILE=~/altusmetrumllc/Binaries/easymini-v3.0-*.elf
-
-echo $FLASH_LPC $FLASH_FILE
-
-$FLASH_LPC $FLASH_FILE || exit 1
-
-sleep 1
-
-echo $USBLOAD $ALTOS_FILE
-
-$USBLOAD --serial=$SERIAL $ALTOS_FILE || exit 1
-
-sleep 1
-
-./test-easymini-v3.0
-
-exit $?
new file mode 120000 (symlink)
index 0000000000000000000000000000000000000000..e817720c21dde6abb7a3f35509ace07e291ad8cc
--- /dev/null
@@ -0,0 +1 @@
+turnon_easymini_v2.0
\ No newline at end of file
diff --git a/ao-bringup/turnon_easymini_v2.0 b/ao-bringup/turnon_easymini_v2.0
new file mode 100755 (executable)
index 0000000..3d883b3
--- /dev/null
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+#if [ -x /usr/bin/dfu-util ]; then
+#    DFU_UTIL=/usr/bin/dfu-util
+#else
+#    echo "Can't find dfu-util! Aborting."
+#    exit 1
+#fi
+
+if [ -x ../ao-tools/ao-usbload/ao-usbload ]; then
+       USBLOAD=../ao-tools/ao-usbload/ao-usbload
+elif [ -x /usr/bin/ao-usbload ]; then
+       USBLOAD=/usr/bin/ao-usbload
+else
+       echo "Can't find ao-usbload!  Aborting."
+       exit 1
+fi
+
+VERSION=2.0
+PRODUCT=EasyMini
+BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
+echo $FILE
+
+echo "$PRODUCT v$VERSION Turn-On and Calibration Program"
+echo "Copyright 2024 by Bdale Garbee.  Released under GPL v2+"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT v$VERSION powered and connected to USB"
+echo
+
+case $# in
+    1)
+       SERIAL="$1"
+       echo "$PRODUCT-$VERSION serial number: $SERIAL" 
+       ;;
+    0)
+       echo -n "$PRODUCT-$VERSION serial number: "
+       read SERIAL
+       ;;
+    *)
+       echo "Usage: $0 <serial-number>" 1>&2
+       exit 1;
+       ;;
+esac
+
+#
+# Use released versions of everything
+#
+#FLASH_FILE=~/altusmetrumllc/Binaries/loaders/easymini-v2.0-altos-flash-*.bin
+ALTOS_FILE=~/altusmetrumllc/Binaries/easymini-v2.0-*.elf
+
+#FLASH_FILE=../src/$BASE-v$VERSION/flash-loader/$BASE-v$VERSION-altos-flash-*.elf
+#ALTOS_FILE=../src/$BASE-v$VERSION/*.ihx
+
+#echo $DFU_UTIL -a 0 -s 0x08000000:leave -D $FLASH_FILE
+
+#$DFU_UTIL -a 0 -s 0x08000000:leave -D $FLASH_FILE || exit 1
+
+#sleep 2
+
+echo $USBLOAD $ALTOS_FILE
+
+$USBLOAD --serial=$SERIAL $ALTOS_FILE || exit 1
+
+sleep 1
+
+./test-easymini-v2.0
+
+exit $?
diff --git a/ao-bringup/turnon_easymini_v3.0 b/ao-bringup/turnon_easymini_v3.0
new file mode 100755 (executable)
index 0000000..1960c4d
--- /dev/null
@@ -0,0 +1,69 @@
+#!/bin/sh
+
+if [ -x ../ao-tools/ao-flash/ao-flash-lpc ]; then
+       FLASH_LPC=../ao-tools/ao-flash/ao-flash-lpc
+elif [ -x /usr/bin/ao-flash-lpc ]; then
+       FLASH_LPC=/usr/bin/ao-flash-lpc
+else
+       echo "Can't find ao-flash-lpc!  Aborting."
+       exit 1
+fi
+
+if [ -x ../ao-tools/ao-usbload/ao-usbload ]; then
+       USBLOAD=../ao-tools/ao-usbload/ao-usbload
+elif [ -x /usr/bin/ao-usbload ]; then
+       USBLOAD=/usr/bin/ao-usbload
+else
+       echo "Can't find ao-usbload!  Aborting."
+       exit 1
+fi
+
+VERSION=3.0
+PRODUCT=EasyMini
+BASE=`echo $PRODUCT | tr 'A-Z' 'a-z'`
+echo $FILE
+
+echo "$PRODUCT v$VERSION Turn-On and Calibration Program"
+echo "Copyright 2022 by Bdale Garbee.  Released under GPL v3"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT v$VERSION powered from USB"
+echo "\t\twith ST-Link-V2 cabled to debug header"
+echo
+
+case $# in
+    1)
+       SERIAL="$1"
+       echo "$PRODUCT-$VERSION serial number: $SERIAL" 
+       ;;
+    0)
+       echo -n "$PRODUCT-$VERSION serial number: "
+       read SERIAL
+       ;;
+    *)
+       echo "Usage: $0 <serial-number>" 1>&2
+       exit 1;
+       ;;
+esac
+
+#
+# Use released versions of everything
+#
+FLASH_FILE=~/altusmetrumllc/Binaries/loaders/easymini-v3.0-altos-flash-*.elf
+ALTOS_FILE=~/altusmetrumllc/Binaries/easymini-v3.0-*.elf
+
+echo $FLASH_LPC $FLASH_FILE
+
+$FLASH_LPC $FLASH_FILE || exit 1
+
+sleep 1
+
+echo $USBLOAD $ALTOS_FILE
+
+$USBLOAD --serial=$SERIAL $ALTOS_FILE || exit 1
+
+sleep 1
+
+./test-easymini-v3.0
+
+exit $?
index 4678430d1498fcdff9b22afd54b64b0c5dfdea02..8528a7e726096f894e796def7e795074874984d8 100755 (executable)
@@ -46,7 +46,6 @@ case $# in
        exit 1;
        ;;
 esac
-otootor
 #
 # Use released versions of everything
 #
index 8953f90045f02017b4063af8922b89f14385d92d..da78cbb6190e59cba34198b28110834eaccffddf 100755 (executable)
@@ -1,11 +1,7 @@
 #!/bin/sh
 
-if [ -x /usr/bin/ao-flash-stm ]; then
-       FLASH_STM=/usr/bin/ao-flash-stm
-else
-       echo "Can't find ao-flash-stm!  Aborting."
-       exit 1
-fi
+# EasyTimer v2 all arrive from the assembler with 
+# the bootloader already flashed. 
 
 if [ -x /usr/bin/ao-usbload ]; then
        USBLOAD=/usr/bin/ao-usbload
@@ -14,16 +10,15 @@ else
        exit 1
 fi
 
-VERSION=1
+VERSION=2
 REPO=~/altusmetrumllc/Binaries
 PRODUCT=EasyTimer
 
 echo "$PRODUCT v$VERSION Turn-On and Calibration Program"
-echo "Copyright 2020 by Bdale Garbee.  Released under GPL v3"
+echo "Copyright 2024 by Bdale Garbee.  Released under GPL v3"
 echo
 echo "Expectations:"
 echo "\t$PRODUCT v$VERSION powered from USB"
-echo "\t\twith ST-Link-V2 cabled to debug header"
 echo
 
 case $# in
@@ -41,12 +36,6 @@ case $# in
        ;;
 esac
 
-echo $FLASH_STM
-
-$FLASH_STM $REPO/loaders/easytimer-v$VERSION*.elf 
-
-sleep 3
-
 $USBLOAD --serial=$SERIAL --force $REPO/easytimer-v$VERSION*.elf || exit 1
 
 sleep 5
@@ -73,6 +62,6 @@ done
 
 echo 'E 1' > $dev
 
-./test-easytimer
+./test-easytimer-v2
 
 exit $?
diff --git a/ao-bringup/turnon_easytimer_v1 b/ao-bringup/turnon_easytimer_v1
new file mode 100755 (executable)
index 0000000..8953f90
--- /dev/null
@@ -0,0 +1,78 @@
+#!/bin/sh
+
+if [ -x /usr/bin/ao-flash-stm ]; then
+       FLASH_STM=/usr/bin/ao-flash-stm
+else
+       echo "Can't find ao-flash-stm!  Aborting."
+       exit 1
+fi
+
+if [ -x /usr/bin/ao-usbload ]; then
+       USBLOAD=/usr/bin/ao-usbload
+else
+       echo "Can't find ao-usbload!  Aborting."
+       exit 1
+fi
+
+VERSION=1
+REPO=~/altusmetrumllc/Binaries
+PRODUCT=EasyTimer
+
+echo "$PRODUCT v$VERSION Turn-On and Calibration Program"
+echo "Copyright 2020 by Bdale Garbee.  Released under GPL v3"
+echo
+echo "Expectations:"
+echo "\t$PRODUCT v$VERSION powered from USB"
+echo "\t\twith ST-Link-V2 cabled to debug header"
+echo
+
+case $# in
+    1)
+       SERIAL="$1"
+       echo "$PRODUCT-$VERSION serial number: $SERIAL" 
+       ;;
+    0)
+       echo -n "$PRODUCT-$VERSION serial number: "
+       read SERIAL
+       ;;
+    *)
+       echo "Usage: $0 <serial-number>" 1>&2
+       exit 1;
+       ;;
+esac
+
+echo $FLASH_STM
+
+$FLASH_STM $REPO/loaders/easytimer-v$VERSION*.elf 
+
+sleep 3
+
+$USBLOAD --serial=$SERIAL --force $REPO/easytimer-v$VERSION*.elf || exit 1
+
+sleep 5
+
+dev=`ao-list | awk '/EasyTimer-v'"$VERSION"'/ { print $3; exit(0); }'`
+
+case "$dev" in
+/dev/tty*)
+       echo "EasyTimer found on $dev"
+       ;;
+*)
+       echo 'No EasyTimer-v'"$VERSION"' found'
+       exit 1
+       ;;
+esac
+
+echo 'E 0' > $dev
+
+failed=1
+while [ $failed = 1 ]; do
+    ../ao-tools/ao-cal-accel/ao-cal-accel $dev
+    failed=$?
+done
+
+echo 'E 1' > $dev
+
+./test-easytimer
+
+exit $?
index 671e4ba53925b9e6f05a9c398c45a22fe855da57..1272efecc37fea2a3528e7eb15d85cc4a24df1d1 100644 (file)
@@ -80,7 +80,7 @@ static struct flash *
 flash(struct cc_usb *usb)
 {
        struct flash    *head = NULL, **tail = &head;
-       cc_usb_printf(usb, "c s\nv\n");
+       cc_usb_printf(usb, "c s\nA\nv\n");
        for (;;) {
                char    line[512];
                struct flash    *b;
@@ -125,6 +125,7 @@ static int
 do_cal(struct cc_usb *usb) {
        struct flash    *b;
        char    **accel;
+       char    **sensor;
        char    line[1024];
        int     l = 0;
        int     running = 0;
@@ -172,6 +173,35 @@ do_cal(struct cc_usb *usb) {
        printf ("Accel cal +1g: %s -1g: %s\n",
                accel[3], accel[5]);
 
+       sensor = find_flash(b, "ADXL375");
+
+       if (sensor) {
+               char    *plus_end = NULL, *minus_end = NULL;
+               long    accel_plus = strtol(accel[3], &plus_end, 10);
+               long    accel_minus = strtol(accel[5], &minus_end, 10);
+               double  one_g;
+
+               if (plus_end == NULL || plus_end == accel[3]) {
+                       printf("can't extract plus value from %s\n", accel[3]);
+                       return 0;
+               }
+
+               if (minus_end == NULL || minus_end == accel[5]) {
+                       printf("can't extract minus value from %s\n", accel[5]);
+                       return 0;
+               }
+               one_g = (accel_minus - accel_plus) / 2.0;
+               if (one_g < 0)
+                       one_g = -one_g;
+
+               if (one_g < 18 || 23 < one_g) {
+                       printf("Device out of spec. LSB/g is %g. Should be >= 18.4 and <= 22.6\n", one_g);
+                       return 0;
+               }
+
+               printf("Device sensitivity: %g LSB/g\n", one_g);
+       }
+
        printf ("Saving..."); fflush(stdout);
        cc_usb_printf (usb, "c w\n");
        cc_usb_sync(usb);
index 998cda30a02c8de3eaf11e09634b7dcbf421b118..78f6029a35f094ce335fc5e26e0955549aed68b1 100644 (file)
@@ -18,13 +18,13 @@ dnl
 dnl Process this file with autoconf to create configure.
 
 AC_PREREQ(2.57)
-AC_INIT([altos], 1.9.18)
+AC_INIT([altos], 1.9.19)
 ANDROID_VERSION=37
 AC_CONFIG_SRCDIR([src/kernel/ao.h])
 AM_INIT_AUTOMAKE([foreign dist-bzip2])
 AM_MAINTAINER_MODE
 
-RELEASE_DATE=2024-04-28
+RELEASE_DATE=2024-08-02
 AC_SUBST(RELEASE_DATE)
 
 DOC_DATE=`LC_ALL=C date -d $RELEASE_DATE +'%d %b %Y'`
index 2ddfec488dd6b64e036df77710961f74fc3584ac..56f8730283c9134856f4e0784cb2ed44c541a9ce 100644 (file)
@@ -17,6 +17,7 @@ FAKETIME=TZ=UTC faketime -f '$(RELEASE_DATE) 00:00:00 i0'
 endif
 
 RELNOTES_INC=\
+       release-notes-1.9.19.inc \
        release-notes-1.9.18.inc \
        release-notes-1.9.17.inc \
        release-notes-1.9.16.inc \
index 3871d338ea4c58b9035f6e70e57b830527dd1350..14eba9dc772f18a7d4b353c0736631792a3186d4 100644 (file)
@@ -1,5 +1,9 @@
 [appendix]
 == Release Notes
+       :leveloffset: 2
+       include::release-notes-1.9.19.adoc[]
+
+       <<<<
        :leveloffset: 2
        include::release-notes-1.9.18.adoc[]
 
index a95247a2ff81c1723ec1170e086418329770e3dc..12615cdc7ab89cdd19573b5cef21e2e6a553e5c9 100644 (file)
@@ -14,7 +14,7 @@
        aren't answered in this manual, or just need a little help figuring
        things out, we strongly suggest joining the Altus Metrum user email
        list, which you can do by visiting 
-       https://lists.gag.com/mailman/listinfo/altusmetrum.  There's a lot
+       https://groups.io/g/altusmetrum.  There's a lot
        of useful information in the mailing list archives!
 
        The first device created for our community was TeleMetrum, a dual
index 85776a25463544baa5f7ee9390b71229678d0276..51408b444d82cd59318dc6ea23fafa503239d1d7 100644 (file)
@@ -23,5 +23,5 @@ Because documentation is just as prone as software to contain “bugs”, and
 can always be improved… If you have questions that aren't answered in this 
 manual, or just need a little help figuring things out, we strongly suggest 
 joining the Altus Metrum user email list, which you can do by visiting 
-https://lists.gag.com/mailman3.
+https://groups.io/g/altusmetrum.
 
index 6371ae04c49301f62ad1d72824e25aadb1032a2f..958a0cad66a668782a09b74b901c24639bc5b193 100644 (file)
@@ -5,12 +5,16 @@
        checklist after the rocket is installed on a launch rail.
 
        The board will beep out a Morse code “P” every few seconds
-       indicating that it's in pad mode and ready to detect launch.
-       Once launch is detected, the board logs pressure and acceleration
-       data 100 times per second throughout the flight.
+       indicating that it's in pad mode and ready to detect the start of
+       the motor burn.  Recording starts when chamber pressure rises by
+       at least 50psi, then the board logs pressure and acceleration
+       data 100 times per second until chamber pressure goes low again and
+       remains stable for at least 10 seconds.
 
-       After flight, AltosUI can be used to download the flight data,
-       view a quick graph of acceleration and pressure with pan and
+       After flight, attach a USB data cable to the board before powering
+       it on so that it goes in to 'idle mode'.  Then AltosUI can be used 
+       to download the flight data, view a quick graph of acceleration and 
+       pressure with pan and
        zoom capabilities, then export it to a comma separated values 
        (CSV) file. Such a file can easily be loaded into a spreadsheet 
-       for analysis.
+       for analysis. 
diff --git a/doc/release-notes-1.9.19.inc b/doc/release-notes-1.9.19.inc
new file mode 100644 (file)
index 0000000..f346f60
--- /dev/null
@@ -0,0 +1,14 @@
+= Release Notes for Version 1.9.19
+include::release-head.adoc[]
+:doctype: article
+
+       Version 1.9.19
+
+       == AltOS
+       
+       * Finish support for EasyMega V3.
+
+       == AltosUI & TeleGPS application
+
+       * Show device configuration information when graphing a
+          flight.
index 7b98ceafb5f70545f9a9a8f21d029a37aa9a64c0..dba3f7086811b98af0f5a469edbacb87f81dd73b 100644 (file)
@@ -1,5 +1,9 @@
 [appendix]
 == Release Notes
+       :leveloffset: 2
+       include::release-notes-1.9.19.adoc[]
+
+       <<<<
        :leveloffset: 2
        include::release-notes-1.9.18.adoc[]
 
index 3e02e5e3580ce606915526f40230b6d8fe11e375..464fdc6735e43e6f5895d7cc74f14614f9f74b29 100644 (file)
        |-
        |24g
        |-
-       |BMI088
+       |BMI088 MMC5983
        |1MB
        |-
        |3.7-12V
        |-
        |8MB
        |-
-       |6.5-15V
+       |3.7V
        endif::easymotor[]
        
        
index 888e3891c6479941bba2276c6719e1cba5d6016a..656ed8e42a756a1bbfab56699a8e026821fe765e 100644 (file)
                have an
                accelerometer we can use to determine orientation, “idle” mode
                is selected if the board is connected via USB to a computer,
-               otherwise the board enters “flight” mode.
+               otherwise the board enters “flight” mode.  This is also how
+               EasyMotor works, since even though it has an accelerometer,
+               it detects the motor burn it is meant to record by detecting\ e\ 1          a rise in chamber pressure, and board orientation doesn't 
+               matter.
                ifdef::telemini[]
                TeleMini
                selects “idle” mode if it receives a command packet
index f6c75e240ed0bf33fa1135f7968d8561e12a9be8..0448dd95577b6268beb1b8b40ebc95569923e8db 100644 (file)
@@ -1,5 +1,9 @@
 [appendix]
 == Release Notes
+       :leveloffset: 2
+       include::release-notes-1.9.19.adoc[]
+
+       <<<<
        :leveloffset: 2
        include::release-notes-1.9.18.adoc[]
 
index 4a0f06ab9d35f09b7aba1a2c707acd511d783677..d4bd897a2cba7107ac5181b557a05dc5f6d91294 100644 (file)
@@ -1,7 +1,8 @@
 [dedication]
 == Acknowledgments
 
-       Our profound thanks to Terry Lee for major contributions to making 
+       Our profound thanks to Terry Lee (TRA #10206, NAR #3284) for major
+        contributions to making
        the TeleLaunch system something we could actually package and sell!
 
        Tripoli Colorado, Oregon Rocketry, New River Valley Rocketry, and 
index bfd67a49da0479ff69e7bfd876d70be1bae7a334..c93c19f32085b2ebd63ba8e327c6edfc82bacae5 100644 (file)
@@ -23,5 +23,5 @@ Because documentation is just as prone as software to contain "bugs", and
 can always be improved...  If you have questions that aren't answered in this 
 manual, or just need a little help figuring things out, we strongly suggest 
 joining the Altus Metrum user email list, which you can do by visiting 
-https://lists.gag.com/mailman/listinfo/altusmetrum.
+https://groups.io/g/altusmetrum.
 
index c89ac0e0b52ea36094529a9c04fe10881eb21370..b3a3066c34dab114b6dcac5791eada88f6d87005 100644 (file)
@@ -63,7 +63,7 @@ ARMM0DIRS=\
 AVRDIRS=\
        micropeak microkite microsplash
 
-SUBDIRS=draw
+SUBDIRS=draw test
 
 ifeq ($(strip $(HAVE_ARM_M3_CC)),yes)
 SUBDIRS+=$(ARMM3DIRS)
index 70bf92a5f1fb72e6a44d0f711de58623a711a222..4366e302fa0e9802cf2519623fb17e1beaec3128 100644 (file)
@@ -102,11 +102,14 @@ struct ao_adxl375_total {
 
 #define AO_ADXL375_SELF_TEST_SAMPLES   10
 #define AO_ADXL375_SELF_TEST_SETTLE    4
+#define AO_ADXL375_SELF_TEST_DELAY     AO_MS_TO_TICKS(10)
 
 #define MIN_LSB_G      18.4
 #define MAX_LSB_G      22.6
-#define SELF_TEST_MIN_G        5.0
-#define SELF_TEST_MAX_G        6.8
+
+/* The self test value can vary within a rather wide range */
+#define SELF_TEST_MIN_G        4.0
+#define SELF_TEST_MAX_G        12.0
 
 #define MIN_SELF_TEST  ((int32_t) (MIN_LSB_G * SELF_TEST_MIN_G * AO_ADXL375_SELF_TEST_SAMPLES + 0.5))
 #define MAX_SELF_TEST  ((int32_t) (MAX_LSB_G * SELF_TEST_MAX_G * AO_ADXL375_SELF_TEST_SAMPLES + 0.5))
@@ -122,7 +125,7 @@ ao_adxl375_total_value(struct ao_adxl375_total *total, int samples)
                total->x += value.x;
                total->y += value.y;
                total->z += value.z;
-               ao_delay(AO_MS_TO_TICKS(10));
+               ao_delay(AO_ADXL375_SELF_TEST_DELAY);
        }
 }
 
@@ -174,6 +177,11 @@ ao_adxl375_setup(void)
                             (0 << AO_ADXL375_POWER_CTL_SLEEP) |
                             (AO_ADXL375_POWER_CTL_WAKEUP_8 << AO_ADXL375_POWER_CTL_WAKEUP));
 
+       /* Set to normal mode */
+
+       ao_adxl375_reg_write(AO_ADXL375_DATA_FORMAT,
+                            AO_ADXL375_DATA_FORMAT_SETTINGS(0));
+
        /* Perform self-test */
 
        struct ao_adxl375_total self_test_off, self_test_on;
@@ -208,13 +216,9 @@ ao_adxl375_setup(void)
        if (z_change < MIN_SELF_TEST)
                AO_SENSOR_ERROR(AO_DATA_ADXL375);
 
-       /* This check is commented out as maximum self test is unreliable
-
-          if (z_change > MAX_SELF_TEST)
+       if (z_change > MAX_SELF_TEST)
                AO_SENSOR_ERROR(AO_DATA_ADXL375);
 
-       */
-
        /* Discard some samples to let it settle down */
        ao_adxl375_total_value(&self_test_off, AO_ADXL375_SELF_TEST_SETTLE);
 }
index 176f83837898e48366f28ce19f66e18f2af7880b..47d587bb046f9076564ac57186a374a1bc7cb378 100644 (file)
@@ -47,35 +47,45 @@ extern uint8_t      ao_lco_firing;          /* fire button pressed */
 extern struct ao_pad_query     ao_pad_query;   /* Last received QUERY from pad */
 
 #ifdef AO_LCO_DRAG_RACE_BOX
-#define AO_LCO_BOX_DRAG                0               /* Box number to enable drag race mode (old LCO bits) */
-#define AO_LCO_BOX_FIRST       AO_LCO_BOX_DRAG
+# define AO_LCO_BOX_DRAG       0               /* Box number to enable drag race mode (old LCO bits) */
+# define AO_LCO_BOX_FIRST      AO_LCO_BOX_DRAG
 #else
-# define AO_LCO_LCO_VOLTAGE    0               /* Box number to show LCO voltage */
-# ifdef AO_LCO_HAS_INFO
-#  define AO_LCO_INFO          -3
+# ifdef AO_LCO_HAS_CONTRAST
+#  define AO_LCO_CONTRAST      -2
 #  ifndef AO_LCO_BOX_FIRST
-#   define AO_LCO_BOX_FIRST AO_LCO_INFO
+#   define AO_LCO_BOX_FIRST    AO_LCO_CONTRAST
 #  endif
 # endif
-# ifdef AO_LCO_HAS_BACKLIGHT
-#   define AO_LCO_BACKLIGHT    -2
-#   ifndef AO_LCO_BOX_FIRST
-#    define AO_LCO_BOX_FIRST AO_LCO_BACKLIGHT
-#   endif
+# ifdef AO_LCO_HAS_BACKLIGHT_UI
+#  define AO_LCO_BACKLIGHT     -1
+#  ifndef AO_LCO_BOX_FIRST
+#   define AO_LCO_BOX_FIRST    AO_LCO_BACKLIGHT
+#  endif
 # endif
-# ifdef AO_LCO_HAS_CONTRAST
-#  define AO_LCO_CONTRAST      -1
+# if AO_LCO_HAS_LCO_INFO
+#  define AO_LCO_LCO_INFO      0               /* Box number to show LCO info */
 #  ifndef AO_LCO_BOX_FIRST
-#   define AO_LCO_BOX_FIRST    AO_LCO_CONTRAST
+#   define AO_LCO_BOX_FIRST    AO_LCO_LCO_INFO
+#  endif
+# else
+#  define AO_LCO_LCO_VOLTAGE   -1
+#  ifndef AO_LCO_BOX_FIRST
+#   define AO_LCO_BOX_FIRST    AO_LCO_LCO_VOLTAGE
 #  endif
 # endif
 # ifndef AO_LCO_BOX_FIRST
-#  define AO_LCO_BOX_FIRST     AO_LCO_LCO_VOLTAGE
+#  define AO_LCO_BOX_FIRST     1
 # endif
 #endif
-#define AO_LCO_PAD_VOLTAGE     0               /* Pad number to show box voltage */
-#define AO_LCO_PAD_RSSI                -1              /* Pad number to show box RSSI */
-#define AO_LCO_PAD_FIRST       AO_LCO_PAD_RSSI
+
+#ifdef AO_LCO_HAS_PAD_INFO
+# define AO_LCO_PAD_INFO       0               /* Pad number to show box info */
+# define AO_LCO_PAD_FIRST      AO_LCO_PAD_INFO
+#else
+# define AO_LCO_PAD_VOLTAGE    0               /* Pad number to show box voltage */
+# define AO_LCO_PAD_RSSI       -1              /* Pad number to show box RSSI */
+# define AO_LCO_PAD_FIRST      AO_LCO_PAD_RSSI
+#endif
 
 static inline bool
 ao_lco_box_pseudo(int16_t box)
@@ -97,8 +107,8 @@ ao_lco_box_pseudo(int16_t box)
        case AO_LCO_BACKLIGHT:
                return true;
 #endif
-#ifdef AO_LCO_INFO
-       case AO_LCO_INFO:
+#ifdef AO_LCO_LCO_INFO
+       case AO_LCO_LCO_INFO:
                return true;
 #endif
        default:
@@ -110,10 +120,18 @@ static inline bool
 ao_lco_pad_pseudo(int8_t pad)
 {
        switch (pad) {
+#ifdef AO_LCO_PAD_VOLTAGE
        case AO_LCO_PAD_VOLTAGE:
                return true;
+#endif
+#ifdef AO_LCO_PAD_RSSI
        case AO_LCO_PAD_RSSI:
                return true;
+#endif
+#ifdef AO_LCO_PAD_INFO
+       case AO_LCO_PAD_INFO:
+               return true;
+#endif
        default:
                return false;
        }
index ebe3d0cb2989b12ca59ca15fefd4ab2081a9dea7..0d922d6e85d340339ca3f5c9da1f1a24b37e2403 100644 (file)
@@ -38,6 +38,8 @@ static uint8_t                ao_lco_channels[AO_PAD_MAX_BOXES];      /* pad channels available on
 static uint16_t                ao_lco_tick_offset[AO_PAD_MAX_BOXES];   /* 16 bit offset from local to remote tick count */
 static uint8_t         ao_lco_selected[AO_PAD_MAX_BOXES];      /* pads selected to fire */
 
+static uint32_t                ao_lco_query_good, ao_lco_query_bad;
+
 uint8_t                ao_lco_valid[AO_PAD_MAX_BOXES];         /* AO_LCO_VALID bits per box */
 
 static const AO_LED_TYPE       continuity_led[AO_LED_CONTINUITY_NUM] = {
@@ -171,9 +173,14 @@ ao_lco_get_channels(int16_t box, struct ao_pad_query *query)
        if (r == AO_RADIO_CMAC_OK) {
                ao_lco_channels[box] = query->channels;
                ao_lco_valid[box] = AO_LCO_VALID_LAST | AO_LCO_VALID_EVER;
-       } else
+               ++ao_lco_query_good;
+       } else {
                ao_lco_valid[box] &= (uint8_t) ~AO_LCO_VALID_LAST;
-       PRINTD("ao_lco_get_channels(%d) rssi %d valid %d ret %d offset %d\n", box, ao_radio_cmac_rssi, ao_lco_valid[box], r, ao_lco_tick_offset[box]);
+               ++ao_lco_query_bad;
+       }
+       PRINTD("ao_lco_get_channels(%d) rssi %d valid %d ret %d offset %d good %"PRIu32" bad %"PRIu32"\n",
+              box, ao_radio_cmac_rssi, ao_lco_valid[box], r, ao_lco_tick_offset[box],
+              ao_lco_query_good, ao_lco_query_bad);
        ao_wakeup(&ao_pad_query);
        return ao_lco_valid[box];
 }
@@ -193,9 +200,9 @@ ao_lco_update(void)
                        if (!ao_lco_pad_pseudo(ao_lco_pad))
                                ao_lco_set_pad(ao_lco_pad_first(ao_lco_box));
                }
-               if (ao_lco_pad_pseudo(ao_lco_pad))
-                       ao_lco_show();
        }
+       if (ao_lco_pad_pseudo(ao_lco_pad))
+               ao_lco_show();
 }
 
 uint8_t        ao_lco_box_mask[AO_LCO_MASK_SIZE(AO_PAD_MAX_BOXES)];
@@ -266,7 +273,7 @@ ao_lco_step_pad(int8_t dir)
                break;
        }
 #endif
-#ifdef AO_LCO_HAS_BACKLIGHT
+#ifdef AO_LCO_HAS_BACKLIGHT_UI
        case AO_LCO_BACKLIGHT: {
                int32_t backlight = ao_lco_get_backlight();
 
@@ -282,8 +289,8 @@ ao_lco_step_pad(int8_t dir)
                break;
        }
 #endif
-#ifdef AO_LCO_HAS_INFO
-       case AO_LCO_INFO: {
+#if AO_LCO_HAS_LCO_INFO
+       case AO_LCO_LCO_INFO: {
 #if AO_LCO_MIN_INFO_PAGE < AO_LCO_MAX_INFO_PAGE
                int32_t info_page = ao_lco_get_info_page();
 
index c145b83b2a8557990416a6e64393e4c0fde40a56..f745e45ed1d16c6794d8bef703bfb19e3018a60d 100644 (file)
@@ -84,17 +84,33 @@ CFLAGS = $(PRODUCT_DEF) $(STM32F1_CFLAGS)
 PROGNAME=easymega-v3.0
 PROG=$(PROGNAME)-$(VERSION).elf
 HEX=$(PROGNAME)-$(VERSION).ihx
+FLASH_PROG=flash-loader/$(PROGNAME)-altos-flash-$(VERSION).elf
+BOTH_DFU=$(PROGNAME)-combined-$(VERSION).dfu
+BOTH_HEX=$(PROGNAME)-combined-$(VERSION).ihx
+ELFTOHEX=$(TOPDIR)/../ao-tools/ao-elftohex/ao-elftohex
+MAKEBIN=$(TOPDIR)/../ao-tools/ao-makebin/ao-makebin
 
 SRC=$(ALTOS_SRC) ao_easymega.c
 OBJ=$(SRC:.c=.o)
 
-all: $(PROG) $(HEX)
+all: $(PROG) $(HEX) $(BOTH_DFU) $(BOTH_HEX)
 
 $(PROG): Makefile $(OBJ) altos.ld
        $(call quiet,CC) $(LDFLAGS) -o $(PROG) $(OBJ) $(LIBS)
 
+$(BOTH_DFU): $(PROG) $(FLASH_PROG)
+       $(MAKEBIN) --dfu --output=$@ --base=$(FLASH_ADDR) $(FLASH_PROG) $(PROG)
+
+$(BOTH_HEX): $(PROG) $(FLASH_PROG)
+       $(ELFTOHEX) --nosym --output=$@ $(FLASH_PROG) $(PROG)
+
+$(FLASH_PROG): FRC
+       +cd flash-loader && make
+
 $(OBJ): $(INC)
 
+FRC:
+
 distclean:     clean
 
 clean:
index a045e126672d553b60ced4b0f4753803d0d83770..ac4f9c4bb7043eb908af3a64d70874d3a59e0466 100644 (file)
@@ -83,6 +83,7 @@ distclean:    clean
 
 clean:
        rm -f *.o $(PROGNAME)-*.elf $(PROGNAME)-*.ihx $(PROGNAME)-*.map
+       rm -f $(PROGNAME)-*.dfu
        rm -f ao_product.h
 
 install:
index a8541775ae807272947dbd66b357c05ec2e2ef61..6896eaa973161375adf553c519369eac03ee8e45 100644 (file)
@@ -19,7 +19,9 @@
 #ifndef _AO_CONFIG_H_
 #define _AO_CONFIG_H_
 
+#ifndef AO_FLIGHT_TEST
 #include <ao.h>
+#endif
 
 #if AO_PYRO_NUM
 #include <ao_pyro.h>
index e0ee2928cfa8fd569e260fc05d46161b1d6eefba..e1ca0bf7bb01ee123ec146c2b03aaf9855a525fb 100644 (file)
@@ -18,6 +18,7 @@
 
 #include <stdint.h>
 #define AO_CONVERT_TEST
+#define AO_TICK_TYPE uint32_t
 typedef int32_t alt_t;
 typedef int32_t pres_t;
 #include "ao_host.h"
index c8debbc57d2df707a3fb1989842bc589d082387d..f3eb0178d1bbe0e9fa882872afcab823a66c959f 100644 (file)
@@ -17,6 +17,7 @@
  */
 
 #include <stdint.h>
+#define AO_TICK_TYPE uint32_t
 #define AO_CONVERT_TEST
 #define AO_NEED_ALTITUDE_TO_PRES 1
 #include "ao_host.h"
index c974a9fe5f1e37c89261245bfa3ab945d1b8bdbf..30df8edc0e66ffc7cc7f610adc57103edbfd881c 100644 (file)
@@ -81,12 +81,20 @@ struct ao_task {
        int dummy;
 };
 
+enum ao_igniter_status {
+       ao_igniter_unknown,     /* unknown status (ambiguous voltage) */
+       ao_igniter_ready,       /* continuity detected */
+       ao_igniter_active,      /* igniter firing */
+       ao_igniter_open,        /* open circuit detected */
+};
+
 #define ao_add_task(t,f,n)
 
 #define ao_log_start()
 #define ao_log_stop()
 
 #define AO_MS_TO_TICKS(ms)     ((ms) / 10)
+#define AO_NS_TO_TICKS(ns)     ((ns) / (10000000L))
 #define AO_SEC_TO_TICKS(s)     ((s) * 100)
 
 #define AO_FLIGHT_TEST
index 5f09344af8915dd273b4ab044ca95fdc5a1df49d..b7aceef6792cc4646eb069917c1f348752c1ead0 100644 (file)
@@ -76,6 +76,8 @@ radio_cmac_send(uint8_t len)
  * Receive and validate an incoming packet
  */
 
+int8_t ao_radio_cmac_last_rssi;
+
 static int8_t
 radio_cmac_recv(uint8_t len, AO_TICK_TYPE timeout) 
 {
@@ -92,6 +94,8 @@ radio_cmac_recv(uint8_t len, AO_TICK_TYPE timeout)
                return AO_RADIO_CMAC_TIMEOUT;
        }
 
+       ao_radio_cmac_last_rssi = ao_radio_rssi;
+
        if (!(cmac_data[len + AO_CMAC_KEY_LEN +1] & AO_RADIO_STATUS_CRC_OK))
                return AO_RADIO_CMAC_CRC_ERROR;
 
index 2977cd3e69960076b5fef9e5eac53891bae586f5..1bea8a03479e71f0a10ce1ae53a9608d30633696 100644 (file)
@@ -24,7 +24,7 @@
 #define AO_CMAC_KEY_LEN                AO_AES_LEN
 #define AO_CMAC_MAX_LEN                (128 - AO_CMAC_KEY_LEN)
 
-extern int8_t ao_radio_cmac_rssi;
+extern int8_t ao_radio_cmac_rssi, ao_radio_cmac_last_rssi;
 
 int8_t
 ao_radio_cmac_send(void *packet, uint8_t len);
index cc17a2219b723f5245f80e66cd3789dc3991b838..fae076adfe5ccffc3ed1d0b2e50e2f2acb419df4 100644 (file)
@@ -48,7 +48,8 @@ ALTOS_SRC = \
        ao_timer.c \
        ao_mutex.c \
        ao_freq.c \
-       ao_adc_single_stm.c \
+       ao_adc_stm.c \
+       ao_data.c \
        ao_dma_stm.c \
        ao_spi_stm.c \
        ao_beep_stm.c \
@@ -77,7 +78,7 @@ ALTOS_SRC = \
        BitstreamVeraSans-Roman-24.c \
        BitstreamVeraSans-Roman-10.c \
        BitstreamVeraSans-Roman-12.c \
-       BenguiatGothicStd-Bold-26.c \
+       BenguiatGothicStd-Bold-24.c \
        ao_quadrature.c \
        ao_button.c \
        ao_event.c \
@@ -122,7 +123,7 @@ BitstreamVeraSans-Roman-58.c: ao_font.h
 BitstreamVeraSans-Roman-24.c: ao_font.h
 BitstreamVeraSans-Roman-10.c: ao_font.h
 BitstreamVeraSans-Roman-12.c: ao_font.h
-BenguiatGothicStd-Bold-26.c: ao_font.h
+BenguiatGothicStd-Bold-24.c: ao_font.h
 
 install:
 
index dc6b030edd471561f973fae0902dc6beb15edcf2..2f4c1dbed26830dd27ab9a4a67c09092fd01db6c 100644 (file)
@@ -24,6 +24,7 @@
 #include <ao_st7565.h>
 #include <ao_adc_single.h>
 #include <ao_pwm.h>
+#include <limits.h>
 
 #define WIDTH  AO_ST7565_WIDTH
 #define HEIGHT AO_ST7565_HEIGHT
@@ -40,8 +41,8 @@ static struct ao_bitmap fb = {
 };
 
 static const struct ao_transform logo_transform = {
-       .x_scale = 48, .x_off = 2,
-       .y_scale = 48, .y_off = 0,
+       .x_scale = 40, .x_off = 8,
+       .y_scale = 40, .y_off = 0,
 };
 
 static const struct ao_transform show_transform = {
@@ -53,7 +54,7 @@ static const struct ao_transform show_transform = {
 #define VOLT_FONT BitstreamVeraSans_Roman_58_font
 #define SMALL_FONT BitstreamVeraSans_Roman_12_font
 #define TINY_FONT BitstreamVeraSans_Roman_10_font
-#define LOGO_FONT BenguiatGothicStd_Bold_26_font
+#define LOGO_FONT BenguiatGothicStd_Bold_24_font
 
 #define LABEL_Y                (int16_t) (SMALL_FONT.ascent)
 #define VALUE_Y                (int16_t) (LABEL_Y + 5 + BIG_FONT.ascent)
@@ -70,6 +71,8 @@ static const struct ao_transform show_transform = {
 #define SCAN_X         (WIDTH - 100) / 2
 #define SCAN_Y         50
 #define SCAN_HEIGHT    3
+#define SCANNING_X     (WIDTH / 2)
+#define SCANNING_Y     (SCAN_Y - 2)
 #define FOUND_Y                63
 #define FOUND_X                3
 #define FOUND_WIDTH    (WIDTH - 6)
@@ -87,8 +90,9 @@ static const struct ao_transform show_transform = {
 #define BACKLIGHT_HEIGHT       20
 #define BACKLIGHT_VALUE_X      64
 #define BACKLIGHT_VALUE_Y      (BACKLIGHT_Y + BACKLIGHT_HEIGHT + SMALL_FONT.ascent + 3)
-#define INFO_START_Y   ((int16_t) (SMALL_FONT.ascent + 2))
-#define INFO_STEP_Y    ((int16_t) (SMALL_FONT.ascent + 3))
+#define INFO_FONT      TINY_FONT
+#define INFO_START_Y   ((int16_t) (INFO_FONT.ascent + 2))
+#define INFO_STEP_Y    ((int16_t) (INFO_FONT.ascent + 2))
 
 #define AO_LCO_DRAG_RACE_START_TIME    AO_SEC_TO_TICKS(5)
 #define AO_LCO_DRAG_RACE_STOP_TIME     AO_SEC_TO_TICKS(2)
@@ -103,6 +107,9 @@ static uint8_t      ao_lco_event_debug;
 
 static uint8_t ao_lco_display_mutex;
 
+static uint8_t         ao_sample_data;
+static struct ao_data  ao_data_cur;
+
 static void
 _ao_center_text(int16_t x, int16_t y, const struct ao_font *font, const char *str)
 {
@@ -131,28 +138,12 @@ _ao_lco_show_box(int16_t box)
 }
 
 static void
-_ao_lco_show_voltage(uint16_t decivolts, const char *label)
+_ao_format_voltage(char *str, size_t size, uint16_t decivolts)
 {
-       char    str[7];
-
-       PRINTD("voltage %d\n", decivolts);
-       _ao_center_text(WIDTH/2, LABEL_Y, &SMALL_FONT, label);
-       snprintf(str, sizeof(str), "%d.%d", decivolts / 10, decivolts % 10);
-       _ao_center_text(WIDTH/2, VALUE_Y, &BIG_FONT, str);
-}
-
-static void
-_ao_lco_batt_voltage(void)
-{
-       struct ao_adc   packet;
-       int16_t         decivolt;
-
-       ao_adc_single_get(&packet);
-       decivolt = ao_battery_decivolt(packet.v_batt);
-       _ao_lco_show_voltage((uint16_t) decivolt, "LCO Battery");
-       ao_st7565_update(&fb);
+       snprintf(str, size, "%d.%d", decivolts / 10, decivolts % 10);
 }
 
+#if AO_LCO_HAS_CONTRAST
 static void
 _ao_lco_show_contrast(void)
 {
@@ -165,7 +156,9 @@ _ao_lco_show_contrast(void)
        snprintf(buf, sizeof(buf), "%d %%", brightness * 100 / AO_LCO_MAX_CONTRAST);
        _ao_center_text(WIDTH/2, CONTRAST_VALUE_Y, &SMALL_FONT, buf);
 }
+#endif
 
+#if AO_LCO_HAS_BACKLIGHT_UI
 static void
 _ao_lco_show_backlight(void)
 {
@@ -178,6 +171,7 @@ _ao_lco_show_backlight(void)
        snprintf(buf, sizeof(buf), "%ld %%", backlight * 100 / AO_LCO_MAX_BACKLIGHT);
        _ao_center_text(WIDTH/2, BACKLIGHT_VALUE_Y, &SMALL_FONT, buf);
 }
+#endif
 
 static int16_t info_y;
 
@@ -189,46 +183,141 @@ _ao_lco_info(const char *format, ...)
        va_start(a, format);
        vsnprintf(buf, sizeof(buf), format, a);
        va_end(a);
-       ao_text(&fb, &SMALL_FONT, 0, info_y, buf, AO_BLACK, AO_COPY);
+       ao_text(&fb, &INFO_FONT, 0, info_y, buf, AO_BLACK, AO_COPY);
        info_y += INFO_STEP_Y;
 }
 
 static void
-_ao_lco_show_info(void)
+_ao_lco_show_lco_info(void)
 {
-       info_y = INFO_START_Y;
+       char            battery[7];
+       int16_t         decivolt;
+
        ao_logo_poly(&fb, &show_transform, AO_BLACK, AO_COPY);
+
+       decivolt = ao_battery_decivolt(ao_data_cur.adc.v_batt);
+       _ao_format_voltage(battery, sizeof(battery), (uint16_t) decivolt);
+
+       info_y = INFO_START_Y;
        _ao_lco_info("%s", ao_product);
-       _ao_lco_info("Version: %s", ao_version);
        _ao_lco_info("Serial: %d", ao_serial_number);
+       _ao_lco_info("Battery: %sV", battery);
+       _ao_lco_info("Version: %s", ao_version);
        _ao_lco_info("Callsign: %s", ao_config.callsign);
        _ao_lco_info("Frequency: %ld.%03d",
                     ao_config.frequency / 1000,
                     (int) (ao_config.frequency % 1000));
 }
 
+static uint8_t
+popcount(uint32_t value)
+{
+       uint8_t count = 0;
+       while(value != 0) {
+               count += value & 1;
+               value >>= 1;
+       }
+       return count;
+}
+
+static void
+_ao_lco_show_pad_info(void)
+{
+       char    pad_battery[7];
+
+       ao_logo_poly(&fb, &show_transform, AO_BLACK, AO_COPY);
+       info_y = INFO_START_Y;
+       _ao_lco_info("Bank: %d", ao_lco_box);
+       if (!(ao_lco_valid[ao_lco_box] & AO_LCO_VALID_LAST)) {
+               _ao_lco_info("Contact lost");
+               _ao_lco_info("Last RSSI: %ddBm", ao_radio_cmac_last_rssi);
+       } else {
+               _ao_lco_info("Total pads: %d", popcount(ao_pad_query.channels));
+               _ao_lco_info("RSSI: %ddBm", ao_radio_cmac_rssi);
+               _ao_format_voltage(pad_battery, sizeof(pad_battery), ao_pad_query.battery);
+               _ao_lco_info("Battery: %sV", pad_battery);
+               _ao_lco_info("Arming switch: %s", ao_pad_query.arm_status ? "On" : "Off");
+       }
+}
+
+#define AO_LCO_DIM_BACKLIGHT   (AO_LCO_MIN_BACKLIGHT + 3 * AO_LCO_BACKLIGHT_STEP)
+#define AO_AUTO_BACKLIGHT_RANGE        (AO_LCO_MAX_BACKLIGHT - AO_LCO_DIM_BACKLIGHT)
+#define AO_AUTO_BACKLIGHT_GAP  AO_ADC_MAX / 6
+
+static struct {
+       int16_t v_als;
+       int32_t backlight;
+} ao_lco_backlight_map[] = {
+       { .v_als = AO_ADC_MAX / 6, .backlight = AO_LCO_DIM_BACKLIGHT },
+       { .v_als = AO_ADC_MAX / 3, .backlight = (AO_LCO_MAX_BACKLIGHT - AO_LCO_MIN_BACKLIGHT) / 2 },
+       { .v_als = AO_ADC_MAX / 2, .backlight = AO_LCO_MAX_BACKLIGHT },
+       { .v_als = AO_ADC_MAX * 3 / 4,  .backlight = 0 },
+};
+
+#define NUM_BACKLIGHT_MAP sizeof(ao_lco_backlight_map)/sizeof(ao_lco_backlight_map[0])
+
+static unsigned ao_backlight_prev = NUM_BACKLIGHT_MAP - 1;
+
 static void
-_ao_lco_show_rssi(void)
+ao_auto_backlight(int16_t als_min, int16_t als_max)
 {
-       char label[20];
-       int16_t width;
-       snprintf(label, sizeof(label), "Bank %d RSSI", ao_lco_box);
-       width = ao_text_width(&SMALL_FONT, label);
-       ao_text(&fb, &SMALL_FONT, VALUE_LABEL_X - width / 2, LABEL_Y, label, AO_BLACK, AO_COPY);
-       if (!(ao_lco_valid[ao_lco_box] & AO_LCO_VALID_LAST))
-               strcpy(label, "---");
-       else
-               snprintf(label, sizeof(label), "%d", ao_radio_cmac_rssi);
-       width = ao_text_width(&VOLT_FONT, label);
-       ao_text(&fb, &VOLT_FONT, VALUE_LABEL_X - width / 2, VALUE_Y, label, AO_BLACK, AO_COPY);
+       unsigned ao_backlight;
+
+       PRINTD("ao_auto_backlight min %d max %d\n", als_min, als_max);
+       ao_backlight = ao_backlight_prev;
+       while (als_min > ao_lco_backlight_map[ao_backlight].v_als + AO_AUTO_BACKLIGHT_GAP) {
+               if (ao_backlight == NUM_BACKLIGHT_MAP - 1)
+                       break;
+               ao_backlight++;
+       }
+       while (als_max < ao_lco_backlight_map[ao_backlight].v_als - AO_AUTO_BACKLIGHT_GAP) {
+               if (ao_backlight == 0)
+                       return;
+               ao_backlight--;
+       }
+       if (ao_backlight != ao_backlight_prev)
+       {
+               PRINTD("   set backlight to %ld\n", ao_lco_backlight_map[ao_backlight].backlight);
+               ao_lco_set_backlight(ao_lco_backlight_map[ao_backlight].backlight);
+               ao_backlight_prev = ao_backlight;
+       }
 }
 
+#define AO_LCO_BACKLIGHT_INTERVAL      AO_SEC_TO_TICKS(2)
+
 static void
-_ao_lco_show_pad_battery(void)
+ao_lco_data(void)
 {
-       char label[20];
-       snprintf(label, sizeof(label), "Bank %d Battery", ao_lco_box);
-       _ao_lco_show_voltage(ao_pad_query.battery, label);
+       AO_TICK_TYPE    backlight_tick = ao_time() + AO_LCO_BACKLIGHT_INTERVAL;
+       AO_TICK_TYPE    now;
+       int16_t         als_min = INT16_MAX;
+       int16_t         als_max = INT16_MIN;
+
+       ao_timer_set_adc_interval(AO_MS_TO_TICKS(100));
+       for (;;) {
+               ao_sleep((void *) &ao_data_head);
+
+               while (ao_sample_data != ao_data_head) {
+                       struct ao_data *ao_data;
+
+                       /* Capture a sample */
+                       ao_data = (struct ao_data *) &ao_data_ring[ao_sample_data];
+
+                       ao_data_cur = *ao_data;
+                       if (ao_data_cur.adc.v_als < als_min)
+                               als_min = ao_data_cur.adc.v_als;
+                       if (ao_data_cur.adc.v_als > als_max)
+                               als_max = ao_data_cur.adc.v_als;
+                       ao_sample_data = ao_data_ring_next(ao_sample_data);
+               }
+               now = ao_time();
+               if ((AO_TICK_SIGNED) (backlight_tick - now) < 0) {
+                       backlight_tick = now + AO_LCO_BACKLIGHT_INTERVAL;
+                       ao_auto_backlight(als_min, als_max);
+                       als_min = INT16_MAX;
+                       als_max = INT16_MIN;
+               }
+       }
 }
 
 void
@@ -237,25 +326,23 @@ ao_lco_show(void)
        ao_mutex_get(&ao_lco_display_mutex);
        ao_rect(&fb, 0, 0, WIDTH, HEIGHT, AO_WHITE, AO_COPY);
        switch (ao_lco_box) {
-       case AO_LCO_LCO_VOLTAGE:
-               _ao_lco_batt_voltage();
-               break;
+#if AO_LCO_HAS_CONTRAST
        case AO_LCO_CONTRAST:
                _ao_lco_show_contrast();
                break;
+#endif
+#if AO_LCO_HAS_BACKLIGHT_UI
        case AO_LCO_BACKLIGHT:
                _ao_lco_show_backlight();
                break;
-       case AO_LCO_INFO:
-               _ao_lco_show_info();
+#endif
+       case AO_LCO_LCO_INFO:
+               _ao_lco_show_lco_info();
                break;
        default:
                switch (ao_lco_pad) {
-               case AO_LCO_PAD_RSSI:
-                       _ao_lco_show_rssi();
-                       break;
-               case AO_LCO_PAD_VOLTAGE:
-                       _ao_lco_show_pad_battery();
+               case AO_LCO_PAD_INFO:
+                       _ao_lco_show_pad_info();
                        break;
                default:
                        _ao_lco_show_pad(ao_lco_pad);
@@ -291,6 +378,7 @@ ao_lco_set_select(void)
 }
 
 
+#if AO_LCO_HAS_CONTRAST
 void
 ao_lco_set_contrast(int32_t contrast)
 {
@@ -302,7 +390,9 @@ ao_lco_get_contrast(void)
 {
        return (int32_t) ao_st7565_get_brightness();
 }
+#endif
 
+#if AO_LCO_HAS_BACKLIGHT
 static uint16_t ao_backlight;
 
 void
@@ -317,6 +407,7 @@ ao_lco_get_backlight(void)
 {
        return (int32_t) ao_backlight;
 }
+#endif
 
 static struct ao_task  ao_lco_drag_task;
 
@@ -413,12 +504,13 @@ ao_lco_display_test(void)
        ao_led_on(AO_LEDS_AVAILABLE);
        ao_rect(&fb, 0, 0, WIDTH, HEIGHT, AO_BLACK, AO_COPY);
        ao_st7565_update(&fb);
-       ao_delay(AO_MS_TO_TICKS(250));
+       ao_delay(AO_MS_TO_TICKS(1000));
        ao_led_off(AO_LEDS_AVAILABLE);
 }
 
 static struct ao_task ao_lco_input_task;
 static struct ao_task ao_lco_monitor_task;
+static struct ao_task ao_lco_data_task;
 static struct ao_task ao_lco_arm_warn_task;
 static struct ao_task ao_lco_igniter_status_task;
 
@@ -432,6 +524,7 @@ ao_lco_search_start(void)
 {
        ao_rect(&fb, 0, 0, WIDTH, HEIGHT, AO_WHITE, AO_COPY);
        ao_logo(&fb, &logo_transform, &LOGO_FONT, AO_BLACK, AO_COPY);
+       _ao_center_text(SCANNING_X, SCANNING_Y, &TINY_FONT, "Scanning...");
        found_width = 0;
        nfound = 0;
 }
@@ -515,6 +608,7 @@ void
 ao_lco_init(void)
 {
        ao_add_task(&ao_lco_monitor_task, ao_lco_main, "lco monitor");
+       ao_add_task(&ao_lco_data_task, ao_lco_data, "lco data");
 #if DEBUG
        ao_cmd_register(&ao_lco_cmds[0]);
 #endif
index e286cae6eceacc97c1ad571441faeb64ae0637af..b1af364fca3b9ee219fc23110e38b9be007b7718 100644 (file)
 #define AO_BUTTON_0            1
 
 #define AO_BUTTON_DRAG_SELECT  1
-#define AO_BUTTON_1_PORT       &stm_gpioc
-#define AO_BUTTON_1            0
+#define AO_BUTTON_1_PORT       &stm_gpiod
+#define AO_BUTTON_1            2
 
 #define AO_BUTTON_SPARE1               2
 #define AO_BUTTON_2_PORT       &stm_gpiob
 
 /* ADC */
 
-struct ao_adc {
-       int16_t         v_batt;
-};
-
-#define AO_ADC_DUMP(p) \
-       printf("batt: %5d\n", (p)->v_batt)
+#define AO_DATA_RING           8
 
-#define HAS_ADC_SINGLE         1
+#define HAS_ADC                        1
 #define HAS_ADC_TEMP           0
 #define HAS_BATTERY_REPORT     1
 
@@ -277,12 +272,33 @@ struct ao_adc {
 #define AO_ADC_V_BATT_PORT     (&stm_gpioa)
 #define AO_ADC_V_BATT_PIN      2
 
+#define AO_ADC_V_ALS           10
+#define AO_ADC_V_ALS_PORT      (&stm_gpioc)
+#define AO_ADC_V_ALS_PIN       0
+
 #define AO_ADC_PIN0_PORT       AO_ADC_V_BATT_PORT
 #define AO_ADC_PIN0_PIN                AO_ADC_V_BATT_PIN
 
+#define AO_ADC_PIN1_PORT       AO_ADC_V_ALS_PORT
+#define AO_ADC_PIN1_PIN                AO_ADC_V_ALS_PIN
+
 #define AO_ADC_SQ1             AO_ADC_V_BATT
+#define AO_ADC_SQ2             AO_ADC_V_ALS
 
-#define AO_NUM_ADC             1
+#define AO_NUM_ADC             2
+
+struct ao_adc {
+       union {
+               struct {
+                       int16_t         v_batt;
+                       int16_t         v_als;
+               };
+               int16_t v_vals[AO_NUM_ADC];
+       };
+};
+
+#define AO_ADC_DUMP(p) \
+       printf("batt: %5d als %5d\n", (p)->adc.v_batt, (p)->adc.v_als)
 
 /*
  * Voltage divider on ADC battery sampler
@@ -296,20 +312,23 @@ struct ao_adc {
 #define AO_ADC_REFERENCE_DV    33
 
 #define AO_LCO_SEARCH_API
-#define AO_LCO_HAS_CONTRAST    1
-#define AO_LCO_MIN_CONTRAST    0
-#define AO_LCO_MAX_CONTRAST    63
-#define AO_LCO_CONTRAST_STEP   1
+
+//#define AO_LCO_HAS_CONTRAST  1
+//#define AO_LCO_MIN_CONTRAST  0
+//#define AO_LCO_MAX_CONTRAST  63
+//#define AO_LCO_CONTRAST_STEP 1
 
 #define AO_LCO_HAS_BACKLIGHT   1
 #define AO_LCO_MIN_BACKLIGHT   0
 #define AO_LCO_MAX_BACKLIGHT   65535
 #define AO_LCO_BACKLIGHT_STEP  771
 
-#define AO_LCO_HAS_INFO                1
+#define AO_LCO_HAS_LCO_INFO    1
 #define AO_LCO_MIN_INFO_PAGE   0
 #define AO_LCO_MAX_INFO_PAGE   0
 
+#define AO_LCO_HAS_PAD_INFO    1
+
 /*
  * LCD Backlight via PWM.
  *
index faba96b0e0f5c28b930af0ad4a5d492b2d8af188..6293edd3878bdcc1bd807c8642f63b6bd96d7dd2 100644 (file)
 #include <ao_st7565.h>
 #include <ao_pwm.h>
 
-#define WIDTH  AO_ST7565_WIDTH
-#define HEIGHT AO_ST7565_HEIGHT
-#define STRIDE AO_BITMAP_STRIDE(WIDTH)
-
-static uint32_t        image[STRIDE * HEIGHT];
-
-static struct ao_bitmap fb = {
-       .base = image,
-       .stride = STRIDE,
-       .width = WIDTH,
-       .height = HEIGHT,
-       .damage = AO_BOX_INIT,
-};
-
-static void
-ao_st7565_test(void)
-{
-       ao_rect(&fb, 0, 0, WIDTH, HEIGHT, AO_WHITE, AO_COPY);
-       ao_st7565_update(&fb);
-       ao_text(&fb, &BitstreamVeraSans_Roman_24_font,
-               0, 20, "hello world", AO_BLACK, AO_COPY);
-       ao_st7565_update(&fb);
-}
-
-static int16_t x1 = 32, _y1 = 10, x2 = 32, y2 = 40;
-static int16_t dx1 = 2, dy1 = 2, dx2 = -2, dy2 = -1;
-
-#define bounds(v,m,M,d)        \
-               if (v < m) {                    \
-                       v = m + m - v;          \
-                       d = -d;                 \
-               } else if (v > M) {             \
-                       v = M - (v - M);        \
-                       d = -d;                 \
-               }
-
-static void
-ao_st7565_line(void)
-{
-       int     i;
-
-       for (i = 0; i < 100; i++) {
-               ao_rect(&fb, 0, 0, WIDTH, HEIGHT, AO_WHITE, AO_COPY);
-               ao_line(&fb, x1, _y1, x2, y2, AO_BLACK, AO_COPY);
-               ao_st7565_update(&fb);
-               x1 += dx1;
-               _y1 += dy1;
-               x2 += dx2;
-               y2 += dy2;
-               printf("%d,%d - %d,%d\n", x1, _y1, x2, y2);
-               fflush(stdout);
-               bounds(x1, 0, WIDTH, dx1);
-               bounds(x2, 0, WIDTH, dx2);
-               bounds(_y1, 0, HEIGHT, dy1);
-               bounds(y2, 0, HEIGHT, dy2);
-               ao_delay(AO_MS_TO_TICKS(200));
-       }
-}
-
-static const float pad_volts = 12.3f;
-static const float lco_volts = 4.1f;
-static const int rssi = -30;
-
-static int     boxes[] = { 1, 2, 3, 5, 8, 11, 13, 17, 19, 23, 29, 31, 37, 62, 97 };
-
-//static int   max_box = 97;
-
-#define ARRAYSIZE(a)   (sizeof(a) / sizeof((a)[0]))
-
-static bool
-valid_box(int box)
-{
-       size_t i;
-       if (box == 0)
-               return true;
-       for (i = 0; i < ARRAYSIZE(boxes); i++)
-               if (boxes[i] == box)
-                       return true;
-       return false;
-}
-
-#if 0
-static void
-next_box(void)
-{
-       for (int n = box_number + 1; n <= max_box; n++)
-               if (valid_box(n)) {
-                       box_number = n;
-                       return;
-               }
-       box_number = 0;
-}
-
-static void
-prev_box(void)
-{
-       for (int n = box_number - 1; n >= 0; n--)
-               if (valid_box(n)) {
-                       box_number = n;
-                       return;
-               }
-       box_number = max_box;
-}
-#endif
-
-static const struct ao_transform logo_transform = {
-       .x_scale = 48, .x_off = 2,
-       .y_scale = 48, .y_off = 0,
-};
-
-#define BIG_FONT BitstreamVeraSans_Roman_58_font
-#define VOLT_FONT BitstreamVeraSans_Roman_58_font
-#define SMALL_FONT BitstreamVeraSans_Roman_12_font
-#define TINY_FONT BitstreamVeraSans_Roman_10_font
-#define LOGO_FONT BenguiatGothicStd_Bold_26_font
-
-#define LABEL_Y                (int16_t) (SMALL_FONT.ascent)
-#define VALUE_Y                (int16_t) (LABEL_Y + BIG_FONT.ascent + 5)
-#define BOX_X          2
-#define PAD_X          90
-#define BOX_LABEL_X    30
-#define VOLT_LABEL_X   25
-#define RSSI_LABEL_X   15
-#define PAD_LABEL_X    95
-#define SEP_X          (PAD_X - 8)
-#define SCAN_X         (WIDTH - 100) / 2
-#define SCAN_Y         50
-#define SCAN_HEIGHT    3
-#define FOUND_Y                63
-#define FOUND_X                6
-#define FOUND_WIDTH    17
-#define MAX_VALID      (WIDTH / FOUND_WIDTH)
-
-static int16_t box_number = 88;
-static int16_t pad_number = 8;
-
-static void
-ao_st7565_poly(void)
-{
-       int16_t scan_number;
-       char    str[8];
-       int     i;
-       int     v;
-       int     last_box;
-       int16_t b;
-
-       for (scan_number = 0; scan_number < 100; scan_number++) {
-               ao_rect(&fb, 0, 0, WIDTH, HEIGHT, AO_WHITE, AO_COPY);
-               ao_logo(&fb, &logo_transform, &LOGO_FONT, AO_BLACK, AO_COPY);
-               if (scan_number) {
-                       ao_rect(&fb, SCAN_X, SCAN_Y, (int16_t) scan_number, SCAN_HEIGHT, AO_BLACK, AO_COPY);
-                       b = 0;
-                       v = 0;
-                       last_box = 0;
-                       for (i = scan_number; i > 1; i--) {
-                               if (valid_box(i)) {
-                                       if (!last_box)
-                                               last_box = i;
-                                       v++;
-                                       if (v == MAX_VALID)
-                                               break;
-                               }
-                       }
-                       for (; i <= scan_number; i++) {
-                               if (valid_box(i)) {
-                                       sprintf(str, "%02d%s", i, i == last_box ? "" : ",");
-                                       ao_text(&fb, &TINY_FONT, (int16_t) (FOUND_X + FOUND_WIDTH * b),
-                                               FOUND_Y, str, AO_BLACK, AO_COPY);
-                                       b++;
-                               }
-                       }
-               }
-               ao_st7565_update(&fb);
-               ao_delay(AO_MS_TO_TICKS(50));
-       }
-       ao_rect(&fb, 0, 0, WIDTH, HEIGHT, AO_WHITE, AO_COPY);
-       switch (box_number) {
-       case 0:
-               sprintf(str, "%4.1f", lco_volts);
-               ao_text(&fb, &VOLT_FONT, BOX_X, VALUE_Y, str, AO_BLACK, AO_COPY);
-               ao_text(&fb, &SMALL_FONT, VOLT_LABEL_X, LABEL_Y, "LCO Battery", AO_BLACK, AO_COPY);
-               break;
-       default:
-               switch (pad_number) {
-               case -1:
-                       sprintf(str, "%4.1f", pad_volts);
-                       ao_text(&fb, &VOLT_FONT, BOX_X, VALUE_Y, str, AO_BLACK, AO_COPY);
-                       ao_text(&fb, &SMALL_FONT, VOLT_LABEL_X, LABEL_Y, "Pad Battery", AO_BLACK, AO_COPY);
-                       break;
-               case 0:
-                       sprintf(str, "%4d", rssi);
-                       ao_text(&fb, &VOLT_FONT, BOX_X, VALUE_Y, str, AO_BLACK, AO_COPY);
-                       ao_text(&fb, &SMALL_FONT, RSSI_LABEL_X, LABEL_Y, "Signal Strength", AO_BLACK, AO_COPY);
-                       break;
-               default:
-                       sprintf(str, "%02d", box_number);
-                       ao_text(&fb, &BIG_FONT, BOX_X, VALUE_Y, str, AO_BLACK, AO_COPY);
-                       ao_text(&fb, &SMALL_FONT, BOX_LABEL_X, LABEL_Y, "Box", AO_BLACK, AO_COPY);
-
-                       sprintf(str, "%d", pad_number);
-                       ao_text(&fb, &BIG_FONT, PAD_X, VALUE_Y, str, AO_BLACK, AO_COPY);
-                       ao_text(&fb, &SMALL_FONT, PAD_LABEL_X, LABEL_Y, "Pad", AO_BLACK, AO_COPY);
-
-                       ao_rect(&fb, SEP_X, 0, 2, HEIGHT, AO_BLACK, AO_COPY);
-               }
-               break;
-       }
-       ao_st7565_update(&fb);
-}
-
-const struct ao_cmds ao_st7565_cmds[] = {
-       { ao_st7565_test, "g\0Test ST7565 display" },
-       { ao_st7565_line, "l\0Draw lines" },
-       { ao_st7565_poly, "p\0Draw polygon" },
-       { 0, NULL },
-};
-
 int
 main(void)
 {
@@ -261,7 +44,7 @@ main(void)
        ao_spi_init();
        ao_dma_init();
        ao_exti_init();
-       ao_adc_single_init();
+       ao_adc_init();
 
        ao_beep_init();
        ao_pwm_init();
@@ -281,8 +64,6 @@ main(void)
        ao_lco_init();
        ao_lco_cmd_init();
 
-//     ao_cmd_register(ao_st7565_cmds);
-
        ao_start_scheduler();
        return 0;
 }
index 55a3fbeb5abda9c98d7bffc7b7e587bd575a092e..2c74780d1fac362f6a9305ac7190196279cc1c9b 100644 (file)
@@ -3,11 +3,12 @@ vpath %.c ..:../kernel:../drivers:../util:../micropeak:../aes:../product
 vpath %.h ..:../kernel:../drivers:../util:../micropeak:../aes:../product
 vpath make-kalman ..:../kernel:../drivers:../util:../micropeak:../aes:../product
 
-PROGS=ao_flight_test ao_flight_test_baro ao_flight_test_accel ao_flight_test_noisy_accel ao_flight_test_mm \
+PROGS=ao_flight_test_mm \
        ao_flight_test_metrum ao_flight_test_mini \
        ao_gps_test ao_gps_test_skytraq ao_gps_test_ublox ao_convert_test ao_convert_pa_test ao_fec_test \
        ao_aprs_test ao_micropeak_test ao_fat_test ao_aes_test ao_int64_test \
-       ao_ms5607_convert_test ao_quaternion_test
+       ao_ms5607_convert_test ao_quaternion_test \
+       ao_flight_test_tmega4
 
 INCS=ao_kalman.h ao_ms5607.h ao_log.h ao_data.h altitude-pa.h altitude.h ao_quaternion.h ao_eeprom_read.h
 TEST_SRC=ao_flight_test.c
@@ -16,7 +17,7 @@ TEST_LIB=-ljson-c
 
 KALMAN=make-kalman 
 
-CFLAGS=-I.. -I. -I../kernel -I../drivers -I../micropeak -I../product -I../lisp -O0 -g -Wall -DAO_LISP_TEST -no-pie
+CFLAGS=-I.. -I. -I../kernel -I../drivers -I../product -I../lisp -O0 -g -Wall -DAO_LISP_TEST -no-pie
 
 all: $(PROGS) ao_aprs_data.wav
 
@@ -40,6 +41,9 @@ ao_flight_test_accel: $(TEST_SRC_ALL) ao_host.h ao_flight.c  ao_sample.c ao_kalm
 ao_flight_test_mm: $(TEST_SRC_ALL) ao_host.h ao_flight.c ao_sample.c ao_kalman.c ao_pyro.c ao_pyro.h $(INCS)
        cc -DTELEMEGA=1 $(CFLAGS) -o $@ $(TEST_SRC)  $(TEST_LIB) -lm
 
+ao_flight_test_tmega4: $(TEST_SRC_ALL) ao_host.h ao_flight.c ao_sample.c ao_kalman.c ao_pyro.c ao_pyro.h $(INCS)
+       cc -DTELEMEGA_V4=1 $(CFLAGS) -o $@ $(TEST_SRC)  $(TEST_LIB) -lm
+
 ao_flight_test_metrum: $(TEST_SRC_ALL) ao_host.h ao_flight.c ao_sample.c ao_kalman.c ao_pyro.c ao_pyro.h $(INCS)
        cc -DTELEMETRUM_V2=1 $(CFLAGS) -o $@ $(TEST_SRC)  $(TEST_LIB) -lm
 
@@ -86,7 +90,7 @@ ao_micropeak_test: ao_micropeak_test.c ao_microflight.c ao_kalman.h
        cc $(CFLAGS) -o $@ ao_micropeak_test.c -lm
 
 ao_fat_test: ao_fat_test.c ao_fat.c ao_bufio.c
-       cc $(CFLAGS) -o $@ ao_fat_test.c -lssl -lcrypto
+       cc $(CFLAGS) -o $@ ao_fat_test.c -Wno-deprecated-declarations -lssl -lcrypto
 
 ao_aes_test: ao_aes_test.c ao_aes.c ao_aes_tables.c
        cc $(CFLAGS) -o $@ ao_aes_test.c
index 63be71c6b378b6b0424bf7cc3ff708ce278a5dc4..dc6337fc29b917e4987a443297623d680523617d 100644 (file)
@@ -485,7 +485,7 @@ long_test_fs(void)
                }
        }
 
-       printf ("\n   **** Write IO: read %llu write %llu data sectors %llu\n", total_reads, total_writes, (total_file_size + 511) / 512);
+       printf ("\n   **** Write IO: read %lu write %lu data sectors %lu\n", total_reads, total_writes, (total_file_size + 511) / 512);
 
        check_bufio("all files created");
        printf ("   **** All done creating files\n");
@@ -518,7 +518,7 @@ long_test_fs(void)
                        check_bufio("file shown");
                }
        }
-       printf ("\n  **** Read IO: read %llu write %llu\n", total_reads, total_writes);
+       printf ("\n  **** Read IO: read %lu write %lu\n", total_reads, total_writes);
 }
 
 char *params[] = {
index fc1dfa8fe6b759b1def1caccc3ffdfa78429210b..e49035b52997abfaf68dfecca0ff25a5dc8b3941 100644 (file)
 #include <math.h>
 #define log ao_log_data
 
+#define AO_TICK_TYPE   uint32_t
+#define AO_TICK_SIGNED int32_t
+
+typedef int32_t pres_t;
+#define pres_to_altitude(p) ao_pa_to_altitude(p)
+#define ao_data_pres_cook(packet) ao_ms5607_convert(&packet->ms5607_raw, &packet->ms5607_cooked)
+#define ao_data_pres(packet) ((packet)->ms5607_cooked.pres)
+#define AO_ADC_MAX     4095
+#define AO_PYRO_BATTERY_DIV_PLUS       100
+#define AO_PYRO_BATTERY_DIV_MINUS      27
+#define AO_IGNITE_DIV_PLUS     100
+#define AO_IGNITE_DIV_MINUS    27
+#define AO_ADC_REFERENCE_DV    33
+
 #define GRAVITY 9.80665
 
 #define AO_HERTZ       100
@@ -48,7 +62,7 @@
 
 int ao_gps_new;
 
-#if !defined(TELEMEGA) && !defined(TELEMETRUM_V2) && !defined(EASYMINI) && !defined(EASYMOTOR_V_2)
+#if !defined(TELEMEGA) && !defined(TELEMETRUM_V2) && !defined(EASYMINI) && !defined(EASYMOTOR_V_2) && !defined(TELEMEGA_V4)
 #define TELEMETRUM_V1 1
 #endif
 
@@ -71,6 +85,49 @@ struct ao_adc {
 };
 #endif
 
+#if TELEMEGA_V4
+#define AO_ADC_NUM_SENSE       6
+#define HAS_MS5607             1
+#define HAS_BMX160             1
+#define HAS_ADXL375            1
+#define AO_ADXL375_INVERT      1
+#define AO_ADXL375_AXIS                x
+#define HAS_BEEP               1
+#define HAS_BARO               1
+#define AO_CONFIG_MAX_SIZE     1024
+
+struct ao_adc {
+       int16_t                 sense[AO_ADC_NUM_SENSE];
+       int16_t                 v_batt;
+       int16_t                 v_pbatt;
+       int16_t                 temp;
+};
+
+#define ao_data_along(packet)  ((packet)->bmx160.acc_x)
+#define ao_data_across(packet) (-(packet)->bmx160.acc_y)
+#define ao_data_through(packet)        ((packet)->bmx160.acc_z)
+
+#define ao_data_roll(packet)   ((packet)->bmx160.gyr_x)
+#define ao_data_pitch(packet)  (-(packet)->bmx160.gyr_y)
+#define ao_data_yaw(packet)    ((packet)->bmx160.gyr_z)
+
+#define ao_data_mag_along(packet)      ((packet)->bmx160.mag_x)
+#define ao_data_mag_across(packet)     ((packet)->bmx160.mag_y)
+#define ao_data_mag_through(packet)    ((packet)->bmx160.mag_z)
+
+#define ao_data_set_along(packet,v)    ((packet)->bmx160.acc_x = (v))
+#define ao_data_set_across(packet,v)   ((packet)->bmx160.acc_y = -(v))
+#define ao_data_set_through(packet,v)  ((packet)->bmx160.acc_z = (v))
+
+#define ao_data_set_roll(packet,v)     ((packet)->bmx160.gyr_x = (v))
+#define ao_data_set_pitch(packet,v)    ((packet)->bmx160.gyr_y = -(v))
+#define ao_data_set_yaw(packet,v)      ((packet)->bmx160.gyr_z = (v))
+
+#define ao_data_set_mag_along(packet,v)        ((packet)->bmx160.mag_x = (v))
+#define ao_data_set_mag_across(packet,v)       ((packet)->bmx160.mag_y = (v))
+#define ao_data_set_mag_through(packet,v)      ((packet)->bmx160.mag_z = (v))
+#endif
+
 #if TELEMETRUM_V2
 #define AO_ADC_NUM_SENSE       2
 #define HAS_MS5607             1
@@ -149,7 +206,7 @@ struct ao_adc {
 #define HAS_USB 1
 #define HAS_GPS 1
 
-int16_t
+AO_TICK_TYPE
 ao_time(void);
 
 void
@@ -158,12 +215,19 @@ ao_dump_state(void);
 #define ao_tick_count  (ao_time())
 #define ao_wakeup(wchan) ao_dump_state()
 
+enum ao_igniter_status {
+       ao_igniter_unknown,     /* unknown status (ambiguous voltage) */
+       ao_igniter_ready,       /* continuity detected */
+       ao_igniter_active,      /* igniter firing */
+       ao_igniter_open,        /* open circuit detected */
+};
+
 #include <ao_data.h>
 #include <ao_log.h>
 #include <ao_telemetry.h>
 #include <ao_sample.h>
 
-#if TELEMEGA
+#if TELEMEGA || TELEMEGA_V4
 int ao_gps_count;
 struct ao_telemetry_location ao_gps_first;
 struct ao_telemetry_location ao_gps_prev;
@@ -289,12 +353,12 @@ double    drogue_time;
 int    main_height;
 double main_time;
 
-int    tick_offset;
+uint32_t       tick_offset;
 
 static ao_k_t  ao_k_height;
 static double  simple_speed;
 
-int16_t
+AO_TICK_TYPE
 ao_time(void)
 {
        return ao_data_static.tick;
@@ -360,12 +424,12 @@ struct ao_cmds {
 };
 
 #define AO_NEED_ALTITUDE_TO_PRES 1
-#if TELEMEGA || TELEMETRUM_V2 || EASYMINI
+#if TELEMEGA || TELEMETRUM_V2 || EASYMINI || TELEMEGA_V4
 #include "ao_convert_pa.c"
 #include <ao_ms5607.h>
 struct ao_ms5607_prom  ao_ms5607_prom;
 #include "ao_ms5607_convert.c"
-#if TELEMEGA
+#if TELEMEGA || TELEMEGA_V4
 #define AO_PYRO_NUM    4
 #include <ao_pyro.h>
 #endif
@@ -388,7 +452,7 @@ extern int16_t ao_accel_2g;
 typedef int16_t        accel_t;
 
 uint16_t       ao_serial_number;
-int16_t                ao_flight_number;
+uint16_t       ao_flight_number;
 
 extern AO_TICK_TYPE    ao_sample_tick;
 
@@ -406,6 +470,7 @@ double ao_sample_qangle;
 
 AO_TICK_TYPE   ao_sample_prev_tick;
 AO_TICK_TYPE   prev_tick;
+AO_TICK_TYPE   start_tick;
 
 
 #include "ao_kalman.c"
@@ -413,7 +478,7 @@ AO_TICK_TYPE        prev_tick;
 #include "ao_sample.c"
 #include "ao_flight.c"
 #include "ao_data.c"
-#if TELEMEGA
+#if TELEMEGA || TELEMEGA_V4
 #define AO_PYRO_NUM    4
 
 #define AO_PYRO_0      0
@@ -426,7 +491,6 @@ AO_TICK_TYPE        prev_tick;
 static void
 ao_pyro_pin_set(uint8_t pin, uint8_t value)
 {
-       printf ("set pyro %d %d\n", pin, value);
 }
 
 #include "ao_pyro.c"
@@ -459,6 +523,9 @@ static uint16_t     pyros_fired;
 #if HAS_MPU6000
 static struct ao_mpu6000_sample        ao_ground_mpu6000;
 #endif
+#if HAS_BMX160
+static struct ao_bmx160_sample ao_ground_bmx160;
+#endif
 
 void
 ao_test_exit(void)
@@ -497,7 +564,7 @@ ao_test_exit(void)
        exit(0);
 }
 
-#ifdef TELEMEGA
+#if TELEMEGA || TELEMEGA_V4
 struct ao_azel {
        int     az;
        int     el;
@@ -529,9 +596,9 @@ ao_insert(void)
 #endif
 
                (void) accel;
-               if (!tick_offset)
-                       tick_offset = -ao_data_static.tick;
-               if ((prev_tick - ao_data_static.tick) > 0x400)
+               if (!start_tick)
+                       start_tick = ao_data_static.tick;
+               if ((AO_TICK_SIGNED) (prev_tick - ao_data_static.tick) > 0x400)
                        tick_offset += 65536;
                if (prev_tick) {
                        int ticks = ao_data_static.tick - prev_tick;
@@ -540,11 +607,11 @@ ao_insert(void)
                        simple_speed += accel * ticks / 100.0;
                }
                prev_tick = ao_data_static.tick;
-               time = (double) (ao_data_static.tick + tick_offset) / 100;
+               time = (double) (ao_data_static.tick + tick_offset - start_tick) / 100;
 
                double height = 0;
 #if HAS_BARO
-#if TELEMEGA || TELEMETRUM_V2 || EASYMINI
+#if TELEMEGA || TELEMETRUM_V2 || EASYMINI || TELEMEGA_V4
                ao_ms5607_convert(&ao_data_static.ms5607_raw, &ao_data_static.ms5607_cooked);
                height = ao_pa_to_altitude(ao_data_static.ms5607_cooked.pres) - ao_ground_height;
 
@@ -589,7 +656,7 @@ ao_insert(void)
                }
 
                if (!ao_summary) {
-#if TELEMEGA
+#if TELEMEGA || TELEMEGA_V4
                        static struct ao_quaternion     ao_ground_mag;
                        static int                      ao_ground_mag_set;
 
@@ -680,10 +747,10 @@ ao_insert(void)
 #if 1
                        printf("%7.2f height %8.2f accel %8.3f accel_speed %8.3f "
                               "state %d k_height %8.2f k_speed %8.3f k_accel %8.3f avg_height %5d drogue %4d main %4d error %5d"
-#if TELEMEGA
+#if TELEMEGA || TELEMEGA_V4
                               " angle %5d "
                               "accel_x %8.3f accel_y %8.3f accel_z %8.3f gyro_x %8.3f gyro_y %8.3f gyro_z %8.3f mag_x %8d mag_y %8d, mag_z %8d mag_angle %4d "
-                              "avg_accel %8.3f "
+                              "avg_accel %8.3f pyro %d inhibited %d"
 #endif
                               "\n",
                               time,
@@ -711,7 +778,26 @@ ao_insert(void)
                               ao_data_static.hmc5883.y,
                               ao_data_static.hmc5883.z,
                               ao_mag_angle,
-                              ao_coast_avg_accel / 16.0
+                              ao_coast_avg_accel / 16.0,
+                              ao_pyro_fired * 10,
+                              ao_pyro_inhibited * 10
+#endif
+#if TELEMEGA_V4
+                              , ao_sample_orient,
+
+                              ao_bmx160_accel(ao_data_static.bmx160.acc_x),
+                              ao_bmx160_accel(ao_data_static.bmx160.acc_y),
+                              ao_bmx160_accel(ao_data_static.bmx160.acc_z),
+                              ao_bmx160_gyro(ao_data_static.bmx160.gyr_x - ao_ground_bmx160.gyr_x),
+                              ao_bmx160_gyro(ao_data_static.bmx160.gyr_y - ao_ground_bmx160.gyr_y),
+                              ao_bmx160_gyro(ao_data_static.bmx160.gyr_z - ao_ground_bmx160.gyr_z),
+                              ao_data_static.bmx160.mag_x,
+                              ao_data_static.bmx160.mag_y,
+                              ao_data_static.bmx160.mag_z,
+                              ao_mag_angle,
+                              ao_coast_avg_accel / 16.0,
+                              ao_pyro_fired * 10,
+                              ao_pyro_inhibited * 10
 #endif
                                );
 #endif
@@ -769,7 +855,7 @@ void
 ao_sleep(void *wchan)
 {
        if (wchan == &ao_data_head) {
-#if TELEMEGA
+#if TELEMEGA || TELEMEGA_V4
                if (ao_flight_state >= ao_flight_boost && ao_flight_state < ao_flight_landed)
                        ao_pyro_check();
 #endif
@@ -780,6 +866,9 @@ ao_sleep(void *wchan)
 #if TELEMEGA
                                ao_data_static.mpu6000 = ao_ground_mpu6000;
 #endif
+#if TELEMEGA_V4
+                               ao_data_static.bmx160 = ao_ground_bmx160;
+#endif
 #if TELEMETRUM_V1
                                ao_data_static.adc.accel = ao_flight_ground_accel;
 #endif
@@ -792,7 +881,7 @@ ao_sleep(void *wchan)
                        }
 
                        if (eeprom) {
-#if TELEMEGA || EASYMOTOR_V_2
+#if TELEMEGA || EASYMOTOR_V_2 || TELEMEGA_V4
                                struct ao_log_mega      *log_mega;
 #endif
 #if EASYMOTOR_V_2
@@ -892,6 +981,102 @@ ao_sleep(void *wchan)
                                        }
                                        break;
 #endif
+#if TELEMEGA_V4
+                               case AO_LOG_FORMAT_TELEMEGA_4:
+                                       log_mega = (struct ao_log_mega *) &eeprom->data[eeprom_offset];
+                                       eeprom_offset += sizeof (*log_mega);
+                                       switch (log_mega->type) {
+                                       case AO_LOG_FLIGHT:
+                                               ao_flight_number = log_mega->u.flight.flight;
+                                               ao_flight_ground_accel = log_mega->u.flight.ground_accel;
+                                               ao_flight_started = 1;
+                                               ao_ground_pres = log_mega->u.flight.ground_pres;
+                                               ao_ground_height = ao_pa_to_altitude(ao_ground_pres);
+                                               ao_ground_accel_along = log_mega->u.flight.ground_accel_along;
+                                               ao_ground_accel_across = log_mega->u.flight.ground_accel_across;
+                                               ao_ground_accel_through = log_mega->u.flight.ground_accel_through;
+                                               ao_ground_roll = log_mega->u.flight.ground_roll;
+                                               ao_ground_pitch = log_mega->u.flight.ground_pitch;
+                                               ao_ground_yaw = log_mega->u.flight.ground_yaw;
+                                               ao_ground_bmx160.acc_x = ao_ground_accel_along;
+                                               ao_ground_bmx160.acc_y = -ao_ground_accel_across;
+                                               ao_ground_bmx160.acc_z = ao_ground_accel_through;
+                                               ao_ground_bmx160.gyr_x = ao_ground_roll >> 9;
+                                               ao_ground_bmx160.gyr_y = -(ao_ground_pitch >> 9);
+                                               ao_ground_bmx160.gyr_z = ao_ground_yaw >> 9;
+                                               break;
+                                       case AO_LOG_STATE:
+                                               break;
+                                       case AO_LOG_SENSOR:
+                                               ao_data_static.tick = log_mega->tick;
+                                               ao_data_static.ms5607_raw.pres = log_mega->u.sensor.pres;
+                                               ao_data_static.ms5607_raw.temp = log_mega->u.sensor.temp;
+                                               ao_data_set_along(&ao_data_static, log_mega->u.sensor.accel_along);
+                                               ao_data_set_across(&ao_data_static, log_mega->u.sensor.accel_across);
+                                               ao_data_set_through(&ao_data_static, log_mega->u.sensor.accel_through);
+                                               ao_data_set_roll(&ao_data_static, log_mega->u.sensor.gyro_roll);
+                                               ao_data_set_pitch(&ao_data_static, log_mega->u.sensor.gyro_pitch);
+                                               ao_data_set_yaw(&ao_data_static, log_mega->u.sensor.gyro_yaw);
+                                               ao_data_set_mag_along(&ao_data_static, log_mega->u.sensor.mag_along);
+                                               ao_data_set_mag_across(&ao_data_static, log_mega->u.sensor.mag_across);
+                                               ao_data_set_mag_through(&ao_data_static, log_mega->u.sensor.mag_through);
+#if AO_ADXL375_INVERT
+                                               ao_data_static.adxl375.AO_ADXL375_AXIS = ao_data_accel_invert(log_mega->u.sensor.accel);
+#else
+                                               ao_data_static.adxl375.AO_ADXL375_AXIS = log_mega->u.sensor.accel;
+#endif
+                                               if (ao_config.pad_orientation != AO_PAD_ORIENTATION_ANTENNA_UP)
+                                                       ao_data_static.adxl375.AO_ADXL375_AXIS = ao_data_accel_invert(ao_data_static.adxl375.AO_ADXL375_AXIS);
+                                               ao_records_read++;
+                                               ao_insert();
+                                               return;
+                                       case AO_LOG_TEMP_VOLT:
+                                               if (pyros_fired != log_mega->u.volt.pyro) {
+                                                       printf("pyro changed %x -> %x\n", pyros_fired, log_mega->u.volt.pyro);
+                                                       pyros_fired = log_mega->u.volt.pyro;
+                                               }
+                                               break;
+                                       case AO_LOG_GPS_TIME:
+                                               ao_gps_prev = ao_gps_static;
+                                               ao_gps_static.tick = log_mega->tick;
+                                               ao_gps_static.latitude = log_mega->u.gps.latitude;
+                                               ao_gps_static.longitude = log_mega->u.gps.longitude;
+                                               {
+                                                       int16_t altitude_low = log_mega->u.gps.altitude_low;
+                                                       int16_t altitude_high = log_mega->u.gps.altitude_high;
+                                                       int32_t altitude = altitude_low | ((int32_t) altitude_high << 16);
+
+                                                       AO_TELEMETRY_LOCATION_SET_ALTITUDE(&ao_gps_static, altitude);
+                                               }
+                                               ao_gps_static.flags = log_mega->u.gps.flags;
+                                               if (!ao_gps_count)
+                                                       ao_gps_first = ao_gps_static;
+                                               ao_gps_count++;
+                                               break;
+                                       case AO_LOG_GPS_SAT:
+                                               break;
+                                       }
+                                       break;
+#endif
+#ifdef foo_TELEMEGA_V4
+                               case AO_LOG_FORMAT_TELEMEGA_4:
+                                       log_mega = (struct ao_log_mega *) &eeprom->data[eeprom_offset];
+                                       eeprom_offset += sizeof (*log_mega);
+                                       switch (log_mega->type) {
+                                       case AO_LOG_FLIGHT:
+                                               ao_flight_number = log_mega->u.flight.flight;
+                                               ao_flight_ground_accel = log_mega->u.flight.ground_accel;
+                                               ao_flight_started = 1;
+                                               break;
+                                       case AO_LOG_SENSOR:
+                                               ao_data_static.tick = log_mega->tick;
+                                               ao_data_static.adxl375.AO_ADXL375_AXIS = log_mega->u.sensor.accel;
+                                               ao_records_read++;
+                                               ao_insert();
+                                               return;
+                                       }
+                                       break;
+#endif
 #if TELEMETRUM_V2
                                case AO_LOG_FORMAT_TELEMETRUM:
                                        log_metrum = (struct ao_log_metrum *) &eeprom->data[eeprom_offset];
index 7c1ecc15f50607a20ee3cbcd1d0a7c688aea8ba6..1e7847e5603995b842cfec83918b6e7f5a9bd76b 100644 (file)
@@ -17,6 +17,7 @@
  */
 
 #define AO_GPS_TEST
+#define AO_TICK_TYPE uint32_t
 #include "ao_host.h"
 #include <termios.h>
 #include <errno.h>
index 11c54601b9cee77d5a784848afb3a7f44033114b..bd8998b77e959741daff920669cc13b78d606329 100644 (file)
@@ -17,7 +17,9 @@
  */
 
 #define AO_GPS_TEST
+#define AO_TICK_TYPE uint32_t
 #define HAS_GPS 1
+#define tick_count 0
 #include "ao_host.h"
 #include <termios.h>
 #include <errno.h>
@@ -49,6 +51,8 @@ struct ao_gps_orig {
        int16_t                 altitude;       /* m */
        uint16_t                ground_speed;   /* cm/s */
        uint8_t                 course;         /* degrees / 2 */
+       uint8_t                 pdop;           /* unused */
+       uint8_t                 vdop;           /* unused */
        uint8_t                 hdop;           /* * 5 */
        int16_t                 climb_rate;     /* cm/s */
        uint16_t                h_error;        /* m */
index 0833e4f60a3c158b5dabb61768991b60893bed80..6cccf0e51b3af18e43e62a75a44bf920f56fbf02 100644 (file)
  */
 
 #define AO_GPS_TEST
+#define AO_TICK_TYPE uint32_t
 #define HAS_GPS        1
+#define ao_tick_count 0
 #include "ao_host.h"
 #include <termios.h>
 #include <errno.h>
 #include <sys/types.h>
 #include <sys/stat.h>
+#include <stdbool.h>
 #include <fcntl.h>
 #include <unistd.h>
 #define AO_GPS_NUM_SAT_MASK    (0xf << 0)
index 952460d0c2831c2daf12808037ffa947ee019171..ac4a69bd4702f13a930a3c907bbe98c3f0b0d79d 100644 (file)
@@ -17,6 +17,7 @@
  */
 
 #define _GNU_SOURCE
+#define AO_TICK_TYPE uint32_t
 
 #include <stdint.h>
 #include <stdio.h>
index 27f8ddcdeedc832fab8a40574195551850c72c26..87f34cd9fee155de93d2b277efab6f327efc4ff5 100755 (executable)
@@ -14,7 +14,7 @@ case $# in
        exit 1
 esac
 
-gnuplot -persist << EOF
+cat - /dev/tty <<EOF | gnuplot
 set ylabel "distance (m)"
 set y2label "angle (d)"
 set xlabel "time (s)"
@@ -22,8 +22,12 @@ set xtics border out nomirror
 set ytics border out nomirror
 set y2tics border out nomirror
 set title "$title"
-plot "$file" using 1:5 with lines axes x1y1 title "height",\
-"$file" using 1:7 with lines axes x1y2 title "angle",\
-"$file" using 1:13 with lines axes x1y2 title "gps angle",\
-"$file" using 1:15 with lines axes x1y2 title "sats"
+plot "$file" using 1:3 with lines axes x1y1 title "height",\
+"$file" using 1:7 with lines axes x1y1 title "speed", \
+"$file" using 1:5 with lines axes x1y1 title "accel", \
+"$file" using 1:13 with lines axes x1y1 title "k_speed",\
+"$file" using 1:15 with lines axes x1y1 title "k_accel",\
+"$file" using 1:25 with lines axes x1y2 title "angle",\
+"$file" using 1:49 with lines axes x1y2 title "pyro",\
+"$file" using 1:51 with lines axes x1y2 title "inhibited"
 EOF