Clean up the global namespace (buffer-stuff) and add some comments.
authorMalte S. Stretz <mss@apache.org>
Sun, 11 Jan 2009 14:32:38 +0000 (14:32 +0000)
committerMalte S. Stretz <mss@apache.org>
Sun, 11 Jan 2009 14:32:38 +0000 (14:32 +0000)
src/buffer.c
src/buffer.h
src/tlc.c

index 3de57cb..8b71a21 100644 (file)
@@ -1,6 +1,6 @@
 #include "buffer.h"\r
 \r
-char gs_buffer[512] = {\r
+char gg_buffer_gs[512] = {\r
   /* R     G     B */\r
    0xFF, 0xFF, 0xFF,\r
    0xEE, 0xEE, 0xEE,\r
@@ -37,7 +37,7 @@ char gs_buffer[512] = {
    0x01, 0x02, 0x03\r
 };\r
 \r
-char dc_buffer[3]   = {\r
+char gg_buffer_dc[3]   = {\r
   0xAB, // R\r
   0xCD, // G\r
   0xEF  // B\r
@@ -54,8 +54,8 @@ sched_res_t buffer_test_next(void)
   if (g_test_cnt++ != 10) return SCHED_RE;\r
   g_test_cnt = 0;\r
 \r
-  gs_buffer[rgb] += cnt;\r
-  if (gs_buffer[rgb] == 0) {\r
+  gg_buffer_gs[rgb] += cnt;\r
+  if (gg_buffer_gs[rgb] == 0) {\r
     rgb = (rgb + 1) % 3;\r
     if (rgb == 0) cnt *= -1;\r
   }\r
index f84904f..9add826 100644 (file)
@@ -1,7 +1,12 @@
 #pragma once\r
 \r
-extern char gs_buffer[512];\r
-extern char dc_buffer[3];\r
+#define buffer_get_gs(index)        gg_buffer_gs[index]\r
+#define buffer_set_gs(index, value) gg_buffer_gs[index] = value\r
+#define buffer_get_dc(index)        gg_buffer_dc[index]\r
+#define buffer_set_dc(index, value) gg_buffer_dc[index] = value\r
+\r
+extern char gg_buffer_gs[512];\r
+extern char gg_buffer_dc[3];\r
 \r
 #include "sched.h"\r
 sched_res_t buffer_test_next(void);\r
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