-
/**
* @file sensor.h
- * @purpose Declarations for sensor thread related stuff
+ * @brief Declarations for sensor thread related stuff
*/
-
#ifndef _SENSOR_H
#define _SENSOR_H
-/** Number of data points to keep in sensor buffers **/
-#define SENSOR_DATABUFSIZ 10
-
-#define SENSOR_QUERYBUFSIZ 10
+#include "data.h"
/** Number of sensors **/
-#define NUMSENSORS 1
+#define NUMSENSORS 6
-/** Structure to represent data recorded by a sensor at an instant in time **/
-typedef struct
+typedef enum SensorId
{
- /** Time at which data was taken **/
- float time;
- /** Value of data **/
- float value;
-} DataPoint;
+ ANALOG_TEST0,
+ ANALOG_TEST1,
+ ANALOG_FAIL0,
+ DIGITAL_TEST0,
+ DIGITAL_TEST1,
+ DIGITAL_FAIL0
+} SensorId;
+
+
+
+/** Human readable names for the sensors **/
+extern const char * g_sensor_names[NUMSENSORS];
+
/** Structure to represent a sensor **/
typedef struct
{
/** ID number of the sensor **/
- enum {SENSOR_TEST0=0, SENSOR_TEST1=1, SENSOR_NONE} id;
- /** Buffer to store data from the sensor **/
- DataPoint buffer[SENSOR_DATABUFSIZ];
- /** Index of last point written in the data buffer **/
- int write_index;
- /** Offset position in binary file for query thread to read from**/
- int read_offset;
- /** Binary file to write data into when buffer is full **/
- FILE * file;
- /** Thread running the sensor **/
+ SensorId id;
+ /** DataFile to store sensor values in **/
+ DataFile data_file;
+ /** Indicates whether the Sensor should record data **/
+ bool record_data;
+ /** Thread the Sensor is running in **/
pthread_t thread;
- /** Mutex to protect access to stuff **/
- pthread_mutex_t mutex;
+ /** Most recently recorded data **/
+ DataPoint newest_data;
-
} Sensor;
-/** Array of Sensors **/
-extern Sensor g_sensors[];
+// Structure to define the warning and error thresholds of the sensors
+typedef struct
+{
+ double max_error;
+ double min_error;
+ double max_warn;
+ double min_warn;
+} SensorThres;
+
+extern void Sensor_Init(); // One off initialisation of *all* sensors
-extern void Sensor_Init(Sensor * s, int id); // Initialise sensor
-extern void * Sensor_Main(void * args); // main loop for sensor thread; pass a Sensor* cast to void*
+extern void Sensor_StartAll(const char * experiment_name); // Start all Sensors recording data
+extern void Sensor_StopAll(); // Stop all Sensors recording data
+extern void Sensor_Start(Sensor * s, const char * experiment_name); // Start a sensor recording datas
+extern void Sensor_Stop(Sensor * s); // Stop a Sensor from recording data
-extern int Sensor_Query(Sensor * s, DataPoint * buffer, int bufsiz); // fill buffer with sensor data
-extern void Sensor_Handler(FCGIContext *context, char * params);
+extern void * Sensor_Loop(void * args); // Main loop for a thread that handles a Sensor
+extern bool Sensor_Read(Sensor * s, DataPoint * d); // Read a single DataPoint, indicating if it has changed since the last one
+extern void Sensor_CheckData(SensorId id, DataPoint * d); // Check a DataPoint
+extern Sensor * Sensor_Identify(const char * str); // Identify a Sensor from a string Id
+extern void Sensor_Handler(FCGIContext *context, char * params); // Handle a FCGI request for Sensor data
#endif //_SENSOR_H
+