#include <stdio.h>
#include <pthread.h>
#include <time.h>
//#include <wiringPi.h>
#define HIGH 1
#define LOW 0
int led_freq = 100 ; // Hz
int global_set_first = HIGH;
int global_set_second = LOW;
long period_us = 5000 ;
int cycle_ish = 200 ;
void set_led_brightness( int i) {
if ( i > led_freq || i < 1 ) {
i = led_freq / 2 ;
}
if ( i > led_freq/ 2 ) {
i = led_freq - i;
global_set_first = LOW;
global_set_second = HIGH;
} else {
global_set_first = HIGH;
global_set_second = LOW;
}
cycle_ish = led_freq/ i;
}
void timespec_add_us( struct timespec * t, long us)
{
// add microseconds to timespecs nanosecond counter
t-> tv_nsec += us* 1000 ;
// if wrapping nanosecond counter, increment second counter
if ( t-> tv_nsec > 1000000000 )
{
t-> tv_nsec -= 1000000000 ;
t-> tv_sec += 1 ;
}
}
void * task( void * v) {
int counter = 0 ;
struct timespec wait_time_v;
clock_gettime( CLOCK_REALTIME, & wait_time_v) ;
while ( 1 ) {
if ( counter >= cycle_ish) {
//digitalWrite(0, global_set_first);
counter = 0 ;
} else {
//digitalWrite(0,global_set_second);
}
timespec_add_us( & wait_time_v, period_us) ;
clock_nanosleep( CLOCK_REALTIME, TIMER_ABSTIME, & wait_time_v, NULL) ;
counter++;
}
return 0 ;
}
int main( int argc, char * argv[ ] ) {
period_us = 1000000 / led_freq;
int i= 100 ;
if ( argc == 2 ) {
}
// wiringPiSetup();
// pinMode(0, OUTPUT);
pthread_t p;
pthread_create( & p, NULL, task, ( void * ) & i) ;
int input;
while ( 1 ) {
//set_led_brightness(input);
}
/*
int a;
for (a = 199; a > 1; a-=10) {
set_led_brightness(a);
printf("i = %d\n", a);
usleep(1000000);
}
for (a = 1; a < 200; a+=10) {
set_led_brightness(a);
printf("i = %d\n", a);
usleep(1000000);
}
*/
pthread_join( p, NULL) ;
return 0 ;
}
I2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxwdGhyZWFkLmg+CiNpbmNsdWRlIDx0aW1lLmg+Ci8vI2luY2x1ZGUgPHdpcmluZ1BpLmg+CiNkZWZpbmUgSElHSCAxCiNkZWZpbmUgTE9XIDAKCmludCBsZWRfZnJlcSA9IDEwMDsgLy8gSHoKCgppbnQgZ2xvYmFsX3NldF9maXJzdCA9IEhJR0g7CmludCBnbG9iYWxfc2V0X3NlY29uZCA9IExPVzsKbG9uZyBwZXJpb2RfdXMgPSA1MDAwOwppbnQgY3ljbGVfaXNoID0gMjAwOwoKdm9pZCBzZXRfbGVkX2JyaWdodG5lc3MoaW50IGkpewoKCWlmIChpID4gbGVkX2ZyZXEgfHwgaSA8IDEpIHsKCQlpID0gbGVkX2ZyZXEgLyAyOwoJfQoJCglpZiAoaSA+IGxlZF9mcmVxLzIpIHsKCQlpID0gbGVkX2ZyZXEgLSBpOwoJCWdsb2JhbF9zZXRfZmlyc3QgPSBMT1c7CgkJZ2xvYmFsX3NldF9zZWNvbmQgPSBISUdIOwoJfSBlbHNlIHsKCQlnbG9iYWxfc2V0X2ZpcnN0ID0gSElHSDsKCQlnbG9iYWxfc2V0X3NlY29uZCA9IExPVzsKCX0KCWN5Y2xlX2lzaCA9IGxlZF9mcmVxL2k7CgkKfQoKdm9pZCB0aW1lc3BlY19hZGRfdXMoc3RydWN0IHRpbWVzcGVjICp0LCBsb25nIHVzKQp7CgkvLyBhZGQgbWljcm9zZWNvbmRzIHRvIHRpbWVzcGVjcyBuYW5vc2Vjb25kIGNvdW50ZXIKCXQtPnR2X25zZWMgKz0gdXMqMTAwMDsKCQoJLy8gaWYgd3JhcHBpbmcgbmFub3NlY29uZCBjb3VudGVyLCBpbmNyZW1lbnQgc2Vjb25kIGNvdW50ZXIKCWlmICh0LT50dl9uc2VjID4gMTAwMDAwMDAwMCkKCXsKCQl0LT50dl9uc2VjIC09IDEwMDAwMDAwMDA7CgkJdC0+dHZfc2VjICs9IDE7Cgl9Cn0KCnZvaWQqIHRhc2sodm9pZCogdil7CgoJaW50IGNvdW50ZXIgPSAwOwoJc3RydWN0IHRpbWVzcGVjIHdhaXRfdGltZV92OwoJY2xvY2tfZ2V0dGltZShDTE9DS19SRUFMVElNRSwgJndhaXRfdGltZV92KTsKCQkKCXdoaWxlICgxKSB7CgkJCgkJaWYgKGNvdW50ZXIgPj0gY3ljbGVfaXNoKSB7CgkJCS8vZGlnaXRhbFdyaXRlKDAsIGdsb2JhbF9zZXRfZmlyc3QpOwoJCQljb3VudGVyID0gMDsKCQl9IGVsc2UgewoJCQkvL2RpZ2l0YWxXcml0ZSgwLGdsb2JhbF9zZXRfc2Vjb25kKTsKCQl9CgoJCXRpbWVzcGVjX2FkZF91cygmd2FpdF90aW1lX3YsIHBlcmlvZF91cyk7CgkJY2xvY2tfbmFub3NsZWVwKENMT0NLX1JFQUxUSU1FLCBUSU1FUl9BQlNUSU1FLCAmd2FpdF90aW1lX3YsIE5VTEwpOwoJCQoJCWNvdW50ZXIrKzsKCX0KCXJldHVybiAwOwp9CgppbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKXsKCXBlcmlvZF91cyA9IDEwMDAwMDAvbGVkX2ZyZXE7CgkKCWludCBpPTEwMDsKCWlmIChhcmdjID09IDIpIHsKCQlpID0gYXRvaShhcmd2WzFdKTsKCX0KCi8vCXdpcmluZ1BpU2V0dXAoKTsKLy8JcGluTW9kZSgwLCBPVVRQVVQpOwoKCXB0aHJlYWRfdCBwOwoJCglwdGhyZWFkX2NyZWF0ZSgmcCwgTlVMTCwgdGFzaywgKHZvaWQqKSAmaSk7CglpbnQgaW5wdXQ7Cgl3aGlsZSAoMSkgewoJCgkJc2NhbmYoIiVkIiwgJmlucHV0KTsKCQkvL3NldF9sZWRfYnJpZ2h0bmVzcyhpbnB1dCk7Cgl9CgkvKgoJaW50IGE7Cglmb3IgKGEgPSAxOTk7IGEgPiAxOyBhLT0xMCkgewoJCXNldF9sZWRfYnJpZ2h0bmVzcyhhKTsKCQlwcmludGYoImkgPSAlZFxuIiwgYSk7CgkJdXNsZWVwKDEwMDAwMDApOwoJfQoJZm9yIChhID0gMTsgYSA8IDIwMDsgYSs9MTApIHsKCQlzZXRfbGVkX2JyaWdodG5lc3MoYSk7CgkJcHJpbnRmKCJpID0gJWRcbiIsIGEpOwoJCXVzbGVlcCgxMDAwMDAwKTsKCX0KCSAqLwoJcHRocmVhZF9qb2luKHAsIE5VTEwpOwoKCnJldHVybiAwOwp9Cg==