X-Git-Url: https://git.ucc.asn.au/?p=matches%2FMCTX3420.git;a=blobdiff_plain;f=server%2Fsensor.c;fp=server%2Fsensor.c;h=e429958168019beb5c8e90320e90efc9d30a41eb;hp=9d0b33c51f367bd15e32d41326302212646198e3;hb=ed189a5dd5b5ca6c052d75704dec3f58fe410387;hpb=a9bbebcd9a85982320208184570c0e0976fc2f43 diff --git a/server/sensor.c b/server/sensor.c index 9d0b33c..e429958 100644 --- a/server/sensor.c +++ b/server/sensor.c @@ -43,7 +43,6 @@ void Sensor_Init() { g_sensors[i].id = i; Data_Init(&(g_sensors[i].data_file)); - g_sensors[i].record_data = false; } // Get the ADCs @@ -73,7 +72,6 @@ void Sensor_SetMode(Sensor * s, ControlModes mode, void * arg) // Set filename char filename[BUFSIZ]; const char *experiment_name = (const char*) arg; - int ret; if (snprintf(filename, BUFSIZ, "%s_s%d", experiment_name, s->id) >= BUFSIZ) { @@ -83,9 +81,11 @@ void Sensor_SetMode(Sensor * s, ControlModes mode, void * arg) Log(LOGDEBUG, "Sensor %d with DataFile \"%s\"", s->id, filename); // Open DataFile Data_Open(&(s->data_file), filename); - - s->activated = true; - s->record_data = true; // Don't forget this! + } + case CONTROL_RESUME: //Case fallthrough, no break before + { + int ret; + s->activated = true; // Don't forget this! // Create the thread ret = pthread_create(&(s->thread), NULL, Sensor_Loop, (void*)(s)); @@ -93,23 +93,29 @@ void Sensor_SetMode(Sensor * s, ControlModes mode, void * arg) { Fatal("Failed to create Sensor_Loop for Sensor %d", s->id); } + + Log(LOGDEBUG, "Resuming sensor %d", s->id); } - break; + break; + case CONTROL_EMERGENCY: case CONTROL_PAUSE: - s->record_data = false; - break; - case CONTROL_RESUME: - s->record_data = true; - break; - case CONTROL_STOP: s->activated = false; - s->record_data = false; pthread_join(s->thread, NULL); + Log(LOGDEBUG, "Paused sensor %d", s->id); + break; + + case CONTROL_STOP: + if (s->activated) //May have been paused before + { + s->activated = false; + pthread_join(s->thread, NULL); + } Data_Close(&(s->data_file)); // Close DataFile s->newest_data.time_stamp = 0; s->newest_data.value = 0; + Log(LOGDEBUG, "Stopped sensor %d", s->id); break; default: Fatal("Unknown control mode: %d", mode); @@ -140,6 +146,7 @@ void Sensor_CheckData(SensorId id, double value) { Log(LOGERR, "Sensor %s is above or below its safety value of %f or %f\n", g_sensor_names[id],thresholds[id].max_error, thresholds[id].min_error); //new function that stops actuators? + //Control_SetMode(CONTROL_EMERGENCY, NULL) } else if( value > thresholds[id].max_warn || value < thresholds[id].min_warn) { @@ -258,20 +265,12 @@ void * Sensor_Loop(void * arg) // Until the sensor is stopped, record data points while (s->activated) { - if (s->record_data) - { - DataPoint d; - //Log(LOGDEBUG, "Sensor %d reads data [%f,%f]", s->id, d.time_stamp, d.value); - if (Sensor_Read(s, &d)) // If new DataPoint is read: - { - //Log(LOGDEBUG, "Sensor %d saves data [%f,%f]", s->id, d.time_stamp, d.value); - Data_Save(&(s->data_file), &d, 1); // Record it - } - } - else + DataPoint d; + //Log(LOGDEBUG, "Sensor %d reads data [%f,%f]", s->id, d.time_stamp, d.value); + if (Sensor_Read(s, &d)) // If new DataPoint is read: { - //Do something? wait? - usleep(100000); + //Log(LOGDEBUG, "Sensor %d saves data [%f,%f]", s->id, d.time_stamp, d.value); + Data_Save(&(s->data_file), &d, 1); // Record it } }