X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=server%2Fsensor.c;h=63e69d81e8522637d10749ae941c444ef5ee5b50;hb=00c5659557c54258f31da4c33c078c52f3d8feb6;hp=28c3f5e33570f4e0d82ff7392c6d0b216fbefe1d;hpb=9c4ecb96f8eb05d44786fe75d5fd0fb8d288b401;p=matches%2FMCTX3420.git diff --git a/server/sensor.c b/server/sensor.c index 28c3f5e..63e69d8 100644 --- a/server/sensor.c +++ b/server/sensor.c @@ -43,16 +43,15 @@ void Sensor_Init() { g_sensors[i].id = i; Data_Init(&(g_sensors[i].data_file)); - g_sensors[i].record_data = false; } // Get the ADCs - ADC_Export(); + //ADC_Export(); // GPIO1_28 used as a pulse for sampling - GPIO_Export(GPIO1_28); + //GPIO_Export(GPIO1_28); // GPIO0_30 toggled during sampling - GPIO_Export(GPIO0_30); + //GPIO_Export(GPIO0_30); } /** @@ -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 at %f is above or below its safety value of %f or %f\n", value, 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) { @@ -168,16 +175,18 @@ bool Sensor_Read(Sensor * s, DataPoint * d) // Read value based on Sensor Id switch (s->id) { - case ANALOG_REALTEST: + case 2: { static bool set = false; - GPIO_Set(GPIO0_30, true); - d->value = 0;//(double)ADC_Read(ADC0); //ADC #0 on the Beaglebone + //GPIO_Set(GPIO0_30, true); + d->value = (double)ADC_Read(ADC0); //ADC #0 on the Beaglebone //Log(LOGDEBUG, "Got value %f from ADC0", d->value); - GPIO_Set(GPIO0_30, false); + //GPIO_Set(GPIO0_30, false); set = !set; - GPIO_Set(GPIO1_28, set); + //GPIO_Set(GPIO1_28, set); + + usleep(100000); break; } @@ -258,20 +267,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 } }