From 696531b4b357a83ebd17f9efda9ffdfc244bc7f9 Mon Sep 17 00:00:00 2001 From: Oliver Schinagl Date: Wed, 8 Dec 2004 12:26:27 +0000 Subject: We do some init here to ensure the equalizer bars are drawn properly. This should be moved to an init function or similarly. Added various equalizer modes. --- Graphic_Equalizer/src/eventhandler.hcc | 112 ++++++++++++++++++++------------- 1 file changed, 67 insertions(+), 45 deletions(-) diff --git a/Graphic_Equalizer/src/eventhandler.hcc b/Graphic_Equalizer/src/eventhandler.hcc index 6526618..e1f90ae 100644 --- a/Graphic_Equalizer/src/eventhandler.hcc +++ b/Graphic_Equalizer/src/eventhandler.hcc @@ -45,10 +45,6 @@ extern chan unsigned 1 maskupdate_notification; -static rom unsigned 3 equalizer_mode_table[5] = {EQUALIZERMODE_CONVEX_FULL, EQUALIZERMODE_CONVEX_HALF, EQUALIZERMODE_PRECISE, EQUALIZERMODE_CONCAVE_HALF, EQUALIZERMODE_CONCAVE_FULL}; - - - /*! \fn void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata); * \brief * @@ -67,15 +63,14 @@ void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mo } equalizer_levels with { block = "BlockRAM"}; unsigned 10 preset_offset; - unsigned 10 reference_point; + unsigned 10 reference_point, reference_point_right; unsigned 5 volume_left; - unsigned 4 index_offset; + unsigned 4 index_offset, index_end; + unsigned 4 equalizer_mode_local; unsigned 1 newmaskupdate; - /* - * Initialize our equalizer display pointers here, as they don't point - * anywhere otherwise. - */ + load_preset(LOAD_PRESET_RESET, equalizer_levels.write); + reload_equalizer(events, &equalizer_levels.write[preset_offset]); while (TRUE) { maskupdate_notification ? newmaskupdate; @@ -123,7 +118,6 @@ void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mo events->mode = MODE_SKIN; } else { events->mode = MODE_HELP; - print_string("going to help");print_eol(); } } else { delay; @@ -162,13 +156,13 @@ void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mo * Finally update the equalizer bars * that are drawn by the display. */ - reload_equalizer(events, equalizer_levels.write, preset_offset); + reload_equalizer(events, &equalizer_levels.write[preset_offset]); } else { delay; } - if ((BUTTON_CONVEX_FULL <= events->mask) && (events->mask <= BUTTON_CONCAVE_FULL)) { - events->equalizer_mode = (events->mask -BUTTON_CONVEX_FULL) <- 3; + if ((BUTTON_PRECISE <= events->mask) && (events->mask <= BUTTON_CONVEX_FULL)) { + events->equalizer_mode = (events->mask -BUTTON_PRECISE) <-4; } else { delay; } @@ -178,8 +172,8 @@ void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mo * demo preset values into the presets. */ if (BUTTON_DEMO == events->mask) { - load_preset(ADDRESS_PRESET_DEMO_START, &equalizer_levels.write[0]); - reload_equalizer(events, equalizer_levels.write, preset_offset); + load_preset(LOAD_PRESET_DEMO, equalizer_levels.write); + reload_equalizer(events, &equalizer_levels.write[preset_offset]); } /* @@ -187,8 +181,8 @@ void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mo * reset values into the presets. */ if (BUTTON_RESET == events->mask) { - load_preset(ADDRESS_PRESET_RESET_START, &equalizer_levels.write[0]); - reload_equalizer(events, equalizer_levels.write, preset_offset); + load_preset(LOAD_PRESET_RESET, equalizer_levels.write); + reload_equalizer(events, &equalizer_levels.write[preset_offset]); } /* @@ -237,40 +231,68 @@ void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mo if ((AREA_EQUALIZER_MIN <= events->mask) && (events->mask <= AREA_EQUALIZER_MAX)) { - events->locked_equalizer = TRUE; - delay; - reference_point = events->equalizer_display[(events->mask -5 -AREA_EQUALIZER_MIN) <- 7]; - - for (index_offset = 9; index_offset != 0; index_offset--) { - unsigned 10 average_bar; - unsigned 7 equalizer_index; - unsigned 4 bar_index; - - if (index_offset == 5) { - reference_point = events->equalizer_display[(events->mask +5 -AREA_EQUALIZER_MIN) <- 7]; - } else { - delay; - } + if (EQUALIZERMODE_PRECISE == events->equalizer_mode) { + events->locked_display = TRUE; + equalizer_levels.write[preset_offset +(0 @ events->mask) -AREA_EQUALIZER_MIN] = equalizer_table[mousedata->y -382]; + events->equalizer_display[(events->mask -AREA_EQUALIZER_MIN) <- 7] = mousedata->y; + events->locked_display = FALSE; + } else { + + equalizer_mode_local = events->equalizer_mode +1; + + events->locked_display = TRUE; + index_offset = ((equalizer_mode_local << 1)); /* delay; */ - if (index_offset > 5) { - bar_index = (index_offset -5); + if (events->mask < (AREA_EQUALIZER_MIN +(0 @ equalizer_mode_local))) { + reference_point = events->equalizer_display[AREA_EQUALIZER_MIN -AREA_EQUALIZER_MIN]; + index_offset -= (((0 @ equalizer_mode_local) -(events->mask -AREA_EQUALIZER_MIN)) <- 4); } else { - bar_index = (5 -index_offset); + reference_point = events->equalizer_display[(events->mask - (0 @ equalizer_mode_local) -AREA_EQUALIZER_MIN) <- 7]; + index_offset -= 1; } - if (reference_point > mousedata->y) { - average_bar = mousedata->y -((reference_point -mousedata->y) >> (5 - bar_index)); + if (events->mask > (AREA_EQUALIZER_MAX -(0 @ equalizer_mode_local))) { + reference_point_right = events->equalizer_display[AREA_EQUALIZER_MAX -AREA_EQUALIZER_MIN]; + index_end = (((0 @ equalizer_mode_local) -(AREA_EQUALIZER_MAX -events->mask)) <- 4) -1; } else { - average_bar = mousedata->y +((mousedata->y -reference_point) >> (5 - bar_index)); + reference_point_right = events->equalizer_display[(events->mask + (0 @ equalizer_mode_local) -AREA_EQUALIZER_MIN) <- 7]; + index_end = 0; + } + events->locked_display = FALSE; + + for (; index_offset != index_end; index_offset--) { + unsigned 10 average_bar; + unsigned 7 equalizer_index; + unsigned 4 bar_index; + + if (index_offset == equalizer_mode_local) { + reference_point = reference_point_right; + } else { + delay; + } + + if (index_offset > equalizer_mode_local) + { + bar_index = (index_offset -equalizer_mode_local); + equalizer_index = ((events->mask -(0 @ bar_index) -AREA_EQUALIZER_MIN) <- 7); + } else + { + bar_index = (equalizer_mode_local -index_offset); + equalizer_index = ((events->mask +(0 @ bar_index) -AREA_EQUALIZER_MIN) <- 7); + } + + if (reference_point > mousedata->y) { + average_bar = mousedata->y +((reference_point -mousedata->y) >> (equalizer_mode_local -bar_index)); + } else { + average_bar = mousedata->y -((mousedata->y -reference_point) >> (equalizer_mode_local -bar_index)); + } + + events->locked_display = TRUE; + equalizer_levels.write[preset_offset +(0 @ equalizer_index)] = equalizer_table[average_bar -382]; + events->equalizer_display[equalizer_index] = average_bar; + events->locked_display = FALSE; } - - equalizer_index = ((events->mask +5 -(0 @ index_offset) -AREA_EQUALIZER_MIN) <- 7); - - events->equalizer_display[equalizer_index] = average_bar; - equalizer_levels.write[preset_offset +(0 @ equalizer_index)] = equalizer_table[average_bar -382]; } - - events->locked_equalizer = FALSE; } else { delay; } -- cgit v0.12