Nick Lowyck / Mbed 2 deprecated Ledcube

Dependencies:   mbed mbed-rtos

Revision:
3:da30c350c339
Parent:
2:f2700008c9d9
Child:
4:a091b8f8216d
--- a/main.cpp	Thu May 01 20:58:59 2014 +0000
+++ b/main.cpp	Fri May 02 18:26:40 2014 +0000
@@ -2,7 +2,13 @@
 #include "I2CDriver.h"
 #include "SPIDriver.h"
 #include "LedCube.h"
+#include "rtos.h"
 
+int counter1 = 0;
+int counter2 = 0;
+int counter3 = 0;
+char ledbuffer[8][8][8];
+const int frames = 400;
 bool printed = false;
 bool testprinted = false;
 char layer = 1;
@@ -11,134 +17,38 @@
 char databuffer[512];
 const int spifreq = 10000000; //frequency of SPI interface
 const char address = 0xA0; //address van I2C interface
-LedCube *ledcube = new LedCube();
 
-int counter1 = 0;
-int counter2 = 0;
-int counter3 = 0;
-
-char ledexample[8][8][8] = {{{6,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
-    {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
-    {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
-    {{4,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,3}},
-    {{4,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,3}},
-    {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
-    {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
-    {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,5}}
-};
-
-char ledbuffer[8][8][8] = {{{6,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
-    {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
-    {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
-    {{4,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,3}},
-    {{4,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,3}},
-    {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
-    {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,7}},
-    {{7,0,0,7,7,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,0,0,0,0,7},{7,0,0,7,7,0,0,5}}
-};
-
-//matrix (8*8*8): top to bottom, eerst r dan g dan b dan laag (per laag, dus 33 chars)(één char:rij voor één kleur)
-const char matrix[8][3][8] = {{{18,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,16}},
-    {{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129}},
-    {{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129}},
-    {{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129}},
-    {{11,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,3}},
-    {{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129}},
-    {{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129}},
-    {{129,0,0,0,0,0,0,129},{129,0,0,0,0,0,0,129},{19,0,0,0,0,0,0,17}}
-};
-
-char rmatrix[8][8] = {{3,129,129,129,129,129,129,153},
-    {3,129,129,129,129,129,129,153},
-    {153,129,129,129,129,129,129,153},
-    {153,129,129,129,129,129,129,152},
-    {153,129,129,129,129,129,129,152},
-    {153,129,129,129,129,129,129,153},
-    {153,129,129,129,129,129,129,153},
-    {153,129,129,129,129,129,129,3}
-};
-
-char gmatrix[8][8] = {{25,129,129,129,129,129,129,153},
-    {153,129,129,129,129,129,129,153},
-    {153,129,129,129,129,129,129,153},
-    {25,129,129,129,129,129,129,153},
-    {25,129,129,129,3,129,129,153},
-    {153,129,129,129,129,129,129,153},
-    {153,129,129,129,129,129,129,153},
-    {2,129,129,129,129,129,129,153}
-};
-
-char bmatrix[8][8] = {{153,129,129,129,129,129,129,153},
-    {153,129,129,129,129,129,129,153},
-    {153,129,129,129,129,129,129,153},
-    {153,129,129,129,129,129,129,152},
-    {153,129,129,129,129,129,129,152},
-    {153,129,129,129,129,129,129,153},
-    {153,129,129,129,129,129,129,153},
-    {153,129,129,129,129,129,129,3}
-};
-
-SPIDriver *spidriver = new SPIDriver(p5, NC, p7, p8, p10, spifreq);
-I2CDriver *i2cdriver = new I2CDriver(p28, p27, address);
+LedCube* ledcube = new LedCube();
+SPIDriver* spidriver = new SPIDriver(p5, NC, p7, p8, p10, spifreq);
+I2CDriver* i2cdriver = new I2CDriver(p28, p27, address);
 //DigitalOut blank(p9);
 Serial pc(USBTX, USBRX);
 
 uint8_t reverse_byte(uint8_t byte);
-void initialtest();
+void initialtest1();
+void initialtest2();
 void sendbuffer();
 void modifybuffer();
-void torgbmatrix(const char ledm[8][8][8], char rmat[8][8], char gmat[8][8], char bmat[8][8]);
+void streamthread(const void* args);
 
 int main()
 {
-    for(int i = 0; i < 400; i++) {
-        initialtest();
-    }
-
-    while(true) {
+    spidriver->testPhase(frames);
+    
+    
+    Thread thread(streamthread);
+    /*while(true) {
         if (i2cdriver->receive() == I2CDriver::WriteAddressed) {
             pc.printf("Waarde ontvangen!\n\r");
             modifybuffer();
             printed = false;
         }
-        sendbuffer();
-    }//while loop
+        spidriver->sendFrame(ledcube);
+    }//while loop*/
 }//end main
 
-uint8_t reverse_byte(uint8_t byte)
-{
-    return (__rbit(byte) >> 24) & 0xFF; // reverse a byte in a 32-bit value, and extract the byte
-}
-
-void initialtest(){
-    for(int i = 0; i < 8; i++) {   //eerst laag selecteren, SPI zendt normaalgezien MSB first
-        spidriver->write(ledcube->getNextValue());
-        for(int j = 0; j < 24; j++) {
-            spidriver->write(ledcube->getNextValue());  //ledwaarden zelf nog altijd apart, omdat ze mogelijk gespiegeld moeten doorgestuurd worden
-        }                                               //(LSB first)
-        wait(0.00125);    //voor 100 Hz
-        //blank = 1;
-        spidriver->pulseLatch();
-        //blank = 0;
-    }//end outer for loop
-    //  latch = 1;
-}
-
-void sendbuffer()
-{
-    for(int i = 0; i < 8; i++) {   //eerst laag selecteren, SPI zendt normaalgezien MSB first
-        spidriver->write(ledcube->getNextValue());
-        for(int j = 0; j < 24; j++) {
-            spidriver->write(ledcube->getNextValue());  //ledwaarden zelf nog altijd apart, omdat ze mogelijk gespiegeld moeten doorgestuurd worden
-        }                                               //(LSB first)
-        wait(0.00125);    
-
-        //blank = 1;
-        spidriver->pulseLatch();
-        //blank = 0;
-
-    }//end outer for loop
-    //  latch = 1;
+void streamthread(const void* args){
+    spidriver->stream(ledcube);
 }
 
 void modifybuffer()
@@ -174,36 +84,4 @@
             }
         }
     }
-}
-
-void torgbmatrix(const char ledm[8][8][8], char rmat[8][8], char gmat[8][8], char bmat[8][8])
-{
-    for(int i = 0; i < 8; i++) {                //ledmatrix (afkomstig van raspberry pi) omzetten naar rgb matrix (voor ledcube)
-        for(int j = 0; j < 8; j++) {
-            char weight = 128;
-            for(int k = 0; k < 8; k++) {        //bij de rmatrix, gmatrix en bmatrix op de juiste plaatsen de juiste gewichten optellen indien nodig
-                char digitbuffer = ledm[i][j][k];       //bv voor rmatrix alleen gewicht bij optellen indien er een 1 op de derde positie is (binair)
-                if(k == 0) {                             //anders gezegd: als het getal in de ledmatrix groter of gelijk aan 4 is.
-                    rmat[i][j] = 0; //initialisatie
-                    gmat[i][j] = 0;
-                    bmat[i][j] = 0;
-                }
-                if(digitbuffer >= 4) {
-                    rmat[i][j] += weight;
-                    digitbuffer = digitbuffer - 4;
-                }
-
-                if(digitbuffer >= 2) {
-                    gmat[i][j] += weight;
-                    digitbuffer = digitbuffer - 2;
-                }
-
-                if(digitbuffer >= 1) {
-                    bmat[i][j] += weight;
-                }
-
-                weight = weight >> 1;
-            }
-        }
-    }
 }
\ No newline at end of file