X-Git-Url: https://git.gag.com/?a=blobdiff_plain;f=src%2Fdrivers%2Fao_lco_bits.c;h=b574437d9e6517acccc666febeea71fac8e8c826;hb=936ef3907e956b1a42ad54fe5757bd816b20890f;hp=8e9ea09bf3b63ae32fcd69025dc24572623baad0;hpb=f9e319f5a97df8c0950ec7531d0889cf60e53783;p=fw%2Faltos diff --git a/src/drivers/ao_lco_bits.c b/src/drivers/ao_lco_bits.c index 8e9ea09b..b574437d 100644 --- a/src/drivers/ao_lco_bits.c +++ b/src/drivers/ao_lco_bits.c @@ -252,30 +252,67 @@ ao_lco_step_pad(int8_t dir) { int16_t new_pad; + switch (ao_lco_box) { #ifdef AO_LCO_HAS_CONTRAST - if (ao_lco_box == AO_LCO_CONTRAST) { - int16_t contrast = ao_lco_get_contrast(); + case AO_LCO_CONTRAST: { + int32_t contrast = ao_lco_get_contrast(); - contrast += (int16_t) (dir * AO_LCO_CONTRAST_STEP); + contrast = (contrast + AO_LCO_CONTRAST_STEP - 1) / AO_LCO_CONTRAST_STEP; + contrast += dir; + contrast *= AO_LCO_CONTRAST_STEP; if (contrast < AO_LCO_MIN_CONTRAST) contrast = AO_LCO_MIN_CONTRAST; if (contrast > AO_LCO_MAX_CONTRAST) contrast = AO_LCO_MAX_CONTRAST; ao_lco_set_contrast(contrast); + break; } #endif - new_pad = (int16_t) ao_lco_pad; - do { - new_pad += dir; - if (new_pad > AO_PAD_MAX_CHANNELS) - new_pad = AO_LCO_PAD_VOLTAGE; - if (new_pad < 0) - new_pad = AO_PAD_MAX_CHANNELS; - if (new_pad == ao_lco_pad) - break; - } while (!ao_lco_pad_present(ao_lco_box, (uint8_t) new_pad)); - PRINTD("New pad %d\n", new_pad); - ao_lco_set_pad((uint8_t) new_pad); +#ifdef AO_LCO_HAS_BACKLIGHT + case AO_LCO_BACKLIGHT: { + int32_t backlight = ao_lco_get_backlight(); + + backlight = (backlight + AO_LCO_BACKLIGHT_STEP - 1) / AO_LCO_BACKLIGHT_STEP; + backlight += dir; + backlight *= AO_LCO_BACKLIGHT_STEP; + if (backlight < AO_LCO_MIN_BACKLIGHT) + backlight = AO_LCO_MIN_BACKLIGHT; + if (backlight > AO_LCO_MAX_BACKLIGHT) + backlight = AO_LCO_MAX_BACKLIGHT; + ao_lco_set_backlight(backlight); + break; + } +#endif +#ifdef AO_LCO_HAS_INFO + case AO_LCO_INFO: { +#if AO_LCO_MIN_INFO_PAGE < AO_LCO_MAX_INFO_PAGE + int32_t info_page = ao_lco_get_info_page(); + + info += dir; + if (info_page < AO_LCO_MIN_INFO_PAGE) + info_page = AO_LCO_MIN_INFO_PAGE; + if (info_page > AO_LCO_MAX_INFO_PAGE) + info_page = AO_LCO_MAX_INFO_PAGE; + ao_lco_set_info_page(); +#endif + break; + } +#endif + default: + new_pad = (int16_t) ao_lco_pad; + do { + new_pad += dir; + if (new_pad > AO_PAD_MAX_CHANNELS) + new_pad = AO_LCO_PAD_VOLTAGE; + if (new_pad < 0) + new_pad = AO_PAD_MAX_CHANNELS; + if (new_pad == ao_lco_pad) + break; + } while (!ao_lco_pad_present(ao_lco_box, (uint8_t) new_pad)); + PRINTD("New pad %d\n", new_pad); + ao_lco_set_pad((uint8_t) new_pad); + break; + } } uint8_t @@ -297,11 +334,7 @@ ao_lco_step_box(int8_t dir) new_box += dir; if (new_box > ao_lco_max_box) new_box = AO_LCO_BOX_FIRST; -#ifdef AO_LCO_HAS_CONTRAST - else if (new_box < AO_LCO_CONTRAST) -#else - else if (new_box < 0) -#endif + else if (new_box < AO_LCO_BOX_FIRST) new_box = ao_lco_max_box; if (new_box == ao_lco_box) break;