/** * Updates the sensor by reading the current value into it */ static void update(CAMERA_STATE *camera, struct sensor *sensor) { if (!sensor->enabled) return; struct state *state = (struct state *) sensor; if (!state->loader) state->loader = exif_loader_new(); exif_loader_reset(state->loader); exif_loader_write(state->loader, camera->imagedata.buffer, camera->imagedata.pos); ExifData *data = exif_loader_get_data(state->loader); ExifByteOrder bo = exif_data_get_byte_order(data); int valid = get_shutter_speed(data, bo, &state->shutter_speed); if (valid) valid = get_aperture(data, bo, &state->aperture); if (valid) valid = getDouble(data, bo, EXIF_TAG_ISO_SPEED_RATINGS, &state->iso); exif_data_free(data); if (valid) { // Calculate the light level state->light_level = (2.0 * log(state->aperture) - log(state->shutter_speed) - log(state->iso / 100.0)) / log(2.0); // Update the sensor sensor_log(camera, &state->sensor, (int) (state->light_level * 1000), "Lvl %.1f", state->light_level); } }
void GERBER_PLOTTER::select_aperture( const wxSize& size, APERTURE::Aperture_Type type ) { wxASSERT( output_file ); if( ( current_aperture == apertures.end() ) || ( current_aperture->type != type ) || ( current_aperture->size != size ) ) { /* Pick an existing aperture or create a new one */ current_aperture = get_aperture( size, type ); fprintf( output_file, "G54D%d*\n", current_aperture->D_code ); } }