Dependencies:   mbed

Committer:
faker
Date:
Mon Jun 13 15:20:17 2011 +0000
Revision:
0:adfbd02222d4

        

Who changed what in which revision?

UserRevisionLine numberNew 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 }