#define _GNU_SOURCE #include #include #include #include #include #include #include #include #include #include #include #include #define TRUE (1==1) #define FALSE (!TRUE) #define CHAN_CONFIG_SINGLE 8 #define CHAN_CONFIG_DIFF 0 #define TAILLE 512 #define CLOCKID CLOCK_REALTIME #define SIG SIGRTMIN double data[TAILLE]; int k=0; int cpt; int loadSpi=FALSE; int analogChannel=1; int spiChannel=0; int channelConfig=CHAN_CONFIG_SINGLE; void acquire(); /*Fonction renvoyant la donnée lu sur le bus SPI */ int myAnalogRead(int spiChannel,int channelConfig,int analogChannel){ if(analogChannel<0 || analogChannel>7) return -1; unsigned char buffer[3] = {1}; // start bit buffer[1] = (channelConfig+analogChannel) << 4; wiringPiSPIDataRW(spiChannel, buffer, 3); return ( (buffer[1] & 3 ) << 8 ) + buffer[2]; // get last 10 bits } /*Fonction d'un timer qui fait appel à aquire() toutes les 4 ms*/ void *ice_time(void *arg){ timer_t timerid; struct sigevent sev; struct itimerspec its; long long freq_nanosecs; sigset_t mask; struct sigaction sa; sa.sa_flags = SA_SIGINFO; sa.sa_sigaction = acquire; sigemptyset(&sa.sa_mask); if (sigaction(SIG, &sa, NULL) == -1) errExit("sigaction"); sigemptyset(&mask); if (sigaction(SIG, &sa, NULL) == -1) errExit("sigaction"); sigaddset(&mask, SIG); if (sigprocmask(SIG_SETMASK, &mask, NULL) == -1) errExit("sigprocmask"); sev.sigev_notify = SIGEV_SIGNAL; sev.sigev_signo = SIG; sev.sigev_value.sival_ptr = &timerid; if (timer_create(CLOCKID, &sev, &timerid) == -1) errExit("timer_create"); freq_nanosecs = 4000000; its.it_value.tv_sec = freq_nanosecs / 1000000000; its.it_value.tv_nsec = freq_nanosecs % 1000000000; its.it_interval.tv_sec = its.it_value.tv_sec; its.it_interval.tv_nsec = its.it_value.tv_nsec; if (timer_settime(timerid, 0, &its, NULL) == -1) errExit("timer_settime"); sigprocmask(SIG, &mask, NULL); while(1){} (void) arg; pthread_exit(NULL); } /*Fonction récupérant les données acquisent et les stoquant dans le tableau data Quand le tableau est rempli on enlève la première valeur pour en prendre une nouvelle*/ void acquire( ){ int aux; aux = myAnalogRead(spiChannel,channelConfig,analogChannel-1); if(k