From 364d2f32ca3b76fa6f6b50a3c4674f905f0dcba3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tomasz=20Mo=C5=84?= Date: Fri, 30 Jan 2009 20:17:14 +0100 Subject: [PATCH] add set_dist_type; add control functions for screamer, 808, guyod, dod250 and rodent dists --- gdigi.c | 492 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 492 insertions(+) diff --git a/gdigi.c b/gdigi.c index 8777194..199f7c6 100644 --- a/gdigi.c +++ b/gdigi.c @@ -44,6 +44,11 @@ static char magic22[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0 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 */ +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 */ + + int read_device(struct usb_dev_handle *handle, int bytes) { int i, x; @@ -482,6 +487,493 @@ void set_pickup_on_off(struct usb_dev_handle *handle, gboolean val) printf("wrote: %d\n", i); } +enum { + DIST_TYPE_SCREAMER = 0, + DIST_TYPE_808, + DIST_TYPE_GUYOD, + DIST_TYPE_DOD250, + DIST_TYPE_RODENT, + DIST_TYPE_MX, + DIST_TYPE_DS, + DIST_TYPE_GRUNGE, + DIST_TYPE_ZONE, + DIST_TYPE_DEATH, + DIST_TYPE_GONK, + DIST_TYPE_FUZZY, + DIST_TYPE_MP +}; + +void set_dist_type(struct usb_dev_handle *handle, int type) +{ + static char set_dist[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x28, 0x04, 0x09, 0x00, 0x06, 0x04, 0x02, 0x05, 0x00 /* type1 */, 0x06, 0x00 /* type2 */, 0xF7, 0x00}; + + switch (type) { + case DIST_TYPE_SCREAMER: set_dist[19] = 0x00; set_dist[21] = 0x2D; break; + case DIST_TYPE_808: set_dist[19] = 0x0C; set_dist[21] = 0x21; break; + case DIST_TYPE_GUYOD: set_dist[19] = 0x05; set_dist[21] = 0x28; break; + case DIST_TYPE_DOD250: set_dist[19] = 0x03; set_dist[21] = 0x2E; break; + case DIST_TYPE_RODENT: set_dist[19] = 0x01; set_dist[21] = 0x2C; break; + case DIST_TYPE_MX: set_dist[19] = 0x0B; set_dist[21] = 0x26; break; + case DIST_TYPE_DS: set_dist[19] = 0x02; set_dist[21] = 0x2F; break; + case DIST_TYPE_GRUNGE: set_dist[19] = 0x07; set_dist[21] = 0x2A; break; + case DIST_TYPE_ZONE: set_dist[19] = 0x09; set_dist[21] = 0x24; break; + case DIST_TYPE_DEATH: set_dist[19] = 0x0E; set_dist[21] = 0x23; break; + case DIST_TYPE_GONK: set_dist[19] = 0x0D; set_dist[21] = 0x20; break; + case DIST_TYPE_FUZZY: set_dist[19] = 0x08; set_dist[21] = 0x25; break; + case DIST_TYPE_MP: set_dist[19] = 0x04; set_dist[21] = 0x29; break; + default: break; + } + + int i; + i = usb_bulk_write(handle, 4, set_dist, sizeof(set_dist), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_screamer_drive(struct usb_dev_handle* handle, int x) +{ + static char set_drive[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x02, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + switch ((x & 0xf0) >> 4) { + case 0: val = 0x20; break; + case 1: val = 0x30; break; + case 2: val = 0x00; break; + case 3: val = 0x10; break; + case 4: val = 0x60; break; + case 5: val = 0x70; break; + case 6: val = 0x40; break; + default: break; + } + val += (x & 0xf); + + set_drive[17] = x; + set_drive[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_drive, sizeof(set_drive), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_screamer_tone(struct usb_dev_handle* handle, int x) +{ + static char set_tone[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x03, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + switch ((x & 0xf0) >> 4) { + case 0: val = 0x20; break; + case 1: val = 0x30; break; + case 2: val = 0x00; break; + case 3: val = 0x10; break; + case 4: val = 0x60; break; + case 5: val = 0x70; break; + case 6: val = 0x40; break; + default: break; + } + val += (x & 0xf); + if (((x & 0xf) % 2) == 0) { + val += 1; + } else { + val -= 1; + } + + set_tone[17] = x; + set_tone[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_tone, sizeof(set_tone), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_screamer_level(struct usb_dev_handle* handle, int x) +{ + static char set_level[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x04, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + switch ((x & 0xf0) >> 4) { + case 0: val = 0x20; break; + case 1: val = 0x30; break; + case 2: val = 0x00; break; + case 3: val = 0x10; break; + case 4: val = 0x60; break; + case 5: val = 0x70; break; + case 6: val = 0x40; break; + default: break; + } + switch (x & 0xf) { + case 0: val += 0x6; break; + case 1: val += 0x7; break; + case 2: val += 0x4; break; + case 3: val += 0x5; break; + case 4: val += 0x2; break; + case 5: val += 0x3; break; + case 6: val += 0x0; break; + case 7: val += 0x1; break; + case 8: val += 0xE; break; + case 9: val += 0xF; break; + case 0xA: val += 0xC; break; + case 0xB: val += 0xD; break; + case 0xC: val += 0xA; break; + case 0xD: val += 0xB; break; + case 0xE: val += 0x8; break; + case 0xF: val += 0x9; break; + default: break; + } + + set_level[17] = x; + set_level[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_level, sizeof(set_level), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_808_overdrive(struct usb_dev_handle *handle, int x) +{ + static char set_overdrive[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x29, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + val = (x & 0xf0); + switch (x & 0xf) { + case 0: val += 0xB; break; + case 1: val += 0xA; break; + case 2: val += 0x9; break; + case 3: val += 0x8; break; + case 4: val += 0xF; break; + case 5: val += 0xE; break; + case 6: val += 0xD; break; + case 7: val += 0xC; break; + case 8: val += 0x3; break; + case 9: val += 0x2; break; + case 0xA: val += 0x1; break; + case 0xB: val += 0x0; break; + case 0xC: val += 0x7; break; + case 0xD: val += 0x6; break; + case 0xE: val += 0x5; break; + case 0xF: val += 0x4; break; + default: break; + } + + set_overdrive[17] = x; + set_overdrive[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_overdrive, sizeof(set_overdrive), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_808_tone(struct usb_dev_handle *handle, int x) +{ + static char set_tone[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x2A, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + val = (x & 0xf0); + val += (((x & 0xf) + 8) & 0xf); + + set_tone[17] = x; + set_tone[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_tone, sizeof(set_tone), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_808_level(struct usb_dev_handle *handle, int x) +{ + static char set_level[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x2B, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + val = (x & 0xf0); + val += (((x & 0xf) + 8) & 0xf); + if (((x & 0xf) % 2) == 0) { + val += 1; + } else { + val -= 1; + } + + set_level[17] = x; + set_level[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_level, sizeof(set_level), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_guyod_drive(struct usb_dev_handle *handle, int x) +{ + static char set_drive[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x10, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + switch ((x & 0xf0) >> 4) { + case 0: val = 0x30; break; + case 1: val = 0x20; break; + case 2: val = 0x10; break; + case 3: val = 0x00; break; + case 4: val = 0x70; break; + case 5: val = 0x60; break; + case 6: val = 0x50; break; + default: break; + } + switch (x & 0xf) { + case 0: val += 2; break; + case 1: val += 3; break; + case 2: val += 0; break; + case 3: val += 1; break; + case 4: val += 6; break; + case 5: val += 7; break; + case 6: val += 4; break; + case 7: val += 5; break; + case 8: val += 0xA; break; + case 9: val += 0xB; break; + case 0xA: val += 8; break; + case 0xB: val += 9; break; + case 0xC: val += 0xE; break; + case 0xD: val += 0xF; break; + case 0xE: val += 0xC; break; + case 0xF: val += 0xD; break; + default: break; + } + + set_drive[17] = x; + set_drive[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_drive, sizeof(set_drive), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_guyod_level(struct usb_dev_handle *handle, int x) +{ + static char set_level[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x11, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + switch ((x & 0xf0) >> 4) { + case 0: val = 0x30; break; + case 1: val = 0x20; break; + case 2: val = 0x10; break; + case 3: val = 0x00; break; + case 4: val = 0x70; break; + case 5: val = 0x60; break; + case 6: val = 0x50; break; + default: break; + } + switch (x & 0xf) { + case 0: val += 3; break; + case 1: val += 2; break; + case 2: val += 1; break; + case 3: val += 0; break; + case 4: val += 7; break; + case 5: val += 6; break; + case 6: val += 5; break; + case 7: val += 4; break; + case 8: val += 0xB; break; + case 9: val += 0xA; break; + case 0xA: val += 9; break; + case 0xB: val += 8; break; + case 0xC: val += 0xF; break; + case 0xD: val += 0xE; break; + case 0xE: val += 0xD; break; + case 0xF: val += 0xC; break; + default: break; + } + + set_level[17] = x; + set_level[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_level, sizeof(set_level), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_dod250_gain(struct usb_dev_handle *handle, int x) +{ + static char set_gain[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x0B, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + switch ((x & 0xf0) >> 4) { + case 0: val = 0x20; break; + case 1: val = 0x30; break; + case 2: val = 0x00; break; + case 3: val = 0x10; break; + case 4: val = 0x60; break; + case 5: val = 0x70; break; + case 6: val = 0x40; break; + default: break; + } + switch (x & 0xf) { + case 0: val += 9; break; + case 1: val += 8; break; + case 2: val += 0xB; break; + case 3: val += 0xA; break; + case 4: val += 0xD; break; + case 5: val += 0xC; break; + case 6: val += 0xF; break; + case 7: val += 0xE; break; + case 8: val += 1; break; + case 9: val += 0; break; + case 0xA: val += 3; break; + case 0xB: val += 2; break; + case 0xC: val += 5; break; + case 0xD: val += 4; break; + case 0xE: val += 7; break; + case 0xF: val += 6; break; + default: break; + } + + set_gain[17] = x; + set_gain[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_gain, sizeof(set_gain), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_dod250_level(struct usb_dev_handle *handle, int x) +{ + static char set_level[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x0C, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + switch ((x & 0xf0) >> 4) { + case 0: val = 0x20; break; + case 1: val = 0x30; break; + case 2: val = 0x00; break; + case 3: val = 0x10; break; + case 4: val = 0x60; break; + case 5: val = 0x70; break; + case 6: val = 0x40; break; + default: break; + } + val += (0xF - (x & 0xf)); + if (((x & 0xf) % 2) == 0) { + val -= 1; + } else { + val += 1; + } + + set_level[17] = x; + set_level[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_level, sizeof(set_level), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_rodent_dist(struct usb_dev_handle *handle, int x) +{ + static char set_dist[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x05, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + switch ((x & 0xf0) >> 4) { + case 0: val = 0x20; break; + case 1: val = 0x30; break; + case 2: val = 0x00; break; + case 3: val = 0x10; break; + case 4: val = 0x60; break; + case 5: val = 0x70; break; + case 6: val = 0x40; break; + default: break; + } + if ((x & 0xf) < 8) { + val += (7 - (x & 0xf)); + } else { + val += (0xF + (8 - (x & 0xf))); + } + + set_dist[17] = x; + set_dist[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_dist, sizeof(set_dist), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_rodent_filter(struct usb_dev_handle *handle, int x) +{ + static char set_filter[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x06, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + switch ((x & 0xf0) >> 4) { + case 0: val = 0x20; break; + case 1: val = 0x30; break; + case 2: val = 0x00; break; + case 3: val = 0x10; break; + case 4: val = 0x60; break; + case 5: val = 0x70; break; + case 6: val = 0x40; break; + default: break; + } + switch (x & 0xf) { + case 0: val += 4; break; + case 1: val += 5; break; + case 2: val += 6; break; + case 3: val += 7; break; + case 4: val += 0; break; + case 5: val += 1; break; + case 6: val += 2; break; + case 7: val += 3; break; + case 8: val += 0xC; break; + case 9: val += 0xD; break; + case 0xA: val += 0xE; break; + case 0xB: val += 0xF; break; + case 0xC: val += 8; break; + case 0xD: val += 9; break; + case 0xE: val += 0xA; break; + case 0xF: val += 0xB; break; + default: break; + } + + + set_filter[17] = x; + set_filter[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_filter, sizeof(set_filter), TIMEOUT); + printf("wrote: %d\n", i); +} + +void set_rodent_level(struct usb_dev_handle *handle, int x) +{ + static char set_level[] = {0x04, 0xF0, 0x00, 0x00, 0x04, 0x10, 0x00, 0x5E, 0x04, 0x02, 0x41, 0x20, 0x04, 0x09, 0x07, 0x06, 0x07, 0x00 /* value */, 0x00 /* confirm */, 0xF7}; + + int val; + switch ((x & 0xf0) >> 4) { + case 0: val = 0x20; break; + case 1: val = 0x30; break; + case 2: val = 0x00; break; + case 3: val = 0x10; break; + case 4: val = 0x60; break; + case 5: val = 0x70; break; + case 6: val = 0x40; break; + default: break; + } + switch (x & 0xf) { + case 0: val += 5; break; + case 1: val += 4; break; + case 2: val += 7; break; + case 3: val += 6; break; + case 4: val += 1; break; + case 5: val += 0; break; + case 6: val += 3; break; + case 7: val += 2; break; + case 8: val += 0xD; break; + case 9: val += 0xC; break; + case 0xA: val += 0xF; break; + case 0xB: val += 0xE; break; + case 0xC: val += 9; break; + case 0xD: val += 8; break; + case 0xE: val += 0xB; break; + case 0xF: val += 0xA; break; + default: break; + } + + + set_level[17] = x; + set_level[18] = val; + + int i; + i = usb_bulk_write(handle, 4, set_level, sizeof(set_level), TIMEOUT); + printf("wrote: %d\n", i); +} + void value_changed_cb(GtkSpinButton *spinbutton, void (*callback)(struct usb_dev_handle*, int)) { int val = gtk_spin_button_get_value_as_int(spinbutton);