summaryrefslogtreecommitdiff
path: root/src/telelco-v0.2
diff options
context:
space:
mode:
authorBdale Garbee <bdale@gag.com>2013-12-19 01:38:40 -0700
committerBdale Garbee <bdale@gag.com>2013-12-19 01:38:40 -0700
commit575bbaf976c5840fd0e308549c45a466fdec1352 (patch)
tree11bfb498348bf7687bffc24699c4b1a998988ee4 /src/telelco-v0.2
parentb825116df173b77e2cab217a7b76112c742f9279 (diff)
parentbc3610d8cecbfed40c62d4dcb93fc9a4d2a7c9e3 (diff)
Merge branch 'branch-1.3' into debian
Conflicts: ChangeLog altoslib/AltosRecordMM.java altosui/Makefile.am altosui/altos-windows.nsi.in configure.ac debian/changelog debian/control doc/Makefile doc/altusmetrum.xsl doc/release-notes-1.2.1.xsl doc/release-notes-1.2.xsl
Diffstat (limited to 'src/telelco-v0.2')
-rw-r--r--src/telelco-v0.2/Makefile11
-rw-r--r--src/telelco-v0.2/ao_lco.c81
-rw-r--r--src/telelco-v0.2/ao_pins.h3
-rw-r--r--src/telelco-v0.2/ao_telelco.c3
4 files changed, 54 insertions, 44 deletions
diff --git a/src/telelco-v0.2/Makefile b/src/telelco-v0.2/Makefile
index cc6e62c4..f28bdd32 100644
--- a/src/telelco-v0.2/Makefile
+++ b/src/telelco-v0.2/Makefile
@@ -21,6 +21,7 @@ INC = \
ao_radio_spi.h \
ao_radio_cmac.h \
ao_cc1120_CC1120.h \
+ ao_debounce.h \
stm32l.h
#
@@ -47,8 +48,8 @@ ALTOS_SRC = \
ao_dma_stm.c \
ao_spi_stm.c \
ao_beep_stm.c \
- ao_storage.c \
ao_eeprom_stm.c \
+ ao_fast_timer.c \
ao_lcd_stm.c \
ao_usb_stm.c \
ao_exti_stm.c \
@@ -59,6 +60,7 @@ ALTOS_SRC = \
ao_fec_tx.c \
ao_fec_rx.c \
ao_seven_segment.c \
+ ao_debounce.c \
ao_quadrature.c \
ao_button.c \
ao_event.c \
@@ -75,14 +77,15 @@ CFLAGS = $(PRODUCT_DEF) $(STM_CFLAGS) $(PROFILE_DEF) -Os -g
PROGNAME=telelco-v0.2
PROG=$(PROGNAME)-$(VERSION).elf
+HEX=$(PROGNAME)-$(VERSION).ihx
SRC=$(ALTOS_SRC) ao_telelco.c
OBJ=$(SRC:.c=.o)
-all: $(PROG)
+all: $(PROG) $(HEX)
$(PROG): Makefile $(OBJ) altos.ld
- $(call quiet,CC) $(LDFLAGS) $(CFLAGS) -o $(PROG) $(OBJ) $(SAT_CLIB) -lgcc
+ $(call quiet,CC) $(LDFLAGS) $(CFLAGS) -o $(PROG) $(OBJ) $(LIBS)
../altitude.h: make-altitude
nickle $< > $@
@@ -95,7 +98,7 @@ ao_product.h: ao-make-product.5c ../Version
distclean: clean
clean:
- rm -f *.o $(PROGNAME)-*.elf
+ rm -f *.o $(PROGNAME)-*.elf $(PROGNAME)-*.ihx
rm -f ao_product.h
install:
diff --git a/src/telelco-v0.2/ao_lco.c b/src/telelco-v0.2/ao_lco.c
index 418c0509..e8d16ca9 100644
--- a/src/telelco-v0.2/ao_lco.c
+++ b/src/telelco-v0.2/ao_lco.c
@@ -49,16 +49,16 @@ static uint16_t ao_lco_tick_offset;
static struct ao_pad_query ao_pad_query;
static void
-ao_lco_set_pad(void)
+ao_lco_set_pad(uint8_t pad)
{
- ao_seven_segment_set(AO_LCO_PAD_DIGIT, ao_lco_pad + 1);
+ ao_seven_segment_set(AO_LCO_PAD_DIGIT, pad + 1);
}
static void
-ao_lco_set_box(void)
+ao_lco_set_box(uint8_t box)
{
- ao_seven_segment_set(AO_LCO_BOX_DIGIT_1, ao_lco_box % 10);
- ao_seven_segment_set(AO_LCO_BOX_DIGIT_10, ao_lco_box / 10);
+ ao_seven_segment_set(AO_LCO_BOX_DIGIT_1, box % 10);
+ ao_seven_segment_set(AO_LCO_BOX_DIGIT_10, box / 10);
}
#define MASK_SIZE(n) (((n) + 7) >> 3)
@@ -103,8 +103,6 @@ ao_lco_input(void)
int8_t dir, new_box, new_pad;
ao_beep_for(AO_BEEP_MID, AO_MS_TO_TICKS(200));
- ao_lco_set_pad();
- ao_lco_set_box();
for (;;) {
ao_event_get(&event);
PRINTD("event type %d unit %d value %d\n",
@@ -114,11 +112,9 @@ ao_lco_input(void)
switch (event.unit) {
case AO_QUADRATURE_PAD:
if (!ao_lco_armed) {
- if (event.value == ao_lco_pad)
- break;
- dir = ((int8_t) event.value - (int8_t) ao_lco_pad) > 0 ? 1 : -1;
- new_pad = event.value;
- while (!ao_lco_pad_present(new_pad)) {
+ dir = (int8_t) event.value;
+ new_pad = ao_lco_pad;
+ do {
new_pad += dir;
if (new_pad > AO_PAD_MAX_CHANNELS)
new_pad = 0;
@@ -126,34 +122,30 @@ ao_lco_input(void)
new_pad = AO_PAD_MAX_CHANNELS - 1;
if (new_pad == ao_lco_pad)
break;
- }
+ } while (!ao_lco_pad_present(new_pad));
if (new_pad != ao_lco_pad) {
ao_lco_pad = new_pad;
- ao_quadrature_count[AO_QUADRATURE_PAD] = ao_lco_pad;
- ao_lco_set_pad();
+ ao_lco_set_pad(ao_lco_pad);
}
}
break;
case AO_QUADRATURE_BOX:
if (!ao_lco_armed) {
- if (event.value == ao_lco_box)
- break;
- dir = ((int8_t) event.value - (int8_t) ao_lco_box) > 0 ? 1 : -1;
- new_box = event.value;
- while (!ao_lco_box_present(new_box)) {
+ dir = (int8_t) event.value;
+ new_box = ao_lco_box;
+ do {
new_box += dir;
if (new_box > ao_lco_max_box)
new_box = ao_lco_min_box;
else if (new_box < ao_lco_min_box)
- new_box = ao_lco_min_box;
+ new_box = ao_lco_max_box;
if (new_box == ao_lco_box)
break;
- }
- ao_quadrature_count[AO_QUADRATURE_PAD] = new_box;
+ } while (!ao_lco_box_present(new_box));
if (ao_lco_box != new_box) {
ao_lco_box = new_box;
ao_lco_got_channels = 0;
- ao_lco_set_box();
+ ao_lco_set_box(ao_lco_box);
}
}
break;
@@ -219,7 +211,7 @@ ao_lco_update(void)
ao_lco_valid = 1;
if (!c) {
ao_lco_pad = ao_lco_pad_first();
- ao_lco_set_pad();
+ ao_lco_set_pad(ao_lco_pad);
}
} else
ao_lco_valid = 0;
@@ -232,13 +224,24 @@ ao_lco_update(void)
query.igniter_status[2],
query.igniter_status[3]);
#endif
-
ao_wakeup(&ao_pad_query);
}
static void
+ao_lco_box_reset_present(void)
+{
+ ao_lco_min_box = 0xff;
+ ao_lco_max_box = 0x00;
+ memset(ao_lco_box_mask, 0, sizeof (ao_lco_box_mask));
+}
+
+static void
ao_lco_box_set_present(uint8_t box)
{
+ if (box < ao_lco_min_box)
+ ao_lco_min_box = box;
+ if (box > ao_lco_max_box)
+ ao_lco_max_box = box;
if (box >= AO_PAD_MAX_BOXES)
return;
ao_lco_box_mask[MASK_ID(box)] |= 1 << MASK_SHIFT(box);
@@ -249,19 +252,18 @@ ao_lco_search(void)
{
uint16_t tick_offset;
int8_t r;
-
- ao_lco_min_box = 0xff;
- ao_lco_max_box = 0x00;
- for (ao_lco_box = 0; ao_lco_box < AO_PAD_MAX_BOXES; ao_lco_box++) {
- if ((ao_lco_box % 10) == 0)
- ao_lco_set_box();
- r = ao_lco_query(ao_lco_box, &ao_pad_query, &ao_lco_tick_offset);
+ uint8_t box;
+
+ ao_lco_box_reset_present();
+ for (box = 0; box < AO_PAD_MAX_BOXES; box++) {
+ if ((box % 10) == 0)
+ ao_lco_set_box(box);
+ tick_offset = 0;
+ r = ao_lco_query(box, &ao_pad_query, &tick_offset);
+ PRINTD("box %d result %d\n", box, r);
if (r == AO_RADIO_CMAC_OK) {
- if (ao_lco_box < ao_lco_min_box)
- ao_lco_min_box = ao_lco_box;
- if (ao_lco_box > ao_lco_max_box)
- ao_lco_max_box = ao_lco_box;
- ao_lco_box_set_present(ao_lco_box);
+ ao_lco_box_set_present(box);
+ ao_delay(AO_MS_TO_TICKS(30));
}
}
if (ao_lco_min_box <= ao_lco_max_box)
@@ -271,6 +273,8 @@ ao_lco_search(void)
ao_lco_valid = 0;
ao_lco_got_channels = 0;
ao_lco_pad = 0;
+ ao_lco_set_pad(ao_lco_pad);
+ ao_lco_set_box(ao_lco_box);
}
static void
@@ -382,6 +386,7 @@ ao_lco_set_debug(void)
__code struct ao_cmds ao_lco_cmds[] = {
{ ao_lco_set_debug, "D <0 off, 1 on>\0Debug" },
+ { ao_lco_search, "s\0Search for pad boxes" },
{ 0, NULL }
};
#endif
diff --git a/src/telelco-v0.2/ao_pins.h b/src/telelco-v0.2/ao_pins.h
index 07ea1b45..62f221a1 100644
--- a/src/telelco-v0.2/ao_pins.h
+++ b/src/telelco-v0.2/ao_pins.h
@@ -43,6 +43,8 @@
#define HAS_EEPROM 1
#define USE_INTERNAL_FLASH 1
+#define USE_EEPROM_CONFIG 1
+#define USE_STORAGE_CONFIG 0
#define HAS_USB 1
#define HAS_BEEP 1
#define HAS_RADIO 1
@@ -235,7 +237,6 @@
*/
#define AO_QUADRATURE_COUNT 2
-#define AO_QUADRATURE_MODE 0
#define AO_QUADRATURE_0_PORT &stm_gpioe
#define AO_QUADRATURE_0_A 3
diff --git a/src/telelco-v0.2/ao_telelco.c b/src/telelco-v0.2/ao_telelco.c
index 66bf0ba1..d9f7c693 100644
--- a/src/telelco-v0.2/ao_telelco.c
+++ b/src/telelco-v0.2/ao_telelco.c
@@ -28,6 +28,7 @@
#include <ao_lco.h>
#include <ao_lco_cmd.h>
#include <ao_radio_cmac_cmd.h>
+#include <ao_eeprom.h>
int
main(void)
@@ -52,7 +53,7 @@ main(void)
ao_quadrature_init();
ao_button_init();
- ao_storage_init();
+ ao_eeprom_init();
ao_radio_init();