add set_eq_mid_hz and set_eq_treb_hz

This commit is contained in:
Tomasz Moń
2009-02-02 11:34:08 +01:00
parent 29ed4b1e09
commit 216245970f
5 changed files with 168 additions and 11 deletions

1
TODO
View File

@@ -1,7 +1,6 @@
-figure out all magic commands -figure out all magic commands
-fix usb handling code -fix usb handling code
-make complete gui -make complete gui
-figure out setting EQ mid Hz and EQ treb Hz
-amp/cabinet models -amp/cabinet models
-expression pedal options -expression pedal options
-audio setup options -audio setup options

146
gdigi.c
View File

@@ -26,27 +26,28 @@ char buf[255];
struct usb_device *dev; struct usb_device *dev;
struct usb_dev_handle *handle; struct usb_dev_handle *handle;
static char magic[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x7F, 0x7F, 0x04, 0x7F, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x6E, 0xF7, 0x00}; /* causes COMAND to be displayed on device? */ /*
static char presets_user[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x21, 0x00, 0x07, 0x01, 0x6C, 0xF7}; /* this command seems to query user presets? */ static char magic[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x7F, 0x7F, 0x04, 0x7F, 0x01, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x6E, 0xF7, 0x00}; // causes COMAND to be displayed on device?
static char presets_system[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x21, 0x00, 0x07, 0x00, 0x6D, 0xF7}; /* this command seems to query system presets? */ static char presets_user[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x21, 0x00, 0x07, 0x01, 0x6C, 0xF7}; // this command seems to query user presets?
static char presets_system[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x21, 0x00, 0x07, 0x00, 0x6D, 0xF7}; // this command seems to query system presets?
static char magic3[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x2A, 0x00, 0x04, 0x04, 0x00, 0x62, 0x05, 0xF7, 0x00, 0x00}; /* seems to query active preset name */
static char magic4[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x2B, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00}; static char magic4[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x2B, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00};
static char magic5[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x3A, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00}; static char magic5[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x3A, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00};
/* xedit calls those after calling hbsc pickup change */ // xedit calls those after calling hbsc pickup change
static char magic12[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x3A, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00}; static char magic12[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x3A, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00};
static char magic13[] = {0x07, 0x41, 0x73, 0xF7, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x7E, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00}; static char magic13[] = {0x07, 0x41, 0x73, 0xF7, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x7E, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00};
/* xedit calls those after calling schb pickup change */ // xedit calls those after calling schb pickup change
static char magic22[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00}; static char magic22[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00};
static char magic23[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x3A, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00}; static char magic23[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x3A, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00};
static char magic24[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x3B, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x6E, 0xF7, 0x00}; static char magic24[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x3B, 0x00, 0x04, 0x00, 0x00, 0x00, 0x06, 0x6E, 0xF7, 0x00};
/* seems to be called after changing dist type */ // seems to be called after changing dist type
static char magic8[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x3A, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00}; static char magic8[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x3A, 0x00, 0x04, 0x00, 0x01, 0x77, 0x05, 0xF7, 0x00, 0x00};
/* X-edit also calls 2 different commands, but those seems to vary each time */ // X-edit also calls 2 different commands, but those seems to vary each time
*/
/* /*
calculate checksum calculate checksum
@@ -82,6 +83,8 @@ int read_device(struct usb_dev_handle *handle, int bytes)
void check_preset(struct usb_dev_handle *handle) void check_preset(struct usb_dev_handle *handle)
{ {
static char magic3[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x2A, 0x00, 0x04, 0x04, 0x00, 0x62, 0x05, 0xF7, 0x00, 0x00}; // seems to query active preset
int i; int i;
i = usb_bulk_write(handle, 4, magic3, sizeof(magic3), TIMEOUT); i = usb_bulk_write(handle, 4, magic3, sizeof(magic3), TIMEOUT);
@@ -413,6 +416,25 @@ void set_preset_level(struct usb_dev_handle *handle, int level)
printf("wrote: %d\n", i); printf("wrote: %d\n", i);
} }
void set_eq_type(struct usb_dev_handle *handle, int type)
{
static char set_eq[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x2A, 0x04, 0x0C, 0x02, 0x18, 0x04, 0x02, 0x05, 0x00 /* type1 */, 0x06, 0x00 /* checksum */, 0xF7, 0x00};
switch (type) {
case EQ_TYPE_BRIGHT: set_eq[19] = 0x42; break;
case EQ_TYPE_MIDBOOST: set_eq[19] = 0x40; break;
case EQ_TYPE_SCOOP: set_eq[19] = 0x41; break;
case EQ_TYPE_WARM: set_eq[19] = 0x43; break;
default: break;
}
set_eq[21] = calculate_checksum(set_eq, sizeof(set_eq), 21) ^ 0x05;
int i;
i = usb_bulk_write(handle, 4, set_eq, sizeof(set_eq), TIMEOUT);
printf("wrote: %d\n", i);
}
/* x = 0 to 99 */ /* x = 0 to 99 */
void set_eq_gain(struct usb_dev_handle *handle, int x) void set_eq_gain(struct usb_dev_handle *handle, int x)
{ {
@@ -465,6 +487,60 @@ void set_eq_mid(struct usb_dev_handle *handle, int x)
printf("wrote: %d\n", i); printf("wrote: %d\n", i);
} }
/*
x = 0 to 4700 (which transforms into 300-5000 Hz)
device itself will accept higher value, but X-Edit allows only 300-5000Hz
*/
void set_eq_mid_hz(struct usb_dev_handle *handle, int x)
{
int i;
if (x <= 0x7F) {
static char set_hz[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x0C, 0x06, 0x18, 0x07, 0x00 /* value */, 0x00 /* checksum */, 0xF7};
set_hz[17] = x;
set_hz[18] = calculate_checksum(set_hz, sizeof(set_hz), 18);
i = usb_bulk_write(handle, 4, set_hz, sizeof(set_hz), TIMEOUT);
} else {
x -= 0x80;
if (x <= 0x7F) {
static char set_hz[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x2C, 0x04, 0x0C, 0x06, 0x18, 0x04, 0x01, 0x00 /* value */, 0x00 /* checksum */, 0x05, 0xF7, 0x00, 0x00};
set_hz[18] = x;
set_hz[19] = x^0x32;
i = usb_bulk_write(handle, 4, set_hz, sizeof(set_hz), TIMEOUT);
} else {
x -= 0x80;
int a, b, c;
a = 0x28;
b = 0x01;
c = 0;
while (x > 0x7F) {
c++;
if ((c % 2) == 0) {
a ^= 0x02; b++;
} else {
a ^= 0x02;
}
x -= 0x80;
}
static char set_hz[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x00 /* a */, 0x04, 0x0C, 0x06, 0x18, 0x04, 0x02, 0x00 /* b */, 0x00 /* value */, 0x06, 0x00 /* checksum */, 0xF7, 0x00};
set_hz[11] = a;
set_hz[18] = b;
set_hz[19] = x;
set_hz[21] = a^b^x^0x1B^set_hz[14];
i = usb_bulk_write(handle, 4, set_hz, sizeof(set_hz), TIMEOUT);
}
}
printf("wrote: %d\n", i);
}
/* x = 0x00 (-12dB) to 0x18 (12dB) */ /* x = 0x00 (-12dB) to 0x18 (12dB) */
void set_eq_treble(struct usb_dev_handle *handle, int x) void set_eq_treble(struct usb_dev_handle *handle, int x)
{ {
@@ -478,6 +554,60 @@ void set_eq_treble(struct usb_dev_handle *handle, int x)
printf("wrote: %d\n", i); printf("wrote: %d\n", i);
} }
/*
x = 0 to 7500 (which transforms into 500-8000 Hz)
device itself will accept higher value, but X-Edit allows only 500-8000Hz
*/
void set_eq_treb_hz(struct usb_dev_handle *handle, int x)
{
int i;
if (x <= 0x7F) {
static char set_hz[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x0C, 0x0B, 0x18, 0x07, 0x00 /* value */, 0x00 /* checksum */, 0xF7};
set_hz[17] = x;
set_hz[18] = calculate_checksum(set_hz, sizeof(set_hz), 18);
i = usb_bulk_write(handle, 4, set_hz, sizeof(set_hz), TIMEOUT);
} else {
x -= 0x80;
if (x <= 0x7F) {
static char set_hz[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x2C, 0x04, 0x0C, 0x0B, 0x18, 0x04, 0x01, 0x00 /* value */, 0x00 /* checksum */, 0x05, 0xF7, 0x00, 0x00};
set_hz[18] = x;
set_hz[19] = x^0x3F;
i = usb_bulk_write(handle, 4, set_hz, sizeof(set_hz), TIMEOUT);
} else {
x -= 0x80;
int a, b, c;
a = 0x28;
b = 0x01;
c = 0;
while (x > 0x7F) {
c++;
if ((c % 2) == 0) {
a ^= 0x02; b++;
} else {
a ^= 0x02;
}
x -= 0x80;
}
static char set_hz[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x00 /* a */, 0x04, 0x0C, 0x0B, 0x18, 0x04, 0x02, 0x00 /* b */, 0x00 /* value */, 0x06, 0x00 /* checksum */, 0xF7, 0x00};
set_hz[11] = a;
set_hz[18] = b;
set_hz[19] = x;
set_hz[21] = a^b^x^0x1B^set_hz[14];
i = usb_bulk_write(handle, 4, set_hz, sizeof(set_hz), TIMEOUT);
}
}
printf("wrote: %d\n", i);
}
void set_eq_on_off(struct usb_dev_handle *handle, gboolean val) void set_eq_on_off(struct usb_dev_handle *handle, gboolean val)
{ {
static char set_eq[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x0C, 0x0C, 0x18, 0x07, 0x00 /* on/off */, 0x00 /* checksum */, 0xF7}; static char set_eq[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x0C, 0x0C, 0x18, 0x07, 0x00 /* on/off */, 0x00 /* checksum */, 0xF7};

10
gdigi.h
View File

@@ -93,6 +93,13 @@ enum {
#define DIST_MP_TONE 0x0E #define DIST_MP_TONE 0x0E
#define DIST_MP_VOLUME 0x0F #define DIST_MP_VOLUME 0x0F
enum {
EQ_TYPE_BRIGHT = 0,
EQ_TYPE_MIDBOOST,
EQ_TYPE_SCOOP,
EQ_TYPE_WARM
};
enum { enum {
NOISEGATE_GATE = 0, NOISEGATE_GATE = 0,
NOISEGATE_SWELL NOISEGATE_SWELL
@@ -356,11 +363,14 @@ void set_dist_type(struct usb_dev_handle *handle, int type);
void set_dist_option(struct usb_dev_handle *handle, char option, int value); void set_dist_option(struct usb_dev_handle *handle, char option, int value);
void set_dist_on_off(struct usb_dev_handle *handle, gboolean val); void set_dist_on_off(struct usb_dev_handle *handle, gboolean val);
void set_preset_level(struct usb_dev_handle *handle, int level); void set_preset_level(struct usb_dev_handle *handle, int level);
void set_eq_type(struct usb_dev_handle *handle, int type);
void set_eq_gain(struct usb_dev_handle *handle, int x); void set_eq_gain(struct usb_dev_handle *handle, int x);
void set_eq_level(struct usb_dev_handle *handle, int x); void set_eq_level(struct usb_dev_handle *handle, int x);
void set_eq_bass(struct usb_dev_handle *handle, int x); void set_eq_bass(struct usb_dev_handle *handle, int x);
void set_eq_mid(struct usb_dev_handle *handle, int x); void set_eq_mid(struct usb_dev_handle *handle, int x);
void set_eq_mid_hz(struct usb_dev_handle *handle, int x);
void set_eq_treble(struct usb_dev_handle *handle, int x); void set_eq_treble(struct usb_dev_handle *handle, int x);
void set_eq_treb_hz(struct usb_dev_handle *handle, int x);
void set_eq_on_off(struct usb_dev_handle *handle, gboolean val); void set_eq_on_off(struct usb_dev_handle *handle, gboolean val);
void set_noisegate_type(struct usb_dev_handle *handle, int type); void set_noisegate_type(struct usb_dev_handle *handle, int type);
void set_gate_option(struct usb_dev_handle *handle, char option, int x); void set_gate_option(struct usb_dev_handle *handle, char option, int x);

13
gui.c
View File

@@ -151,6 +151,10 @@ static SettingsWidget eq_widgets[] = {
{"EQ bass", set_eq_bass, NULL, 0.0, 24.0}, {"EQ bass", set_eq_bass, NULL, 0.0, 24.0},
{"EQ mid", set_eq_mid, NULL, 0.0, 24.0}, {"EQ mid", set_eq_mid, NULL, 0.0, 24.0},
{"EQ treble", set_eq_treble, NULL, 0.0, 24.0}, {"EQ treble", set_eq_treble, NULL, 0.0, 24.0},
// TODO: make this display propertly (display range 300 to 5000)
{"EQ mid Hz", set_eq_mid_hz, NULL, 0.0, 4700.0},
// TODO: make this display propertly (display range 500 to 8000)
{"EQ treb Hz", set_eq_treb_hz, NULL, 0.0, 7500.0},
}; };
static SettingsWidget noisegate_gate_widgets[] = { static SettingsWidget noisegate_gate_widgets[] = {
@@ -430,7 +434,9 @@ typedef struct {
} WidgetContainer; } WidgetContainer;
static WidgetContainer wah_container[] = { static WidgetContainer wah_container[] = {
{-1, NULL, NULL, wah_widgets, G_N_ELEMENTS(wah_widgets), NULL}, {WAH_TYPE_CRY, "Cry wah", set_wah_type, wah_widgets, G_N_ELEMENTS(wah_widgets), NULL},
{WAH_TYPE_FULLRANGE, "Fullrange wah", set_wah_type, wah_widgets, G_N_ELEMENTS(wah_widgets), NULL},
{WAH_TYPE_CLYDE, "Clyde wah", set_wah_type, wah_widgets, G_N_ELEMENTS(wah_widgets), NULL},
}; };
static WidgetContainer comp_container[] = { static WidgetContainer comp_container[] = {
@@ -499,7 +505,10 @@ static WidgetContainer reverb_container[] = {
}; };
static WidgetContainer eq_container[] = { static WidgetContainer eq_container[] = {
{-1, NULL, NULL, eq_widgets, G_N_ELEMENTS(eq_widgets), NULL}, {EQ_TYPE_BRIGHT, "Bright", set_eq_type, eq_widgets, G_N_ELEMENTS(eq_widgets), NULL},
{EQ_TYPE_MIDBOOST, "Mid Boost", set_eq_type, eq_widgets, G_N_ELEMENTS(eq_widgets), NULL},
{EQ_TYPE_SCOOP, "Scoop", set_eq_type, eq_widgets, G_N_ELEMENTS(eq_widgets), NULL},
{EQ_TYPE_WARM, "Warm", set_eq_type, eq_widgets, G_N_ELEMENTS(eq_widgets), NULL},
}; };
void combo_box_changed_cb(GtkComboBox *widget, WidgetContainer *widgets) void combo_box_changed_cb(GtkComboBox *widget, WidgetContainer *widgets)

View File

@@ -228,6 +228,11 @@ void test_eq(struct usb_dev_handle *handle)
{ {
int x; int x;
set_eq_type(handle, EQ_TYPE_BRIGHT);
set_eq_type(handle, EQ_TYPE_MIDBOOST);
set_eq_type(handle, EQ_TYPE_SCOOP);
set_eq_type(handle, EQ_TYPE_WARM);
for (x=0; x<=99; x++) for (x=0; x<=99; x++)
set_eq_gain(handle, x); set_eq_gain(handle, x);
for (x=0; x<=99; x++) for (x=0; x<=99; x++)
@@ -237,8 +242,12 @@ void test_eq(struct usb_dev_handle *handle)
set_eq_bass(handle, x); set_eq_bass(handle, x);
for (x=0; x<=0x18; x++) for (x=0; x<=0x18; x++)
set_eq_mid(handle, x); set_eq_mid(handle, x);
for (x=0; x<=4700; x++)
set_eq_mid_hz(handle, x);
for (x=0; x<=0x18; x++) for (x=0; x<=0x18; x++)
set_eq_treble(handle, x); set_eq_treble(handle, x);
for (x=0; x<=7500; x++)
set_eq_treb_hz(handle, x);
set_eq_on_off(handle, TRUE); set_eq_on_off(handle, TRUE);
set_eq_on_off(handle, FALSE); set_eq_on_off(handle, FALSE);