faker 1968
/
Effector_110613
main.cpp@0:adfbd02222d4, 2011-06-13 (annotated)
- Committer:
- faker
- Date:
- Mon Jun 13 15:20:17 2011 +0000
- Revision:
- 0:adfbd02222d4
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
faker | 0:adfbd02222d4 | 1 | /*****************************************************/ |
faker | 0:adfbd02222d4 | 2 | /* MBED MULTI EFFECTOR */ |
faker | 0:adfbd02222d4 | 3 | /* */ |
faker | 0:adfbd02222d4 | 4 | /* */ |
faker | 0:adfbd02222d4 | 5 | /*****************************************************/ |
faker | 0:adfbd02222d4 | 6 | |
faker | 0:adfbd02222d4 | 7 | #include "mbed.h" |
faker | 0:adfbd02222d4 | 8 | #include "EffectParam.h" |
faker | 0:adfbd02222d4 | 9 | #include "TextLCD.h" |
faker | 0:adfbd02222d4 | 10 | #include "R_Sw_Check.h" |
faker | 0:adfbd02222d4 | 11 | #include "Distotion_Unit.h" |
faker | 0:adfbd02222d4 | 12 | #include "Delay_Unit.h" |
faker | 0:adfbd02222d4 | 13 | |
faker | 0:adfbd02222d4 | 14 | //Serial debug(USBTX, USBRX); // tx, rx |
faker | 0:adfbd02222d4 | 15 | |
faker | 0:adfbd02222d4 | 16 | LocalFileSystem local("local"); |
faker | 0:adfbd02222d4 | 17 | Ticker sampling; |
faker | 0:adfbd02222d4 | 18 | |
faker | 0:adfbd02222d4 | 19 | AnalogIn Ain(p17); // Audio Input |
faker | 0:adfbd02222d4 | 20 | AnalogOut Aout(p18); // Audio Output |
faker | 0:adfbd02222d4 | 21 | TextLCD lcd(p24, p25, p26, p27, p28, p29, p30); // rs, rw, e, d0, d1, d2, d3) |
faker | 0:adfbd02222d4 | 22 | DigitalIn Rsw0A(p5); // Rotary SW 0 |
faker | 0:adfbd02222d4 | 23 | DigitalIn Rsw0B(p6); |
faker | 0:adfbd02222d4 | 24 | DigitalIn Rsw1A(p7); // Rotary SW 1 |
faker | 0:adfbd02222d4 | 25 | DigitalIn Rsw1B(p8); |
faker | 0:adfbd02222d4 | 26 | DigitalIn Rsw2A(p9); // Rotary SW 2 |
faker | 0:adfbd02222d4 | 27 | DigitalIn Rsw2B(p10); |
faker | 0:adfbd02222d4 | 28 | DigitalIn Rsw3A(p11); // Rotary SW 3 |
faker | 0:adfbd02222d4 | 29 | DigitalIn Rsw3B(p12); |
faker | 0:adfbd02222d4 | 30 | DigitalOut busyFlag(p13); // Effect Proc Busy Flag |
faker | 0:adfbd02222d4 | 31 | |
faker | 0:adfbd02222d4 | 32 | /*******************************/ |
faker | 0:adfbd02222d4 | 33 | /* For Test Signal */ |
faker | 0:adfbd02222d4 | 34 | /*******************************/ |
faker | 0:adfbd02222d4 | 35 | #define TEST_SIGNAL_ENABLE (0) // 1 : Internal SinWave for Debug |
faker | 0:adfbd02222d4 | 36 | #define TEST_SIGNAL_FREQ (1000.0) // Frequency [Hz] |
faker | 0:adfbd02222d4 | 37 | #define TEST_SIGNAL_AMP (30000.0) // Amplitude |
faker | 0:adfbd02222d4 | 38 | #define PAI (3.14159) |
faker | 0:adfbd02222d4 | 39 | |
faker | 0:adfbd02222d4 | 40 | /*******************************/ |
faker | 0:adfbd02222d4 | 41 | /* For ADC & DAC Setting */ |
faker | 0:adfbd02222d4 | 42 | /*******************************/ |
faker | 0:adfbd02222d4 | 43 | #define SAMPLING_TIME (25.0) // ADC Sampling Rate [us] |
faker | 0:adfbd02222d4 | 44 | volatile unsigned int *g_usiAd0cr, *g_usiAd0dr2; // ADC Reg |
faker | 0:adfbd02222d4 | 45 | unsigned int *g_usiDacr; // DAC Reg |
faker | 0:adfbd02222d4 | 46 | |
faker | 0:adfbd02222d4 | 47 | /*******************************/ |
faker | 0:adfbd02222d4 | 48 | /* Gloval Valinat */ |
faker | 0:adfbd02222d4 | 49 | /*******************************/ |
faker | 0:adfbd02222d4 | 50 | unsigned int g_usiFinalOut; // DAC Out Final Data |
faker | 0:adfbd02222d4 | 51 | int g_ssBuff[10]; // Audio Data Buff |
faker | 0:adfbd02222d4 | 52 | float g_fTestWaveT; // Test Sin Wave Phase |
faker | 0:adfbd02222d4 | 53 | int g_iBankNo = 0; // Parameter Patch Bank No |
faker | 0:adfbd02222d4 | 54 | int g_iProgNo = 0; // Parameter Patch Program No |
faker | 0:adfbd02222d4 | 55 | int g_iFlag = 0; // Pacth Write Flag |
faker | 0:adfbd02222d4 | 56 | int g_iProgPatch[BANK_MAX_NUM][PROGNO_MAX_NUM][PP_MAX_NUM]; // Parameter Data |
faker | 0:adfbd02222d4 | 57 | |
faker | 0:adfbd02222d4 | 58 | |
faker | 0:adfbd02222d4 | 59 | /*******************************/ |
faker | 0:adfbd02222d4 | 60 | /* Function */ |
faker | 0:adfbd02222d4 | 61 | /*******************************/ |
faker | 0:adfbd02222d4 | 62 | int main(void); |
faker | 0:adfbd02222d4 | 63 | void effectProcess(void); // Effect Process Function |
faker | 0:adfbd02222d4 | 64 | void paramCheck(int*, int*); // Paramter Range Check |
faker | 0:adfbd02222d4 | 65 | void param1Change(int*, int*, int*, int*); // Process for Changed Rotary SW1 |
faker | 0:adfbd02222d4 | 66 | void param2Change(int*, int*, int*, int*); // Process for Changed Rotary SW2 |
faker | 0:adfbd02222d4 | 67 | void param3Change(int*, int*, int*, int*); // Process for Changed Rotary SW3 |
faker | 0:adfbd02222d4 | 68 | void param4Change(int*, int*, int*, int*); // Process for Changed Rotary SW4 |
faker | 0:adfbd02222d4 | 69 | |
faker | 0:adfbd02222d4 | 70 | void progWrite(int*); // |
faker | 0:adfbd02222d4 | 71 | void distParamChange(int*, int*); // Change Parameter for Ditotion |
faker | 0:adfbd02222d4 | 72 | void delayParamChange(int*, int*); // Change PArameter for Delay |
faker | 0:adfbd02222d4 | 73 | |
faker | 0:adfbd02222d4 | 74 | void progPatchWite(int); // Paramter Write for Flash ROM |
faker | 0:adfbd02222d4 | 75 | void ProgramPatchChange(int, int); // |
faker | 0:adfbd02222d4 | 76 | |
faker | 0:adfbd02222d4 | 77 | /*******************************/ |
faker | 0:adfbd02222d4 | 78 | /* Effect Process */ |
faker | 0:adfbd02222d4 | 79 | /*******************************/ |
faker | 0:adfbd02222d4 | 80 | void effectProcess() { |
faker | 0:adfbd02222d4 | 81 | busyFlag = 1; |
faker | 0:adfbd02222d4 | 82 | // Line Out |
faker | 0:adfbd02222d4 | 83 | *g_usiDacr = g_usiFinalOut; |
faker | 0:adfbd02222d4 | 84 | // ADC Start |
faker | 0:adfbd02222d4 | 85 | *g_usiAd0cr = 0x01200204; |
faker | 0:adfbd02222d4 | 86 | |
faker | 0:adfbd02222d4 | 87 | #if (TEST_SIGNAL_ENABLE == 1) // Test Signal Sin Wave |
faker | 0:adfbd02222d4 | 88 | g_ssBuff[0] = TEST_SIGNAL_AMP * sin(g_fTestWaveT); |
faker | 0:adfbd02222d4 | 89 | g_fTestWaveT = g_fTestWaveT + 2.0 * PAI * SAMPLING_TIME * TEST_SIGNAL_FREQ / 1e6; |
faker | 0:adfbd02222d4 | 90 | if (g_fTestWaveT >= (2.0 * PAI))g_fTestWaveT = 0; |
faker | 0:adfbd02222d4 | 91 | #endif |
faker | 0:adfbd02222d4 | 92 | |
faker | 0:adfbd02222d4 | 93 | // |
faker | 0:adfbd02222d4 | 94 | // Effect Func |
faker | 0:adfbd02222d4 | 95 | // |
faker | 0:adfbd02222d4 | 96 | |
faker | 0:adfbd02222d4 | 97 | g_ssBuff[1] = distotion(g_ssBuff[0]); // Call Distotion Function |
faker | 0:adfbd02222d4 | 98 | g_ssBuff[2] = delay(g_ssBuff[1]); // CAll Delay Function |
faker | 0:adfbd02222d4 | 99 | |
faker | 0:adfbd02222d4 | 100 | // |
faker | 0:adfbd02222d4 | 101 | // Effect Func |
faker | 0:adfbd02222d4 | 102 | // |
faker | 0:adfbd02222d4 | 103 | |
faker | 0:adfbd02222d4 | 104 | #if (TEST_SIGNAL_ENABLE == 0) |
faker | 0:adfbd02222d4 | 105 | while (1) { |
faker | 0:adfbd02222d4 | 106 | if ((*g_usiAd0dr2 & 0x80000000) != 0)break; // ADC Done ? |
faker | 0:adfbd02222d4 | 107 | } |
faker | 0:adfbd02222d4 | 108 | g_ssBuff[0] = (int)(*g_usiAd0dr2 & 0x0000FFF0) - 32768; |
faker | 0:adfbd02222d4 | 109 | #endif |
faker | 0:adfbd02222d4 | 110 | |
faker | 0:adfbd02222d4 | 111 | g_usiFinalOut = 0x00010000 | (g_ssBuff[2] + 32768); |
faker | 0:adfbd02222d4 | 112 | |
faker | 0:adfbd02222d4 | 113 | busyFlag = 0; |
faker | 0:adfbd02222d4 | 114 | } |
faker | 0:adfbd02222d4 | 115 | |
faker | 0:adfbd02222d4 | 116 | |
faker | 0:adfbd02222d4 | 117 | |
faker | 0:adfbd02222d4 | 118 | |
faker | 0:adfbd02222d4 | 119 | /*******************************/ |
faker | 0:adfbd02222d4 | 120 | /* MAIN */ |
faker | 0:adfbd02222d4 | 121 | /*******************************/ |
faker | 0:adfbd02222d4 | 122 | int main() { |
faker | 0:adfbd02222d4 | 123 | |
faker | 0:adfbd02222d4 | 124 | int i ,j ,k; |
faker | 0:adfbd02222d4 | 125 | int iTemp1, iTemp2; |
faker | 0:adfbd02222d4 | 126 | int iParamSwPol[4]; |
faker | 0:adfbd02222d4 | 127 | int iRsw1Num, iRsw2Num, iRsw3Num, iRsw4Num; |
faker | 0:adfbd02222d4 | 128 | char str1[256], str2[256]; |
faker | 0:adfbd02222d4 | 129 | |
faker | 0:adfbd02222d4 | 130 | iRsw1Num = iRsw2Num = iRsw3Num = iRsw4Num = 0; |
faker | 0:adfbd02222d4 | 131 | |
faker | 0:adfbd02222d4 | 132 | // LCD INIT |
faker | 0:adfbd02222d4 | 133 | lcd.cls(); |
faker | 0:adfbd02222d4 | 134 | lcd.locate(0,0); |
faker | 0:adfbd02222d4 | 135 | lcd.printf("Multi Effector"); |
faker | 0:adfbd02222d4 | 136 | lcd.locate(1,1); |
faker | 0:adfbd02222d4 | 137 | lcd.printf("Mode:"); |
faker | 0:adfbd02222d4 | 138 | param1Change(&iRsw1Num, &iRsw2Num, &iRsw3Num, &iRsw4Num); |
faker | 0:adfbd02222d4 | 139 | |
faker | 0:adfbd02222d4 | 140 | // Program Patch File Open |
faker | 0:adfbd02222d4 | 141 | FILE *fp = fopen("/local/prm.txt", "r"); |
faker | 0:adfbd02222d4 | 142 | if(!fp) { |
faker | 0:adfbd02222d4 | 143 | progPatchWite(1); // No File |
faker | 0:adfbd02222d4 | 144 | }else{ |
faker | 0:adfbd02222d4 | 145 | // Read Patch from File |
faker | 0:adfbd02222d4 | 146 | fgets(str1, 256, fp); |
faker | 0:adfbd02222d4 | 147 | fgets(str2, 256, fp); |
faker | 0:adfbd02222d4 | 148 | for(i=0;i<BANK_MAX_NUM;i++){ |
faker | 0:adfbd02222d4 | 149 | for(j=0;j<PROGNO_MAX_NUM;j++){ |
faker | 0:adfbd02222d4 | 150 | fscanf(fp, "%5d%5d", &iTemp1, &iTemp2); |
faker | 0:adfbd02222d4 | 151 | for(k=0;k<PP_MAX_NUM;k++){ |
faker | 0:adfbd02222d4 | 152 | fscanf(fp, "%5d", &g_iProgPatch[i][j][k]); |
faker | 0:adfbd02222d4 | 153 | } |
faker | 0:adfbd02222d4 | 154 | } |
faker | 0:adfbd02222d4 | 155 | } |
faker | 0:adfbd02222d4 | 156 | fclose(fp); |
faker | 0:adfbd02222d4 | 157 | } |
faker | 0:adfbd02222d4 | 158 | |
faker | 0:adfbd02222d4 | 159 | // ADC & DAC SETTING |
faker | 0:adfbd02222d4 | 160 | g_usiAd0cr = (unsigned int*)0x40034000; |
faker | 0:adfbd02222d4 | 161 | g_usiAd0dr2 = (unsigned int*)0x40034018; |
faker | 0:adfbd02222d4 | 162 | g_usiDacr = (unsigned int*)0x4008C000; |
faker | 0:adfbd02222d4 | 163 | |
faker | 0:adfbd02222d4 | 164 | // SAMPLING TIMER START |
faker | 0:adfbd02222d4 | 165 | sampling.attach_us(&effectProcess, SAMPLING_TIME); |
faker | 0:adfbd02222d4 | 166 | |
faker | 0:adfbd02222d4 | 167 | // Rotary SW State Check |
faker | 0:adfbd02222d4 | 168 | while (1) { |
faker | 0:adfbd02222d4 | 169 | switch (ucRotarySwPol(Rsw0A, Rsw0B, Rsw1A, Rsw1B, Rsw2A, Rsw2B, Rsw3A, Rsw3B, iParamSwPol)) { |
faker | 0:adfbd02222d4 | 170 | case 0: |
faker | 0:adfbd02222d4 | 171 | iRsw1Num += iParamSwPol[0]; |
faker | 0:adfbd02222d4 | 172 | param1Change(&iRsw1Num, &iRsw2Num, &iRsw3Num, &iRsw4Num); |
faker | 0:adfbd02222d4 | 173 | break; |
faker | 0:adfbd02222d4 | 174 | case 1: |
faker | 0:adfbd02222d4 | 175 | iRsw2Num += iParamSwPol[1]; |
faker | 0:adfbd02222d4 | 176 | param2Change(&iRsw1Num, &iRsw2Num, &iRsw3Num, &iRsw4Num); |
faker | 0:adfbd02222d4 | 177 | break; |
faker | 0:adfbd02222d4 | 178 | case 2: |
faker | 0:adfbd02222d4 | 179 | iRsw3Num += iParamSwPol[2]; |
faker | 0:adfbd02222d4 | 180 | param3Change(&iRsw1Num, &iRsw2Num, &iRsw3Num, &iRsw4Num); |
faker | 0:adfbd02222d4 | 181 | break; |
faker | 0:adfbd02222d4 | 182 | case 3: |
faker | 0:adfbd02222d4 | 183 | iRsw4Num += iParamSwPol[3]; |
faker | 0:adfbd02222d4 | 184 | param4Change(&iRsw1Num, &iRsw2Num, &iRsw3Num, &iRsw4Num); |
faker | 0:adfbd02222d4 | 185 | break; |
faker | 0:adfbd02222d4 | 186 | default: |
faker | 0:adfbd02222d4 | 187 | break; |
faker | 0:adfbd02222d4 | 188 | } |
faker | 0:adfbd02222d4 | 189 | } |
faker | 0:adfbd02222d4 | 190 | } |
faker | 0:adfbd02222d4 | 191 | |
faker | 0:adfbd02222d4 | 192 | |
faker | 0:adfbd02222d4 | 193 | /*******************************/ |
faker | 0:adfbd02222d4 | 194 | /* Param Check */ |
faker | 0:adfbd02222d4 | 195 | /*******************************/ |
faker | 0:adfbd02222d4 | 196 | void paramCheck(int* iParam, int iMaxValue) { |
faker | 0:adfbd02222d4 | 197 | |
faker | 0:adfbd02222d4 | 198 | if(*iParam >= iMaxValue)*iParam = 0; |
faker | 0:adfbd02222d4 | 199 | if(*iParam < 0)*iParam = iMaxValue - 1; |
faker | 0:adfbd02222d4 | 200 | |
faker | 0:adfbd02222d4 | 201 | } |
faker | 0:adfbd02222d4 | 202 | |
faker | 0:adfbd02222d4 | 203 | |
faker | 0:adfbd02222d4 | 204 | /*******************************/ |
faker | 0:adfbd02222d4 | 205 | /* Param1 Change */ |
faker | 0:adfbd02222d4 | 206 | /*******************************/ |
faker | 0:adfbd02222d4 | 207 | void param1Change(int* iParam1, int* iParam2, int* iParam3, int* iParam4) { |
faker | 0:adfbd02222d4 | 208 | |
faker | 0:adfbd02222d4 | 209 | paramCheck(iParam1, MODE_MAX_NUM); |
faker | 0:adfbd02222d4 | 210 | |
faker | 0:adfbd02222d4 | 211 | lcd.locate(6,1); |
faker | 0:adfbd02222d4 | 212 | lcd.printf(" "); |
faker | 0:adfbd02222d4 | 213 | lcd.locate(0,2); |
faker | 0:adfbd02222d4 | 214 | lcd.printf(" "); |
faker | 0:adfbd02222d4 | 215 | lcd.locate(0,3); |
faker | 0:adfbd02222d4 | 216 | lcd.printf(" "); |
faker | 0:adfbd02222d4 | 217 | |
faker | 0:adfbd02222d4 | 218 | switch (*iParam1) { |
faker | 0:adfbd02222d4 | 219 | case MODE_PLAY: |
faker | 0:adfbd02222d4 | 220 | lcd.locate(6,1); |
faker | 0:adfbd02222d4 | 221 | lcd.printf("PLAY"); |
faker | 0:adfbd02222d4 | 222 | lcd.locate(2,2); |
faker | 0:adfbd02222d4 | 223 | lcd.printf(" Bank PrgNo"); |
faker | 0:adfbd02222d4 | 224 | *iParam2 = g_iBankNo; |
faker | 0:adfbd02222d4 | 225 | *iParam3 = g_iProgNo; |
faker | 0:adfbd02222d4 | 226 | break; |
faker | 0:adfbd02222d4 | 227 | case MODE_EDIT: |
faker | 0:adfbd02222d4 | 228 | lcd.locate(6,1); |
faker | 0:adfbd02222d4 | 229 | lcd.printf("EDIT"); |
faker | 0:adfbd02222d4 | 230 | lcd.locate(2,2); |
faker | 0:adfbd02222d4 | 231 | lcd.printf("Effct Param Value"); |
faker | 0:adfbd02222d4 | 232 | *iParam2 = *iParam3 = 0; |
faker | 0:adfbd02222d4 | 233 | break; |
faker | 0:adfbd02222d4 | 234 | case MODE_PROGWRITE: |
faker | 0:adfbd02222d4 | 235 | lcd.locate(6,1); |
faker | 0:adfbd02222d4 | 236 | lcd.printf("Prog Write"); |
faker | 0:adfbd02222d4 | 237 | lcd.locate(2,2); |
faker | 0:adfbd02222d4 | 238 | lcd.printf(" Bank PrgNo Write"); |
faker | 0:adfbd02222d4 | 239 | *iParam2 = g_iBankNo; |
faker | 0:adfbd02222d4 | 240 | *iParam3 = g_iProgNo; |
faker | 0:adfbd02222d4 | 241 | break; |
faker | 0:adfbd02222d4 | 242 | default: |
faker | 0:adfbd02222d4 | 243 | break; |
faker | 0:adfbd02222d4 | 244 | } |
faker | 0:adfbd02222d4 | 245 | |
faker | 0:adfbd02222d4 | 246 | param2Change(iParam1, iParam2, iParam3, iParam4); |
faker | 0:adfbd02222d4 | 247 | |
faker | 0:adfbd02222d4 | 248 | } |
faker | 0:adfbd02222d4 | 249 | |
faker | 0:adfbd02222d4 | 250 | |
faker | 0:adfbd02222d4 | 251 | /*******************************/ |
faker | 0:adfbd02222d4 | 252 | /* Param2 Change */ |
faker | 0:adfbd02222d4 | 253 | /*******************************/ |
faker | 0:adfbd02222d4 | 254 | void param2Change(int* iParam1, int* iParam2, int* iParam3, int* iParam4) { |
faker | 0:adfbd02222d4 | 255 | |
faker | 0:adfbd02222d4 | 256 | lcd.locate(0,3); |
faker | 0:adfbd02222d4 | 257 | lcd.printf(" "); |
faker | 0:adfbd02222d4 | 258 | |
faker | 0:adfbd02222d4 | 259 | switch (*iParam1) { |
faker | 0:adfbd02222d4 | 260 | case MODE_PLAY: |
faker | 0:adfbd02222d4 | 261 | paramCheck(iParam2, BANK_MAX_NUM); |
faker | 0:adfbd02222d4 | 262 | g_iBankNo = *iParam2; |
faker | 0:adfbd02222d4 | 263 | *iParam3 = g_iProgNo; |
faker | 0:adfbd02222d4 | 264 | break; |
faker | 0:adfbd02222d4 | 265 | case MODE_EDIT: |
faker | 0:adfbd02222d4 | 266 | paramCheck(iParam2, EFFECT_MAX_NUM); |
faker | 0:adfbd02222d4 | 267 | *iParam3 = 0; |
faker | 0:adfbd02222d4 | 268 | break; |
faker | 0:adfbd02222d4 | 269 | case MODE_PROGWRITE: |
faker | 0:adfbd02222d4 | 270 | paramCheck(iParam2, BANK_MAX_NUM); |
faker | 0:adfbd02222d4 | 271 | g_iBankNo = *iParam2; |
faker | 0:adfbd02222d4 | 272 | *iParam3 = g_iProgNo; |
faker | 0:adfbd02222d4 | 273 | *iParam4 = 0; |
faker | 0:adfbd02222d4 | 274 | g_iFlag = 0; |
faker | 0:adfbd02222d4 | 275 | default: |
faker | 0:adfbd02222d4 | 276 | break; |
faker | 0:adfbd02222d4 | 277 | } |
faker | 0:adfbd02222d4 | 278 | |
faker | 0:adfbd02222d4 | 279 | if ((*iParam1 == MODE_PLAY) || (*iParam1 == MODE_PROGWRITE)) { |
faker | 0:adfbd02222d4 | 280 | lcd.locate(6,3); |
faker | 0:adfbd02222d4 | 281 | lcd.printf("%d",*iParam2); |
faker | 0:adfbd02222d4 | 282 | } |
faker | 0:adfbd02222d4 | 283 | |
faker | 0:adfbd02222d4 | 284 | if (*iParam1 == MODE_EDIT) { |
faker | 0:adfbd02222d4 | 285 | switch (*iParam2) { |
faker | 0:adfbd02222d4 | 286 | case EFFECT_DIST: |
faker | 0:adfbd02222d4 | 287 | lcd.locate(2,3); |
faker | 0:adfbd02222d4 | 288 | lcd.printf(" DIST"); |
faker | 0:adfbd02222d4 | 289 | break; |
faker | 0:adfbd02222d4 | 290 | case EFFECT_DELAY: |
faker | 0:adfbd02222d4 | 291 | lcd.locate(2,3); |
faker | 0:adfbd02222d4 | 292 | lcd.printf("DELAY"); |
faker | 0:adfbd02222d4 | 293 | break; |
faker | 0:adfbd02222d4 | 294 | default: |
faker | 0:adfbd02222d4 | 295 | break; |
faker | 0:adfbd02222d4 | 296 | } |
faker | 0:adfbd02222d4 | 297 | } |
faker | 0:adfbd02222d4 | 298 | |
faker | 0:adfbd02222d4 | 299 | param3Change(iParam1, iParam2, iParam3, iParam4); |
faker | 0:adfbd02222d4 | 300 | |
faker | 0:adfbd02222d4 | 301 | } |
faker | 0:adfbd02222d4 | 302 | |
faker | 0:adfbd02222d4 | 303 | |
faker | 0:adfbd02222d4 | 304 | /*******************************/ |
faker | 0:adfbd02222d4 | 305 | /* Param3 Change */ |
faker | 0:adfbd02222d4 | 306 | /*******************************/ |
faker | 0:adfbd02222d4 | 307 | void param3Change(int* iParam1, int* iParam2, int* iParam3, int* iParam4) { |
faker | 0:adfbd02222d4 | 308 | |
faker | 0:adfbd02222d4 | 309 | lcd.locate(8,3); |
faker | 0:adfbd02222d4 | 310 | lcd.printf(" "); |
faker | 0:adfbd02222d4 | 311 | |
faker | 0:adfbd02222d4 | 312 | switch (*iParam1) { |
faker | 0:adfbd02222d4 | 313 | case MODE_PLAY: |
faker | 0:adfbd02222d4 | 314 | paramCheck(iParam3, PROGNO_MAX_NUM); |
faker | 0:adfbd02222d4 | 315 | g_iProgNo = *iParam3; |
faker | 0:adfbd02222d4 | 316 | break; |
faker | 0:adfbd02222d4 | 317 | case MODE_EDIT: |
faker | 0:adfbd02222d4 | 318 | switch (*iParam2) { |
faker | 0:adfbd02222d4 | 319 | case EFFECT_DIST: |
faker | 0:adfbd02222d4 | 320 | paramCheck(iParam3, DIST_PARAM_MAX_NUM); |
faker | 0:adfbd02222d4 | 321 | switch (*iParam3) { |
faker | 0:adfbd02222d4 | 322 | case DIST_PARAM_BYPASS: *iParam4 = g_iProgPatch[g_iBankNo][g_iProgNo][PP_DIST_PARAM_BYPASS]; |
faker | 0:adfbd02222d4 | 323 | break; |
faker | 0:adfbd02222d4 | 324 | case DIST_PARAM_MODE: *iParam4 = g_iProgPatch[g_iBankNo][g_iProgNo][PP_DIST_PARAM_MODE]; |
faker | 0:adfbd02222d4 | 325 | break; |
faker | 0:adfbd02222d4 | 326 | case DIST_PARAM_INPUTGAIN: *iParam4 = g_iProgPatch[g_iBankNo][g_iProgNo][PP_DIST_PARAM_INPUTGAIN]; |
faker | 0:adfbd02222d4 | 327 | break; |
faker | 0:adfbd02222d4 | 328 | case DIST_PARAM_CLIPLEVEL: *iParam4 = g_iProgPatch[g_iBankNo][g_iProgNo][PP_DIST_PARAM_CLIPLEVEL]; |
faker | 0:adfbd02222d4 | 329 | break; |
faker | 0:adfbd02222d4 | 330 | case DIST_PARAM_OUTPUTGAIN: *iParam4 = g_iProgPatch[g_iBankNo][g_iProgNo][PP_DIST_PARAM_OUTPUTGAIN]; |
faker | 0:adfbd02222d4 | 331 | break; |
faker | 0:adfbd02222d4 | 332 | default: break; |
faker | 0:adfbd02222d4 | 333 | } |
faker | 0:adfbd02222d4 | 334 | distParamChange(iParam3, iParam4); |
faker | 0:adfbd02222d4 | 335 | break; |
faker | 0:adfbd02222d4 | 336 | case EFFECT_DELAY: |
faker | 0:adfbd02222d4 | 337 | paramCheck(iParam3, DLY_PARAM_MAX_NUM); |
faker | 0:adfbd02222d4 | 338 | switch (*iParam3) { |
faker | 0:adfbd02222d4 | 339 | case DLY_PARAM_BYPASS: *iParam4 = g_iProgPatch[g_iBankNo][g_iProgNo][PP_DLY_PARAM_BYPASS]; |
faker | 0:adfbd02222d4 | 340 | break; |
faker | 0:adfbd02222d4 | 341 | case DLY_PARAM_DELAYTIME: *iParam4 = g_iProgPatch[g_iBankNo][g_iProgNo][PP_DLY_PARAM_DELAYTIME]; |
faker | 0:adfbd02222d4 | 342 | break; |
faker | 0:adfbd02222d4 | 343 | case DLY_PARAM_FBGAIN: *iParam4 = g_iProgPatch[g_iBankNo][g_iProgNo][PP_DLY_PARAM_FBGAIN]; |
faker | 0:adfbd02222d4 | 344 | break; |
faker | 0:adfbd02222d4 | 345 | default: break; |
faker | 0:adfbd02222d4 | 346 | } |
faker | 0:adfbd02222d4 | 347 | delayParamChange(iParam3, iParam4); |
faker | 0:adfbd02222d4 | 348 | break; |
faker | 0:adfbd02222d4 | 349 | default: |
faker | 0:adfbd02222d4 | 350 | break; |
faker | 0:adfbd02222d4 | 351 | } |
faker | 0:adfbd02222d4 | 352 | break; |
faker | 0:adfbd02222d4 | 353 | case MODE_PROGWRITE: |
faker | 0:adfbd02222d4 | 354 | paramCheck(iParam3, PROGNO_MAX_NUM); |
faker | 0:adfbd02222d4 | 355 | g_iProgNo = *iParam3; |
faker | 0:adfbd02222d4 | 356 | *iParam4 = 0; |
faker | 0:adfbd02222d4 | 357 | g_iFlag = 0; |
faker | 0:adfbd02222d4 | 358 | progWrite(iParam4); |
faker | 0:adfbd02222d4 | 359 | break; |
faker | 0:adfbd02222d4 | 360 | default: |
faker | 0:adfbd02222d4 | 361 | break; |
faker | 0:adfbd02222d4 | 362 | } |
faker | 0:adfbd02222d4 | 363 | |
faker | 0:adfbd02222d4 | 364 | if ((*iParam1 == MODE_PLAY) || (*iParam1 == MODE_PROGWRITE)) { |
faker | 0:adfbd02222d4 | 365 | lcd.locate(12,3); |
faker | 0:adfbd02222d4 | 366 | lcd.printf("%d",*iParam3); |
faker | 0:adfbd02222d4 | 367 | } |
faker | 0:adfbd02222d4 | 368 | |
faker | 0:adfbd02222d4 | 369 | } |
faker | 0:adfbd02222d4 | 370 | |
faker | 0:adfbd02222d4 | 371 | |
faker | 0:adfbd02222d4 | 372 | /*******************************/ |
faker | 0:adfbd02222d4 | 373 | /* Param4 Change */ |
faker | 0:adfbd02222d4 | 374 | /*******************************/ |
faker | 0:adfbd02222d4 | 375 | void param4Change(int* iParam1, int* iParam2, int* iParam3, int* iParam4) { |
faker | 0:adfbd02222d4 | 376 | |
faker | 0:adfbd02222d4 | 377 | lcd.locate(14,3); |
faker | 0:adfbd02222d4 | 378 | lcd.printf(" "); |
faker | 0:adfbd02222d4 | 379 | |
faker | 0:adfbd02222d4 | 380 | switch (*iParam1) { |
faker | 0:adfbd02222d4 | 381 | case MODE_EDIT: |
faker | 0:adfbd02222d4 | 382 | switch (*iParam2) { |
faker | 0:adfbd02222d4 | 383 | case EFFECT_DIST: |
faker | 0:adfbd02222d4 | 384 | distParamChange(iParam3, iParam4); |
faker | 0:adfbd02222d4 | 385 | break; |
faker | 0:adfbd02222d4 | 386 | case EFFECT_DELAY: |
faker | 0:adfbd02222d4 | 387 | delayParamChange(iParam3, iParam4); |
faker | 0:adfbd02222d4 | 388 | break; |
faker | 0:adfbd02222d4 | 389 | default: |
faker | 0:adfbd02222d4 | 390 | break; |
faker | 0:adfbd02222d4 | 391 | } |
faker | 0:adfbd02222d4 | 392 | break; |
faker | 0:adfbd02222d4 | 393 | case MODE_PROGWRITE: |
faker | 0:adfbd02222d4 | 394 | progWrite(iParam4); |
faker | 0:adfbd02222d4 | 395 | break; |
faker | 0:adfbd02222d4 | 396 | default: |
faker | 0:adfbd02222d4 | 397 | break; |
faker | 0:adfbd02222d4 | 398 | } |
faker | 0:adfbd02222d4 | 399 | |
faker | 0:adfbd02222d4 | 400 | } |
faker | 0:adfbd02222d4 | 401 | |
faker | 0:adfbd02222d4 | 402 | |
faker | 0:adfbd02222d4 | 403 | /*******************************/ |
faker | 0:adfbd02222d4 | 404 | /* Distotion Param Change */ |
faker | 0:adfbd02222d4 | 405 | /*******************************/ |
faker | 0:adfbd02222d4 | 406 | void distParamChange(int* iParam3, int* iParam4) { |
faker | 0:adfbd02222d4 | 407 | |
faker | 0:adfbd02222d4 | 408 | lcd.locate(8,3); |
faker | 0:adfbd02222d4 | 409 | lcd.printf(" "); |
faker | 0:adfbd02222d4 | 410 | lcd.locate(8,3); |
faker | 0:adfbd02222d4 | 411 | |
faker | 0:adfbd02222d4 | 412 | switch (*iParam3) { |
faker | 0:adfbd02222d4 | 413 | case DIST_PARAM_BYPASS: |
faker | 0:adfbd02222d4 | 414 | paramCheck(iParam4, DIST_VALUE_BYPASS_MAX); |
faker | 0:adfbd02222d4 | 415 | g_iDistBypass = *iParam4; |
faker | 0:adfbd02222d4 | 416 | //g_iProgPatch[g_iBankNo][g_iProgNo][PP_DIST_PARAM_BYPASS] = *iParam4; |
faker | 0:adfbd02222d4 | 417 | if(g_iDistBypass == 0){ |
faker | 0:adfbd02222d4 | 418 | lcd.printf("BYPSS OFF"); |
faker | 0:adfbd02222d4 | 419 | }else{ |
faker | 0:adfbd02222d4 | 420 | lcd.printf("BYPSS ON"); |
faker | 0:adfbd02222d4 | 421 | } |
faker | 0:adfbd02222d4 | 422 | break; |
faker | 0:adfbd02222d4 | 423 | case DIST_PARAM_MODE: |
faker | 0:adfbd02222d4 | 424 | paramCheck(iParam4, DIST_VALUE_MODE_MAX); |
faker | 0:adfbd02222d4 | 425 | g_iDistMode = *iParam4; |
faker | 0:adfbd02222d4 | 426 | //g_iProgPatch[g_iBankNo][g_iProgNo][PP_DIST_PARAM_MODE] = *iParam4; |
faker | 0:adfbd02222d4 | 427 | lcd.printf(" MODE %d", *iParam4); |
faker | 0:adfbd02222d4 | 428 | break; |
faker | 0:adfbd02222d4 | 429 | case DIST_PARAM_INPUTGAIN: |
faker | 0:adfbd02222d4 | 430 | paramCheck(iParam4, DIST_VALUE_INPUTGAIN_MAX); |
faker | 0:adfbd02222d4 | 431 | g_iDistInputGain = *iParam4; |
faker | 0:adfbd02222d4 | 432 | //g_iProgPatch[g_iBankNo][g_iProgNo][PP_DIST_PARAM_INPUTGAIN] = *iParam4; |
faker | 0:adfbd02222d4 | 433 | lcd.printf("INP.G %d", *iParam4); |
faker | 0:adfbd02222d4 | 434 | break; |
faker | 0:adfbd02222d4 | 435 | case DIST_PARAM_CLIPLEVEL: |
faker | 0:adfbd02222d4 | 436 | paramCheck(iParam4, DIST_VALUE_CLIPLEVEL_MAX); |
faker | 0:adfbd02222d4 | 437 | g_iDistClipLevel = *iParam4; |
faker | 0:adfbd02222d4 | 438 | //g_iProgPatch[g_iBankNo][g_iProgNo][PP_DIST_PARAM_CLIPLEVEL] = *iParam4; |
faker | 0:adfbd02222d4 | 439 | lcd.printf("CLP.L %d", *iParam4); |
faker | 0:adfbd02222d4 | 440 | break; |
faker | 0:adfbd02222d4 | 441 | case DIST_PARAM_OUTPUTGAIN: |
faker | 0:adfbd02222d4 | 442 | paramCheck(iParam4, DIST_VALUE_OUTPUTGAIN_MAX); |
faker | 0:adfbd02222d4 | 443 | g_iDistOutputGain = *iParam4; |
faker | 0:adfbd02222d4 | 444 | //g_iProgPatch[g_iBankNo][g_iProgNo][PP_DIST_PARAM_OUTPUTGAIN] = *iParam4; |
faker | 0:adfbd02222d4 | 445 | lcd.printf("OUT.G %d", *iParam4); |
faker | 0:adfbd02222d4 | 446 | break; |
faker | 0:adfbd02222d4 | 447 | default: |
faker | 0:adfbd02222d4 | 448 | break; |
faker | 0:adfbd02222d4 | 449 | |
faker | 0:adfbd02222d4 | 450 | } |
faker | 0:adfbd02222d4 | 451 | } |
faker | 0:adfbd02222d4 | 452 | |
faker | 0:adfbd02222d4 | 453 | /*******************************/ |
faker | 0:adfbd02222d4 | 454 | /* Delay Param Change */ |
faker | 0:adfbd02222d4 | 455 | /*******************************/ |
faker | 0:adfbd02222d4 | 456 | void delayParamChange(int* iParam3, int* iParam4) { |
faker | 0:adfbd02222d4 | 457 | |
faker | 0:adfbd02222d4 | 458 | lcd.locate(8,3); |
faker | 0:adfbd02222d4 | 459 | lcd.printf(" "); |
faker | 0:adfbd02222d4 | 460 | lcd.locate(8,3); |
faker | 0:adfbd02222d4 | 461 | |
faker | 0:adfbd02222d4 | 462 | switch (*iParam3) { |
faker | 0:adfbd02222d4 | 463 | case DLY_PARAM_BYPASS: |
faker | 0:adfbd02222d4 | 464 | paramCheck(iParam4, DLY_VALUE_BYPASS_MAX); |
faker | 0:adfbd02222d4 | 465 | g_iDelayBypass = *iParam4; |
faker | 0:adfbd02222d4 | 466 | //g_iProgPatch[g_iBankNo][g_iProgNo][PP_DLY_PARAM_BYPASS] = *iParam4; |
faker | 0:adfbd02222d4 | 467 | if(g_iDelayBypass == 0){ |
faker | 0:adfbd02222d4 | 468 | lcd.printf("BYPSS OFF"); |
faker | 0:adfbd02222d4 | 469 | }else{ |
faker | 0:adfbd02222d4 | 470 | lcd.printf("BYPSS ON"); |
faker | 0:adfbd02222d4 | 471 | } |
faker | 0:adfbd02222d4 | 472 | break; |
faker | 0:adfbd02222d4 | 473 | case DLY_PARAM_DELAYTIME: |
faker | 0:adfbd02222d4 | 474 | paramCheck(iParam4, DLY_VALUE_DELAYTIME_MAX); |
faker | 0:adfbd02222d4 | 475 | g_iDelayTime = *iParam4; |
faker | 0:adfbd02222d4 | 476 | //g_iProgPatch[g_iBankNo][g_iProgNo][PP_DLY_PARAM_DELAYTIME] = *iParam4; |
faker | 0:adfbd02222d4 | 477 | lcd.printf("DLY.T %d", *iParam4); |
faker | 0:adfbd02222d4 | 478 | break; |
faker | 0:adfbd02222d4 | 479 | case DLY_PARAM_FBGAIN: |
faker | 0:adfbd02222d4 | 480 | paramCheck(iParam4, DLY_VALUE_FBGAIN_MAX); |
faker | 0:adfbd02222d4 | 481 | g_iDelayFeedBackLevel = *iParam4; |
faker | 0:adfbd02222d4 | 482 | //g_iProgPatch[g_iBankNo][g_iProgNo][PP_DLY_PARAM_FBGAIN] = *iParam4; |
faker | 0:adfbd02222d4 | 483 | lcd.printf(" FB.G %d", *iParam4); |
faker | 0:adfbd02222d4 | 484 | break; |
faker | 0:adfbd02222d4 | 485 | default: |
faker | 0:adfbd02222d4 | 486 | break; |
faker | 0:adfbd02222d4 | 487 | |
faker | 0:adfbd02222d4 | 488 | } |
faker | 0:adfbd02222d4 | 489 | } |
faker | 0:adfbd02222d4 | 490 | |
faker | 0:adfbd02222d4 | 491 | /*******************************/ |
faker | 0:adfbd02222d4 | 492 | /* Program Patch Write */ |
faker | 0:adfbd02222d4 | 493 | /*******************************/ |
faker | 0:adfbd02222d4 | 494 | void progWrite(int* param){ |
faker | 0:adfbd02222d4 | 495 | |
faker | 0:adfbd02222d4 | 496 | if(g_iFlag == 0){ |
faker | 0:adfbd02222d4 | 497 | if((*param > 24) || (*param < -24)){ |
faker | 0:adfbd02222d4 | 498 | lcd.locate(14,3); |
faker | 0:adfbd02222d4 | 499 | lcd.printf(" Done"); |
faker | 0:adfbd02222d4 | 500 | ProgramPatchChange(g_iBankNo, g_iProgNo); |
faker | 0:adfbd02222d4 | 501 | progPatchWite(0); |
faker | 0:adfbd02222d4 | 502 | g_iFlag = 1; |
faker | 0:adfbd02222d4 | 503 | }else{ |
faker | 0:adfbd02222d4 | 504 | lcd.locate(14,3); |
faker | 0:adfbd02222d4 | 505 | lcd.printf("Unexe"); |
faker | 0:adfbd02222d4 | 506 | } |
faker | 0:adfbd02222d4 | 507 | }else{ |
faker | 0:adfbd02222d4 | 508 | lcd.locate(14,3); |
faker | 0:adfbd02222d4 | 509 | lcd.printf(" Done"); |
faker | 0:adfbd02222d4 | 510 | } |
faker | 0:adfbd02222d4 | 511 | } |
faker | 0:adfbd02222d4 | 512 | |
faker | 0:adfbd02222d4 | 513 | |
faker | 0:adfbd02222d4 | 514 | /*******************************/ |
faker | 0:adfbd02222d4 | 515 | /* Program Patch Wite */ |
faker | 0:adfbd02222d4 | 516 | /*******************************/ |
faker | 0:adfbd02222d4 | 517 | void progPatchWite(int iFlag){ |
faker | 0:adfbd02222d4 | 518 | |
faker | 0:adfbd02222d4 | 519 | int i, j, k; |
faker | 0:adfbd02222d4 | 520 | |
faker | 0:adfbd02222d4 | 521 | FILE *fp = fopen("/local/prm.txt", "w"); |
faker | 0:adfbd02222d4 | 522 | if(!fp) { |
faker | 0:adfbd02222d4 | 523 | while(1){ |
faker | 0:adfbd02222d4 | 524 | lcd.cls(); |
faker | 0:adfbd02222d4 | 525 | wait(0.5); |
faker | 0:adfbd02222d4 | 526 | lcd.locate(1,1); |
faker | 0:adfbd02222d4 | 527 | lcd.printf("SYSTEM ERROR #2000"); |
faker | 0:adfbd02222d4 | 528 | wait(0.5); |
faker | 0:adfbd02222d4 | 529 | } |
faker | 0:adfbd02222d4 | 530 | } |
faker | 0:adfbd02222d4 | 531 | |
faker | 0:adfbd02222d4 | 532 | fprintf(fp, " BANK PROG ---- DISTOTION --- ----- DELAY ------\n"); |
faker | 0:adfbd02222d4 | 533 | fprintf(fp, " BYP MODE ING C.Lv OUTG BYP TIME FB\n"); |
faker | 0:adfbd02222d4 | 534 | for(i=0;i<BANK_MAX_NUM;i++){ |
faker | 0:adfbd02222d4 | 535 | for(j=0;j<PROGNO_MAX_NUM;j++){ |
faker | 0:adfbd02222d4 | 536 | if(iFlag == 1)ProgramPatchChange(i, j); |
faker | 0:adfbd02222d4 | 537 | fprintf(fp, "%5d%5d", i, j); |
faker | 0:adfbd02222d4 | 538 | for(k=0;k<PP_MAX_NUM;k++){ |
faker | 0:adfbd02222d4 | 539 | fprintf(fp, "%5d\0", g_iProgPatch[i][j][k]); |
faker | 0:adfbd02222d4 | 540 | } |
faker | 0:adfbd02222d4 | 541 | fprintf(fp, "\n"); |
faker | 0:adfbd02222d4 | 542 | } |
faker | 0:adfbd02222d4 | 543 | } |
faker | 0:adfbd02222d4 | 544 | |
faker | 0:adfbd02222d4 | 545 | fclose(fp); |
faker | 0:adfbd02222d4 | 546 | } |
faker | 0:adfbd02222d4 | 547 | |
faker | 0:adfbd02222d4 | 548 | |
faker | 0:adfbd02222d4 | 549 | /*******************************/ |
faker | 0:adfbd02222d4 | 550 | /* Program Patch Chanege */ |
faker | 0:adfbd02222d4 | 551 | /*******************************/ |
faker | 0:adfbd02222d4 | 552 | void ProgramPatchChange(int iBank, int iProg){ |
faker | 0:adfbd02222d4 | 553 | |
faker | 0:adfbd02222d4 | 554 | // Distotion Param |
faker | 0:adfbd02222d4 | 555 | g_iProgPatch[iBank][iProg][PP_DIST_PARAM_BYPASS] = g_iDistBypass; |
faker | 0:adfbd02222d4 | 556 | g_iProgPatch[iBank][iProg][PP_DIST_PARAM_MODE] = g_iDistMode; |
faker | 0:adfbd02222d4 | 557 | g_iProgPatch[iBank][iProg][PP_DIST_PARAM_INPUTGAIN] = g_iDistInputGain; |
faker | 0:adfbd02222d4 | 558 | g_iProgPatch[iBank][iProg][PP_DIST_PARAM_CLIPLEVEL] = g_iDistClipLevel; |
faker | 0:adfbd02222d4 | 559 | g_iProgPatch[iBank][iProg][PP_DIST_PARAM_OUTPUTGAIN] = g_iDistOutputGain; |
faker | 0:adfbd02222d4 | 560 | |
faker | 0:adfbd02222d4 | 561 | // Delay Param |
faker | 0:adfbd02222d4 | 562 | g_iProgPatch[iBank][iProg][PP_DLY_PARAM_BYPASS] = g_iDelayBypass; |
faker | 0:adfbd02222d4 | 563 | g_iProgPatch[iBank][iProg][PP_DLY_PARAM_DELAYTIME] = g_iDelayTime; |
faker | 0:adfbd02222d4 | 564 | g_iProgPatch[iBank][iProg][PP_DLY_PARAM_FBGAIN] = g_iDelayFeedBackLevel; |
faker | 0:adfbd02222d4 | 565 | |
faker | 0:adfbd02222d4 | 566 | } |