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

146
gdigi.c
View File

@@ -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};