From ca86ce7ddb27c0800c841f20d413438453d15a7e Mon Sep 17 00:00:00 2001 From: Oliver Schinagl Date: Fri, 26 Nov 2004 16:12:49 +0000 Subject: equalizer mode buttons function now +x2 then -x2. Changed macro proc's to functions. --- Graphic_Equalizer/src/eventhandler.hcc | 144 +++++++++++++++++++-------------- 1 file changed, 82 insertions(+), 62 deletions(-) diff --git a/Graphic_Equalizer/src/eventhandler.hcc b/Graphic_Equalizer/src/eventhandler.hcc index 40565c5..ae968cb 100644 --- a/Graphic_Equalizer/src/eventhandler.hcc +++ b/Graphic_Equalizer/src/eventhandler.hcc @@ -45,62 +45,64 @@ extern chan unsigned 1 maskupdate_notification; -/*! \fn void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata); +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 * - * \param events_t *events pointer to struct with all events. + * \param events_t *events pointer to struct with all events-> * \param mousedata_t *mousedata pointer to struct with mouse data. * * \return Never Returns. * \retval void */ -macro proc eventhandler_main(audiodata, events, mousedata) { +void eventhandler_main(audiodata_t *audiodata, events_t *events, mousedata_t *mousedata) { mpram { ram unsigned 4 write[768]; rom unsigned 4 read[768]; } equalizer_levels with { block = "BlockRAM"}; - unsigned ram 10 equalizer_display_0[128], equalizer_display_1[128]; - unsigned 10 preset_offset; + unsigned 10 reference_point; unsigned 5 volume_left; + unsigned 4 index_offset; unsigned 1 newmaskupdate; - events.equalizer_displayptr_set = &equalizer_display_0[0]; - events.equalizer_displayptr_get = &equalizer_display_1[0]; - /* * Initialize our equalizer display pointers here, as they don't point * anywhere otherwise. */ - for (;;) { + while (TRUE) { maskupdate_notification ? newmaskupdate; /* * First we determine what mousestate we currently have. Then * we check where we are to decide what to do. */ - switch (mousedata.state) { + switch (mousedata->state) { case MOUSE_STATE_ON_PRESS: /* * If we are displaying the graphic visual, * any press returns to the application. */ - if (MODE_GRAPH == events.mode) { - events.mode = MODE_SKIN; - events.mask = 0; + if (MODE_GRAPH == events->mode) { + events->mode = MODE_SKIN; + events->mask = 0; } else { delay; } /* */ - if (BUTTON_MODE == events.mask) { - if (MODE_GRAPH == events.mode) { - events.mode = MODE_SKIN; + if (BUTTON_MODE == events->mask) { + if (MODE_GRAPH == events->mode) { + events->mode = MODE_SKIN; } else { - events.mode = MODE_GRAPH; + events->mode = MODE_GRAPH; } } else { delay; @@ -110,16 +112,16 @@ macro proc eventhandler_main(audiodata, events, mousedata) { * If the current mask equals the help button * we set display mode to help. */ - if (BUTTON_HELP == events.mask) { + if (BUTTON_HELP == events->mask) { /* * Change the mode to help if it's * currently not set, otherwise go back * to skin mode. */ - if (MODE_HELP == events.mode) { - events.mode = MODE_SKIN; + if (MODE_HELP == events->mode) { + events->mode = MODE_SKIN; } else { - events.mode = MODE_HELP; + events->mode = MODE_HELP; print_string("going to help");print_eol(); } } else { @@ -131,21 +133,21 @@ macro proc eventhandler_main(audiodata, events, mousedata) { * the mask one of those, we'll change the * pointer to point to the current preset. */ - if ((BUTTON_PRESET_1 <= events.mask) && (events.mask <= BUTTON_PRESET_6)) { + if ((BUTTON_PRESET_1 <= events->mask) && (events->mask <= BUTTON_PRESET_6)) { /* * The active preset is determined by * the mask minus an offset. Hence * ranging our active preset from 0 to * 6. */ - events.active_preset = 0 @ (events.mask -BUTTON_PRESET_1); + events->active_preset = 0 @ (events->mask -BUTTON_PRESET_1); /* * Each equalizer is 128 bands wide, * thus we need to add 128 * the preset * for each different preset. This * offset is calculated here. */ - preset_offset = events.active_preset << 7; + preset_offset = events->active_preset << 7; /* * We set the pointer to the active * part of the array by using the @@ -154,7 +156,7 @@ macro proc eventhandler_main(audiodata, events, mousedata) { * we point to 0, 128, 256, 384, 512 * or 640. */ - audiodata.equalizer_levels_ptr = &equalizer_levels.read[preset_offset]; + audiodata->equalizer_levels_ptr = &equalizer_levels.read[preset_offset]; /* * Finally update the equalizer bars * that are drawn by the display. @@ -164,8 +166,8 @@ macro proc eventhandler_main(audiodata, events, mousedata) { delay; } - if ((BUTTON_CONVEX_FULL <= events.mask) && (events.mask <= BUTTON_CONCAVE_FULL)) { - events.equalizer_mode = (events.mask -BUTTON_CONVEX_FULL) <- 3; + if ((BUTTON_CONVEX_FULL <= events->mask) && (events->mask <= BUTTON_CONCAVE_FULL)) { + events->equalizer_mode = (events->mask -BUTTON_CONVEX_FULL) <- 3; } else { delay; } @@ -174,8 +176,8 @@ macro proc eventhandler_main(audiodata, events, mousedata) { * If the demo button was pressed load the * demo preset values into the presets. */ - if (BUTTON_DEMO == events.mask) { - load_preset(ADDRESS_PRESET_DEMO_START, equalizer_levels.write); + if (BUTTON_DEMO == events->mask) { + load_preset(ADDRESS_PRESET_DEMO_START, &equalizer_levels.write[0]); reload_equalizer(events, equalizer_levels.write, preset_offset); } @@ -183,8 +185,8 @@ macro proc eventhandler_main(audiodata, events, mousedata) { * If the reset button was pressed load the * reset values into the presets. */ - if (BUTTON_RESET == events.mask) { - load_preset(ADDRESS_PRESET_RESET_START, equalizer_levels.write); + if (BUTTON_RESET == events->mask) { + load_preset(ADDRESS_PRESET_RESET_START, &equalizer_levels.write[0]); reload_equalizer(events, equalizer_levels.write, preset_offset); } @@ -192,8 +194,8 @@ macro proc eventhandler_main(audiodata, events, mousedata) { * If the current mask equals the log button, * we flip the display_log bit. */ - if (BUTTON_LOG == events.mask) { - audiodata.display_log = !audiodata.display_log; + if (BUTTON_LOG == events->mask) { + audiodata->display_log = !audiodata->display_log; } else { delay; } @@ -205,13 +207,13 @@ macro proc eventhandler_main(audiodata, events, mousedata) { * If we are in the volume area we update the * volume level for both channels. */ - if (AREA_VOLUME_YAXIS == events.mask) { + if (AREA_VOLUME_YAXIS == events->mask) { /* * Copy the current Y cursor position * to the events struct. This we then * later use for drawing purposes. */ - events.volume_position = 0 @ mousedata.y; + events->volume_position = 0 @ mousedata->y; /* * Look the relative y-coordinate up in * the volumecontrol lookup table. We @@ -219,7 +221,7 @@ macro proc eventhandler_main(audiodata, events, mousedata) { * RC200 call doesn't behave nicely * when passing anything else. */ - volume_left = volumecontrol_table[((mousedata.y) -65) <- 6]; + volume_left = volumecontrol_table[((mousedata->y) -65) <- 6]; /* * We feel that volume gets softer the * closer it gets to the 0, and louder @@ -232,36 +234,54 @@ macro proc eventhandler_main(audiodata, events, mousedata) { delay; } - if ((AREA_EQUALIZER_MIN <= events.mask) && (events.mask <= AREA_EQUALIZER_MAX)) { - /* - * Copy the current Y position into a - * store for the current equalizer bar. - * The index is determined by the mask - * minus the maskoffset. - */ - events.equalizer_displayptr_set[((events.mask -AREA_EQUALIZER_MIN) <- 7)] = mousedata.y; - events.locked_equalizer = 1; - par { - events.equalizer_displayptr_set = events.equalizer_displayptr_get; - events.equalizer_displayptr_get = events.equalizer_displayptr_set; + 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]; + print_hex_value(0 @ events->mask);print_string("Ref: ");print_hex_value(0 @ reference_point);print_eol(); + + 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 (index_offset > 5) { + bar_index = (index_offset -5); + } else { + shift = 5 - shift; + bar_index = (5 -index_offset); + } + + if (reference_point > mousedata->y) { + average_bar = reference_point -((reference_point -mousedata->y) >> bar_index); + } else { + average_bar = reference_point +((mousedata->y -reference_point) >> bar_index); + } + + 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 = 0; - /* - * We look our current possition up in - * the lookup table. We determin our - * position via the current Y position - * (minus an offset of course). We - * store the result in the array of - * equalizer levels. The index we get - * from the current mask. We add the - * size of our equalizer bands times - * the active preset. - */ - equalizer_levels.write[preset_offset +(0 @ ((events.mask -AREA_EQUALIZER_MIN) <- 7))] = equalizer_table[(mousedata.y -382) <- 7]; + events->locked_equalizer = FALSE; +/* + +*/ } else { delay; } + + break; + + default: break; } } @@ -274,4 +294,4 @@ macro proc eventhandler_main(audiodata, events, mousedata) { * TODO: This table is now hardcoded. To ensure full skinability this table * should be dynamically loaded. */ -rom unsigned 5 volumecontrol_table[46] = {31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0}; \ No newline at end of file +rom unsigned 5 volumecontrol_table[46] = {31, 31, 30, 30, 29, 29, 28, 28, 27, 27, 26, 26, 25, 25, 24, 24, 23, 23, 22, 22, 21, 21, 20, 20, 19, 19, 18, 17, 16, 15, 14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, 0}; -- cgit v0.12