]>
git.gag.com Git - fw/altos/log
Keith Packard [Sat, 20 Oct 2018 14:34:57 +0000 (07:34 -0700)]
altos/adxl375: Clean up initialization, shortening self test period
Set the self test period to that suggested in the documentation.
Eliminate some debug variables.
Signed-off-by: Keith Packard <keithp@keithp.com>
Bdale Garbee [Sat, 20 Oct 2018 07:18:12 +0000 (01:18 -0600)]
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Bdale Garbee [Sat, 20 Oct 2018 07:17:39 +0000 (01:17 -0600)]
altoslib: fix computation of TeleGPS battery voltage
Keith Packard [Fri, 19 Oct 2018 20:20:31 +0000 (13:20 -0700)]
altosui: Add EasyMega v2.0 firmware to release
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 19 Oct 2018 20:19:03 +0000 (13:19 -0700)]
altoslib: Add ADXL375 support and EasyMega v2.0 support
EasyMega v2.0 replaces the MMA655X with an ADXL375 part.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 19 Oct 2018 15:41:51 +0000 (08:41 -0700)]
altos: Add EasyMega v2.0 to default build
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 13 Oct 2018 16:43:25 +0000 (09:43 -0700)]
altos/easymega-v2.0: Add adxl375, replace mpu6000 with 9250 [v2]
Should reflect current hardware design now.
v2:
Use SPI mode 3 for ADXL375
Invert ADXL375 values
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 13 Oct 2018 16:46:01 +0000 (09:46 -0700)]
altos/easymega-v2.0: Change binary to easymega-v2.0 instead of easymega-v1.0
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 13 Oct 2018 16:41:31 +0000 (09:41 -0700)]
altos: Add ADXL375 driver [v2]
Includes self-test code and multi-byte mode operation for reading
sample registers.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 15 Oct 2018 18:15:31 +0000 (11:15 -0700)]
altos/stm: Support SPI modes other than 0
ADXL375 requires SPI mode 3.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 13 Oct 2018 20:42:34 +0000 (13:42 -0700)]
altos/stm: Make beeper driver support all possible tim234 configs
And update all users to be explicit about the desired config.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Fri, 19 Oct 2018 15:12:22 +0000 (08:12 -0700)]
altos: Create ao_data_fill shared function
This fills a data ring entry with all of the current sensor values
other than the ADC. It is used in all of the adc completion functions.
Signed-off-by: Keith Packard <keithp@keithp.com>
Bdale Garbee [Sat, 13 Oct 2018 16:17:47 +0000 (10:17 -0600)]
altos: remove usbtrng support (chaoskey prototypes)
Bdale Garbee [Sat, 13 Oct 2018 16:12:39 +0000 (10:12 -0600)]
altos: remove telescience support
Bdale Garbee [Sat, 13 Oct 2018 16:02:13 +0000 (10:02 -0600)]
altos: remove teledongle-v1.8 support (what was that, anyway?!?)
Bdale Garbee [Sat, 13 Oct 2018 15:59:22 +0000 (09:59 -0600)]
altos: remove megadongle-v0.1 support, never went beyond prototype
Bdale Garbee [Sat, 13 Oct 2018 15:57:44 +0000 (09:57 -0600)]
altos: remove telepyro-v0.1 support, which was never completed anyway
Bdale Garbee [Sat, 13 Oct 2018 15:55:03 +0000 (09:55 -0600)]
altos: remove teleterra-v0.1, also an ancient cc1111 project
Keith Packard [Sat, 13 Oct 2018 15:33:49 +0000 (08:33 -0700)]
altos/drivers: Use stdbool in ao_ms5607.c
We don't have TRUE and FALSE anymore (they were pdclib specific).
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 13 Oct 2018 15:27:41 +0000 (08:27 -0700)]
altos: Remove pdclib bits from Makefile
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 13 Oct 2018 15:27:17 +0000 (08:27 -0700)]
Remove .gitmodules
We no longer use submodules (yay!)
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 13 Oct 2018 15:26:02 +0000 (08:26 -0700)]
Bump version to 1.8.7.1
Tag development versions
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 2 Oct 2018 19:48:25 +0000 (12:48 -0700)]
altos/stm32f4-disco: Start hooking up stm32f413 USB for the disco board
Non-working as yet.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 2 Oct 2018 19:46:19 +0000 (12:46 -0700)]
altos/stm32f4: Add start of stm32f413 USB support
This code doesn't work yet.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 2 Oct 2018 19:46:01 +0000 (12:46 -0700)]
altos/stm32f4: Add stm32f413 USART support
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 2 Oct 2018 19:45:39 +0000 (12:45 -0700)]
altos/stm32f4: Add external interrupt bits
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 2 Oct 2018 19:44:58 +0000 (12:44 -0700)]
altos/stm32f4: Add more stm32f413 definitions and support code
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Wed, 12 Sep 2018 01:53:15 +0000 (18:53 -0700)]
altos: Clean up AO_ROMCONFIG bits
Remove address parameter (doesn't work with gcc), create shared
ao_romconfig in kernel.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Wed, 12 Sep 2018 01:51:59 +0000 (18:51 -0700)]
altos/stm32f4-disco: Hook up serial console. Add scheme
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Wed, 12 Sep 2018 01:50:45 +0000 (18:50 -0700)]
altos/stm32f4: Place ARM.exidx sections after .text
This makes the linker happy about not attempting to merge unordered
and ordered stuff (whatever that means...)
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Wed, 12 Sep 2018 01:50:15 +0000 (18:50 -0700)]
altos/stm32f4: Use full printf/scanf (including floats)
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Wed, 12 Sep 2018 01:49:22 +0000 (18:49 -0700)]
altos/stm32f4: Add usart driver for usart6
This is what the disco board hooks up.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Wed, 12 Sep 2018 01:46:52 +0000 (18:46 -0700)]
altos/stm32f4: Align stack to 8 bytes
This makes sure that doubles are aligned properly when passed on the stack.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 11 Sep 2018 19:03:27 +0000 (12:03 -0700)]
altos/stm32f4-disco: Add .gitignore
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 11 Sep 2018 18:57:50 +0000 (11:57 -0700)]
altos: Add generic LED driver.
This driver uses the generic GPIO functions and allows per-LED port
and pin configuration. It supports up to 32 LEDs.
Rename SoC-specific LED drivers.
Remove enabled parameter to ao_led_init
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 11 Sep 2018 17:40:24 +0000 (10:40 -0700)]
altos: Eliminate 'pin' field from GPIO functions
This was used with the 8051 bit-addressing mode to provide
single-instruction access to GPIO pins.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 11 Sep 2018 08:28:03 +0000 (01:28 -0700)]
altos/stm32f4: Fix clock configuration
Was running the PLL input too slow (it wants 2MHz).
Was configuring the PLL_P factor wrong (needs magic values, not P
value)
Set up clock debugging for PA8 and PC9 output. Enable on disco board
for debugging.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 11 Sep 2018 07:08:17 +0000 (00:08 -0700)]
altos/stm32f4: Add STM32F413 disco board support
Discovery development board
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 11 Sep 2018 07:07:38 +0000 (00:07 -0700)]
altos/stm32f4: Start adding support for STM32F413
Enough to get clocks lit up at least.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 2 Oct 2018 19:47:00 +0000 (12:47 -0700)]
altos: Remove 8051-ism from ao_usb.h
__at doesn't exist for non-8051
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 11 Sep 2018 07:05:38 +0000 (00:05 -0700)]
altos: Delete random 8051 ISR declarations
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Thu, 16 Aug 2018 05:44:17 +0000 (22:44 -0700)]
altos: Allow application-specific prompts for ao_cmd_readline
Lets other readline users specify alternate prompts.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Thu, 16 Aug 2018 02:17:19 +0000 (19:17 -0700)]
altos: Use stdbool true/false instead of TRUE/FALSE
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Thu, 16 Aug 2018 02:13:45 +0000 (19:13 -0700)]
altos: Make cmd number parsing functions return value
Don't use a global variable to hold the result.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Thu, 16 Aug 2018 00:47:37 +0000 (17:47 -0700)]
altos: Remove 8051 address space specifiers
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Thu, 16 Aug 2018 00:34:20 +0000 (17:34 -0700)]
altos: Remove *_TO_DATA macros
Now that we don't support 8051, we don't need these
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Wed, 15 Aug 2018 22:39:34 +0000 (15:39 -0700)]
Remove pdclib
Keith Packard [Sun, 5 Aug 2018 04:23:22 +0000 (12:23 +0800)]
altos: Switch to newlib-nano for libc on arm
Stop using pdclib
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 5 Aug 2018 04:17:19 +0000 (12:17 +0800)]
altos: Remove cc1111 products
We're not testing these anyways; building new firmware for them is not helpful.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 11 Sep 2018 07:06:44 +0000 (00:06 -0700)]
altos: use %lu for APRS altitude in sprintf
It's a long.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 13 Oct 2018 14:50:59 +0000 (07:50 -0700)]
altos/stm: Make flash loader work with either 8MHz or 16MHz xtal
Provide PLL definitions for both values.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sat, 13 Oct 2018 14:44:10 +0000 (07:44 -0700)]
altosdroid: Bump version to 18 for 1.8.7
Signed-off-by: Keith Packard <keithp@keithp.com>
Bdale Garbee [Sat, 13 Oct 2018 05:32:57 +0000 (23:32 -0600)]
altos: first cut at easymega v2.0 support .. nothing working yet
Bdale Garbee [Thu, 11 Oct 2018 02:41:40 +0000 (20:41 -0600)]
doc: add bootloader force instructions for TeleBT v4.0
Bdale Garbee [Tue, 9 Oct 2018 17:46:09 +0000 (11:46 -0600)]
update turnon_telebt to use new approach for saving cal value on TeleBT
Bdale Garbee [Tue, 9 Oct 2018 03:41:30 +0000 (21:41 -0600)]
capture changes to Releasing discovered during 1.8.7 release
Keith Packard [Tue, 9 Oct 2018 02:42:09 +0000 (19:42 -0700)]
altos/lpc: Make sure USB pull-up is held low at boot for 'a while'
Add a delay loop to make sure the host sees the pull-up low for long
enough.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Tue, 9 Oct 2018 02:40:32 +0000 (19:40 -0700)]
ao-bringup: Use new ao-cal-freq options when flashing teledongle v3.0
Use --nosave and --output to get the value needed to reflash the device.
Signed-off-by: Keith Packard <keithp@keithp.com>
Bdale Garbee [Mon, 8 Oct 2018 22:27:33 +0000 (16:27 -0600)]
doc: correct specs for TeleMega v3.0, which still uses the MMA6555
Bdale Garbee [Mon, 8 Oct 2018 22:07:32 +0000 (16:07 -0600)]
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Bdale Garbee [Mon, 8 Oct 2018 22:06:29 +0000 (16:06 -0600)]
add new script that uses openocd to reset an LPC target
Keith Packard [Mon, 8 Oct 2018 06:31:53 +0000 (23:31 -0700)]
Set version to 1.8.7
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 8 Oct 2018 06:31:04 +0000 (23:31 -0700)]
doc: Note fixes for Mac OS X
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Mon, 8 Oct 2018 06:25:25 +0000 (23:25 -0700)]
Switch to universal JavaApplicationStub for Mac OS X
The binary JavaApplicationStub only supports Mac JRE 6, even if you
install a later JRE from Oracle it will still run our apps with the
Mac version.
This replacement JavaApplicationStub is a shell script which comes
from here:
https://github.com/tofi86/universalJavaApplicationStub
I've tested it with Oracle JRE 10 installed and AltosUI came up fine,
and has access to our devices and networking.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 22:28:32 +0000 (16:28 -0600)]
altos-mapd: Add --max-zoom to limit tile loading. Set default to 15.
This ensures that we won't end up serving huge numbers of high
resolution images.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 21:26:27 +0000 (14:26 -0700)]
doc: Note that 1.8.7 fixes map images
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 21:11:03 +0000 (14:11 -0700)]
altosuilib: Leave some map debug code around for the future
Displays lat/lon on each map tile. Commented out for production use.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 21:06:51 +0000 (14:06 -0700)]
altoslib: Be less chatty about map loading
Only mention when a new tile is being fetched from the server.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 20:49:48 +0000 (14:49 -0600)]
altoslib: NumberFormat can't be shared between parsers
AltosJson uses NumberFormat to ensure locale-independent parsing of
values. However, NumberFormat appears to have some internal state
which means that each thread needs to have an independent NumberFormat
object. Create one for each parser as needed.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 20:12:56 +0000 (13:12 -0700)]
altosui/altosdroid: Change message in forbidden map tiles
These are outside of *known* launch areas.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 20:08:30 +0000 (14:08 -0600)]
altos-mapd: Check nearest portion of tile to launch site
We limit tile queries to those within 17km of a known launch
site. Change the check to look at the portion of the tile nearest each
launch site, instead of only checking the center location of the tile.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 17:32:48 +0000 (10:32 -0700)]
altos-map: Switch from json FD ops to json FILE ops
Older versions (in Debian stable) do not have the fd-based operations.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 17:03:31 +0000 (10:03 -0700)]
altos-mapd: Handle clients failing to send valid JSON
Just bail if the data we receive doesn't generate a json value.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 17:02:26 +0000 (10:02 -0700)]
altosuilib: InputEvent.getModifiers is deprecated, use getModifiersEx
Some java change; seems like it's a no-op for us.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 17:01:30 +0000 (10:01 -0700)]
altosui/altosdroid: Disable offline map type selections
Our server only supports hybrid maps for now. If that changes, we can
re-add this support easily enough.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 16:39:27 +0000 (09:39 -0700)]
altosuilib: Remove GrabNDrag.java
This isn't used anymore.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 16:22:44 +0000 (09:22 -0700)]
map-server: Implement altos-map in C
This app is all about startup time, and java starts
slowly. Re-implement in C to improve server performance.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 06:32:24 +0000 (23:32 -0700)]
altosdroid: Restore google maps key setting
Only for altosdroid, and use a key restricted to our app
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 06:25:50 +0000 (23:25 -0700)]
altosdroid: Set offline map scale to 1
Offline maps only supports scale 1 now.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 05:22:26 +0000 (23:22 -0600)]
altos-mapd: Install systemd service file and defaults file
This lets the map service 'just work' if enabled.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 04:32:12 +0000 (21:32 -0700)]
altos-map: Support version query from application
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 04:30:03 +0000 (21:30 -0700)]
altosuilib: Fix offline map messages to match new meanings
forbidden means outside of launch area.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 04:30:58 +0000 (21:30 -0700)]
altoslib: Retry map connections 10 times on network failure
This covers a host of problems between the application and google maps.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 04:30:03 +0000 (21:30 -0700)]
altosdroid: Fix offline map messages to match new meanings
forbidden means outside of launch area.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 03:21:07 +0000 (20:21 -0700)]
altoslib: Change map loading to lat=&lon= from center=
This is easier to parse.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 03:20:33 +0000 (20:20 -0700)]
altoslib: Use https for launch-sites.txt
http causes a redirect, which Java doesn't handle
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 04:28:36 +0000 (22:28 -0600)]
altos-mapd: Install altosmapd.jar file
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 04:27:58 +0000 (22:27 -0600)]
altos-mapd: Make cache service listen queue longer
Just in case the service gets busy, make the listen queue longer.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 04:27:20 +0000 (22:27 -0600)]
altos-mapd: Clean up log messages
Generate a single log message per request with remote address,
parameters and result code.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 04:26:46 +0000 (22:26 -0600)]
altos-mapd: remove debug printf
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 04:25:48 +0000 (22:25 -0600)]
altos-map: Retry connection to cache service
Just in case the cache service gets busy, retry the connection instead
of immediately failing.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 02:33:51 +0000 (19:33 -0700)]
altos-mapd: Add geo-fencing for map requests. Add port and key arguments
Map requests are now limited to a region within 17km of any registered
launch site.
The --port argument allows the listen port to be changed.
The --key argument provides the name of a file containing the Google
maps API key.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 02:29:01 +0000 (19:29 -0700)]
altoslib: Switch to maps.altusmetrum.org when no google map key is available
The map key is only usable from maps.altusmetrum.org at this point,
and that service will be proxying for everyone in the near future.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 02:27:43 +0000 (19:27 -0700)]
altoslib: Allow launch site URL to be overridden at runtime
Expose a public variable, AltosLaunchSites.launch_sites_url, that will
be used in place of the environment variable or pre-defined value.
Signed-off-by: Keith Packard <keithp@keithp.com>
Bdale Garbee [Sun, 7 Oct 2018 00:55:05 +0000 (18:55 -0600)]
Merge branch 'master' of ssh://git.gag.com/scm/git/fw/altos
Bdale Garbee [Sun, 7 Oct 2018 00:54:35 +0000 (18:54 -0600)]
altoslib: update launch-sites.txt location to new home at maps.altusmetrum.org
Keith Packard [Sun, 7 Oct 2018 00:17:20 +0000 (17:17 -0700)]
doc: Make use of 'faketime' configurable with configure.ac. Default to 'no'
This ensures that older a2x versions don't simply wedge while building
the docs.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 00:11:48 +0000 (18:11 -0600)]
altos-mapd: Use command line to pass map directory in
Don't bother with a default value, just require a command line param.
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 00:11:13 +0000 (18:11 -0600)]
altos-map: Install .jar file for altos-map
Signed-off-by: Keith Packard <keithp@keithp.com>
Keith Packard [Sun, 7 Oct 2018 00:10:57 +0000 (18:10 -0600)]
altos-map: Fix altos-map HTTP syntax
Add blank line between header and content.
Make error pages have actual HTML content.
Signed-off-by: Keith Packard <keithp@keithp.com>