Example #1
0
static int 
camera_cam_desc_get_value (ValueNameType *val_name_p, CameraWidgetType widge, 
			   uint32_t reg_len, void *buff, int mask, 
			   CameraWidget *child)
{
	if ((widge == GP_WIDGET_RADIO) || (widge == GP_WIDGET_MENU)) {
		gp_widget_add_choice (child, _(val_name_p->name));
		GP_DEBUG ("get value %15s:\t%lld (0x%04llx)", 
			  val_name_p->name, (long long)val_name_p->u.value,
			  (long long unsigned) val_name_p->u.value);
		/* XXX where is endian handled? */
		if ((mask & *(int*) buff) == val_name_p->u.value) {
			gp_widget_set_value (child, _(val_name_p->name));
		}
	} else if (widge == GP_WIDGET_DATE) {
		GP_DEBUG ("get value date/time %s", ctime((time_t *) buff));
		gp_widget_set_value (child, (int*) buff);
	} else if (widge == GP_WIDGET_RANGE) {
		float float_val, increment;

		increment = val_name_p->u.range[2];
		if (increment == 0.0) {
			/* 
			 * Use a default value.
			 */
			increment = 1.0;
		}
		GP_DEBUG ("get value range:\t%08g:%08g increment %g (via %g)", 
		       val_name_p->u.range[0], val_name_p->u.range[1],
		       increment, val_name_p->u.range[2]);
		gp_widget_set_range (child, val_name_p->u.range[0], 
				     val_name_p->u.range[1], increment);
		/*
		 * Kluge: store the value in buff as a 4 byte int, even
		 * though we might have read 8 bytes or more.
		 */
		float_val = (*(int*) buff) * increment;
		gp_widget_set_value (child, &float_val);
	} else if (widge == GP_WIDGET_BUTTON) {
		GP_DEBUG ("get button");
		gp_widget_set_value (child, val_name_p->u.callback);
	} else {
		GP_DEBUG ("get value bad widget type %d", widge);
		return (GP_ERROR);
	}

	return (GP_OK);
}
Example #2
0
/*
 * List all informations about the camera
 */
static int
camera_get_config (Camera* camera, CameraWidget** window, GPContext *context)
{
	unsigned char cmd[2], buf[INFO_BUFFER];
	int ret;
        CameraWidget *widget;
        CameraWidget *section;
	time_t timestamp=0;
	float value_float;

	GP_DEBUG ("*** ENTER: camera_get_config ***");

	/* get informations about camera */
	cmd[0] = ESC;
	cmd[1] = GETCAMINFO;
	ret = gp_port_write (camera->port, (char*)cmd, sizeof(cmd));
	if (ret<GP_OK)
		return ret;
	ret = gp_port_read (camera->port, (char*)buf, INFO_BUFFER);
	if (ret<GP_OK)
		return ret;

	/* Informations manipulation */
	timestamp = (buf[TIMESTAMP_PTR] << 24) + (buf[TIMESTAMP_PTR+1] << 16)
		+ (buf[TIMESTAMP_PTR+2] << 8) + buf[TIMESTAMP_PTR+3];
	/*
	 * This timestamp start the 1 January 1980 at 00:00 
	 * but UNIX timestamp start the 1 January 1970 at 00:00
	 * so we calculate the UNIX timestamp with the camera's one
	 */
	timestamp += (8*365 + 2*366)*24*3600-3600;

	/* Window creation */
	gp_widget_new (GP_WIDGET_WINDOW, _("Konica Configuration"), window);

        /************************/
        /* Persistent Settings  */
        /************************/
        gp_widget_new (GP_WIDGET_SECTION, _("Persistent Settings"), &section);
        gp_widget_append (*window, section);

        /* Date */
        gp_widget_new (GP_WIDGET_DATE, _("Date and Time"), &widget);
        gp_widget_append (section, widget);
        gp_widget_set_value (widget, &timestamp);

        /* Auto Off Time */
        gp_widget_new (GP_WIDGET_RANGE, _("Auto Off Time"), &widget);
        gp_widget_append (section, widget);
        gp_widget_set_range (widget, 1, 255, 1);
        value_float = ((buf[AUTO_OFF_PTR] << 8) + buf[AUTO_OFF_PTR+1]) / 60;
        gp_widget_set_value (widget, &value_float);


        /* Resolution */
        gp_widget_new (GP_WIDGET_RADIO, _("Resolution"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("Low"));
        gp_widget_add_choice (widget, _("Medium"));
        gp_widget_add_choice (widget, _("High"));
        switch (buf[RESOLUTION_PTR]) {
	        case 1:
        	        gp_widget_set_value (widget, _("High"));
                	break;
	        case 2:
        	        gp_widget_set_value (widget, _("Low"));
	               	break;
		case 0:
        	        gp_widget_set_value (widget, _("Medium"));
                	break;
        }

        /* LCD */
        gp_widget_new (GP_WIDGET_RADIO, _("LCD"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("On"));
        gp_widget_add_choice (widget, _("Off"));
        switch (buf[LCD_STATE_PTR]) {
	        case 0:
        	        gp_widget_set_value (widget, _("On"));
                	break;
	        case 1:
        	        gp_widget_set_value (widget, _("Off"));
                	break;
        }

        /* Icons */
        gp_widget_new (GP_WIDGET_RADIO, _("Icons"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("On"));
        gp_widget_add_choice (widget, _("Off"));
        switch (buf[ICON_STATE_PTR]) {
	        case 0:
        	        gp_widget_set_value (widget, _("On"));
                	break;
	        case 1:
        	        gp_widget_set_value (widget, _("Off"));
                	break;
        }

        /****************/
        /* Localization */
        /****************/
        gp_widget_new (GP_WIDGET_SECTION, _("Localization"), &section);
        gp_widget_append (*window, section);

        /* Date format */
        gp_widget_new (GP_WIDGET_MENU, _("Date Format"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("Month/Day/Year"));
        gp_widget_add_choice (widget, _("Day/Month/Year"));
        gp_widget_add_choice (widget, _("Year/Month/Day"));
	switch (buf[DATE_FORMAT_PTR]) {
		case 0:
			gp_widget_set_value (widget, _("Month/Day/Year"));
			break;
		case 1:
			gp_widget_set_value (widget, _("Day/Month/Year"));
			break;
		case 2:
			gp_widget_set_value (widget, _("Year/Month/Day"));
			break;
	}

	/********************************/
        /* Session-persistent Settings  */
        /********************************/
        gp_widget_new (GP_WIDGET_SECTION, _("Session-persistent Settings"),
                       &section);
        gp_widget_append (*window, section);

        /* Flash */
        gp_widget_new (GP_WIDGET_RADIO, _("Flash"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("Off"));
        gp_widget_add_choice (widget, _("On"));
        gp_widget_add_choice (widget, _("On, red-eye reduction"));
        gp_widget_add_choice (widget, _("Auto"));
        gp_widget_add_choice (widget, _("Auto, red-eye reduction"));
        switch (buf[FLASH_STATE_PTR]) {
	        case 2:
        	        gp_widget_set_value (widget, _("Off"));
                	break;
	        case 1:
			if (buf[RED_EYE_STATE_PTR] == 1)
	        	        gp_widget_set_value (widget, 
					_("On, red-eye reduction"));
			else
				gp_widget_set_value (widget, _("On"));
                	break;
	        case 0:
			if (buf[RED_EYE_STATE_PTR] == 1)
	        	        gp_widget_set_value (widget, 
					_("Auto, red-eye reduction"));
			else
				gp_widget_set_value (widget, _("Auto"));
                	break;
        }

        /* Exposure */
        gp_widget_new (GP_WIDGET_RANGE, _("Exposure"), &widget);
        gp_widget_append (section, widget);
        gp_widget_set_range (widget, -2, 2, 0.1);
	switch(buf[EXPOSURE_TIME_PTR]) {
		case 0:
			value_float = 0;
			break;
		case 1:
			value_float = 0.3;
			break;
		case 2:
			value_float = 0.5;
			break;
		case 3:
			value_float = 0.8;
			break;
		case 4:
			value_float = 1.0;
			break;
		case 5:
			value_float = 1.3;
			break;
		case 6:
			value_float = 1.5;
			break;
		case 7:
			value_float = 1.8;
			break;
		case 8:
			value_float = 2.0;
			break;
		case 0xF8:
			value_float = -2.0;
			break;
		case 0xF9:
			value_float = -1.8;
			break;
		case 0xFA:
			value_float = -1.5;
			break;
		case 0xFB:
			value_float = -1.3;
			break;
		case 0xFC:
			value_float = -1.0;
			break;
		case 0xFD:
			value_float = -0.8;
			break;
		case 0xFE:
			value_float = -0.5;
			break;
		case 0xFF:
			value_float = -0.3;
			break;
	}
        gp_widget_set_value (widget, &value_float);

       /* Focus */
        gp_widget_new (GP_WIDGET_RADIO, _("Focus"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("2.0 m"));
	gp_widget_add_choice (widget, _("0.5 m"));
	gp_widget_add_choice (widget, _("0.1 m"));
        gp_widget_add_choice (widget, _("Auto"));
        switch (buf[FOCUS_PTR]) {
		case 0:
			gp_widget_set_value (widget, _("Auto"));
			break;
		case 1:
	                gp_widget_set_value (widget, _("2.0 m"));
	                break;
	        case 2:
        	        gp_widget_set_value (widget, _("0.5 m"));
                	break;
	        case 3:
        	        gp_widget_set_value (widget, _("0.1 m"));
                	break;
        }

       /* white balance */
        gp_widget_new (GP_WIDGET_RADIO, _("White balance"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("Office"));
	gp_widget_add_choice (widget, _("Daylight"));
	gp_widget_add_choice (widget, _("Auto"));
        switch (buf[WHITE_BALANCE_PTR]) {
	        case 0:
        	        gp_widget_set_value (widget, _("Auto"));
                	break;
	        case 1:
        	        gp_widget_set_value (widget, _("Daylight"));
                	break;
	        case 2:
        	        gp_widget_set_value (widget, _("Office"));
                	break;
	}

       /* Sharpness */
        gp_widget_new (GP_WIDGET_RADIO, _("Sharpness"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("Sharp"));
	gp_widget_add_choice (widget, _("Soft"));
	gp_widget_add_choice (widget, _("Auto"));
        switch (buf[SHARPNESS_PTR]) {
	        case 0:
        	        gp_widget_set_value (widget, _("Auto"));
                	break;
	        case 1:
        	        gp_widget_set_value (widget, _("Sharp"));
                	break;
	        case 2:
        	        gp_widget_set_value (widget, _("Soft"));
                	break;
	}

       /* Color */
        gp_widget_new (GP_WIDGET_RADIO, _("Color"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("Light"));
	gp_widget_add_choice (widget, _("Deep"));
	gp_widget_add_choice (widget, _("Black and White"));
	gp_widget_add_choice (widget, _("Sepia"));
	gp_widget_add_choice (widget, _("Auto"));
        switch (buf[COLOR_PTR]) {
	        case 0:
        	        gp_widget_set_value (widget, _("Auto"));
                	break;
	        case 1:
        	        gp_widget_set_value (widget, _("Light"));
                	break;
	        case 2:
        	        gp_widget_set_value (widget, _("Deep"));
                	break;
	        case 3:
        	        gp_widget_set_value (widget, _("Black and White"));
                	break;
	        case 4:
        	        gp_widget_set_value (widget, _("Sepia"));
                	break;
	}

       /* Macro */
        gp_widget_new (GP_WIDGET_RADIO, _("Macro"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("On"));
	gp_widget_add_choice (widget, _("Off"));
        switch (buf[MACRO_PTR]) {
	        case 0:
        	        gp_widget_set_value (widget, _("Off"));
                	break;
	        case 1:
        	        gp_widget_set_value (widget, _("On"));
                	break;
	}

       /* Zoom */
        gp_widget_new (GP_WIDGET_RADIO, _("Zoom"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("On"));
	gp_widget_add_choice (widget, _("Off"));
        switch (buf[ZOOM_PTR]) {
	        case 0:
        	        gp_widget_set_value (widget, _("Off"));
                	break;
	        case 1:
        	        gp_widget_set_value (widget, _("On"));
                	break;
	}

       /* Capture */
        gp_widget_new (GP_WIDGET_RADIO, _("Capture"), &widget);
        gp_widget_append (section, widget);
	gp_widget_add_choice (widget, _("Single"));
	gp_widget_add_choice (widget, _("Sequence 9"));
        switch (buf[CAPTURE_TYPE_PTR]) {
	        case 0:
        	        gp_widget_set_value (widget, _("Single"));
                	break;
	        case 1:
        	        gp_widget_set_value (widget, _("Sequence 9"));
                	break;
	}

       /* Date display */
        gp_widget_new (GP_WIDGET_RADIO, _("Date display"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("Anywhere"));
	gp_widget_add_choice (widget, _("Play mode"));
	gp_widget_add_choice (widget, _("Record mode"));
	gp_widget_add_choice (widget, _("Everywhere"));
        switch (buf[REC_DATE_DISP_PTR]) {
	        case 0:
			if (buf[PLAY_DATE_DISP_PTR] == 0)
				gp_widget_set_value (widget, _("Play mode"));
			else
        	        	gp_widget_set_value (widget, _("Anywhere"));
                	break;
	        case 1:
			if (buf[PLAY_DATE_DISP_PTR] == 0)
				gp_widget_set_value (widget, _("Everywhere"));
			else
        	        	gp_widget_set_value (widget, _("Record mode"));
                	break;
	}

        /************************/
        /* Volatile Settings    */
        /************************/
        gp_widget_new (GP_WIDGET_SECTION, _("Volatile Settings"), &section);
        gp_widget_append (*window, section);

        /* Self Timer */
        gp_widget_new (GP_WIDGET_RADIO, _("Self Timer"), &widget);
        gp_widget_append (section, widget);
        gp_widget_add_choice (widget, _("Self Timer (next picture only)"));
        gp_widget_add_choice (widget, _("Normal"));
        switch (buf[TIMER_PTR]) {
	        case 1:
        	        gp_widget_set_value (widget, _("Self Timer ("
                	                     "next picture only)"));
	                break;
	        case 0:
        	        gp_widget_set_value (widget, _("Normal"));
                	break;
	        }
	return (GP_OK);
}
Example #3
0
/**
 * Retrieve a single configuration \c widget for the \c camera.
 *
 * @param camera a #Camera
 * @param name the name of a configuration widget
 * @param widget a #CameraWidget
 * @param context a #GPContext
 * @return gphoto2 error code
 *
 * This \c widget will then contain the current and the possible values and the type.
 *
 */
int
gp_camera_get_single_config (Camera *camera, const char *name, CameraWidget **widget, GPContext *context)
{
	CameraWidget		*rootwidget, *child;
	CameraWidgetType	type;
	const char		*label;
	int			ret, ro;

	C_PARAMS (camera);
	CHECK_INIT (camera, context);

	if (camera->functions->get_single_config) {
		CHECK_RESULT_OPEN_CLOSE (camera, camera->functions->get_single_config (
						camera, name, widget, context), context);

		CAMERA_UNUSED (camera, context);
		return GP_OK;
	}

	if (!camera->functions->get_config) {
		gp_context_error (context, _("This camera does not provide any configuration options."));
		CAMERA_UNUSED (camera, context);
		return GP_ERROR_NOT_SUPPORTED;
	}
	/* emulate it ... */
	CHECK_OPEN (camera, context);

	ret = camera->functions->get_config ( camera, &rootwidget, context);
	if (ret != GP_OK) {
		CHECK_CLOSE (camera, context);
		CAMERA_UNUSED (camera, context);
		return ret;
	}
	ret = gp_widget_get_child_by_name (rootwidget, name, &child);
	if (ret != GP_OK) {
		gp_widget_free (rootwidget);
		CHECK_CLOSE (camera, context);
		CAMERA_UNUSED (camera, context);
		return ret;
	}

	/* We need to duplicate the widget, as we will free the widgettree */
	gp_widget_get_type (child, &type);
	gp_widget_get_label (child, &label);
	gp_widget_get_readonly (child, &ro);

	ret = gp_widget_new (type, label, widget);
	if (ret != GP_OK)
		goto out;
	gp_widget_set_name (*widget, name);
	gp_widget_set_readonly (*widget, ro);

	switch (type) {
        case GP_WIDGET_MENU:
        case GP_WIDGET_RADIO: {
		char *value;
		int i, nrofchoices;

		nrofchoices = gp_widget_count_choices (child);
		for (i = 0; i < nrofchoices; i++) {
			const char *choice;

			gp_widget_get_choice (child, i, &choice);
			gp_widget_add_choice (*widget, choice);
		}
		gp_widget_get_value (child, &value);
		gp_widget_set_value (*widget, value);
		break;
	}
        case GP_WIDGET_TEXT: {
		char *value;

		gp_widget_get_value (child, &value);
		gp_widget_set_value (*widget, value);
		break;
	}
        case GP_WIDGET_RANGE: {
		float value, rmin, rmax, rstep;

		gp_widget_get_range (child, &rmin, &rmax, &rstep);
		gp_widget_set_range (*widget, rmin, rmax, rstep);
		gp_widget_get_value (child, &value);
		gp_widget_set_value (*widget, &value);
                break;
	}
        case GP_WIDGET_TOGGLE:
        case GP_WIDGET_DATE: {
		int value;

		gp_widget_get_value (child, &value);
		gp_widget_set_value (*widget, &value);
                break;
	}
        case GP_WIDGET_BUTTON:
        case GP_WIDGET_SECTION:
        case GP_WIDGET_WINDOW:
        default:
                ret = GP_ERROR_BAD_PARAMETERS;
		break;
	}
out:
	gp_widget_free (rootwidget);
	CHECK_CLOSE (camera, context);
	CAMERA_UNUSED (camera, context);
	return ret;
}