Integrated version

Revision:
8:62a65664a2fb
Parent:
7:0f8efe0e1e3f
Child:
9:70b8f9935ef7
--- a/BaseMachineUIController.h	Mon Nov 14 15:51:43 2016 +0000
+++ b/BaseMachineUIController.h	Thu Nov 17 12:25:30 2016 +0000
@@ -88,7 +88,7 @@
         //
         //ST7565(PinName mosi, PinName sclk, PinName cs, PinName rst, PinName a0);
         gLCD = new ST7565(PB_15, PB_13, PB_12, PB_2, PB_1);
-        sequencerDisplay = new ST7565_SequencerDisplay(gLCD, sequences, SEQUENCE_N);
+        sequencerDisplay = new ST7565_SequencerDisplay(gLCD, sequences[sequencePattern], SEQUENCE_N);
 
         AinPulseWidth = new AverageAnalogIn(PC_2, AIN_AVERAGE);
         AinCutOff     = new AverageAnalogIn(PB_0, AIN_AVERAGE);
@@ -182,14 +182,16 @@
         //
         Sequence::setBaseNoteNumber(baseNoteNumber);
 
-        for (int i = 0; i < SEQUENCE_N; i++) {
-            Sequence& seq = sequences[i];
-            seq.setPitch(pitch[i]);
-            seq.setNoteOn(noteOn[i]);
-            seq.setTie(tie[i]);
-            seq.setAccent(accent[i]);
+        for (int j = 0; j < PATTERN_N; j++) {
+            for (int i = 0; i < SEQUENCE_N; i++) {
+                sequences[j][i].setPitch(pitch[i]);
+                sequences[j][i].setNoteOn(noteOn[i]);
+                sequences[j][i].setTie(tie[i]);
+                sequences[j][i].setAccent(accent[i]);
+            }
         }
-        RotEncPitch->setVal(sequences[0].getPitch());
+
+        RotEncPitch->setVal(sequences[sequencePattern][0].getPitch());
     }
 
     void destract() {
@@ -227,8 +229,13 @@
     }
     
     void getSequences(Sequence (*pSequences)[SEQUENCE_N]) {
-        memcpy(pSequences, sequences, sizeof(sequences));
+        memcpy(pSequences, sequences[sequencePattern], sizeof(sequences[sequencePattern]));
     }
+    /*
+    void setSequences(Sequence* pSequence) {
+        memcpy(sequences[sequencePattern], pSequence, sizeof(sequences[sequencePattern]));
+    }
+    */
     
     void getOscillatorParam(OscillatorParam* pParam) {
         memcpy(pParam, &oscillatorParam, sizeof(oscillatorParam));
@@ -311,7 +318,7 @@
 
     ST7565_SequencerDisplay* sequencerDisplay;
     
-    Sequence sequences[SEQUENCE_N];
+    Sequence sequences[PATTERN_N][SEQUENCE_N];
     
     OscillatorParam oscillatorParam;
     FilterParam filterParam;
@@ -390,7 +397,7 @@
 #if (UART_TRACE)
         printf("PinNoteOnOff Pushed\r\n");
 #endif
-        sequences[editingStep].setNoteOn(!sequences[editingStep].isNoteOn());
+        sequences[sequencePattern][editingStep].setNoteOn(!sequences[sequencePattern][editingStep].isNoteOn());
         isDirty = true;
     }
 
@@ -398,7 +405,7 @@
 #if (UART_TRACE)
         printf("PinTie Pushed\r\n");
 #endif
-        sequences[editingStep].setTie(!sequences[editingStep].isTie());
+        sequences[sequencePattern][editingStep].setTie(!sequences[sequencePattern][editingStep].isTie());
         isDirty = true;
     }
 
@@ -406,7 +413,7 @@
 #if (UART_TRACE)
         printf("PinAccent Pushed\r\n");
 #endif
-        sequences[editingStep].setAccent(!sequences[editingStep].isAccent());
+        sequences[sequencePattern][editingStep].setAccent(!sequences[sequencePattern][editingStep].isAccent());
         isDirty = true;
     }
 
@@ -437,13 +444,13 @@
         if (_step != editingStep) {
             editingStep = _step;
             // syncronize sequence value & Rotary Encoder's value
-            RotEncPitch->setVal(sequences[editingStep].getPitch());
+            RotEncPitch->setVal(sequences[sequencePattern][editingStep].getPitch());
             isDirty = true;
         }
 
         int _pitch = RotEncPitch->getVal();
-        if (_pitch != sequences[editingStep].getPitch()) {
-            sequences[editingStep].setPitch(_pitch);
+        if (_pitch != sequences[sequencePattern][editingStep].getPitch()) {
+            sequences[sequencePattern][editingStep].setPitch(_pitch);
             isDirty = true;
         }
     }
@@ -514,6 +521,10 @@
         }
         if (i != 8 && sequencePattern != i) {
             sequencePattern = i;
+            // syncronize sequence value & Rotary Encoder's value
+            RotEncPitch->setVal(sequences[sequencePattern][editingStep].getPitch());
+            
+            sequencerDisplay->setSequences(sequences[sequencePattern]);
             sequencerDisplay->setSequencePattern(sequencePattern + 1);
             isDirty = true;
         }
@@ -525,15 +536,15 @@
 
         gLCD->clear();
 
-        sprintf(buff, "Run:%d BPM:%03d", isRunning, bpm);
+        sprintf(buff, "Run:%d BPM:%03d Ptn:%02d", isRunning, bpm, sequencePattern + 1);
         gLCD->drawstring(0, col++, buff);
 
         sprintf(buff, "Stp:%02d Nto:%d Pch:%02d",
-                editingStep, sequences[editingStep].isNoteOn(), sequences[editingStep].getPitch());
+                editingStep, sequences[sequencePattern][editingStep].isNoteOn(), sequences[sequencePattern][editingStep].getPitch());
         gLCD->drawstring(0, col++, buff);
 
         sprintf(buff, "Oct:%-2d Tie:%d Acc:%d",
-                sequencerDisplay->getOctave(), sequences[editingStep].isTie(),sequences[editingStep].isAccent());
+                sequencerDisplay->getOctave(), sequences[sequencePattern][editingStep].isTie(),sequences[sequencePattern][editingStep].isAccent());
         gLCD->drawstring(0, col++, buff);
 
         sprintf(buff, "Wsp:%d Mod:%d pStp:%d", oscillatorParam.waveShape, UImode, playingStep);