int binaryLogLuminosity(const unsigned char sensorId, luminosity_t & data) { init_data_struct(luminosity_bin_t, ARDUSAT_SENSOR_TYPE_LUMINOSITY) bin_data.luminosity = data.lux; return logBytes((unsigned char *) &bin_data, sizeof(luminosity_bin_t)); }
int binaryLogPressure(const unsigned char sensorId, pressure_t & data) { init_data_struct(pressure_bin_t, ARDUSAT_SENSOR_TYPE_PRESSURE) bin_data.pressure = data.pressure; return logBytes((unsigned char *) &bin_data, sizeof(pressure_bin_t)); }
int binaryLogUVLight(const unsigned char sensorId, uvlight_t & data) { init_data_struct(uv_light_bin_t, ARDUSAT_SENSOR_TYPE_UV) bin_data.uv = data.uvindex; return logBytes((unsigned char *) &bin_data, sizeof(uv_light_bin_t)); }
int binaryLogTemperature(const unsigned char sensorId, temperature_t & data) { init_data_struct(temperature_bin_t, ARDUSAT_SENSOR_TYPE_TEMPERATURE) bin_data.temp = data.t; return logBytes((unsigned char *) &bin_data, sizeof(temperature_bin_t)); }
int binaryLogOrientation(const unsigned char sensorId, orientation_t & data) { init_data_struct(orientation_bin_t, ARDUSAT_SENSOR_TYPE_ORIENTATION) bin_data.roll = data.roll; bin_data.pitch = data.pitch; bin_data.heading = data.heading; return logBytes((unsigned char *) &bin_data, sizeof(orientation_bin_t)); }
int binaryLogGyro(const unsigned char sensorId, gyro_t & data) { init_data_struct(gyro_bin_t, ARDUSAT_SENSOR_TYPE_GYRO) bin_data.x = data.x; bin_data.y = data.y; bin_data.z = data.z; return logBytes((unsigned char *) &bin_data, sizeof(gyro_bin_t)); }
int binaryLogMagnetic(const unsigned char sensorId, magnetic_t & data) { init_data_struct(magnetic_bin_t, ARDUSAT_SENSOR_TYPE_MAGNETIC) bin_data.x = data.x; bin_data.y = data.y; bin_data.z = data.z; return logBytes((unsigned char *) &bin_data, sizeof(magnetic_bin_t)); }
int binaryLogAcceleration(const unsigned char sensorId, acceleration_t & data) { init_data_struct(acceleration_bin_t, ARDUSAT_SENSOR_TYPE_ACCELERATION) bin_data.x = data.x; bin_data.y = data.y; bin_data.z = data.z; return logBytes((unsigned char *) &bin_data, sizeof(acceleration_bin_t)); }
int main() { /* Thread and corresponding parameter declaration */ pthread_t regul_thread; pthread_t gui_thread; struct sched_param regul_sp = { 99 }; struct sched_param gui_sp = { 1 }; int policy = SCHED_RR; /* Creating thread arguments struct and its contents */ thread_args_t *thread_args = (thread_args_t*) malloc( sizeof(thread_args_t)); thread_args->regul = init_regul(); thread_args->data = init_data_struct(); thread_args->run = 1; /* Creating Threads*/ if (pthread_create(®ul_thread, NULL, run_regul, (void*) thread_args)) { printf("Failed to create regulator thread.\n"); exit(1); } if (pthread_create(&gui_thread, NULL, run_gui, (void*) thread_args)) { printf("Failed to create GUI thread.\n"); exit(1); } /* Only works if superuser or privileged user */ pthread_setschedparam(regul_thread, policy, ®ul_sp); pthread_setschedparam(gui_thread, policy, &gui_sp); /* Wait for GUI thread to finish, which turns regulator off */ pthread_join(gui_thread, NULL); /* Wait for regulator to finish last loop */ pthread_join(regul_thread, NULL); /* Free structs*/ free_regul(thread_args->regul); free_data_struct(thread_args->data); free(thread_args); return 0; }