Add support for RGBY endpoints
This commit is contained in:
parent
3703ac096f
commit
96e12af024
|
@ -30,6 +30,7 @@ struct DPODriver
|
||||||
int fliprg;
|
int fliprg;
|
||||||
int firstval;
|
int firstval;
|
||||||
int port;
|
int port;
|
||||||
|
int is_rgby;
|
||||||
int oldport;
|
int oldport;
|
||||||
int skittlequantity; //When LEDs are in a ring, backwards and forwards This is the number of LEDs in the ring.
|
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];
|
||||||
|
@ -88,56 +89,90 @@ static void DPOUpdate(void * id, struct NoteFinder*nf)
|
||||||
buffer[i++] = d->firstval;
|
buffer[i++] = d->firstval;
|
||||||
}
|
}
|
||||||
|
|
||||||
if( d->leds * 3 + i >= MAX_BUFFER )
|
if( d->is_rgby )
|
||||||
d->leds = (MAX_BUFFER-1)/3;
|
|
||||||
|
|
||||||
if( d->fliprg )
|
|
||||||
{
|
|
||||||
for( j = 0; j < d->leds; j++ )
|
|
||||||
{
|
|
||||||
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;
|
i = d->skipfirst;
|
||||||
|
int k = 0;
|
||||||
|
if( d->leds * 4 + i >= MAX_BUFFER )
|
||||||
|
d->leds = (MAX_BUFFER-1)/4;
|
||||||
|
|
||||||
|
//Copy from OutLEDs[] into buffer, with size i.
|
||||||
for( j = 0; j < d->leds; j++ )
|
for( j = 0; j < d->leds; j++ )
|
||||||
{
|
{
|
||||||
int ledw = j;
|
int r = OutLEDs[k++];
|
||||||
int ledpor = ledw % d->skittlequantity;
|
int g = OutLEDs[k++];
|
||||||
int ol;
|
int b = OutLEDs[k++];
|
||||||
|
int y = 0;
|
||||||
|
int rg_common;
|
||||||
|
if( r/2 > g ) rg_common = g;
|
||||||
|
else rg_common = r/2;
|
||||||
|
|
||||||
if( ledw >= d->skittlequantity )
|
if( rg_common > 255 ) rg_common = 255;
|
||||||
{
|
y = rg_common;
|
||||||
ol = ledpor*2-1;
|
r -= rg_common;
|
||||||
ol = d->skittlequantity*2 - ol -2;
|
g -= rg_common;
|
||||||
}
|
if( r < 0 ) r = 0;
|
||||||
else
|
if( g < 0 ) g = 0;
|
||||||
{
|
|
||||||
ol = ledpor*2;
|
|
||||||
}
|
|
||||||
|
|
||||||
buffer[i++] = lbuff[ol*3+0+d->skipfirst];
|
//Conversion from RGB to RAGB. Consider: A is shifted toward RED.
|
||||||
buffer[i++] = lbuff[ol*3+1+d->skipfirst];
|
buffer[i++] = g; //Green
|
||||||
buffer[i++] = lbuff[ol*3+2+d->skipfirst];
|
buffer[i++] = r; //Red
|
||||||
|
buffer[i++] = b; //Blue
|
||||||
|
buffer[i++] = y; //Amber
|
||||||
}
|
}
|
||||||
|
printf( "I: %d [%d %d %d %d]\n",i, buffer[i-4], buffer[i-3], buffer[i-2], buffer[i-1] );
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
memcpy( buffer, lbuff, i );
|
if( d->fliprg )
|
||||||
|
{
|
||||||
|
for( j = 0; j < d->leds; j++ )
|
||||||
|
{
|
||||||
|
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 )
|
||||||
{
|
{
|
||||||
|
@ -160,6 +195,7 @@ static void DPOParams(void * id )
|
||||||
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->fliprg = 0; RegisterValue( "fliprg", PAINT, &d->fliprg, sizeof( d->fliprg ) );
|
||||||
|
d->is_rgby = 0; RegisterValue( "rgby", PAINT, &d->is_rgby, sizeof( d->is_rgby ) );
|
||||||
d->skittlequantity=0;RegisterValue( "skittlequantity", PAINT, &d->skittlequantity, sizeof( d->skittlequantity ) );
|
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;
|
||||||
|
|
Loading…
Reference in a new issue