rendered paste body# Copyright 2008 Alessio Sangalli# This code is GNU GPL#include <stdio.h>#include <stdlib.h>#include <sys/types.h>#include <sys/stat.h>#include <fcntl.h>#include <gphoto2/gphoto2-camera.h>int d = 0;int main(){ GPContext* context; CameraAbilitiesList* al; GPPortInfoList* il; CameraList* list; const char* model; const char* port; int i, c; int res; Camera** cameras; char** camera_names; // Auto-detection of cameras context = gp_context_new(); gp_abilities_list_new(&al); gp_abilities_list_load(al, context); gp_port_info_list_new(&il); gp_port_info_list_load(il); gp_list_new(&list); gp_abilities_list_detect(al, il, list, context); // Now we have the list of connected cameras; let's prepare the structures c=gp_list_count(list)-1; cameras = malloc(sizeof(Camera*)*c); camera_names = malloc(sizeof(char*)*c); printf("Number of cameras: %d\n", c); // We skip the first "generic" one for(i=1; i<=c; i++) { int m, p; GPPortInfo info; CameraAbilities a; // We get info on the abilities of this camera... gp_list_get_name(list, i, &model); m = gp_abilities_list_lookup_model(al, model); gp_abilities_list_get_abilities(al, m, &a); // We get info about the port... gp_list_get_value(list, i, &port); p = gp_port_info_list_lookup_path(il, port); gp_port_info_list_get_info(il, p, &info); // We allocate and set the camera. printf("Detected camera #%d: name='%s' port='%s'\n", i-1, model, port); gp_camera_new(&cameras[i-1]); gp_camera_set_abilities(cameras[i-1], a); gp_camera_set_port_info(cameras[i-1], info); } // Cleanup gp_list_unref(list); gp_port_info_list_free(il); gp_abilities_list_free(al); // We now initialize the communication with cameras for(i=0; i<c; i++) { gp_camera_init(cameras[i], context); printf("Initializing communication with camera #%d\n", i); } // We now get and set some configuration data for(i=0; i<c; i++) { CameraWidget* widget_root; CameraWidget* widget_main; CameraWidget* widget_settings; CameraWidget* widget_imgsettings; CameraWidget* widget_capturesettings; CameraWidget* widget_value; int value_int; float value_float; // General res = gp_camera_get_config(cameras[i], &widget_root, context); if(res!=GP_OK) {printf("01 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} res = gp_widget_get_child_by_name(widget_root, "main", &widget_main); if(res!=GP_OK) {printf("02 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} res = gp_widget_get_child_by_name(widget_main, "settings", &widget_settings); if(res!=GP_OK) {printf("03 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} // Owner res = gp_widget_get_child_by_name(widget_settings, "owner", &widget_value); if(res!=GP_OK) {printf("04 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} //res = gp_widget_get_value(widget_value, camera_names[i]); if(res!=GP_OK) {printf("05 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} //printf("Camera #%d - value='%s'\n", i, camera_names[i]); // We enable capture res = gp_widget_get_child_by_name(widget_settings, "capture", &widget_value); if(res!=GP_OK) {printf("06 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} value_int = 1; res = gp_widget_set_value(widget_value, &value_int); if(res!=GP_OK) {printf("07 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} // We commit the config res = gp_camera_set_config(cameras[i], widget_root, context); if(res!=GP_OK) {printf("07.5 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} // We look for more settings res = gp_widget_get_child_by_name(widget_main, "imgsettings", &widget_imgsettings); if(res!=GP_OK) {printf("08 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} res = gp_widget_get_child_by_name(widget_main, "capturesettings", &widget_capturesettings); if(res!=GP_OK) {printf("09 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} // And we set image quality, size, zoom. res = gp_widget_get_child_by_name(widget_imgsettings, "imgquality", &widget_value); if(res!=GP_OK) {printf("10 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} value_int = 0; res = gp_widget_set_value(widget_value, &value_int); if(res!=GP_OK) {printf("11 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} res = gp_widget_get_child_by_name(widget_imgsettings, "imgsize", &widget_value); if(res!=GP_OK) {printf("12 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} value_int = 3; res = gp_widget_set_value(widget_value, &value_int); if(res!=GP_OK) {printf("13 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} res = gp_widget_get_child_by_name(widget_capturesettings, "zoom", &widget_value); if(res!=GP_OK) {printf("14 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} value_float = 14.0; res = gp_widget_set_value(widget_value, &value_float); if(res!=GP_OK) {printf("15 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} // We commit the config res = gp_camera_set_config(cameras[i], widget_root, context); if(res!=GP_OK) {printf("16 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} gp_widget_unref(widget_root); } // Shall we finally capture some pics? for(i=0; i<c; i++) { CameraFilePath path; CameraFile* file; int fd; char output_file[1024]; res = gp_camera_capture(cameras[i], GP_CAPTURE_IMAGE, &path, context); if(res!=GP_OK) {printf("17 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} //sprintf(output_file, "capt-%s-%d.jpg", camera_names[i], i); sprintf(output_file, "capt-%d.jpg", i); fd = open(output_file, O_CREAT|O_WRONLY); res = gp_file_new_from_fd(&file, fd); if(res!=GP_OK) {printf("18 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} res = gp_camera_file_get(cameras[i], path.folder, path.name, GP_FILE_TYPE_NORMAL, file, context); if(res!=GP_OK) {printf("19 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} res = gp_file_unref(file); if(res!=GP_OK) {printf("20 - Code: %d - %s\n", res, gp_result_as_string(res)); continue;} close(fd); } // Cleanup for(i=0; i<c; i++) { gp_camera_exit(cameras[i], context); gp_camera_unref(cameras[i]); } gp_context_unref(context); return 0;}