From c1e293ff4953b51c19af8b52f2999419ea84e7e5 Mon Sep 17 00:00:00 2001 From: Keith Packard Date: Sat, 12 Nov 2011 19:19:40 -0800 Subject: [PATCH] altos: Add startup and config (view only) pages to TT The config page needs a pile of work before it's useful. Signed-off-by: Keith Packard --- src/product/ao_terraui.c | 111 ++++++++++++++++++++--------------- src/teleterra-v0.2/ao_pins.h | 3 + 2 files changed, 68 insertions(+), 46 deletions(-) diff --git a/src/product/ao_terraui.c b/src/product/ao_terraui.c index 22bab5d6..05157cb1 100644 --- a/src/product/ao_terraui.c +++ b/src/product/ao_terraui.c @@ -88,6 +88,15 @@ static __code char ao_progress[4] = { '\011', '\012', '\014', '\013' }; static uint8_t ao_telem_progress; static uint8_t ao_gps_progress; +static void +ao_terraui_startup(void) +{ + sprintf(ao_lcd_line, "%-16.16s", ao_product); + ao_terraui_line(AO_LCD_ADDR(0,0)); + sprintf(ao_lcd_line, "%-8.8s %5u ", ao_version, ao_serial_number); + ao_terraui_line(AO_LCD_ADDR(1,0)); +} + static void ao_terraui_info(void) { @@ -441,76 +450,85 @@ ao_terraui_local(void) __reentrant } static void -ao_terraui_config(void) +ao_terraui_config(void) __reentrant { + uint8_t chan; + uint32_t kHz; + uint16_t MHz; + uint16_t frac; + + for (chan = 0; chan < AO_NUM_CHANNELS; chan++) + if (ao_config.radio_channels[chan].radio_setting == ao_config.radio_setting) + break; + if (chan == AO_NUM_CHANNELS) + chan = 0; + kHz = ao_config.radio_channels[chan].kHz; + MHz = kHz / 1000; + frac = kHz % 1000; + sprintf(ao_lcd_line, "%2d: %-10.10s ", chan, ao_config.radio_channels[chan].name); + ao_terraui_line(AO_LCD_ADDR(0,0)); + sprintf(ao_lcd_line, "%-8.8s %3d.%03d", ao_config.callsign, MHz, frac); + ao_terraui_line(AO_LCD_ADDR(1,0)); + ao_lcd_goto(AO_LCD_ADDR(0,1)); + ao_lcd_cursor_on(); } -enum ao_page { - ao_page_info, - ao_page_pad, - ao_page_ascent, - ao_page_descent, - ao_page_recover, - ao_page_remote, - ao_page_local, +static __code void (*__code ao_terraui_page[])(void) = { + ao_terraui_startup, + ao_terraui_info, + ao_terraui_pad, + ao_terraui_ascent, + ao_terraui_descent, + ao_terraui_recover, + ao_terraui_remote, + ao_terraui_local, + ao_terraui_config, }; +#define NUM_PAGE (sizeof (ao_terraui_page)/sizeof (ao_terraui_page[0])) + +__pdata uint8_t ao_current_page = 0; +__pdata uint8_t ao_shown_about = 3; + static void ao_terraui(void) { - enum ao_page cur_page = ao_page_info; - ao_lcd_start(); + + ao_delay(AO_MS_TO_TICKS(100)); + ao_button_clear(); + for (;;) { char b; - switch (cur_page) { - case ao_page_info: - ao_terraui_info(); - break; - case ao_page_pad: - ao_terraui_pad(); - break; - case ao_page_ascent: - ao_terraui_ascent(); - break; - case ao_page_descent: - ao_terraui_descent(); - break; - case ao_page_recover: - ao_terraui_recover(); - break; - case ao_page_remote: - ao_terraui_remote(); - break; - case ao_page_local: - ao_terraui_local(); - break; - } - + ao_terraui_page[ao_current_page](); ao_alarm(AO_SEC_TO_TICKS(1)); b = ao_button_get(); ao_clear_alarm(); + if (b > 0) { + ao_beep_for(AO_BEEP_HIGH, AO_MS_TO_TICKS(10)); + ao_shown_about = 0; + } + switch (b) { case 0: + if (ao_shown_about) { + if (--ao_shown_about == 0) + ao_current_page = 2; + } break; case 1: - if (cur_page == ao_page_local) - cur_page = ao_page_info; - else - cur_page++; - ao_beep_for(AO_BEEP_HIGH, AO_MS_TO_TICKS(50)); + ao_current_page++; + if (ao_current_page >= NUM_PAGE) + ao_current_page = 0; break; case 2: - ao_beep_for(AO_BEEP_LOW, AO_MS_TO_TICKS(200)); break; case 3: - if (cur_page == ao_page_info) - cur_page = ao_page_local; - else - cur_page--; - ao_beep_for(AO_BEEP_MID, AO_MS_TO_TICKS(50)); + if (ao_current_page == 0) + ao_current_page = NUM_PAGE; + ao_current_page--; break; } } @@ -524,6 +542,7 @@ ao_terramonitor(void) uint8_t monitor; monitor = ao_monitor_head; + ao_monitor_set(sizeof (struct ao_telemetry_generic)); for (monitor = ao_monitor_head;; monitor = ao_monitor_ring_next(monitor)) { diff --git a/src/teleterra-v0.2/ao_pins.h b/src/teleterra-v0.2/ao_pins.h index 72ded004..44a372cc 100644 --- a/src/teleterra-v0.2/ao_pins.h +++ b/src/teleterra-v0.2/ao_pins.h @@ -36,6 +36,7 @@ #define IGNITE_ON_P0 0 #define PACKET_HAS_MASTER 1 #define PACKET_HAS_SLAVE 0 + #define HAS_RADIO_CHANNELS 1 #define HAS_COMPANION 0 @@ -66,6 +67,8 @@ #define BUTTON_3_REG 2 #define BUTTON_3_MASK (1 << 4) /* P2_4 */ + #define HAS_P2_ISR 1 + #define BATTERY_PIN 5 #endif -- 2.30.2