All pastes #956652 Raw Edit

alesan

public c v1 · immutable
#956652 ·published 2008-03-25 13:51 UTC
rendered paste body
#include <stdio.h>#include <stdlib.h>#include <gphoto2/gphoto2-camera.h>int main(){	GPContext* context;	CameraAbilitiesList* al;	GPPortInfoList* il;	CameraList* list;	const char* model;	const char* port;	int i, c;	Camera** cameras;		// 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);	cameras = malloc(sizeof(Camera*)*(c-1));	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	c--;	for(i=0; i<c; i++)	{		gp_camera_init(cameras[i], context);		printf("Initializing communication with camera #%d\n", i);	}		// We now ask some configuration data	for(i=0; i<c; i++)	{		CameraWidget* widget_root;		CameraWidget* widget_main;		CameraWidget* widget_settings;		CameraWidget* widget_owner;		char* value;		int res;				res = gp_camera_get_config(cameras[i], &widget_root, context);		printf("Code: %d - %s\n", res, gp_result_as_string(res));		if(res<0) continue;		res = gp_widget_get_child_by_name(widget_root, "main", &widget_main);		printf("Code: %d - %s\n", res, gp_result_as_string(res));		if(res<0) continue;		res = gp_widget_get_child_by_name(widget_main, "settings", &widget_settings);		printf("Code: %d - %s\n", res, gp_result_as_string(res));		if(res<0) continue;		res = gp_widget_get_child_by_name(widget_settings, "firmwareversion", &widget_owner);		printf("Code: %d - %s\n", res, gp_result_as_string(res));		if(res<0) continue;		res = gp_widget_get_value(widget_owner, &value);		printf("Code: %d - %s\n", res, gp_result_as_string(res));		if(res<0) continue;		printf("Camera #%d - owner='%s'\n", i, value);		gp_widget_unref(widget_owner);		/*		gp_widget_unref(widget_settings);		gp_widget_unref(widget_main);		gp_widget_unref(widget_root);		*/	}		// Cleanup	for(i=0; i<c; i++)	{		gp_camera_exit(cameras[i], context);		gp_camera_unref(cameras[i]);	}	gp_context_unref(context);	return 0;}