#include #include #include #include #include #include #include #include "pulse.h" #define USER_NAME "pulse user" #define DEBUG int device; int nmeas; void *thread_code(void *cookie) { int ret; rtStat_t Stat; float freq, period; // device = rt_dev_open(DEVICE_NAME, 0); device = open(DEVICE_NAME, 0); if (device < 0) { printf("%s : Error open %s %s\n", USER_NAME, DEVICE_NAME, strerror(device)); exit(1); } #ifdef DEBUG printf("thread : opened\n"); #endif // ret = rt_dev_ioctl(device, RPP_ISR, &nmeas); ret = ioctl(device, RPP_ISR, &nmeas); if (ret < 0) { printf("%s : Error while ioctl : %s \n", USER_NAME, strerror(-ret)); exit(1); } #ifdef DEBUG printf("thread : ioctl\n"); #endif // ret = rt_dev_read(device, &Stat, sizeof(rtStat_t)); ret = read(device, &Stat, sizeof(rtStat_t)); if (ret < 0) { printf("%s : Error while read : %s \n", USER_NAME, strerror(-ret)); exit(1); } period = ((float) Stat.sum/ (float)Stat.maxcount)/1.E6; freq = 1./period; printf ("period %f s frequency %f Hz \n", period, freq); printf ("min : %f max : %f delta t : %f\n", (float)Stat.min/1.E6, (float)Stat.max/1.E6, (float)(Stat.max-Stat.min)/1.E6); printf("thread : read\n"); // ret = rt_dev_close(device); ret = close(device); if (ret < 0) { printf("Error while closing %s\n", USER_NAME); exit(1); } printf("thread : closed\n"); pthread_exit(NULL); } int main(int argc, char *argv[]) { int device, ret; pthread_t tid; pthread_attr_t attr; struct sched_param sp; if (argc == 2) { nmeas = atoi(argv[1]); } else { nmeas = 5; } ret = mlockall(MCL_CURRENT | MCL_FUTURE); if (ret) { printf("error mlockall\n"); exit(1); } ret = pthread_attr_init(&attr); if (ret) { printf("error pthread_attr_init\n"); exit(1); } ret = pthread_attr_setinheritsched(&attr, PTHREAD_EXPLICIT_SCHED); if (ret) { printf("error pthread_attr_setinheritsched\n"); exit(1); } ret = pthread_attr_setschedpolicy(&attr, SCHED_FIFO); if (ret) { printf("error pthread_attr_setschedpolicy\n"); exit(1); } sp.sched_priority = 1; ret = pthread_attr_setschedparam(&attr, &sp); if (ret) { printf("error pthread_attr_setschedparam\n"); exit(1); } ret = pthread_create(&tid, &attr, thread_code, NULL); if (ret) { printf("error pthread_create\n"); exit(1); } ret = pthread_join(tid, NULL); if (ret) { printf("error pthread_join\n"); exit(1); } printf("main : joined\n"); // scanf("%c", &ret); return 0; }