Move loading of library to gp_camera_init. This is in order to make auto-detection possible.
git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@1514 67ed7778-7388-44ab-90cf-0a291f65f57c
This commit is contained in:
@@ -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);
|
||||
|
||||
@@ -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);
|
||||
|
||||
@@ -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; x<gp_port_count(); x++) {
|
||||
gp_port_info(x, &info);
|
||||
if (strcmp(info.path, camera->port->path)==0)
|
||||
@@ -225,7 +212,6 @@ int gp_camera_init (Camera *camera)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
return (camera->functions->init (camera));
|
||||
}
|
||||
|
||||
|
||||
@@ -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; x<glob_abilities_list->count; 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");
|
||||
|
||||
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user