diff --git a/gdigi.c b/gdigi.c index f58ede1..3c82de8 100644 --- a/gdigi.c +++ b/gdigi.c @@ -193,7 +193,7 @@ void set_higher_option(gint id, gint position, int type) 0x00, 0x00, 0x00, /* ID */ 0x00, /* position */ 0x00, /* value length */ - 0x00, 0x00, /* type */ + 0x00, 0x00, 0x00, /* type */ 0x00, /* checksum */ 0xF7}; set_type[9] = ((id & 0x80) >> 2); @@ -232,6 +232,21 @@ void set_higher_option(gint id, gint position, int type) set_type[16] = calculate_checksum(set_type, 18, 16) ^ 0x07; send_data(set_type, 18); + } else if (type < 0xFFFFFF) { + set_type[9] |= 0x08; // there'll be length before value + if (((type & 0x80) >> 7) == 1) + set_type[9] |= 0x01; + + set_type[13] = 0x03; + + set_type[14] = ((type & 0xFF0000) >> 16); + set_type[15] = ((type & 0x00FF00) >> 8); + set_type[16] = ((type & 0x00007F)); + + set_type[18] = 0xF7; + set_type[17] = calculate_checksum(set_type, 19, 17) ^ 0x07; + + send_data(set_type, 19); } } diff --git a/gdigi.h b/gdigi.h index 2218e18..591795a 100644 --- a/gdigi.h +++ b/gdigi.h @@ -406,6 +406,54 @@ enum { #define EMT240_PLATE_LIVELINESS 1933 #define EMT240_PLATE_LEVEL 1925 +enum { + EXP_TYPE_NONE = 0, + EXP_TYPE_PICKUP_ENABLE = 131137, + EXP_TYPE_PIKCUP_TYPE = 131136, + EXP_TYPE_COMP_ENABLE = 262337, + EXP_TYPE_COMP_SUST = 262352, + EXP_TYPE_COMP_TONE = 262353, + EXP_TYPE_COMP_LEVEL = 262354, + EXP_TYPE_COMP_ATTACK = 262355, + EXP_TYPE_DIST_ENABLE = 395649, + EXP_TYPE_DIST_DISTORTION = 395653, + EXP_TYPE_DIST_FILTER = 395654, + EXP_TYPE_DIST_VOLUME = 395655, + EXP_TYPE_AMP_ENABLE = 524553, + EXP_TYPE_AMP_GAIN = 526785, + EXP_TYPE_AMP_LEVEL = 526786, + EXP_TYPE_EQ_ENABLE = 1576076, + EXP_TYPE_EQ_BASS = 1576067, + EXP_TYPE_EQ_MID = 1576068, + EXP_TYPE_EQ_TREB = 1576069, + EXP_TYPE_GATE_ENABLE = 787137, + EXP_TYPE_GATE_THRESHOLD = 787142, + EXP_TYPE_GATE_ATTACK = 787144, + EXP_TYPE_GATE_RELEASE = 787145, + EXP_TYPE_GATE_ATTN = 787146, + EXP_TYPE_CHORUSFX_ENABLE = 918273, + EXP_TYPE_PHASER_SPEED = 918466, + EXP_TYPE_PHASER_DEPTH = 918467, + EXP_TYPE_PHASER_REGEN = 918470, + EXP_TYPE_PHASER_WAVEFORM = 918471, + EXP_TYPE_PHASER_LEVEL = 918469, + EXP_TYPE_DELAY_ENABLE = 984897, + EXP_TYPE_DELAY_TIME = 984928, + EXP_TYPE_DELAY_REPEATS = 984903, + EXP_TYPE_DELAY_LEVEL = 984900, + EXP_TYPE_DELAY_DUCK_THRESH = 984929, + EXP_TYPE_DELAY_DUCK_LEVEL = 984930, + EXP_TYPE_REVERB_ENABLE = 1050497, + EXP_TYPE_REVERB_LEVEL = 1050501, + EXP_TYPE_VOLUME_PRE_FX = 854594, + EXP_TYPE_VOLUME_POST_FX = 1116738 +}; + +#define EXP_TYPE 8194 +#define EXP_POSITION 19 + +void set_option(guint id, guint position, guint value); +void set_higher_option(gint id, gint position, int type); void set_wah_min(int level); void set_wah_max(int level); void set_wah_level(int level); diff --git a/tests.c b/tests.c index d39f2da..b8141b9 100644 --- a/tests.c +++ b/tests.c @@ -620,6 +620,50 @@ void test_reverb() set_reverb_on_off(FALSE); } +void test_exp() +{ + set_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_NONE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_PICKUP_ENABLE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_PIKCUP_TYPE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_COMP_ENABLE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_COMP_SUST); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_COMP_TONE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_COMP_LEVEL); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_COMP_ATTACK); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_DIST_ENABLE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_DIST_DISTORTION); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_DIST_FILTER); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_DIST_VOLUME); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_AMP_ENABLE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_AMP_GAIN); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_AMP_LEVEL); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_EQ_ENABLE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_EQ_BASS); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_EQ_MID); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_EQ_TREB); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_GATE_ENABLE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_GATE_THRESHOLD); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_GATE_ATTACK); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_GATE_RELEASE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_GATE_ATTN); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_CHORUSFX_ENABLE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_PHASER_SPEED); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_PHASER_DEPTH); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_PHASER_REGEN); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_PHASER_WAVEFORM); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_PHASER_LEVEL); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_DELAY_ENABLE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_DELAY_TIME); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_DELAY_REPEATS); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_DELAY_LEVEL); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_DELAY_DUCK_THRESH); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_DELAY_DUCK_LEVEL); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_REVERB_ENABLE); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_REVERB_LEVEL); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_VOLUME_PRE_FX); + set_higher_option(EXP_TYPE, EXP_POSITION, EXP_TYPE_VOLUME_POST_FX); +} + void test_all() { test_wah();