add set_eq_mid_hz and set_eq_treb_hz
This commit is contained in:
1
TODO
1
TODO
@@ -1,7 +1,6 @@
|
||||
-figure out all magic commands
|
||||
-fix usb handling code
|
||||
-make complete gui
|
||||
-figure out setting EQ mid Hz and EQ treb Hz
|
||||
-amp/cabinet models
|
||||
-expression pedal options
|
||||
-audio setup options
|
||||
|
||||
146
gdigi.c
146
gdigi.c
@@ -26,27 +26,28 @@ char buf[255];
|
||||
struct usb_device *dev;
|
||||
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 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 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 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 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 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 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};
|
||||
|
||||
/* 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};
|
||||
/* 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
|
||||
@@ -82,6 +83,8 @@ int read_device(struct usb_dev_handle *handle, int bytes)
|
||||
|
||||
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;
|
||||
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);
|
||||
}
|
||||
|
||||
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 */
|
||||
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);
|
||||
}
|
||||
|
||||
/*
|
||||
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) */
|
||||
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);
|
||||
}
|
||||
|
||||
/*
|
||||
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)
|
||||
{
|
||||
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
10
gdigi.h
@@ -93,6 +93,13 @@ enum {
|
||||
#define DIST_MP_TONE 0x0E
|
||||
#define DIST_MP_VOLUME 0x0F
|
||||
|
||||
enum {
|
||||
EQ_TYPE_BRIGHT = 0,
|
||||
EQ_TYPE_MIDBOOST,
|
||||
EQ_TYPE_SCOOP,
|
||||
EQ_TYPE_WARM
|
||||
};
|
||||
|
||||
enum {
|
||||
NOISEGATE_GATE = 0,
|
||||
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_on_off(struct usb_dev_handle *handle, gboolean val);
|
||||
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_level(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_hz(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_noisegate_type(struct usb_dev_handle *handle, int type);
|
||||
void set_gate_option(struct usb_dev_handle *handle, char option, int x);
|
||||
|
||||
13
gui.c
13
gui.c
@@ -151,6 +151,10 @@ static SettingsWidget eq_widgets[] = {
|
||||
{"EQ bass", set_eq_bass, 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},
|
||||
// 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[] = {
|
||||
@@ -430,7 +434,9 @@ typedef struct {
|
||||
} WidgetContainer;
|
||||
|
||||
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[] = {
|
||||
@@ -499,7 +505,10 @@ static WidgetContainer reverb_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)
|
||||
|
||||
9
tests.c
9
tests.c
@@ -228,6 +228,11 @@ void test_eq(struct usb_dev_handle *handle)
|
||||
{
|
||||
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++)
|
||||
set_eq_gain(handle, x);
|
||||
for (x=0; x<=99; x++)
|
||||
@@ -237,8 +242,12 @@ void test_eq(struct usb_dev_handle *handle)
|
||||
set_eq_bass(handle, x);
|
||||
for (x=0; x<=0x18; x++)
|
||||
set_eq_mid(handle, x);
|
||||
for (x=0; x<=4700; x++)
|
||||
set_eq_mid_hz(handle, x);
|
||||
for (x=0; x<=0x18; 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, FALSE);
|
||||
|
||||
Reference in New Issue
Block a user