X-Git-Url: https://git.ucc.asn.au/?a=blobdiff_plain;f=server%2Factuator.c;h=2be41941eb538741a9b77b6127f38b65dbcd892e;hb=5b98dd1c37a6151e734e8fa3a7054248ae3455c6;hp=04938bac847b8d2ba69e91086b884108c1d53990;hpb=716344659847fd869a89e31168c600ae432b7c0c;p=matches%2FMCTX3420.git diff --git a/server/actuator.c b/server/actuator.c index 04938ba..2be4194 100644 --- a/server/actuator.c +++ b/server/actuator.c @@ -8,9 +8,6 @@ // Files containing GPIO and PWM definitions #include "bbb_pin.h" - - - /** Number of actuators **/ int g_num_actuators = 0; @@ -36,12 +33,17 @@ int Actuator_Add(const char * name, int user_id, SetFn set, InitFn init, CleanFn a->name = name; a->set = set; // Set read function a->init = init; // Set init function - if (init != NULL) - init(name, user_id); // Call it + a->sanity = sanity; pthread_mutex_init(&(a->mutex), NULL); + if (init != NULL) + { + if (!init(name, user_id)) + Fatal("Couldn't initialise actuator %s", name); + } + Actuator_SetValue(a, initial_value, false); return g_num_actuators; @@ -74,12 +76,17 @@ void Actuator_SetMode(Actuator * a, ControlModes mode, void *arg) { case CONTROL_START: { + // Set filename char filename[BUFSIZ]; - const char *experiment_name = (const char*) arg; + const char *experiment_path = (const char*) arg; + int ret; + + ret = snprintf(filename, BUFSIZ, "%s/actuator_%d", experiment_path, a->id); - if (snprintf(filename, BUFSIZ, "%s_a%d", experiment_name, a->id) >= BUFSIZ) + if (ret >= BUFSIZ) { - Fatal("Experiment name \"%s\" too long (>%d)", experiment_name, BUFSIZ); + Fatal("Experiment path \"%s\" too long (%d, limit %d)", + experiment_path, ret, BUFSIZ); } Log(LOGDEBUG, "Actuator %d with DataFile \"%s\"", a->id, filename); @@ -136,7 +143,7 @@ void Actuator_SetMode(Actuator * a, ControlModes mode, void *arg) */ void Actuator_SetModeAll(ControlModes mode, void * arg) { - for (int i = 0; i < ACTUATORS_MAX; i++) + for (int i = 0; i < g_num_actuators; i++) Actuator_SetMode(&g_actuators[i], mode, arg); } @@ -349,7 +356,7 @@ void Actuator_Handler(FCGIContext * context, char * params) FCGI_RejectJSON(context, "No id or name supplied"); return; } - else if (id < 0 || id >= ACTUATORS_MAX) + else if (id < 0 || id >= g_num_actuators) { FCGI_RejectJSON(context, "Invalid Actuator id"); return; @@ -386,7 +393,6 @@ void Actuator_Handler(FCGIContext * context, char * params) return; } Actuator_SetControl(a, &c); - } // Begin response