pthread_create(&(a->thread), NULL, Actuator_Loop, (void*)(a));
}
+void Actuator_Pause(Actuator *a)
+{
+ if (a->activated)
+ {
+ a->activated = false;
+ Actuator_SetControl(a, NULL);
+ pthread_join(a->thread, NULL); // Wait for thread to exit
+ }
+}
+
+void Actuator_Resume(Actuator *a)
+{
+ if (!a->activated)
+ {
+ a->activated = true;
+ pthread_create(&(a->thread), NULL, Actuator_Loop, (void*)(a));
+ }
+}
+
/**
* Stop an Actuator
* @param s - The Actuator to stop
void Actuator_Stop(Actuator * a)
{
// Stop
- a->activated = false;
- Actuator_SetControl(a, NULL);
- pthread_join(a->thread, NULL); // Wait for thread to exit
+ Actuator_Pause(a);
Data_Close(&(a->data_file)); // Close DataFile
}
+void Actuator_PauseAll()
+{
+ for (int i = 0; i < NUMACTUATORS; ++i)
+ Actuator_Pause(g_actuators+i);
+}
+
+void Actuator_ResumeAll()
+{
+ for (int i = 0; i < NUMACTUATORS; ++i)
+ Actuator_Resume(g_actuators+i);
+}
+
/**
* Stop all Actuators
*/
struct timeval t;
gettimeofday(&t, NULL);
- DataPoint d = {TIMEVAL_DIFF(t, g_options.start_time), value};
+ DataPoint d = {TIMEVAL_DIFF(t, *Control_GetStartTime()), value};
//TODO: Set actuator
switch (a->id)
{
{
struct timeval now;
gettimeofday(&now, NULL);
- double current_time = TIMEVAL_DIFF(now, g_options.start_time);
+ double current_time = TIMEVAL_DIFF(now, *Control_GetStartTime());
int id = 0;
double set = 0;
double start_time = 0;
DataFormat format = Data_GetFormat(&(values[FORMAT]));
- if (Control_Lock())
- {
- // Begin response
- Actuator_BeginResponse(context, id, format);
-
- // Set?
- if (FCGI_RECEIVED(values[SET].flags))
- {
- if (format == JSON)
- FCGI_JSONDouble("set", set);
-
- ActuatorControl c;
- c.value = set;
-
- Actuator_SetControl(a, &c);
- }
-
- // Print Data
- Data_Handler(&(a->data_file), &(values[START_TIME]), &(values[END_TIME]), format, current_time);
-
- // Finish response
- Actuator_EndResponse(context, id, format);
+ // Begin response
+ Actuator_BeginResponse(context, id, format);
- Control_Unlock();
- }
- else
+ // Set?
+ if (FCGI_RECEIVED(values[SET].flags))
{
- FCGI_RejectJSON(context, "Experiment is not running.");
+ if (format == JSON)
+ FCGI_JSONDouble("set", set);
+
+ ActuatorControl c;
+ c.value = set;
+
+ Actuator_SetControl(a, &c);
}
+
+ // Print Data
+ Data_Handler(&(a->data_file), &(values[START_TIME]), &(values[END_TIME]), format, current_time);
+
+ // Finish response
+ Actuator_EndResponse(context, id, format);
}