Integrated version

Revision:
12:d4e5feab3a2d
Parent:
11:a2a51191ebe4
Child:
13:d3ee2ba4efaf
--- a/BaseMachineUIController.h	Fri Nov 25 16:03:31 2016 +0000
+++ b/BaseMachineUIController.h	Fri Nov 25 17:53:47 2016 +0000
@@ -5,7 +5,8 @@
  *
  */
  
-#define UART_TRACE_EEPROM   (0)
+#define UART_TRACE_EEPROM    (0)
+#define UART_TRACE_CLIPBOARD (0)
 
 #ifndef _UICONTROLLER_H_
 #define _UICONTROLLER_H_
@@ -74,6 +75,7 @@
         playingStep(0),
         isRunning(false),
         isDirty(true),
+        isClipBoardEmpty(true),
         UImode(0),
         isStepChanged(false),
         errCutoff(0),
@@ -213,8 +215,14 @@
                 sequences[j][i].setAccent(accent[i]);
             }
         }
-
         RotEncPitch->setVal(sequences[sequencePattern][0].getPitch());
+        
+        for (int i = 0; i < SEQUENCE_N; i++) {
+            sequenceClipBoard[i].setPitch(pitch[i]);
+            sequenceClipBoard[i].setNoteOn(noteOn[i]);
+            sequenceClipBoard[i].setTie(tie[i]);
+            sequenceClipBoard[i].setAccent(accent[i]);
+        }
     }
 
     void destract() {
@@ -325,6 +333,15 @@
             //Thread::wait(100);
             isDirty = true;
             break;
+        case 8:
+            copyToClipBoard();
+            Thread::wait(100);
+            break;
+        case 16:
+            pasteFromClipBoard();
+            Thread::wait(100);
+            isDirty = true;
+            break;
         }
     }
 
@@ -367,6 +384,7 @@
     ST7565_SequencerDisplay* sequencerDisplay;
     
     Sequence sequences[PATTERN_N][SEQUENCE_N];
+    Sequence sequenceClipBoard[SEQUENCE_N];
     
     OscillatorParam oscillatorParam;
     FilterParam filterParam;
@@ -382,6 +400,7 @@
     int playingStep;
     bool isRunning;
     bool isDirty;
+    bool isClipBoardEmpty;
     int UImode;
 
     bool isStepChanged;
@@ -583,6 +602,9 @@
         for (i = 0; i < 5; i++) {
             spareValue |= ((ExioInA[i]->read()) << i);
         }
+        if (spareValue != 0) {
+            printf("spareValue: %d\r\n", spareValue);
+        }
         
         spareValue2 = ExioRotEnc1->getVal();
     }
@@ -702,7 +724,9 @@
             }
             */
             uint32_t addr_page_top = j << 8;
-            printf("address: %x\r\n", addr_page_top); 
+            #if (UART_TRACE_EEPROM)
+            printf("address: %x\r\n", addr_page_top);
+            #endif 
             AT24C_STATUS status = At24c1024->write_page(
                 addr_page_top, 
                 eep_buff,
@@ -786,6 +810,60 @@
         gLCD->drawstring(0, 1, " Done");
         gLCD->display();  
     }
+    
+    void copyToClipBoard()
+    {
+        for (int i = 0; i < SEQUENCE_N; i++) {
+            sequenceClipBoard[i].setNoteOn(sequences[sequencePattern][i].isNoteOn());
+            sequenceClipBoard[i].setPitch(sequences[sequencePattern][i].getPitch());
+            sequenceClipBoard[i].setTie(sequences[sequencePattern][i].isTie());
+            sequenceClipBoard[i].setAccent(sequences[sequencePattern][i].isAccent());
+        }
+        isClipBoardEmpty = false;
+           
+        #if (UART_TRACE_CLIPBOARD)
+        printf("copyToClipBoard\r\n");
+        printf("sequencePattern: %d\r\n", sequencePattern);
+        for (int i = 0; i < SEQUENCE_N; i++) {
+            printf("%d %d %03d %d %d\r\n",
+                i,
+                sequenceClipBoard[i].isNoteOn(),
+                sequenceClipBoard[i].getPitch(),
+                sequenceClipBoard[i].isTie(),
+                sequenceClipBoard[i].isAccent()
+            );
+        }
+        #endif
+    }
+    
+    void pasteFromClipBoard()
+    {
+        #if (UART_TRACE_CLIPBOARD)
+        printf("pasteFromClipBoard\r\n");
+        printf("isClipBoardEmpty: %d\r\n", isClipBoardEmpty);
+        printf("sequencePattern: %d\r\n", sequencePattern);
+        for (int i = 0; i < SEQUENCE_N; i++) {
+            printf("%d %d %03d %d %d\r\n",
+                i,
+                sequenceClipBoard[i].isNoteOn(),
+                sequenceClipBoard[i].getPitch(),
+                sequenceClipBoard[i].isTie(),
+                sequenceClipBoard[i].isAccent()
+            );
+        }
+        #endif
+        
+        for (int i = 0; i < SEQUENCE_N; i++) {
+            if (!isClipBoardEmpty) {
+                sequences[sequencePattern][i].setNoteOn(sequenceClipBoard[i].isNoteOn());
+                sequences[sequencePattern][i].setPitch(sequenceClipBoard[i].getPitch());
+                sequences[sequencePattern][i].setTie(sequenceClipBoard[i].isTie());
+                sequences[sequencePattern][i].setAccent(sequenceClipBoard[i].isAccent());
+            }
+        }
+        // syncronize sequence value & Rotary Encoder's value
+        RotEncPitch->setVal(sequences[sequencePattern][editingStep].getPitch());
+    }
 };
 
 #endif //_UICONTROLLER_H_