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:
Lutz Mueller
2001-01-16 12:01:51 +00:00
parent 35b4b22b12
commit ea00e0efca
5 changed files with 45 additions and 56 deletions

View File

@@ -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);

View File

@@ -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);

View File

@@ -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));
}

View File

@@ -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");

View File

@@ -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);