Update with support for stipled LED rings
Fix bug in linear driver that did out of index reading.
This commit is contained in:
parent
b34a1340ab
commit
cb048b7866
|
@ -27,9 +27,11 @@ struct DPODriver
|
||||||
{
|
{
|
||||||
int leds;
|
int leds;
|
||||||
int skipfirst;
|
int skipfirst;
|
||||||
|
int fliprg;
|
||||||
int firstval;
|
int firstval;
|
||||||
int port;
|
int port;
|
||||||
int oldport;
|
int oldport;
|
||||||
|
int skittlequantity; //When LEDs are in a ring, backwards and forwards This is the number of LEDs in the ring.
|
||||||
char address[PARAM_BUFF];
|
char address[PARAM_BUFF];
|
||||||
char oldaddress[PARAM_BUFF];
|
char oldaddress[PARAM_BUFF];
|
||||||
struct sockaddr_in servaddr;
|
struct sockaddr_in servaddr;
|
||||||
|
@ -75,7 +77,9 @@ static void DPOUpdate(void * id, struct NoteFinder*nf)
|
||||||
|
|
||||||
if( d->socket > 0 )
|
if( d->socket > 0 )
|
||||||
{
|
{
|
||||||
char buffer[MAX_BUFFER];
|
uint8_t buffer[MAX_BUFFER];
|
||||||
|
uint8_t lbuff[MAX_BUFFER];
|
||||||
|
|
||||||
i = 0;
|
i = 0;
|
||||||
while( i < d->skipfirst )
|
while( i < d->skipfirst )
|
||||||
buffer[i++] = d->firstval;
|
buffer[i++] = d->firstval;
|
||||||
|
@ -83,12 +87,54 @@ static void DPOUpdate(void * id, struct NoteFinder*nf)
|
||||||
if( d->leds * 3 + i >= MAX_BUFFER )
|
if( d->leds * 3 + i >= MAX_BUFFER )
|
||||||
d->leds = (MAX_BUFFER-1)/3;
|
d->leds = (MAX_BUFFER-1)/3;
|
||||||
|
|
||||||
for( j = 0; j < d->leds; j++ )
|
if( d->fliprg )
|
||||||
{
|
{
|
||||||
buffer[i++] = OutLEDs[j*3+0]; //RED
|
for( j = 0; j < d->leds; j++ )
|
||||||
buffer[i++] = OutLEDs[j*3+2]; //BLUE
|
{
|
||||||
buffer[i++] = OutLEDs[j*3+1]; //GREEN
|
lbuff[i++] = OutLEDs[j*3+1]; //GREEN??
|
||||||
|
lbuff[i++] = OutLEDs[j*3+0]; //RED??
|
||||||
|
lbuff[i++] = OutLEDs[j*3+2]; //BLUE
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
for( j = 0; j < d->leds; j++ )
|
||||||
|
{
|
||||||
|
lbuff[i++] = OutLEDs[j*3+0]; //RED
|
||||||
|
lbuff[i++] = OutLEDs[j*3+2]; //BLUE
|
||||||
|
lbuff[i++] = OutLEDs[j*3+1]; //GREEN
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if( d->skittlequantity )
|
||||||
|
{
|
||||||
|
i = d->skipfirst;
|
||||||
|
for( j = 0; j < d->leds; j++ )
|
||||||
|
{
|
||||||
|
int ledw = j;
|
||||||
|
int ledpor = ledw % d->skittlequantity;
|
||||||
|
int ol;
|
||||||
|
|
||||||
|
if( ledw >= d->skittlequantity )
|
||||||
|
{
|
||||||
|
ol = ledpor*2-1;
|
||||||
|
ol = d->skittlequantity*2 - ol -2;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
ol = ledpor*2;
|
||||||
|
}
|
||||||
|
|
||||||
|
buffer[i++] = lbuff[ol*3+0+d->skipfirst];
|
||||||
|
buffer[i++] = lbuff[ol*3+1+d->skipfirst];
|
||||||
|
buffer[i++] = lbuff[ol*3+2+d->skipfirst];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
memcpy( buffer, lbuff, i );
|
||||||
|
}
|
||||||
|
|
||||||
int r = sendto( d->socket, buffer, i, MSG_NOSIGNAL,(const struct sockaddr *) &d->servaddr, sizeof( d->servaddr ) );
|
int r = sendto( d->socket, buffer, i, MSG_NOSIGNAL,(const struct sockaddr *) &d->servaddr, sizeof( d->servaddr ) );
|
||||||
if( r < 0 )
|
if( r < 0 )
|
||||||
{
|
{
|
||||||
|
@ -110,6 +156,8 @@ static void DPOParams(void * id )
|
||||||
d->port = 7777; RegisterValue( "port", PAINT, &d->port, sizeof( d->port ) );
|
d->port = 7777; RegisterValue( "port", PAINT, &d->port, sizeof( d->port ) );
|
||||||
d->firstval = 0; RegisterValue( "firstval", PAINT, &d->firstval, sizeof( d->firstval ) );
|
d->firstval = 0; RegisterValue( "firstval", PAINT, &d->firstval, sizeof( d->firstval ) );
|
||||||
RegisterValue( "address", PABUFFER, d->address, sizeof( d->address ) );
|
RegisterValue( "address", PABUFFER, d->address, sizeof( d->address ) );
|
||||||
|
d->fliprg = 0; RegisterValue( "fliprg", PAINT, &d->fliprg, sizeof( d->fliprg ) );
|
||||||
|
d->skittlequantity=0;RegisterValue( "skittlequantity", PAINT, &d->skittlequantity, sizeof( d->skittlequantity ) );
|
||||||
d->socket = -1;
|
d->socket = -1;
|
||||||
d->oldaddress[0] = 0;
|
d->oldaddress[0] = 0;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,6 +59,7 @@ static void LEDUpdate(void * id, struct NoteFinder*nf)
|
||||||
|
|
||||||
// if( totbins > led_bins ) totbins = led_bins;
|
// if( totbins > led_bins ) totbins = led_bins;
|
||||||
|
|
||||||
|
|
||||||
for( i = 0; i < totbins; i++ )
|
for( i = 0; i < totbins; i++ )
|
||||||
{
|
{
|
||||||
binpos[i] = nf->note_positions[i] / nf->freqbins;
|
binpos[i] = nf->note_positions[i] / nf->freqbins;
|
||||||
|
@ -72,6 +73,7 @@ static void LEDUpdate(void * id, struct NoteFinder*nf)
|
||||||
}
|
}
|
||||||
|
|
||||||
float newtotal = 0;
|
float newtotal = 0;
|
||||||
|
|
||||||
for( i = 0; i < totbins; i++ )
|
for( i = 0; i < totbins; i++ )
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -84,7 +86,6 @@ static void LEDUpdate(void * id, struct NoteFinder*nf)
|
||||||
if( binvals[i] / totalbinval < led->led_floor )
|
if( binvals[i] / totalbinval < led->led_floor )
|
||||||
binvals[i] = binvalsQ[i] = 0;
|
binvals[i] = binvalsQ[i] = 0;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
newtotal += binvals[i];
|
newtotal += binvals[i];
|
||||||
}
|
}
|
||||||
totalbinval = newtotal;
|
totalbinval = newtotal;
|
||||||
|
@ -94,6 +95,8 @@ static void LEDUpdate(void * id, struct NoteFinder*nf)
|
||||||
float rledampQ[led->total_leds];
|
float rledampQ[led->total_leds];
|
||||||
int rbinout = 0;
|
int rbinout = 0;
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
for( i = 0; i < totbins; i++ )
|
for( i = 0; i < totbins; i++ )
|
||||||
{
|
{
|
||||||
int nrleds = (int)((binvals[i] / totalbinval) * led->total_leds);
|
int nrleds = (int)((binvals[i] / totalbinval) * led->total_leds);
|
||||||
|
@ -107,13 +110,22 @@ static void LEDUpdate(void * id, struct NoteFinder*nf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if( rbinout == 0 )
|
||||||
|
{
|
||||||
|
rledpos[0] = 0;
|
||||||
|
rledamp[0] = 0;
|
||||||
|
rledampQ[0] = 0;
|
||||||
|
rbinout++;
|
||||||
|
}
|
||||||
|
|
||||||
for( ; rbinout < led->total_leds; rbinout++ )
|
for( ; rbinout < led->total_leds; rbinout++ )
|
||||||
{
|
{
|
||||||
rledpos[rbinout] = rledpos[rbinout-1];
|
rledpos[rbinout] = rledpos[rbinout-1];
|
||||||
rledamp[rbinout] = rledamp[rbinout-1];
|
rledamp[rbinout] = rledamp[rbinout-1];
|
||||||
rledampQ[rbinout] = rledampQ[rbinout-1];
|
rledampQ[rbinout] = rledampQ[rbinout-1];
|
||||||
}
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
//Now we have to minimize "advance".
|
//Now we have to minimize "advance".
|
||||||
int minadvance = 0;
|
int minadvance = 0;
|
||||||
|
|
||||||
|
|
29
colorchord2/double_pie.conf
Normal file
29
colorchord2/double_pie.conf
Normal file
|
@ -0,0 +1,29 @@
|
||||||
|
#for a two-ring WS2812 light, 24 LEDs per layer, one layer clockwise, the other counter-clockwise.
|
||||||
|
|
||||||
|
outdrivers = DisplayPie,DisplayNetwork,OutputLinear
|
||||||
|
leds = 48
|
||||||
|
light_siding = 1.0 #Turn this to ~1.9 for more uniformity, ~1.0 for less.
|
||||||
|
satamp = 1.600
|
||||||
|
is_loop=1
|
||||||
|
led_floor = .1 #Turn to .25 for more uniformity, .1 for less.
|
||||||
|
steady_bright = 0
|
||||||
|
|
||||||
|
skipfirst = 3
|
||||||
|
firstval = 0
|
||||||
|
port = 7777
|
||||||
|
#address = 192.168.11.231
|
||||||
|
address = 192.168.43.128
|
||||||
|
|
||||||
|
slope=.10
|
||||||
|
amplify=.3
|
||||||
|
|
||||||
|
|
||||||
|
lightx = 20
|
||||||
|
lighty = 20
|
||||||
|
|
||||||
|
sourcename = alsa_output.pci-0000_00_1f.3.analog-stereo.monitor
|
||||||
|
|
||||||
|
fliprg = 1
|
||||||
|
skittlequantity = 24
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue