c724e6255f4f3a9d45237bd41b56d280f591c66e
[matches/MCTX3420.git] / BBB code / GetData_real.c
1 #include "gpio.h"
2
3 /**
4  * Read a DataPoint from a Sensor; block until value is read
5  * @param id - The ID of the sensor
6  * @param d - DataPoint to set
7  * @returns True if the DataPoint was different from the most recently recorded.
8  */
9 bool Sensor_Read(Sensor * s, DataPoint * d)
10 {
11         
12         // Set time stamp
13         struct timeval t;
14         gettimeofday(&t, NULL);
15         d->time_stamp = TIMEVAL_DIFF(t, g_options.start_time);
16
17         // Read value based on Sensor Id
18         switch (s->id)
19         {
20                 case ANALOG_TEST0:
21                         d->value = ADCRead(0);  //ADC #0 on the Beaglebone
22                         break;
23                 case ANALOG_TEST1:
24                 {
25                         d->value = ADCRead(1);
26                         break;
27                 }
28                 case ANALOG_FAIL0:
29                         d->value = (double)(rand() % 6) * -( rand() % 2) / ( rand() % 100 + 1);
30                         //Gives a value between -5 and 5
31                         break;
32                 case DIGITAL_TEST0:
33                         d->value = pinRead(0);  //replace 0 with correct pin number
34                         break;
35                 case DIGITAL_TEST1:
36                         d->value = pinRead(1);  //replace 1 with correct pin number
37                         break;
38                 case DIGITAL_FAIL0:
39                         if( rand() % 100 > 98)
40                                 d->value = 2;
41                         d->value = rand() % 2; 
42                         //Gives 0 or 1 or a 2 every 1/100 times
43                         break;
44                 default:
45                         Fatal("Unknown sensor id: %d", s->id);
46                         break;
47         }       
48         usleep(100000); // simulate delay in sensor polling
49
50         // Perform sanity check based on Sensor's ID and the DataPoint
51         Sensor_CheckData(s->id, d->value);
52
53         // Update latest DataPoint if necessary
54         bool result = (d->value != s->newest_data.value);
55         if (result)
56         {
57                 s->newest_data.time_stamp = d->time_stamp;
58                 s->newest_data.value = d->value;
59         }
60         return result;
61 }

UCC git Repository :: git.ucc.asn.au