fix LEDs lighting, and fix up first RGB program
This commit is contained in:
parent
d42f20773b
commit
185578ad8d
|
@ -12,8 +12,8 @@
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
const uint8_t rgb_map[9] = {0x04, 0x14, 0x01, 0x11, 0x07, 0x0a, 0x1a, 0x0d, 0x1d};
|
static const uint8_t rgb_map[9] = {0x04, 0x14, 0x01, 0x11, 0x07, 0x0a, 0x1a, 0x0d, 0x1d};
|
||||||
const uint8_t cursor_map[3] = {0x17, 0x18, 0x19};
|
static const uint8_t cursor_map[3] = {0x17, 0x18, 0x19};
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -45,15 +45,17 @@ void led_is_updated()
|
||||||
void led_send()
|
void led_send()
|
||||||
{
|
{
|
||||||
uint8_t i;
|
uint8_t i;
|
||||||
|
uint8_t o;
|
||||||
uint8_t out[16*2];
|
uint8_t out[16*2];
|
||||||
|
|
||||||
// only render when there's something to render
|
// only render when there's something to render
|
||||||
if (led_updated) {
|
if (led_updated) {
|
||||||
// stuff RGB outputs
|
// stuff RGB outputs
|
||||||
for (i = 0; i < 9; i++) {
|
for (i = 0; i < 9; i++) {
|
||||||
out[rgb_map[i] + 0] = rgb[i][0];
|
o = (rgb_map[i] - 1) & 0x1f;
|
||||||
out[rgb_map[i] + 1] = rgb[i][1];
|
out[o + 0] = rgb[i][0];
|
||||||
out[rgb_map[i] + 2] = rgb[i][2];
|
out[o + 1] = rgb[i][1];
|
||||||
|
out[o + 2] = rgb[i][2];
|
||||||
}
|
}
|
||||||
|
|
||||||
// stuff cursor outputs
|
// stuff cursor outputs
|
||||||
|
|
|
@ -62,22 +62,6 @@ static const uint8_t rainbow_angles[8][5] = {
|
||||||
0x00, 0x00} // bottom to top
|
0x00, 0x00} // bottom to top
|
||||||
};
|
};
|
||||||
|
|
||||||
static void rainbow_letter_next()
|
|
||||||
{
|
|
||||||
uint16_t h;
|
|
||||||
|
|
||||||
// add to our hue
|
|
||||||
h = userconf.ledprog_setting[0][1];
|
|
||||||
h <<= 2;
|
|
||||||
|
|
||||||
rainbow_hue += h;
|
|
||||||
rainbow_hue++;
|
|
||||||
rainbow_hue %= 256*6;
|
|
||||||
|
|
||||||
// make a color out of it
|
|
||||||
hsv2rgb_8b(rainbow_hue, 255, 255, &prog_rgb[0], &prog_rgb[1], &prog_rgb[2]);
|
|
||||||
}
|
|
||||||
|
|
||||||
void led_rgb_0_rainbow(uint8_t preview, uint8_t tick)
|
void led_rgb_0_rainbow(uint8_t preview, uint8_t tick)
|
||||||
{
|
{
|
||||||
uint8_t i, j; // iterator
|
uint8_t i, j; // iterator
|
||||||
|
@ -86,6 +70,8 @@ void led_rgb_0_rainbow(uint8_t preview, uint8_t tick)
|
||||||
uint8_t max; // max number of iterations for this angle
|
uint8_t max; // max number of iterations for this angle
|
||||||
uint8_t angle; // fill direction from LUT
|
uint8_t angle; // fill direction from LUT
|
||||||
|
|
||||||
|
uint16_t hoff;
|
||||||
|
|
||||||
// run at half framerate
|
// run at half framerate
|
||||||
if (tick & 1) {
|
if (tick & 1) {
|
||||||
// no matter what, this puke is getting updated
|
// no matter what, this puke is getting updated
|
||||||
|
@ -96,22 +82,24 @@ void led_rgb_0_rainbow(uint8_t preview, uint8_t tick)
|
||||||
angle &= 0x7;
|
angle &= 0x7;
|
||||||
max = rainbow_angles[angle][2] & 0x7;
|
max = rainbow_angles[angle][2] & 0x7;
|
||||||
|
|
||||||
|
hoff = userconf.ledprog_setting[0][1];
|
||||||
|
hoff <<= 2;
|
||||||
|
hoff = (256*6) - hoff;
|
||||||
|
|
||||||
// process outputs
|
// process outputs
|
||||||
for (i = 0; i <= max; i++) {
|
for (i = 0; i <= max; i++) {
|
||||||
// get the next puke
|
// get the next puke
|
||||||
rainbow_letter_next();
|
hsv2rgb_8b((rainbow_hue + (hoff * i)) % (256*6), 255, 255,
|
||||||
|
&prog_rgb[0], &prog_rgb[1], &prog_rgb[2]);
|
||||||
|
|
||||||
// apply to next set of LEDs
|
// apply to next set of LEDs
|
||||||
n = 0;
|
n = 0;
|
||||||
for (j = 0; j < 9; j++) {
|
for (j = 0; j < 9; j++) {
|
||||||
n++;
|
|
||||||
if (j == 5) n++; // nybble index
|
|
||||||
|
|
||||||
idx = rainbow_angles[angle][n >> 1]; // get mask byte
|
idx = rainbow_angles[angle][n >> 1]; // get mask byte
|
||||||
if ((n & 1) == 0) idx >>= 4; // shift even values over
|
if (!(n & 1)) idx >>= 4; // shift even numbered LED index over
|
||||||
idx &= 0x7; // mask lowest 3 bits
|
idx &= 0x7; // mask lowest 3 bits
|
||||||
|
|
||||||
if (idx == i) { // is this LED part of this pattern?
|
if (i == idx) { // is this LED part of this pattern at this index?
|
||||||
if (preview) { // are we in preview mode?
|
if (preview) { // are we in preview mode?
|
||||||
if (j != 0) { // is the first letter not the one selected?
|
if (j != 0) { // is the first letter not the one selected?
|
||||||
if ((preview & 0x7f) == 0) {// is this preview selected?
|
if ((preview & 0x7f) == 0) {// is this preview selected?
|
||||||
|
@ -119,12 +107,18 @@ void led_rgb_0_rainbow(uint8_t preview, uint8_t tick)
|
||||||
}
|
}
|
||||||
} else return; // preview is not selected, so we're done here
|
} else return; // preview is not selected, so we're done here
|
||||||
}
|
}
|
||||||
rgb[j][0] = prog_rgb[0]; // if so, copy the values
|
rgb[j][0] = prog_rgb[0]; // if so, copy the values
|
||||||
rgb[j][1] = prog_rgb[1];
|
rgb[j][1] = prog_rgb[1];
|
||||||
rgb[j][2] = prog_rgb[2];
|
rgb[j][2] = prog_rgb[2];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
n++; // nybble index
|
||||||
|
if (n == 5) n++; // skip the 6th nybble; this indicates the max
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rainbow_hue += 2;
|
||||||
|
rainbow_hue %= (256*6);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue