]>
git.gag.com Git - fw/altos/log
Keith Packard [Wed, 10 May 2017 22:18:13 +0000 (15:18 -0700)]
altosuilib: Add time series subclass with data for generating a plot
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Wed, 10 May 2017 22:16:34 +0000 (15:16 -0700)]
altoslib: Add initial time series functions
Provides the basis for offering a sequence of time/value datasets for
graphing instead of using AltosState.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Wed, 10 May 2017 21:47:15 +0000 (14:47 -0700)]
altoslib: Another bit of altoslib for the old eeprom stuff
Signed-off-by: Keith Packard <keithp@keithp.com>
Bdale Garbee [Thu, 11 May 2017 17:27:30 +0000 (11:27 -0600)]
have AltosGraph use new AltosPressure to get imperial_units working
Bdale Garbee [Thu, 27 Apr 2017 21:27:49 +0000 (15:27 -0600)]
initial tests made using Terry's stand with a 2500psi sensor
Bdale Garbee [Thu, 27 Apr 2017 18:57:49 +0000 (12:57 -0600)]
telefiretwo: don't try to record pre-burn sensor values in FLIGHT record
Bdale Garbee [Thu, 27 Apr 2017 21:21:53 +0000 (15:21 -0600)]
have git ignore ao-bringup/cal_values
Bdale Garbee [Thu, 11 May 2017 04:19:38 +0000 (22:19 -0600)]
telegps: use new eeprom reading code
Keith Packard [Tue, 9 May 2017 09:31:04 +0000 (02:31 -0700)]
altoslib: Remove older eeprom handling code
The new code appears to work in minor testing; time to try it all the time.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 9 May 2017 09:11:25 +0000 (02:11 -0700)]
altoslib: Save eeprom data in new .eeprom format
A chunk of json for the config values followed by hex numbers for the data.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 9 May 2017 07:22:35 +0000 (00:22 -0700)]
altosui: Use new eeprom reading code
This just means using different file opening functions, which then
get matched by AltosEepromFile and sent off to the new eeprom code.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 9 May 2017 07:20:23 +0000 (00:20 -0700)]
altoslib: Hack up AltosEepromFile to support new eeprom code
Redirect when asked to read an eeprom file using the "Reader" type.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 9 May 2017 07:19:51 +0000 (00:19 -0700)]
altoslib: Compile AltosForce and AltosPressure
Useful if you want to actually use these.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 9 May 2017 07:19:05 +0000 (00:19 -0700)]
altoslib: Add new eeprom management code
Generic .eeprom file parsing, simpler per-type eeprom data extraction.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 9 May 2017 07:17:40 +0000 (00:17 -0700)]
altoslib: Add set_config_data to AltosState
Initialize all config-data related state values.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 9 May 2017 07:17:11 +0000 (00:17 -0700)]
altoslib: Add empty constructor for AltosPyro for JSON
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 9 May 2017 07:16:36 +0000 (00:16 -0700)]
altoslib: Add Ms5607 constructor that just takes config_data
Use for making Ms5607 from eeprom files.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 9 May 2017 07:14:33 +0000 (00:14 -0700)]
altoslib: Add AltosForce and AltosPressure units
Useful for TeleFireTwo.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 9 May 2017 07:13:16 +0000 (00:13 -0700)]
altoslib: Hide members from json by prefixing with __
This lets some structures which would otherwise recurse (and crash)
get converted to json, assuming the hidden members aren't relevant.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 5 May 2017 05:09:31 +0000 (22:09 -0700)]
altos/telemini-v3.0: Use dbg connector pin 5 for force bootloader
This works way better than attempting to use the beeper pin.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 5 May 2017 05:07:51 +0000 (22:07 -0700)]
altos/telemini-v3.0: Add 'recovery mode' on PA14 (pin 6 on dbg header)
Connect this pin to GND (pin 3) and TeleMini will come up with N0CALL
at 434.550MHz using the original frequency calibration. Helps recover
from accidental mis-configuration.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 5 May 2017 05:06:16 +0000 (22:06 -0700)]
altos: Move 'ao_force_freq' to ao_config.c
Instead of having to add it to each product using this variable.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 5 May 2017 05:04:57 +0000 (22:04 -0700)]
altos: Make CDC ACM 'line coding' public
This allows other systems to see what baud rate the host has requested.
Signed-off-by: Keith Packard <keithp@keithp.com>
Miguel Benavidez [Thu, 4 May 2017 18:29:33 +0000 (11:29 -0700)]
altoslib: Fix MS5607 raw data to pressure conversion function
The MS5607 sensor provides raw 24-bit ADC outputs to the host along
with calibration constants necessary to convert those into temperature
and pressure values. The datasheet has a flow chart indicating how to
perform this computation. There are two parts of the algorithm which
adjust the result based on the ambient temperature, temperatures below
20°C get one compensation factor and temperatures below -15°C get an
additional factor.
The ground station version of this function mistakenly applied the
second compensation factor for all temperatures below +15°C. The
result was that the pressure computed on the ground when the measured
temperature was between -15°C and +15°C was incorrect, resulting in
altitudes which were several hundred meters off in some situations.
This can be seen when displaying any .eeprom (or .mpd) data
files for flights with temperatures in that range. The datafiles
themselves are not corrupted, only the display operation.
This is not seen for telemetry data, where the pressure and associated
altitude is computed in the airframe using the correct algorithm.
Thanks much to Miguel and the rest of the Vanguard School TARC team
for identifying the problem and providing this fix.
Signed-off-by: Keith Packard <keithp@keithp.com>
Bdale Garbee [Wed, 3 May 2017 17:47:33 +0000 (11:47 -0600)]
altos/telebt-v4.0 Set CPU clock to 48Mhz instead of 96Mhz
Keith Packard [Tue, 2 May 2017 18:49:21 +0000 (11:49 -0700)]
altos/telegps-v2.0: Disable external serial port to save ROM
We'll have to rewrite some of the serial code to avoid sucking memory here.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 2 May 2017 18:35:18 +0000 (11:35 -0700)]
altos/stmf0: Add code to use SoC flash as storage
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 1 May 2017 00:42:23 +0000 (17:42 -0700)]
altos/telegps-v2.0: Reorder initialization sequence
This tries to be a bit more logical about the board initialization
sequence, starting with the OS, then the support hardware, internal
drivers, external drivers and finally services.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 1 May 2017 00:41:21 +0000 (17:41 -0700)]
altos/telegps-v2.0: CC1200 CS is PA1, not PA5.
Also remove some unneeded config of an additional pin for MCU wakeup,
which the CC1120 needs but the CC1200 does not.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 1 May 2017 00:40:26 +0000 (17:40 -0700)]
altos/telegps-v2.0: GPS chip is connected to serial 2, not serial 1
Turn on serial 2 and use it for GPS.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 1 May 2017 00:39:54 +0000 (17:39 -0700)]
altos/telegps-v2.0: Remove some unneeded defines
HAS_MS5607 and HAS_RADIO_RECV aren't useful.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 1 May 2017 00:39:03 +0000 (17:39 -0700)]
altos/telegps-v2.0: Battery ADC input is on PB1, not PA0
Rewire as needed.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 1 May 2017 00:38:21 +0000 (17:38 -0700)]
altos/telegps-v2.0: Set CPU clock to 48MHz instread of 96MHz
Turns out the CPU doesn't run well at that speed. Who would have guessed?
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 1 May 2017 00:37:45 +0000 (17:37 -0700)]
altos/telegps-v2.0: Adjust LED config
The LED is green, not red. Use it for panic and GPS lock.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 1 May 2017 00:35:28 +0000 (17:35 -0700)]
altos/kernel: Allow TeleGPS v2 to scale battery in telem
TeleGPS v2 uses the STMF0 processor instead of the LPC11, which means
the ADC range is different. As the raw ADC value was getting sent to
represent battery voltage in the config packet, we need to scale that
for the different processor. This patch allows that to happen.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 1 May 2017 00:34:08 +0000 (17:34 -0700)]
src/kernel: Add GPS lock blink LED to tracker code
Blinks an LED briefly once every three seconds when GPS is locked.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 07:08:51 +0000 (00:08 -0700)]
altos: Build MicroPeak-v2.0 by default
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 07:07:03 +0000 (00:07 -0700)]
altos/micropeak-v2.0: Add initial MicroPeak v2 support
stm32f042 processor replaces the attiny85 and adds USB support along
with more storage.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 07:05:01 +0000 (00:05 -0700)]
altos/stmf0: Add support for HSI clocked applications
And allow application space to be limited to less than available flash.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 07:04:33 +0000 (00:04 -0700)]
altos/stmf0: Fix HSI clock rate.
It's 8MHz, not 16MHz
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 07:04:14 +0000 (00:04 -0700)]
altos/stmf0: Make sure systick is off before programming
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 07:02:54 +0000 (00:02 -0700)]
altos/stmf0: Compute serial baud rate registers at runtime
This allows the system clock to vary at runtime, instead of requiring
a fixed value.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 07:02:02 +0000 (00:02 -0700)]
altos/micropeak: Update ao_micropeak.h for MicroPeak v2
Allow different sample times, add constant for MicroPeak v2 log files.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 07:01:18 +0000 (00:01 -0700)]
altos/micropeak: Use existing ao_ms5607_current variable
Instead of defining another.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 07:00:11 +0000 (00:00 -0700)]
altos: Add header file for ao_report_micro.c
Defines the functions in this file.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 06:59:27 +0000 (23:59 -0700)]
altos: Add 100ms constants for baro Kalman filter
MicroPeak v2 uses this rate.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 06:52:29 +0000 (23:52 -0700)]
altos: Adapt micro log to MicroPeak V3
Allow use of regular serial API for sending data.
Allow application to specify different storage size.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 06:51:21 +0000 (23:51 -0700)]
altos/ms5607: Allow applications to not use the normal data ring and thread
MicroPeak V2 has tasks, but doesn't want to use another thread just
for the MS5607.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 28 Apr 2017 06:50:12 +0000 (23:50 -0700)]
micropeak: Add MicroPeak V2 to the download code
Add the MicroPeak V2 sample rate so the timing values are correct.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Wed, 26 Apr 2017 06:56:41 +0000 (23:56 -0700)]
Fake thrust data as accel for now
Keith Packard [Wed, 26 Apr 2017 04:27:40 +0000 (21:27 -0700)]
ao-bringup: make turnon_telemini search for ao_usbload on $PATH
I've uninstalled the altos package as it has a version of ao-usbload
which is too old for telemini.
Signed-off-by: Keith Packard <keithp@keithp.com>
Bdale Garbee [Wed, 26 Apr 2017 05:06:34 +0000 (23:06 -0600)]
telemini-v3.0: make git ignore build products
Bdale Garbee [Wed, 26 Apr 2017 05:01:53 +0000 (23:01 -0600)]
ao-tools/ao-makebin: have git ignore built object
Bdale Garbee [Wed, 26 Apr 2017 05:00:34 +0000 (23:00 -0600)]
telebt-v4.0: make git ignore products of build
Bdale Garbee [Wed, 26 Apr 2017 04:58:00 +0000 (22:58 -0600)]
telegps-v2.0: slow down radio chip spi speed
Bdale Garbee [Wed, 26 Apr 2017 04:28:28 +0000 (22:28 -0600)]
telebt-v4.0: slow down SPI speed to radio chip
Bdale Garbee [Wed, 26 Apr 2017 04:26:12 +0000 (22:26 -0600)]
telebt-v4.0: turn off pin remapping in the flash loader, too
Bdale Garbee [Wed, 26 Apr 2017 04:12:42 +0000 (22:12 -0600)]
telebt-v4.0: don't need the USB pin remapping flag
Bdale Garbee [Wed, 26 Apr 2017 04:10:41 +0000 (22:10 -0600)]
telebt-v4.0: add ao_send_packet
Bdale Garbee [Wed, 26 Apr 2017 04:04:22 +0000 (22:04 -0600)]
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Bdale Garbee [Wed, 26 Apr 2017 04:03:56 +0000 (22:03 -0600)]
telebt-v4.0: initial creation of firmware for new product, no BT yet
Keith Packard [Tue, 25 Apr 2017 00:06:01 +0000 (17:06 -0700)]
altos/nucleo-32: Add lisp save/restore
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 25 Apr 2017 00:01:43 +0000 (17:01 -0700)]
altos/telegps-v2.0: git ignore make results
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 25 Apr 2017 00:00:10 +0000 (17:00 -0700)]
Ignore ao_lisp_test
Keith Packard [Tue, 25 Apr 2017 05:26:31 +0000 (22:26 -0700)]
Update releasing to add more firmware bits
Also, document what is needed to get a new product into the build
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 25 Apr 2017 05:25:57 +0000 (22:25 -0700)]
altosui: Add TeleMini v3.0 and EasyMini v2.0 firmware to windows package
Sigh. This can't easily be done from Makefile.am
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 25 Apr 2017 05:25:14 +0000 (22:25 -0700)]
altos/ao-bringup: Switch turnon_easymini to v2.0
Not planning on buildin more v1.0 boards
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 25 Apr 2017 05:01:04 +0000 (22:01 -0700)]
altosui: Ship telemini v3.0 firmware
Even though we don't provide a cable for reflashing yet
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 25 Apr 2017 04:59:16 +0000 (21:59 -0700)]
altos: Add telemini-v3.0 and easymini-v2.0 to default altos build
Make sure they get built for releases
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 25 Apr 2017 04:56:14 +0000 (21:56 -0700)]
altos/easymini-v2.0: Add EasyMini v2.0
Like EasyMini v1.0, but with the STM32F0 processor instead of LPC
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 25 Apr 2017 04:54:25 +0000 (21:54 -0700)]
altos/telemini-v3.0: Fix license
Was GPL2, switch to GPL2+
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 25 Apr 2017 04:32:02 +0000 (21:32 -0700)]
altos/stmf0: Not all timer configurations use AF2
Allow applications to select other configurations.
Signed-off-by: Keith Packard <keithp@keithp.com>
Bdale Garbee [Tue, 25 Apr 2017 02:04:37 +0000 (20:04 -0600)]
add telemini-v3.0 to list of binaries we stach in LLC repo for production use
Bdale Garbee [Tue, 25 Apr 2017 01:46:05 +0000 (19:46 -0600)]
two more places where telemini-outline.pdf filename needs to be updated
Keith Packard [Mon, 24 Apr 2017 22:47:08 +0000 (15:47 -0700)]
Bump to version 1.7
TeleMini v3.0 support
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 25 Apr 2017 00:11:03 +0000 (17:11 -0700)]
altoslib: renamed AltosSensorTMini2, but didn't update AltosIdleFetch
Because Java found the old installed version of this library. Thanks!
Signed-off-by: Keith Packard <keithp@keithp.com>
Bdale Garbee [Mon, 24 Apr 2017 23:18:10 +0000 (17:18 -0600)]
update copyright year in docs
Keith Packard [Mon, 24 Apr 2017 23:40:46 +0000 (16:40 -0700)]
altos/ao_pad.c: Use #if HAS_LOG instead of #ifdef HAS_LOG
TeleFire v0.1 defines HAS_LOG to 0.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 24 Apr 2017 22:59:23 +0000 (15:59 -0700)]
doc: Errors in the TeleMini v3.0 updates found by Bdale
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 23 Apr 2017 05:04:31 +0000 (22:04 -0700)]
altos: Move old AO_LAUNCH defines to cc1111/ao_launch.h
These were getting accidentally used by ao_pad.c
Signed-off-by: Keith Packard <keithp@keithp.com>
Bdale Garbee [Sun, 23 Apr 2017 06:02:47 +0000 (00:02 -0600)]
allow multiple tests to be logged on telefiretwo without rebooting
Bdale Garbee [Sun, 23 Apr 2017 05:42:23 +0000 (23:42 -0600)]
implement static test start and stop protocol for telefiretwo+telebt
Bdale Garbee [Sun, 23 Apr 2017 05:02:53 +0000 (23:02 -0600)]
eliminate spurious close braces
Bdale Garbee [Sun, 23 Apr 2017 05:01:44 +0000 (23:01 -0600)]
add static test start and stop commands to radio protocol for telefiretwo
Bdale Garbee [Sun, 23 Apr 2017 05:01:26 +0000 (23:01 -0600)]
enable logging support in telefiretwo
Bdale Garbee [Sat, 22 Apr 2017 23:20:41 +0000 (17:20 -0600)]
cobble up a command to toggle logging on/off on TeleFireTwo
Bdale Garbee [Sat, 22 Apr 2017 22:59:03 +0000 (16:59 -0600)]
a stab at turning on rudimentary logging for telefiretwo
Keith Packard [Sat, 22 Apr 2017 22:55:48 +0000 (15:55 -0700)]
altoslib: Add TeleFireTwo eeprom support
Signed-off-by: Keith Packard <keithp@keithp.com>
Bdale Garbee [Sat, 22 Apr 2017 22:36:18 +0000 (16:36 -0600)]
fleshing out logging for telefiretwo
Bdale Garbee [Sat, 22 Apr 2017 21:45:52 +0000 (15:45 -0600)]
enable spi flash on telefiretwo
Bdale Garbee [Sat, 22 Apr 2017 17:38:08 +0000 (11:38 -0600)]
fix TeleFireTwo product name in ao-list output
Keith Packard [Sat, 22 Apr 2017 06:02:57 +0000 (23:02 -0700)]
altos/stmf0: Pull beeper pin low when beeper is off
This avoids having the pin float and pick up noise from any adjacent
signals, like TeleMini's radio.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 22 Apr 2017 05:24:00 +0000 (22:24 -0700)]
doc: Finish updates for v1.7
Scrub all TeleMini references and make sure they're fixed for v3. No
'emergency' mode yet. No reflashing yet.
Add v1.7 release notes.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 22 Apr 2017 04:32:26 +0000 (21:32 -0700)]
altos/lpc: Really fix aes entry in lpc vpath
I added another entry instead of fixing the existing one. Not ideal.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 22 Apr 2017 01:16:45 +0000 (18:16 -0700)]
Replace turnon_telemini with v3 version. Add test-teleminiv3
Prepare for TeleMini v3.0 release.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 22 Apr 2017 01:08:25 +0000 (18:08 -0700)]
doc: Update TeleMini v3 photos to production unit
Replace prototype photos
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 22 Apr 2017 00:15:05 +0000 (17:15 -0700)]
alots/stmf0: Fix vpath entry for AES directory
Mis-placed )
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 22 Apr 2017 00:06:23 +0000 (17:06 -0700)]
altos/lpc,altos/stmf0: Use -n flag to work around link editor issue
Something changed in the link editor which makes it complain about 'no
space for program headers' on LPC and STMF0 builds. Somehow, adding
the '-n' flag to the linking step fixes it. It doesn't appear to break
the build, so I guess it's ok?
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 22 Apr 2017 00:04:28 +0000 (17:04 -0700)]
altos/telemini-v3.0: Remove vestiges of the pre-USB code
Pre-USB telemini v3 designs had a separate firmware load for radio
calibration. Now that we've got enough USB to perform flash/cal/test,
we don't need that other firmware load, so we can remove the remaining
Makefile remnants of the calibration load.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 21 Apr 2017 23:40:58 +0000 (16:40 -0700)]
altos/lpc: Add (void *) cast to fix alignment warning
The -Wcast-align warning is generated when this cast is not present.
Signed-off-by: Keith Packard <keithp@keithp.com>