diff --git a/frontends/command-line/main.c b/frontends/command-line/main.c index ef0a07112..b2f2e6efc 100644 --- a/frontends/command-line/main.c +++ b/frontends/command-line/main.c @@ -780,11 +780,12 @@ int set_globals () { return (GP_ERROR); } - if (gp_camera_new_by_name(&glob_camera, glob_model) != GP_OK) { - cli_error_print("Can not create camera data \"%s\"",glob_model); + if (gp_camera_new(&glob_camera) != GP_OK) { + cli_error_print("Can not create camera data"); return (GP_ERROR); } + strcpy (glob_camera->model, glob_model); strcpy (glob_camera->port->path, glob_port); glob_camera->port->speed = glob_speed; @@ -866,6 +867,8 @@ void signal_exit (int signo) { int main (int argc, char **argv) { + int result; + /* Initialize the globals */ init_globals(); @@ -916,7 +919,8 @@ e.g. SET IOLIBS=C:\\GPHOTO2\\IOLIB\n"); gp_init(glob_debug? GP_DEBUG_HIGH: GP_DEBUG_NONE); gp_frontend_register(gp_interface_status, gp_interface_progress, gp_interface_message, gp_interface_confirm, NULL); - if (execute_options(argc, argv) != GP_OK) { + if ((result = execute_options(argc, argv)) != GP_OK) { + printf ("gPhoto2 reported the error '%s'\n", gp_result_as_string (result)); // if (!glob_quiet) // usage(); exit(EXIT_FAILURE); diff --git a/include/gphoto2-camera.h b/include/gphoto2-camera.h index 718d453e4..fd185de67 100644 --- a/include/gphoto2-camera.h +++ b/include/gphoto2-camera.h @@ -11,17 +11,16 @@ int gp_camera_name (int camera_number, char *camera_name); int gp_camera_abilities (int camera_number, CameraAbilities *abilities); int gp_camera_abilities_by_name (char *camera_name, CameraAbilities *abilities); -int gp_camera_new (Camera **camera, int camera_number); -int gp_camera_new_by_name (Camera **camera, char *camera_name); +int gp_camera_new (Camera **camera); -int gp_camera_ref (Camera *camera); -int gp_camera_unref (Camera *camera); +int gp_camera_ref (Camera *camera); +int gp_camera_unref (Camera *camera); -int gp_camera_free (Camera *camera); +int gp_camera_free (Camera *camera); -int gp_camera_init (Camera *camera); +int gp_camera_init (Camera *camera); -int gp_camera_session (Camera *camera); +int gp_camera_session (Camera *camera); int gp_camera_folder_list (Camera *camera, CameraList *list, char *folder); int gp_camera_file_list (Camera *camera, CameraList *list, char *folder); diff --git a/libgphoto2/camera.c b/libgphoto2/camera.c index 418978700..c7567c609 100644 --- a/libgphoto2/camera.c +++ b/libgphoto2/camera.c @@ -68,27 +68,20 @@ int gp_camera_abilities_by_name (char *camera_name, CameraAbilities *abilities) } -int gp_camera_new (Camera **camera, int camera_number) +int gp_camera_new (Camera **camera) { - int result; - if (camera == NULL) return (GP_ERROR_BAD_PARAMETERS); - if (camera_number >= glob_abilities_list->count) { - gp_debug_printf(GP_DEBUG_LOW, "core", "camera_number too big"); - return (GP_ERROR_MODEL_NOT_FOUND); - } - *camera = (Camera*)malloc(sizeof(Camera)); if (!*camera) return (GP_ERROR_NO_MEMORY); /* Initialize the members */ - strcpy((*camera)->model, glob_abilities_list->abilities[camera_number]->model); (*camera)->port = (CameraPortInfo*)malloc(sizeof(CameraPortInfo)); if (!(*camera)->port) return (GP_ERROR_NO_MEMORY); (*camera)->port->type = GP_PORT_NONE; + strcpy ((*camera)->port->path, ""); (*camera)->abilities = (CameraAbilities*)malloc(sizeof(CameraAbilities)); (*camera)->functions = (CameraFunctions*)malloc(sizeof(CameraFunctions)); (*camera)->library_handle = NULL; @@ -122,39 +115,9 @@ int gp_camera_new (Camera **camera, int camera_number) (*camera)->functions->result_as_string = NULL; (*camera)->functions->config = NULL; - /* Fill the abilities. */ - (*camera)->abilities->file_delete = glob_abilities_list->abilities[camera_number]->file_delete; - (*camera)->abilities->file_preview = glob_abilities_list->abilities[camera_number]->file_preview; - (*camera)->abilities->file_put = glob_abilities_list->abilities[camera_number]->file_put; - (*camera)->abilities->capture = glob_abilities_list->abilities[camera_number]->capture; - (*camera)->abilities->config = glob_abilities_list->abilities[camera_number]->config; - - if ((result = load_library(*camera, glob_abilities_list->abilities[camera_number]->model)) != GP_OK) { - gp_camera_free(*camera); - return (result); - } - - /* Initialize the camera library */ - gp_debug_printf(GP_DEBUG_LOW, "core", "Initializing \"%s\" (%s)...", - glob_abilities_list->abilities[camera_number]->model, - glob_abilities_list->abilities[camera_number]->library); - return(GP_OK); } -int gp_camera_new_by_name (Camera **camera, char *camera_name) -{ - int x=0; - - while (x < glob_abilities_list->count) { - if (strcmp(glob_abilities_list->abilities[x]->model, camera_name)==0) - return (gp_camera_new(camera, x)); - x++; - } - - return (GP_ERROR_MODEL_NOT_FOUND); -} - int gp_camera_free(Camera *camera) { if (camera == NULL) @@ -207,17 +170,41 @@ int gp_camera_session (Camera *camera) int gp_camera_init (Camera *camera) { int x; + int result; + int camera_number; CameraPortInfo info; if (camera == NULL) return (GP_ERROR_BAD_PARAMETERS); - if (camera->functions->init == NULL) { - return(GP_ERROR_NOT_SUPPORTED); + /* If the model hasn't been indicated, try to figure it out through probing. */ + if (strcmp (camera->model, "") == 0) { + //FIXME: Insert auto-probe here! + printf ("*** Auto-probing not implemented! Please specify a model! ***"); + return (GP_ERROR); } + /* Fill in camera abilities. */ + gp_debug_printf (GP_DEBUG_LOW, "core", "Looking up abilities for model %s...", camera->model); + for (camera_number = 0; camera_number < glob_abilities_list->count; camera_number++) { + if (strcmp (glob_abilities_list->abilities[camera_number]->model, camera->model) == 0) + break; + } + if (camera_number == glob_abilities_list->count) + return GP_ERROR_MODEL_NOT_FOUND; + camera->abilities->file_delete = glob_abilities_list->abilities[camera_number]->file_delete; + camera->abilities->file_preview = glob_abilities_list->abilities[camera_number]->file_preview; + camera->abilities->file_put = glob_abilities_list->abilities[camera_number]->file_put; + camera->abilities->capture = glob_abilities_list->abilities[camera_number]->capture; + camera->abilities->config = glob_abilities_list->abilities[camera_number]->config; + + /* Load the library. */ + gp_debug_printf(GP_DEBUG_LOW, "core", "Loading library %s...", glob_abilities_list->abilities[camera_number]->library); + if ((result = load_library(camera)) != GP_OK) + return (result); + /* Set the port type from the path in case the frontend didn't. */ - if (camera->port->type == GP_PORT_NONE) { + if (camera->port->type == GP_PORT_NONE && (strlen (camera->port->path) > 0)) { for (x=0; xport->path)==0) @@ -225,7 +212,6 @@ int gp_camera_init (Camera *camera) } } - return (camera->functions->init (camera)); } diff --git a/libgphoto2/library.c b/libgphoto2/library.c index 1f7adfedc..fed197372 100644 --- a/libgphoto2/library.c +++ b/libgphoto2/library.c @@ -24,13 +24,13 @@ int is_library(char *library_filename) return (ret); } -int load_library(Camera *camera, char *camera_name) +int load_library(Camera *camera) { void *lh; int x; for (x=0; xcount; x++) { - if (strcmp(glob_abilities_list->abilities[x]->model, camera_name)==0) { + if (strcmp(glob_abilities_list->abilities[x]->model, camera->model)==0) { if ((lh = GPIO_DLOPEN(glob_abilities_list->abilities[x]->library))==NULL) { if (glob_debug) perror("core:\tload_library"); diff --git a/libgphoto2/library.h b/libgphoto2/library.h index e650ee7df..b7a46cd73 100644 --- a/libgphoto2/library.h +++ b/libgphoto2/library.h @@ -1,4 +1,4 @@ int load_cameras(); int is_library (char *library_filename); -int load_library (Camera *camera, char *camera_name); +int load_library (Camera *camera); int close_library (Camera *camera);