diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Makefile | 9 | ||||
| -rw-r--r-- | src/cc1111/ao_adc.c | 2 | ||||
| -rw-r--r-- | src/drivers/ao_pad.c | 25 | ||||
| -rw-r--r-- | src/telefire-v0.2/Makefile | 103 | ||||
| -rw-r--r-- | src/telefire-v0.2/ao_pins.h | 144 | ||||
| -rw-r--r-- | src/telefire-v0.2/ao_telefire.c | 45 | 
6 files changed, 317 insertions, 11 deletions
| diff --git a/src/Makefile b/src/Makefile index ff26ac20..ee76c325 100644 --- a/src/Makefile +++ b/src/Makefile @@ -16,14 +16,11 @@ include Version  SDCCDIRS=\  	telemetrum-v1.2 telemetrum-v1.1 telemetrum-v1.0 \ -	teledongle-v0.2 teledongle-v0.1 \ -	telemini-v1.0 telenano-v0.1 \ +	teledongle-v0.2 \ +	telemini-v1.0 \  	telebt-v1.0 \ -	telemetrum-v0.1-sky telemetrum-v0.1-sirf \ -	telelaunch-v0.1 tidongle test \  	teleterra-v0.2 teleshield-v0.1 \ -	telefire-v0.1 \ -	spiradio-v0.1 +	telefire-v0.1 telefire-v0.2  AVRDIRS=\  	telescience-v0.1 telescience-pwm micropeak diff --git a/src/cc1111/ao_adc.c b/src/cc1111/ao_adc.c index ed76179b..4a58023d 100644 --- a/src/cc1111/ao_adc.c +++ b/src/cc1111/ao_adc.c @@ -144,7 +144,7 @@ ao_adc_isr(void) __interrupt 1  	}  #endif /* telemini || telenano */ -#ifdef TELEFIRE_V_0_1 +#if defined(TELEFIRE_V_0_1) || defined(TELEFIRE_V_0_2)  	a = (uint8_t __xdata *) (&ao_data_ring[ao_data_head].adc.sense[0] + sequence - AO_ADC_FIRST_PIN);  	a[0] = ADCL;  	a[1] = ADCH; diff --git a/src/drivers/ao_pad.c b/src/drivers/ao_pad.c index 6cec98ab..e0c03c74 100644 --- a/src/drivers/ao_pad.c +++ b/src/drivers/ao_pad.c @@ -17,7 +17,7 @@  #include <ao.h>  #include <ao_pad.h> -#include <ao_74hc497.h> +#include <ao_74hc165.h>  #include <ao_radio_cmac.h>  static __xdata uint8_t ao_pad_ignite; @@ -218,6 +218,21 @@ ao_pad_enable(void)  	ao_wakeup (&ao_pad_disabled);  } +#if HAS_74HC165 +static uint8_t +ao_pad_read_box(void) +{ +	uint8_t		byte = ao_74hc165_read(); +	uint8_t		h, l; + +	h = byte >> 4; +	l = byte & 0xf; +	return h * 10 + l; +} +#else +#define ao_pad_read_box()	0 +#endif +  static void  ao_pad(void)  { @@ -236,8 +251,10 @@ ao_pad(void)  		if (ret != AO_RADIO_CMAC_OK)  			continue; -		PRINTD ("tick %d box %d cmd %d channels %02x\n", -			command.tick, command.box, command.cmd, command.channels); +		ao_pad_box = ao_pad_read_box(); + +		PRINTD ("tick %d box %d (me %d) cmd %d channels %02x\n", +			command.tick, command.box, ao_pad_box, command.cmd, command.channels);  		switch (command.cmd) {  		case AO_LAUNCH_ARM: @@ -327,7 +344,7 @@ ao_pad_test(void)  	}  	for (c = 0; c < AO_PAD_NUM; c++) { -		printf ("Pad %d: "); +		printf ("Pad %d: ", c);  		switch (query.igniter_status[c]) {  		case AO_PAD_IGNITER_STATUS_NO_IGNITER_RELAY_CLOSED:	printf ("No igniter. Relay closed\n"); break;  		case AO_PAD_IGNITER_STATUS_NO_IGNITER_RELAY_OPEN:	printf ("No igniter. Relay open\n"); break; diff --git a/src/telefire-v0.2/Makefile b/src/telefire-v0.2/Makefile new file mode 100644 index 00000000..3353bc1a --- /dev/null +++ b/src/telefire-v0.2/Makefile @@ -0,0 +1,103 @@ +# +# TeleFire build file +# + +TELEFIRE_VER=0.2 +TELEFIRE_DEF=0_2 + +vpath %.c ..:../core:../cc1111:../drivers:../product +vpath %.h ..:../core:../cc1111:../drivers:../product +vpath ao-make-product.5c ../util + +ifndef VERSION +include ../Version +endif + +INC = \ +	ao.h \ +	ao_pins.h \ +	ao_arch.h \ +	ao_arch_funcs.h \ +	ao_pad.h \ +	cc1111.h \ +	ao_product.h + +CORE_SRC = \ +	ao_cmd.c \ +	ao_config.c \ +	ao_convert.c \ +	ao_mutex.c \ +	ao_panic.c \ +	ao_stdio.c \ +	ao_storage.c \ +	ao_task.c \ +	ao_freq.c + +CC1111_SRC = \ +	ao_adc.c \ +	ao_aes.c \ +	ao_beep.c \ +	ao_dma.c \ +	ao_intflash.c \ +	ao_radio.c \ +	ao_radio_cmac.c \ +	ao_romconfig.c \ +	ao_serial.c \ +	ao_spi.c \ +	ao_string.c \ +	ao_timer.c \ +	ao_usb.c \ +	_bp.c + +DRIVER_SRC = \ +	ao_pca9922.c \ +	ao_74hc165.c \ +	ao_pad.c \ +	ao_radio_cmac_cmd.c + +PRODUCT_SRC = \ +	ao_telefire.c + +SRC = \ +	$(CORE_SRC) \ +	$(CC1111_SRC) \ +	$(DRIVER_SRC) \ +	$(PRODUCT_SRC) + +PROGNAME = telefire-v$(TELEFIRE_VER) +PROG = $(PROGNAME)-$(VERSION).ihx +PRODUCT=TeleFire-v$(TELEFIRE_VER) +PRODUCT_DEF=-DTELEFIRE_V_$(TELEFIRE_DEF) +IDPRODUCT=0x000f +CODESIZE=0x6700 + +include ../cc1111/Makefile.cc1111 + +NICKLE=nickle +CHECK_STACK=sh ../util/check-stack + +V=0 +# The user has explicitly enabled quiet compilation. +ifeq ($(V),0) +quiet = @printf "  $1 $2 $@\n"; $($1) +endif +# Otherwise, print the full command line. +quiet ?= $($1) + +all: ../$(PROG) + +../$(PROG): $(REL) Makefile +	$(call quiet,CC) $(LDFLAGS) $(CFLAGS) -o $(PROG) $(REL) && cp $(PROG) $(PMAP) .. +	$(call quiet,CHECK_STACK) ../cc1111/ao_arch.h $(PMEM)  || rm $@ + +ao_product.h: ao-make-product.5c ../Version +	$(call quiet,NICKLE,$<) $< -m altusmetrum.org -i $(IDPRODUCT) -p $(PRODUCT) -v $(VERSION) > $@ + +distclean:	clean + +clean: clean-cc1111 + +install: + +uninstall: + diff --git a/src/telefire-v0.2/ao_pins.h b/src/telefire-v0.2/ao_pins.h new file mode 100644 index 00000000..f4050722 --- /dev/null +++ b/src/telefire-v0.2/ao_pins.h @@ -0,0 +1,144 @@ +/* + * Copyright © 2010 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; version 2 of the License. + * + * 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. + */ + +#ifndef _AO_PINS_H_ +#define _AO_PINS_H_ + +#define HAS_RADIO	1 + +#define HAS_FLIGHT		0 +#define HAS_USB			1 +#define HAS_BEEP		0 +#define HAS_GPS			0 +#define HAS_SERIAL_1		0 +#define HAS_ADC			1 +#define HAS_DBG			0 +#define HAS_EEPROM		1 +#define HAS_LOG			0 +#define HAS_PAD			1 +#define USE_INTERNAL_FLASH	1 +#define DBG_ON_P1 		0 +#define IGNITE_ON_P2		0 +#define IGNITE_ON_P1		1 +#define IGNITE_ON_P0		0 +#define PACKET_HAS_MASTER	0 +#define PACKET_HAS_SLAVE	0 + +#define AO_LED_CONTINUITY(c)	(1 << (c)) +#define AO_LED_CONTINUITY_MASK	(0xf) +#define AO_LED_RX		0x10 +#define AO_LED_TX		0x20 +#define AO_LED_ARMED		0x40 +#define AO_LED_POWER		0x80 + +#define AO_LED_RED		AO_LED_TX +#define AO_LED_GREEN		AO_LED_RX + +#define LEDS_AVAILABLE		(0xff) +#define HAS_EXTERNAL_TEMP	0 +#define HAS_ACCEL_REF		0 +#define SPI_CS_ON_P1		1 +#define HAS_AES			1 +#define DMA_SHARE_AES_RADIO	1 + +#define SPI_CS_PORT	P1 +#define SPI_CS_SEL	P1SEL +#define SPI_CS_DIR	P1DIR + +#define SPI_CONST	0x00 + +#define HAS_SPI_0		0 +#define HAS_SPI_1		1 +#define SPI_1_ALT_1		0 +#define SPI_1_ALT_2		1 + +#define HAS_74HC165		1 +#define AO_74HC165_CS_PORT	P1 +#define AO_74HC165_CS_PIN	4 +#define AO_74HC165_CS		P1_4 + +#define AO_PCA9922_CS_PORT	P2 +#define AO_PCA9922_CS_PIN	0 +#define AO_PCA9922_CS		P2_0 + +#define AO_PAD_NUM		4 +#define	AO_PAD_PORT		P1 +#define AO_PAD_DIR		P1DIR + +#define AO_PAD_PIN_0		0 +#define AO_PAD_0		P1_0 +#define AO_PAD_ADC_0		0 + +#define AO_PAD_PIN_1		1 +#define AO_PAD_1		P1_1 +#define AO_PAD_ADC_1		1 + +#define AO_PAD_PIN_2		2 +#define AO_PAD_2		P1_2 +#define AO_PAD_ADC_2		2 + +#define AO_PAD_PIN_3		3 +#define AO_PAD_3		P1_3 +#define AO_PAD_ADC_3		3 + +#define AO_PAD_ALL_PINS		((1 << AO_PAD_PIN_0) | (1 << AO_PAD_PIN_1) | (1 << AO_PAD_PIN_2) | (1 << AO_PAD_PIN_3)) +#define AO_PAD_ALL_CHANNELS	((1 << 0) | (1 << 1) | (1 << 2) | (1 << 3)) + +#define AO_SIREN_PORT		P2 +#define AO_SIREN_DIR		P2DIR +#define AO_SIREN_PIN		3 +#define AO_SIREN		P2_3 + +#define AO_STROBE_PORT		P2 +#define AO_STROBE_DIR		P2DIR +#define AO_STROBE_PIN		4 +#define AO_STROBE		P2_4 + +/* test these values with real igniters */ +#define AO_PAD_RELAY_CLOSED	3524 +#define AO_PAD_NO_IGNITER	16904 +#define AO_PAD_GOOD_IGNITER	22514 + +#define AO_PAD_ADC_PYRO		4 +#define AO_PAD_ADC_BATT		5 + +#define AO_ADC_FIRST_PIN	0 + +struct ao_adc { +	int16_t		sense[AO_PAD_NUM]; +	int16_t		pyro; +	int16_t		batt; +}; + +#define AO_ADC_DUMP(p)							\ +	printf ("tick: %5u 0: %5d 1: %5d 2: %5d 3: %5d pyro: %5d batt %5d\n", \ +		(p)->tick,						\ +		(p)->adc.sense[0],					\ +		(p)->adc.sense[1],					\ +		(p)->adc.sense[2],					\ +		(p)->adc.sense[3],					\ +		(p)->adc.pyro,						\ +		(p)->adc.batt) + +#define AO_ADC_PINS	((1 << AO_PAD_ADC_0) | \ +			 (1 << AO_PAD_ADC_1) | \ +			 (1 << AO_PAD_ADC_2) | \ +			 (1 << AO_PAD_ADC_3) | \ +			 (1 << AO_PAD_ADC_PYRO) | \ +			 (1 << AO_PAD_ADC_BATT)) + +#endif /* _AO_PINS_H_ */ diff --git a/src/telefire-v0.2/ao_telefire.c b/src/telefire-v0.2/ao_telefire.c new file mode 100644 index 00000000..f27ca5e8 --- /dev/null +++ b/src/telefire-v0.2/ao_telefire.c @@ -0,0 +1,45 @@ +/* + * Copyright © 2012 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; version 2 of the License. + * + * 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. + */ + +#include <ao.h> +#include <ao_pad.h> +#include <ao_74hc165.h> +#include <ao_radio_cmac_cmd.h> + +void +main(void) +{ +	ao_clock_init(); + +	ao_led_init(LEDS_AVAILABLE); + +	ao_task_init(); + +	ao_timer_init(); +	ao_adc_init(); +	ao_cmd_init(); +	ao_spi_init(); +	ao_74hc165_init(); +	ao_storage_init(); +	ao_usb_init(); +	ao_radio_init(); +	ao_aes_init(); +	ao_pad_init(); +//	ao_radio_cmac_cmd_init(); +	ao_config_init(); +	ao_start_scheduler(); +} | 
