Use semaphores for better performance.
This commit is contained in:
parent
4cdf3ed859
commit
d15f18113b
|
@ -28,8 +28,8 @@ struct FileWriteDriver
|
||||||
int file_thread_usleep;
|
int file_thread_usleep;
|
||||||
int asynchronous;
|
int asynchronous;
|
||||||
uint32_t pass_buffer[MAX_LEDS];
|
uint32_t pass_buffer[MAX_LEDS];
|
||||||
volatile int flagchanges;
|
|
||||||
og_thread_t rt_thread;
|
og_thread_t rt_thread;
|
||||||
|
og_sema_t rt_sema;
|
||||||
};
|
};
|
||||||
|
|
||||||
static void * LightsWrite( void * v )
|
static void * LightsWrite( void * v )
|
||||||
|
@ -37,9 +37,7 @@ static void * LightsWrite( void * v )
|
||||||
struct FileWriteDriver * d = (struct FileWriteDriver *)v;
|
struct FileWriteDriver * d = (struct FileWriteDriver *)v;
|
||||||
while(1)
|
while(1)
|
||||||
{
|
{
|
||||||
usleep( d->file_thread_usleep );
|
OGLockSema( d->rt_sema );
|
||||||
if( !d->flagchanges ) continue;
|
|
||||||
d->flagchanges = 0;
|
|
||||||
if( d->lights_file > 0 )
|
if( d->lights_file > 0 )
|
||||||
{
|
{
|
||||||
int btos = ((d->inflate_to_u32)?4:3)*d->total_leds;
|
int btos = ((d->inflate_to_u32)?4:3)*d->total_leds;
|
||||||
|
@ -75,7 +73,7 @@ static void FileWriteUpdate(void * id, struct NoteFinder*nf)
|
||||||
{
|
{
|
||||||
struct FileWriteDriver * d = (struct FileWriteDriver*)id;
|
struct FileWriteDriver * d = (struct FileWriteDriver*)id;
|
||||||
|
|
||||||
|
if( OGGetSema( d->rt_sema ) > 0 ) return;
|
||||||
if( !d->inflate_to_u32 )
|
if( !d->inflate_to_u32 )
|
||||||
{
|
{
|
||||||
memcpy( d->pass_buffer, OutLEDs, d->total_leds*3 );
|
memcpy( d->pass_buffer, OutLEDs, d->total_leds*3 );
|
||||||
|
@ -89,7 +87,7 @@ static void FileWriteUpdate(void * id, struct NoteFinder*nf)
|
||||||
d->pass_buffer[i] = ol[0] | (ol[1]<<8) | (ol[2]<<16) | 0xff000000;
|
d->pass_buffer[i] = ol[0] | (ol[1]<<8) | (ol[2]<<16) | 0xff000000;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
d->flagchanges = 1;
|
OGUnlockSema( d->rt_sema );
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -112,6 +110,7 @@ static struct DriverInstances * DisplayFileWrite(const char * parameters)
|
||||||
ret->Params = FileWriteParams;
|
ret->Params = FileWriteParams;
|
||||||
FileWriteParams( d );
|
FileWriteParams( d );
|
||||||
printf( "Loaded DisplayFileWrite\n" );
|
printf( "Loaded DisplayFileWrite\n" );
|
||||||
|
d->rt_sema = OGCreateSema();
|
||||||
d->rt_thread = OGCreateThread( LightsWrite, d );
|
d->rt_thread = OGCreateThread( LightsWrite, d );
|
||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,9 +1,9 @@
|
||||||
# This is the keyboard test for Clevo and PowerSpec 1510 and 1710 laptops, using the kernel module found here:
|
# This is the keyboard test for Clevo and PowerSpec 1510 and 1710 laptops, using the kernel module found here:
|
||||||
# https://github.com/cnlohr/clevo_xsm_wmi
|
# https://github.com/cnlohr/clevo_xsm_wmi
|
||||||
|
|
||||||
|
cpu_autolimit_interval=.002
|
||||||
cpu_autolimit = 1
|
cpu_autolimit = 1
|
||||||
headless=0
|
headless=1
|
||||||
|
|
||||||
|
|
||||||
octaves = 5
|
octaves = 5
|
||||||
base_hz = 82.406889228
|
base_hz = 82.406889228
|
||||||
|
|
Loading…
Reference in a new issue