Object Model code with hardware support
Dependencies: mbed
Diff: configs.hpp
- Revision:
- 0:2b4bbe9ea495
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/configs.hpp Fri Sep 05 00:07:44 2014 +0000 @@ -0,0 +1,194 @@ +#ifndef __CONFIGS_H__ +#define __CONFIGS_H__ + +#include <stdint.h> +#include "defines.hpp" + +// FIXME populate this from the EEPROM + +// NOTE: +// Each "pixel" is three LEDs: Red, Green, Blue. Each LED in a pixel can be +// (and usually is!) driven by a different driver. It is not as simple as a +// pixel-to-driver mapping, it actually consists of 3 led-to-driver mappings. +typedef struct ColorDrv_t { + uint8_t redDrv; + uint8_t greenDrv; + uint8_t blueDrv; +} ColorDrv; + +// Pixel to LED driver mapping +static const ColorDrv g_pix2Drv[MODULE_WIDTH][MODULE_HEIGHT] = +{ + { { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7} }, + { { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7} }, + { { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7} }, + { { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7} }, + { { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7} }, + { { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7} }, + { { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7} }, + { { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 2, 3, 1}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 5, 6, 4}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7}, { 8, 9, 7} }, + { {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29} }, + { {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29} }, + { {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29} }, + { {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29} }, + { {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29} }, + { {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29} }, + { {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29} }, + { {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {24,25,23}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {27,28,26}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29}, {30,31,29} }, + { {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34} }, + { {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34}, {33,32,34} } +}; + + +// Pixel to LED driver channel mapping +static const uint8_t g_pix2DrvChan[MODULE_WIDTH][MODULE_HEIGHT] = +{ + { 0, 0, 0,15,15,15, 0, 0, 0,15,15,15, 0, 0, 0,15,15,15}, + { 1, 1, 1,14,14,14, 1, 1, 1,14,14,14, 1, 1, 1,14,14,14}, + { 2, 2, 2,13,13,13, 2, 2, 2,13,13,13, 2, 2, 2,13,13,13}, + { 3, 3, 3,12,12,12, 3, 3, 3,12,12,12, 3, 3, 3,12,12,12}, + { 4, 4, 4,11,11,11, 4, 4, 4,11,11,11, 4, 4, 4,11,11,11}, + { 5, 5, 5,10,10,10, 5, 5, 5,10,10,10, 5, 5, 5,10,10,10}, + { 6, 6, 6, 9, 9, 9, 6, 6, 6, 9, 9, 9, 6, 6, 6, 9, 9, 9}, + { 7, 7, 7, 8, 8, 8, 7, 7, 7, 8, 8, 8, 7, 7, 7, 8, 8, 8}, + { 0, 0, 0,15,15,15, 0, 0, 0,15,15,15, 0, 0, 0,15,15,15}, + { 1, 1, 1,14,14,14, 1, 1, 1,14,14,14, 1, 1, 1,14,14,14}, + { 2, 2, 2,13,13,13, 2, 2, 2,13,13,13, 2, 2, 2,13,13,13}, + { 3, 3, 3,12,12,12, 3, 3, 3,12,12,12, 3, 3, 3,12,12,12}, + { 4, 4, 4,11,11,11, 4, 4, 4,11,11,11, 4, 4, 4,11,11,11}, + { 5, 5, 5,10,10,10, 5, 5, 5,10,10,10, 5, 5, 5,10,10,10}, + { 6, 6, 6, 9, 9, 9, 6, 6, 6, 9, 9, 9, 6, 6, 6, 9, 9, 9}, + { 7, 7, 7, 8, 8, 8, 7, 7, 7, 8, 8, 8, 7, 7, 7, 8, 8, 8}, + { 5, 5, 5, 4, 4, 4, 3, 3, 3, 2, 2, 2, 1, 1, 1, 0, 0, 0}, + { 6, 6, 6, 7, 7, 7, 8, 8, 8, 9, 9, 9,10,10,10,11,11,11} +}; + + +// Pixel to scan group mapping +static const uint8_t g_pix2ScanGroup[MODULE_WIDTH][MODULE_HEIGHT] = +{ + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2}, + { 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2, 0, 1, 2} +}; + + +// The driver numbers are based on the PCB schematic and they are connected to +// each other as shown below (i.e. #2 connected to #5 connected to #8...) +// +// Index, Driver Number +// +// 0, 2 +// 1, 5 +// 2, 8 +// 3, 24 +// 4, 27 +// 5, 30 +// 6, 33 +// 7, 1 +// 8, 4 +// 9, 7 +// 10, 23 +// 11, 26 +// 12, 29 +// 13, 34 +// 14, 3 +// 15, 6 +// 16, 9 +// 17, 25 +// 18, 28 +// 19, 31 +// 20, 32 + +// Debug driver chain +static const uint8_t g_dbgDrvChain[21] = +{ +// Driver Number, // Index + 2, // 0 + 5, // 1 + 8, // 2 + 24, // 3 + 27, // 4 + 30, // 5 + 33, // 6 + 1, // 7 + 4, // 8 + 7, // 9 + 23, // 10 + 26, // 11 + 29, // 12 + 34, // 13 + 3, // 14 + 6, // 15 + 9, // 16 + 25, // 17 + 28, // 18 + 31, // 19 + 32 // 20 +}; + +// The problem is that in software we'll have the driver number from the +// pixel2Driver mapping and we'll need the index of the driver. We could +// take the above mapping and create a translation routine (search for +// the driver number and return the index) OR we could instead make a +// little array where you lookup by using the driver number as the index +// and the value is the true index as shown above. +// +// This is like the reverse mapping of the above mapping. + +static const uint8_t g_driverChain[35] = +{ + // Index = driver number + 0xFF, // 0 = No such driver + 7, // 1 = 7 + 0, // 2 = 0 + 14, // 3 = 14 + 8, // 4 = 8 + 1, // 5 = 1 + 15, // 6 = 15 + 9, // 7 = 9 + 2, // 8 = 2 + 16, // 9 = 16 + 0xFF, // 10 = No such driver + 0xFF, // 11 = No such driver + 0xFF, // 12 = No such driver + 0xFF, // 13 = No such driver + 0xFF, // 14 = No such driver + 0xFF, // 15 = No such driver + 0xFF, // 16 = No such driver + 0xFF, // 17 = No such driver + 0xFF, // 18 = No such driver + 0xFF, // 19 = No such driver + 0xFF, // 20 = No such driver + 0xFF, // 21 = No such driver + 0xFF, // 22 = No such driver + 10, // 23 = 10 + 3, // 24 = 3 + 17, // 25 = 17 + 11, // 26 = 11 + 4, // 27 = 4 + 18, // 28 = 18 + 12, // 29 = 12 + 5, // 30 = 5 + 19, // 31 = 19 + 20, // 32 = 20 + 6, // 33 = 6 + 13 // 34 = 13 +}; + +#endif // __CONFIGS_H__