diff -r d7e61bcd6c44 src/target/devo7e/capabilities.h --- a/src/target/devo7e/capabilities.h Fri Feb 15 08:17:51 2013 -0800 +++ b/src/target/devo7e/capabilities.h Fri Feb 15 14:47:52 2013 -0800 @@ -7,15 +7,19 @@ CHANDEF(HOLD1) CHANDEF(FMOD0) CHANDEF(FMOD1) + CHANDEF(AIL_DR0) + CHANDEF(AIL_DR1) + CHANDEF(ELE_DR0) + CHANDEF(ELE_DR1) #endif #ifdef UNDEF_INP #define INP_RUD_DR0 INP_HOLD0 #define INP_RUD_DR1 INP_HOLD1 -#define INP_ELE_DR0 INP_HOLD0 -#define INP_ELE_DR1 INP_HOLD1 -#define INP_AIL_DR0 INP_HOLD0 -#define INP_AIL_DR1 INP_HOLD1 +//#define INP_ELE_DR0 INP_HOLD0 +//#define INP_ELE_DR1 INP_HOLD1 +//#define INP_AIL_DR0 INP_HOLD0 +//#define INP_AIL_DR1 INP_HOLD1 #define INP_FMOD2 INP_FMOD1 #define INP_MIX0 INP_FMOD0 #define INP_MIX1 INP_FMOD1 diff -r d7e61bcd6c44 src/target/devo7e/channels.c --- a/src/target/devo7e/channels.c Fri Feb 15 08:17:51 2013 -0800 +++ b/src/target/devo7e/channels.c Fri Feb 15 14:47:52 2013 -0800 @@ -40,6 +40,7 @@ gpio_set(GPIOC, GPIO10 | GPIO11); } +extern u32 glbl_buttons; s32 CHAN_ReadRawInput(int channel) { s32 value = 0; @@ -52,6 +53,12 @@ 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; + + case INP_AIL_DR0: value = !(glbl_buttons & (1 << 31)); break; + case INP_AIL_DR1: value = !!(glbl_buttons & (1 << 31)); break; + + case INP_ELE_DR0: value = !(glbl_buttons & (1 << 30)); break; + case INP_ELE_DR1: value = !!(glbl_buttons & (1 << 30)); break; } return value; } diff -r d7e61bcd6c44 src/target/devo7e/tx_buttons.c --- a/src/target/devo7e/tx_buttons.c Fri Feb 15 08:17:51 2013 -0800 +++ b/src/target/devo7e/tx_buttons.c Fri Feb 15 14:47:52 2013 -0800 @@ -20,9 +20,9 @@ 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, + 32, 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, + 31, BUT_DOWN, BUT_UP, BUT_EXIT, }; #define COL_PORT GPIOB @@ -46,30 +46,33 @@ gpio_set_mode(GPIOB, GPIO_MODE_OUTPUT_50_MHZ, GPIO_CNF_OUTPUT_PUSHPULL, GPIO5 | GPIO6 | GPIO7 | GPIO8); - gpio_set(GPIOB, GPIO5 | GPIO6| GPIO7 | GPIO8); + gpio_clear(GPIOB, GPIO5 | GPIO6| GPIO7 | GPIO8); /* PortC 6-9 are pull-up inputs */ gpio_set_mode(GPIOC, GPIO_MODE_INPUT, GPIO_CNF_INPUT_PULL_UPDOWN, GPIO6 | GPIO7 | GPIO8 | GPIO9); - gpio_set(GPIOC, GPIO6 | GPIO7 | GPIO8 | GPIO9); + gpio_clear(GPIOC, GPIO6 | GPIO7 | GPIO8 | GPIO9); } +u32 glbl_buttons = 0; u32 ScanButtons() { u8 idx = 0; u32 result = 0; const u16 *c, *r; - gpio_set(COL_PORT, COL_PORT_MASK); + gpio_clear(COL_PORT, COL_PORT_MASK); for(c = columns; *c != 0xffff; c++) { + gpio_set(COL_PORT, *c); + u16 but = gpio_port_read(ROW_PORT); gpio_clear(COL_PORT, *c); - 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++; } } - return result; + if (! (result & 0x3FFFFFFF)) + glbl_buttons = result; + return result & 0x3FFFFFFF; }