summaryrefslogtreecommitdiffstats
path: root/Graphic_Equalizer/src/eventhandler.hcc
diff options
context:
space:
mode:
authorOliver Schinagl <oliver@schinagl.nl>2004-11-26 16:12:49 (GMT)
committerOliver Schinagl <oliver@schinagl.nl>2004-11-26 16:12:49 (GMT)
commitca86ce7ddb27c0800c841f20d413438453d15a7e (patch)
tree2726c46eca640912e48f5192ffe976984625deb7 /Graphic_Equalizer/src/eventhandler.hcc
parent2486259bcf847d66502f4d64311da4a5b920f884 (diff)
downloadTASS-ca86ce7ddb27c0800c841f20d413438453d15a7e.zip
TASS-ca86ce7ddb27c0800c841f20d413438453d15a7e.tar.gz
TASS-ca86ce7ddb27c0800c841f20d413438453d15a7e.tar.bz2
equalizer mode buttons function now +x2 then -x2.
Changed macro proc's to functions.
Diffstat (limited to 'Graphic_Equalizer/src/eventhandler.hcc')
-rw-r--r--Graphic_Equalizer/src/eventhandler.hcc144
1 files 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};