diff --git a/input.c b/input.c index 43cbc2e..c07aaf4 100644 --- a/input.c +++ b/input.c @@ -57,10 +57,10 @@ void input_init(void) { // buttons - IO_OPF(B, 4); // button row B4 - IO_OPF(B, 5); // button row B5 - IO_OPF(C, 4); // button row C4 - IO_OPF(D, 3); // button row D3 + IO_OOF(B, 4); // button row B4 + IO_OOF(B, 5); // button row B5 + IO_OOF(C, 4); // button row C4 + IO_OOF(D, 3); // button row D3 IO_IP(C, 5); // button col C5 IO_IP(C, 6); // button col C6 IO_IP(C, 7); // button col C7 @@ -117,6 +117,9 @@ void button_reset(u16 btn) { buttons &= ~btn; buttons_long &= ~btn; } +void button_reset_nolong(u16 btn) { + buttons &= ~btn; +} // set autorepeat @@ -307,7 +310,7 @@ static void read_ADC(void) { + adc_battery_last; adc_battery = (u16)((adc_battery_filt + (ADC_BAT_FILT / 2)) / ADC_BAT_FILT); // start checking battery after 5s from power on - if (time_sec < 5) { + if (time_sec >= 5) { // wakeup task only when something changed if (adc_battery > 50 && adc_battery < battery_low_raw) { // bat low diff --git a/input.h b/input.h index fe438b0..6180ea0 100644 --- a/input.h +++ b/input.h @@ -78,6 +78,7 @@ extern volatile u16 adc_battery_last; extern void button_reset(u16 btn); #define btnr(mask) button_reset(mask) #define btnra() button_reset(BTN_ALL) +extern void button_reset_nolong(u16 btn); // set autorepeat diff --git a/menu.c b/menu.c index a4eec23..d8eb4f4 100644 --- a/menu.c +++ b/menu.c @@ -526,12 +526,19 @@ static void trim_dualrate(u8 menu, u8 channel, s8 *val, u16 btn_l, u16 btn_r, // show MENU and CHANNEL lcd_segment(menu, LS_ON); lcd_segment(LS_SYM_MODELNO, LS_OFF); + lcd_segment(LS_SYM_DOT, LS_OFF); + lcd_segment(LS_SYM_VOLTS, LS_OFF); lcd_segment(LS_SYM_CHANNEL, LS_ON); lcd_7seg(channel); while (1) { // check value left/right - if (btn(btn_l | btn_r)) { + if (btnl(btn_l | btn_r)) { + // reset to 0 + *val = 0; + btnr(btn_l | btn_r); + } + else if (btn(btn_l | btn_r)) { key_beep(); if (btn(btn_l)) { *val -= step; @@ -541,7 +548,7 @@ static void trim_dualrate(u8 menu, u8 channel, s8 *val, u16 btn_l, u16 btn_r, *val += step; if (*val > max) *val = max; } - btnr(btn_l | btn_r); + button_reset_nolong(btn_l | btn_r); // waiting for possible 0-set } // show current value @@ -560,6 +567,8 @@ static void trim_dualrate(u8 menu, u8 channel, s8 *val, u16 btn_l, u16 btn_r, if (!buttons) break; } + btnr(btn_l | btn_r); // reset also long values + // set selected MENU off lcd_segment(menu, LS_OFF); @@ -963,8 +972,10 @@ void sf_endpoint(u8 channel, u8 change) { if (change) *addr = (u8)menu_change_val(*addr, 0, cg.endpoint_max, 5); lcd_char_num3(*addr); } -@inline static void menu_endpoint(void) { +static void menu_endpoint(void) { + lcd_segment(LS_SYM_PERCENT, LS_ON); menu_channel(MAX_CHANNELS, 1, sf_endpoint); + lcd_segment(LS_SYM_PERCENT, LS_OFF); } // set trims @@ -997,8 +1008,10 @@ static void sf_dualrate(u8 channel, u8 change) { if (change) *addr = (u8)menu_change_val(*addr, 0, 100, 5); lcd_char_num3(*addr); } -@inline static void menu_dualrate(void) { +static void menu_dualrate(void) { + lcd_segment(LS_SYM_PERCENT, LS_ON); menu_channel(2, 0, sf_dualrate); + lcd_segment(LS_SYM_PERCENT, LS_OFF); } // set expos @@ -1007,8 +1020,10 @@ static void sf_expo(u8 channel, u8 change) { if (change) *addr = (s8)menu_change_val(*addr, -99, 99, 5); lcd_char_num2(*addr); } -@inline static void menu_expo(void) { +static void menu_expo(void) { + lcd_segment(LS_SYM_PERCENT, LS_ON); menu_channel(3, 0, sf_expo); + lcd_segment(LS_SYM_PERCENT, LS_OFF); } // set abs diff --git a/stm8.h b/stm8.h index ccc3d99..a04a637 100644 --- a/stm8.h +++ b/stm8.h @@ -62,10 +62,18 @@ typedef unsigned long u32; BSET(P ## port ## _DDR, pin); \ BSET(P ## port ## _CR1, pin); \ BRES(P ## port ## _CR2, pin) +#define IO_OO(port, pin) \ + BSET(P ## port ## _DDR, pin); \ + BRES(P ## port ## _CR1, pin); \ + BRES(P ## port ## _CR2, pin) #define IO_OPF(port, pin) \ BSET(P ## port ## _DDR, pin); \ BSET(P ## port ## _CR1, pin); \ BSET(P ## port ## _CR2, pin) +#define IO_OOF(port, pin) \ + BSET(P ## port ## _DDR, pin); \ + BRES(P ## port ## _CR1, pin); \ + BSET(P ## port ## _CR2, pin) #endif