diff -r 3ebdd942215c src/target/devo7e/capabilities.h --- a/src/target/devo7e/capabilities.h Mon Jan 20 06:24:26 2014 -0800 +++ b/src/target/devo7e/capabilities.h Mon Jan 20 07:06:10 2014 -0800 @@ -7,6 +7,12 @@ CHANDEF(HOLD1) CHANDEF(FMOD0) CHANDEF(FMOD1) + CHANDEF(SWA0) + CHANDEF(SWA1) + CHANDEF(SWA2) + CHANDEF(SWB0) + CHANDEF(SWB1) + CHANDEF(SWB2) #endif #ifdef UNDEF_INP diff -r 3ebdd942215c src/target/devo7e/channels.c --- a/src/target/devo7e/channels.c Mon Jan 20 06:24:26 2014 -0800 +++ b/src/target/devo7e/channels.c Mon Jan 20 07:06:10 2014 -0800 @@ -20,7 +20,7 @@ #include "../common/devo/devo.h" const u8 adc_chan_sel[NUM_ADC_CHANNELS] = {10, 12, 13, 11, 16, 14}; - +extern u32 global_extra_switches; void CHAN_Init() { rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPCEN); @@ -52,6 +52,14 @@ case INP_HOLD1: value = ! gpio_get(GPIOC, GPIO11); break; case INP_FMOD0: value = gpio_get(GPIOC, GPIO10); break; case INP_FMOD1: value = ! gpio_get(GPIOC, GPIO10); break; +#if ENABLE_2x3 + case INP_SWA0: value = global_extra_switches & 0x01; + case INP_SWA1: value = !(global_extra_switches & 0x03); + case INP_SWA2: value = global_extra_switches & 0x02; + case INP_SWB0: value = global_extra_switches & 0x04; + case INP_SWB1: value = !(global_extra_switches & 0x0c); + case INP_SWB2: value = global_extra_switches & 0x08; +#endif } return value; } diff -r 3ebdd942215c src/target/devo7e/target_defs.h --- a/src/target/devo7e/target_defs.h Mon Jan 20 06:24:26 2014 -0800 +++ b/src/target/devo7e/target_defs.h Mon Jan 20 07:06:10 2014 -0800 @@ -48,5 +48,6 @@ #define VOLTAGE_NUMERATOR 216 #define VOLTAGE_OFFSET 249 +#define ENABLE_2x3 1 #endif //_DEVO7E_TARGET_H_ diff -r 3ebdd942215c src/target/devo7e/tx_buttons.c --- a/src/target/devo7e/tx_buttons.c Mon Jan 20 06:24:26 2014 -0800 +++ b/src/target/devo7e/tx_buttons.c Mon Jan 20 07:06:10 2014 -0800 @@ -16,13 +16,15 @@ #include #include "common.h" +u32 global_extra_switches; static const u16 columns[] = {GPIO5, GPIO6, GPIO7, GPIO8, 0xffff}; static const u16 rows[] = {GPIO6, GPIO7, GPIO8, GPIO9, 0xffff}; static const u8 buttonmap[] = { - BUT_TRIM_RH_POS, BUT_TRIM_RH_NEG, BUT_TRIM_RV_POS, BUT_TRIM_RV_NEG, - BUT_LAST, BUT_ENTER, BUT_RIGHT, BUT_LEFT, - BUT_TRIM_LV_POS, BUT_TRIM_LV_NEG, BUT_TRIM_LH_NEG, BUT_TRIM_LH_POS, - BUT_LAST, BUT_DOWN, BUT_UP, BUT_EXIT, +// C.6 C.7 C.8 C.9 +/*B.5*/ BUT_TRIM_RH_POS, BUT_TRIM_RH_NEG, BUT_TRIM_RV_POS, BUT_TRIM_RV_NEG, +/*B.6*/ BUT_LAST, BUT_ENTER, BUT_RIGHT, BUT_LEFT, +/*B.7*/ BUT_TRIM_LV_POS, BUT_TRIM_LV_NEG, BUT_TRIM_LH_NEG, BUT_TRIM_LH_POS, +/*B.8*/ BUT_LAST+1, BUT_DOWN, BUT_UP, BUT_EXIT, }; #define COL_PORT GPIOB @@ -43,8 +45,8 @@ rcc_peripheral_enable_clock(&RCC_APB2ENR, RCC_APB2ENR_IOPCEN); /* PortB 5, 6, 7, 8 are open-drain output */ - gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, - GPIO_CNF_OUTPUT_PUSHPULL, GPIO5 | GPIO6 | GPIO7 | GPIO8); + gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, + GPIO5 | GPIO6 | GPIO7 | GPIO8); gpio_set(GPIOB, GPIO5 | GPIO6| GPIO7 | GPIO8); @@ -65,11 +67,21 @@ u16 but = gpio_port_read(ROW_PORT); gpio_set(COL_PORT, *c); for(r = rows; *r != 0xffff; r++) { - if(! (but & *r)) { + if(!(but & *r)) { result |= 1 << (buttonmap[idx] - 1); } idx++; } } +#if ENABLE_2x3 + //Write to C.6, read B + if (result == 0) { + gpio_set_mode(GPIOC, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_OPENDRAIN, GPIO6); + gpio_clear(GPIOC, GPIO6); + global_extra_switches = (~(gpio_port_read(GPIOB)>>5))&0xf; + gpio_set_mode(GPIOC, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, GPIO6); + gpio_set(GPIOC, GPIO6); + } +#endif return result; }