Clean up the global namespace (buffer-stuff) and add some comments.
[dmxpainter.git] / src / tlc.c
index 29c5203..f1cbdaa 100644 (file)
--- a/src/tlc.c
+++ b/src/tlc.c
@@ -172,7 +172,7 @@ void shift12(uint8_t byte)
 void send_dc_data(void)\r
 {\r
   for (int rgb = 2; rgb != -1; rgb--) {\r
-    uint8_t dc_data = dc_buffer[rgb] & bits_uint8(1, 1, 1, 1, 1, 1, 0, 0);\r
+    uint8_t dc_data = buffer_get_dc(rgb) & bits_uint8(1, 1, 1, 1, 1, 1, 0, 0);\r
     uint8_t dc_out[3] = {\r
       (dc_data << 0) | (dc_data >> 6),\r
       (dc_data << 2) | (dc_data >> 4),\r
@@ -187,11 +187,20 @@ void send_dc_data(void)
 \r
 void send_gs_data(void)\r
 {\r
+  // Because the TLCs are daisy-chained, we have to shift out the RGB data\r
+  // starting at the end.  Each painter has 3 TLCs (with 16 channels each), \r
+  // for the colors red, green, blue.  So we've got to shift out the 16 blue\r
+  // channels of the last TLC first, then 16 green ones and finally 16 red \r
+  // ones.  The last data we shift out is thus the first red of the first\r
+  // painter.\r
   int16_t offset = N_TLC_CHANNELS - 1;\r
   while (1) {\r
-    shift12(gs_buffer[offset]);\r
+    // Shift out current channel.\r
+    shift12(buffer_get_gs(offset));\r
 \r
+    // Skip two colors.\r
     offset -= 3;\r
+    // If we reached the start, we jump to the next color.\r
     if (offset < 0) {\r
       offset += N_TLC_CHANNELS - 1; // Jump to end again, next color implicit\r
       if (offset != N_TLC_CHANNELS - 1 - 3)\r