void focus() { std::cout << "Focusing\n"; //first, focus to farthest possible set_config_value_string(camera, "output", "PC", context); for (int i=0; i < MAX_FOCUS_STEPS; i++) set_config_value_string(camera, "manualfocusdrive", "Far 3", context); int last_quality = -1; int quality = -1; char c='A'; while(1) { capture_to_file(FOCUS_FILE+c, FOCUS_EXPTIME, FOCUS_ISO); quality = focus_quality(FOCUS_FILE +c+ "G.fits"); std::cout << quality << std::endl; if (quality < 0.95*last_quality) break; set_config_value_string(camera, "manualfocusdrive", "Near 2", context); last_quality = quality; c++; } //we actually moved past focus by one step, so go back set_config_value_string(camera, "manualfocusdrive", "Far 1", context); capture_to_file("final_focus", FOCUS_EXPTIME, FOCUS_ISO); std::cout << focus_quality("final_focusG.fits") << std::endl; set_config_value_string(camera, "output", "TFT", context); std::cout << "Focused!\n"; return; }
void test_focus(bool near) { set_config_value_string(camera, "output", "PC", context); int quality = -1; if (near) set_config_value_string(camera, "manualfocusdrive", "Near 1", context); else set_config_value_string(camera, "manualfocusdrive", "Far 1", context); capture_to_file(FOCUS_FILE, FOCUS_EXPTIME, FOCUS_ISO); quality = focus_quality(FOCUS_FILE + "G.fits"); std::cout << quality << std::endl; set_config_value_string(camera, "output", "TFT", context); return; }
int capture_to_file(std::string file_prefix, float exposure, std::string iso="1600", std::string aperture="0", bool gen_fits=true) { int aborted = 0; int fd, retval; CameraFile *canonfile; CameraFilePath camera_file_path; set_config_value_string(camera, "iso", iso.c_str(), context); if (aperture=="0") set_config_value_index(camera, "aperture", 0, context); else set_config_value_string(camera, "aperture", aperture.c_str(), context); printf("Capturing.\n"); //press shutter, wait for "exposure" seconds, release shutter CameraEventType eventtype; void* eventdata; set_config_value_string(camera, "eosremoterelease", "Press Full", context); usleep(exposure*1e6); if (errno == EINTR) aborted = 1; set_config_value_string(camera, "eosremoterelease", "Release Full", context); std::cout << "Waiting for file...\n"; eventtype = GP_EVENT_UNKNOWN; while (eventtype != GP_EVENT_FILE_ADDED) { gp_camera_wait_for_event(camera, TIMEOUT, &eventtype, &eventdata, context); } camera_file_path = *((CameraFilePath*) eventdata); printf("Pathname on the camera: %s/%s\n", camera_file_path.folder, camera_file_path.name); fd = open((file_prefix+".cr2").c_str(), O_CREAT | O_WRONLY, 0644); retval = gp_file_new_from_fd(&canonfile, fd); if (retval != GP_OK) return retval; retval = gp_camera_file_get(camera, camera_file_path.folder, camera_file_path.name, GP_FILE_TYPE_NORMAL, canonfile, context); if (retval != GP_OK) return retval; retval = gp_camera_file_delete(camera, camera_file_path.folder, camera_file_path.name, context); if (retval != GP_OK) return retval; gp_file_free(canonfile); if (gen_fits) produce_fits(file_prefix, aborted); return GP_OK; }
int main(int argc, char **argv) { Camera *camera; int ret; char *owner; GPContext *context; context = sample_create_context (); /* see context.c */ gp_log_add_func(GP_LOG_ERROR, errordumper, NULL); gp_camera_new (&camera); /* This call will autodetect cameras, take the * first one from the list and use it. It will ignore * any others... See the *multi* examples on how to * detect and use more than the first one. */ ret = gp_camera_init (camera, context); if (ret < GP_OK) { printf("No camera auto detected.\n"); gp_camera_free (camera); return 0; } ret = get_config_value_string (camera, "ownername", &owner, context); if (ret < GP_OK) { printf ("Could not query owner.\n"); goto out; } printf("Current owner: %s\n", owner); if (argc > 1) { ret = set_config_value_string (camera, "ownername", argv[1], context); if (ret < GP_OK) { fprintf (stderr, "Failed to set camera owner to %s; %d\n", argv[1], ret); } else printf("New owner: %s\n", argv[1]); } out: gp_camera_exit (camera, context); gp_camera_free (camera); return 0; }
static void isochange(Camera *canon, GPContext *canoncontext, int isoval) { switch (isoval) { case '1': { int retval; retval = set_config_value_string(canon, "iso", "a", canoncontext); printf(" Retval: %d\n", retval); break; } case '2': { int retval; retval = set_config_value_string(canon, "iso", "100", canoncontext); printf(" Retval: %d\n", retval); break; } case '3': { int retval; retval = set_config_value_string(canon, "iso", "125", canoncontext); printf(" Retval: %d\n", retval); break; } case '4': { int retval; retval = set_config_value_string(canon, "iso", "160", canoncontext); printf(" Retval: %d\n", retval); break; } case '5': { int retval; retval = set_config_value_string(canon, "iso", "200", canoncontext); printf(" Retval: %d\n", retval); break; } case '6': { int retval; retval = set_config_value_string(canon, "iso", "250", canoncontext); printf(" Retval: %d\n", retval); break; } case '7': { int retval; retval = set_config_value_string(canon, "iso", "320", canoncontext); printf(" Retval: %d\n", retval); break; } case '8': { int retval; retval = set_config_value_string(canon, "iso", "400", canoncontext); printf(" Retval: %d\n", retval); break; } case '9': { int retval; retval = set_config_value_string(canon, "iso", "500", canoncontext); printf(" Retval: %d\n", retval); break; } case 'q': { int retval; retval = set_config_value_string(canon, "iso", "640", canoncontext); printf(" Retval: %d\n", retval); break; } case 'w': { int retval; retval = set_config_value_string(canon, "iso", "800", canoncontext); printf(" Retval: %d\n", retval); break; } case 'e': { int retval; retval = set_config_value_string(canon, "iso", "1000", canoncontext); printf(" Retval: %d\n", retval); break; } case 'r': { int retval; retval = set_config_value_string(canon, "iso", "1250", canoncontext); printf(" Retval: %d\n", retval); break; } case 't': { int retval; retval = set_config_value_string(canon, "iso", "1600", canoncontext); printf(" Retval: %d\n", retval); break; } case 'y': { int retval; retval = set_config_value_string(canon, "iso", "2000", canoncontext); printf(" Retval: %d\n", retval); break; } case 'u': { int retval; retval = set_config_value_string(canon, "iso", "2500", canoncontext); printf(" Retval: %d\n", retval); break; } case 'i': { int retval; retval = set_config_value_string(canon, "iso", "3200", canoncontext); printf(" Retval: %d\n", retval); break; } case 'o': { int retval; retval = set_config_value_string(canon, "iso", "4000", canoncontext); printf(" Retval: %d\n", retval); break; } case 'p': { int retval; retval = set_config_value_string(canon, "iso", "5000", canoncontext); printf(" Retval: %d\n", retval); break; } case '0': { int retval; retval = set_config_value_string(canon, "iso", "6400", canoncontext); printf(" Retval: %d\n", retval); break; } } }
static void aperturechange(Camera *canon, GPContext *canoncontext, int ap) { switch (ap) { case '1': { int retval; retval = set_config_value_string(canon, "aperture", "2.8", canoncontext); printf(" Retval: %d\n", retval); break; } case '2': { int retval; retval = set_config_value_string(canon, "aperture", "3.2", canoncontext); printf(" Retval: %d\n", retval); break; } case '3': { int retval; retval = set_config_value_string(canon, "aperture", "3.5", canoncontext); printf(" Retval: %d\n", retval); break; } case '4': { int retval; retval = set_config_value_string(canon, "aperture", "4", canoncontext); printf(" Retval: %d\n", retval); break; } case '5': { int retval; retval = set_config_value_string(canon, "aperture", "4.5", canoncontext); printf(" Retval: %d\n", retval); break; } case '6': { int retval; retval = set_config_value_string(canon, "aperture", "5", canoncontext); printf(" Retval: %d\n", retval); break; } case '7': { int retval; retval = set_config_value_string(canon, "aperture", "5.6", canoncontext); printf(" Retval: %d\n", retval); break; } case '8': { int retval; retval = set_config_value_string(canon, "aperture", "6.3", canoncontext); printf(" Retval: %d\n", retval); break; } case '9': { int retval; retval = set_config_value_string(canon, "aperture", "7.1", canoncontext); printf(" Retval: %d\n", retval); break; } case 'q': { int retval; retval = set_config_value_string(canon, "aperture", "8", canoncontext); printf(" Retval: %d\n", retval); break; } case 'w': { int retval; retval = set_config_value_string(canon, "aperture", "9", canoncontext); printf(" Retval: %d\n", retval); break; } case 'e': { int retval; retval = set_config_value_string(canon, "aperture", "10", canoncontext); printf(" Retval: %d\n", retval); break; } case 'r': { int retval; retval = set_config_value_string(canon, "aperture", "11", canoncontext); printf(" Retval: %d\n", retval); break; } case 't': { int retval; retval = set_config_value_string(canon, "aperture", "13", canoncontext); printf(" Retval: %d\n", retval); break; } case 'y': { int retval; retval = set_config_value_string(canon, "aperture", "14", canoncontext); printf(" Retval: %d\n", retval); break; } case 'u': { int retval; retval = set_config_value_string(canon, "aperture", "16", canoncontext); printf(" Retval: %d\n", retval); break; } case 'i': { int retval; retval = set_config_value_string(canon, "aperture", "18", canoncontext); printf(" Retval: %d\n", retval); break; } case 'o': { int retval; retval = set_config_value_string(canon, "aperture", "20", canoncontext); printf(" Retval: %d\n", retval); break; } case 'p': { int retval; retval = set_config_value_string(canon, "aperture", "22", canoncontext); printf(" Retval: %d\n", retval); break; } } }
static void shutterchange(Camera *canon, GPContext *canoncontext, int ss) { switch (ss) { case '1': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "1/250", canoncontext); //retval=gp_camera_set_config(canon, , canoncontext); printf(" Retval: %d\n", retval); break; } case '2': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "1/200", canoncontext); printf(" Retval: %d\n", retval); break; } case '3': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "1/160", canoncontext); printf(" Retval: %d\n", retval); break; } case '4': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "1/125", canoncontext); printf(" Retval: %d\n", retval); break; } case '5': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "1/100", canoncontext); printf(" Retval: %d\n", retval); break; } case '6': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "1/80", canoncontext); printf(" Retval: %d\n", retval); break; } case '7': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "1/60", canoncontext); printf(" Retval: %d\n", retval); break; } case '8': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "1/40", canoncontext); printf(" Retval: %d\n", retval); break; } case '9': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "1/20", canoncontext); printf(" Retval: %d\n", retval); break; } case 'q': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "1/5", canoncontext); printf(" Retval: %d\n", retval); break; } case 'w': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "0.5", canoncontext); printf(" Retval: %d\n", retval); break; } case 'e': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "1", canoncontext); printf(" Retval: %d\n", retval); break; } case 'r': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "2", canoncontext); printf(" Retval: %d\n", retval); break; } case 't': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "4", canoncontext); printf(" Retval: %d\n", retval); break; } case 'y': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "6", canoncontext); printf(" Retval: %d\n", retval); break; } case 'u': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "8", canoncontext); printf(" Retval: %d\n", retval); break; } case 'i': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "10", canoncontext); printf(" Retval: %d\n", retval); break; } case 'o': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "15", canoncontext); printf(" Retval: %d\n", retval); break; } case 'p': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "20", canoncontext); printf(" Retval: %d\n", retval); break; } case '0': { int retval; printf("Shutter Speed.\n"); retval = set_config_value_string(canon, "shutterspeed", "30", canoncontext); printf(" Retval: %d\n", retval); break; } } }
int main(int argc, char **argv) { Camera *canon; int i, retval; GPContext *canoncontext = sample_create_context(); gp_log_add_func(GP_LOG_ERROR, errordumper, 0); gp_camera_new(&canon); /* When I set GP_LOG_DEBUG instead of GP_LOG_ERROR above, I noticed that the * init function seems to traverse the entire filesystem on the camera. This * is partly why it takes so long. * (Marcus: the ptp2 driver does this by default currently.) */ printf("Camera init. Takes about 10 seconds.\n"); retval = gp_camera_init(canon, canoncontext); if (retval != GP_OK) { printf(" Retval: %d\n", retval); exit (1); } canon_enable_capture(canon, TRUE, canoncontext); retval = camera_eosviewfinder(canon,canoncontext,1); if (retval != GP_OK) { fprintf(stderr,"camera_eosviewfinder(1): %d\n", retval); exit(1); } /*set_capturetarget(canon, canoncontext);*/ printf("Taking 100 previews and saving them to snapshot-XXX.jpg ...\n"); for (i=0;i<100;i++) { CameraFile *file; char output_file[32]; fprintf(stderr,"preview %d\n", i); retval = gp_file_new(&file); if (retval != GP_OK) { fprintf(stderr,"gp_file_new: %d\n", retval); exit(1); } /* autofocus every 10 shots */ if (i%10 == 9) { camera_auto_focus (canon, canoncontext, 1); /* FIXME: wait a bit and/or poll events ? */ camera_auto_focus (canon, canoncontext, 0); } else { camera_manual_focus (canon, (i/10-5)/2, canoncontext); } #if 0 /* testcase for EOS zooming */ { char buf[20]; if (i<10) set_config_value_string (canon, "eoszoom", "5", canoncontext); sprintf(buf,"%d,%d",(i&0x1f)*64,(i>>5)*64); fprintf(stderr, "%d - %s\n", i, buf); set_config_value_string (canon, "eoszoomposition", buf, canoncontext); } #endif retval = gp_camera_capture_preview(canon, file, canoncontext); if (retval != GP_OK) { fprintf(stderr,"gp_camera_capture_preview(%d): %d\n", i, retval); exit(1); } sprintf(output_file, "snapshot-%03d.jpg", i); retval = gp_file_save(file, output_file); if (retval != GP_OK) { fprintf(stderr,"gp_camera_capture_preview(%d): %d\n", i, retval); exit(1); } gp_file_unref(file); /* sprintf(output_file, "image-%03d.jpg", i); capture_to_file(canon, canoncontext, output_file); */ } retval = camera_eosviewfinder(canon,canoncontext,0); if (retval != GP_OK) { fprintf(stderr,"camera_eosviewfinder(0): %d\n", retval); exit(1); } sleep(10); gp_camera_exit(canon, canoncontext); return 0; }