]> Git Repo - pov-display-rpi.git/blobdiff - src/display.c
oops array indexing was off
[pov-display-rpi.git] / src / display.c
index f47d5c8e59224eb4a9f70fbf1a57bfeaaeb65c5c..7c73ca64e4152332d93828e83804ebccc64ea1d0 100644 (file)
@@ -16,9 +16,7 @@ static uint64_t nanos()
     return ((uint64_t)now.tv_sec) * 1000000000 + ((uint64_t)now.tv_nsec);
 }
 
-static uint16_t pwmbuffer[chips][12];
-
-static void lines(uint16_t data[chips][12]);
+static void lines(const uint16_t line[chips*12]);
 
 static void getDelay(uint64_t *delay, uint64_t *last);
 
@@ -41,11 +39,8 @@ extern void display(bool *go, const uint16_t lester[3][degreesIn][chips * 12], b
                 if (!readPin() && went_back) // we are still in the loop but we need to exit
                     goto end;
             } // sleep between lines
-            for (uint8_t i = 0; i < chips * 12; i++)
-            {
-                pwmbuffer[(chips - 1) - (i / 12)][11 - (i % 12)] = lester[p][deg][i];
-            }
-            lines(pwmbuffer);
+
+            lines(lester[p][deg]);
         }
     end:
         while (readPin())
@@ -53,10 +48,10 @@ extern void display(bool *go, const uint16_t lester[3][degreesIn][chips * 12], b
         getDelay(&delay, &last);
         went_back = false; //make shure we trigger on the rising edge
         printf("%llu\n", delay);
-               if(p == 2)
-                       p = 0;
-               else 
-                       p++;
+        if (p == 2)
+            p = 0;
+        else
+            p++;
         *swap = true;
     }
 }
@@ -66,10 +61,15 @@ static void getDelay(uint64_t *delay, uint64_t *last)
     *last = nanos();
     *delay = (*last - tmp) / degreesIn;
 }
-static void lines(uint16_t line[chips][12])
+static void lines(const uint16_t line[chips*12])
 {
-    uint8_t *data = (uint8_t *)malloc(chips * 28);
-    for (int i = 0; i < chips; i++)
-        tlc59711_create(line[i], data + (28 * i));
+    uint8_t data[chips*28];
+    uint16_t tmp[12];
+    for (int i = 0; i < chips; i++){
+                for(int b = 0; b < 12;b++)
+                tmp[11 - b] = line[(i*12)+b];
+
+        tlc59711_create(tmp, data + (28 * i));
+    }
     transfer(data, NULL, chips * 28);
 }
This page took 0.023841 seconds and 4 git commands to generate.