static int camera_capture (Camera *camera, CameraCaptureType type, CameraFilePath *path, GPContext *context) { if (type && type != GP_CAPTURE_IMAGE){ DC210_DEBUG("Unsupported action 0x%.2X\n", type); return (GP_ERROR_NOT_SUPPORTED); }; if (dc210_capture(camera, path, context) == GP_ERROR) return GP_ERROR; return gp_filesystem_append (camera->fs, path->folder, path->name, context); }
int camera_init (Camera *camera, GPContext *context) { DC210_DEBUG("Initialising camera.\n"); /* First, set up all the function pointers */ camera->functions->get_config = camera_get_config; camera->functions->set_config = camera_set_config; camera->functions->capture = camera_capture; camera->functions->capture_preview = camera_capture_preview; camera->functions->summary = camera_summary; camera->functions->manual = camera_manual; camera->functions->about = camera_about; gp_filesystem_set_funcs (camera->fs, &fsfuncs, camera); if (dc210_init_port (camera) == GP_ERROR) return GP_ERROR; if (dc210_open_card (camera) == GP_ERROR) return GP_ERROR; return (GP_OK); }
static int camera_summary (Camera *camera, CameraText *summary, GPContext *context) { static char summary_string[2048] = ""; char buff[1024]; dc210_status status; if (GP_OK == dc210_get_status (camera, &status)) { strcpy(summary_string,"Kodak DC210\n"); snprintf(buff,1024,_("Pictures in camera: %d\n"), status.numPicturesInCamera); strcat(summary_string,buff); snprintf(buff,1024,_("There is space for another\n %d low compressed\n %d medium compressed or\n %d high compressed pictures\n"), status.remainingLow, status.remainingMedium, status.remainingHigh); strcat(summary_string,buff); snprintf(buff,1024,_("Total pictures taken: %d\n"), status.totalPicturesTaken); strcat(summary_string,buff); snprintf(buff,1024,_("Total flashes fired: %d\n"), status.totalFlashesFired); strcat(summary_string,buff); snprintf(buff,1024,_("Firmware: %d.%d\n"),status.firmwareMajor,status.firmwareMinor); strcat(summary_string,buff); switch (status.file_type){ case DC210_FILE_TYPE_JPEG: snprintf(buff, 1024, _("Filetype: JPEG (")); break; case DC210_FILE_TYPE_FPX: snprintf(buff, 1024, _("Filetype: FlashPix (")); break; }; strcat(summary_string, buff); switch (status.compression_type){ case DC210_LOW_COMPRESSION: snprintf(buff, 1024, _("low compression, ")); break; case DC210_MEDIUM_COMPRESSION: snprintf(buff, 1024, _("medium compression, ")); break; case DC210_HIGH_COMPRESSION: snprintf(buff, 1024, _("high compression, ")); break; default: snprintf(buff, 1024, _("unknown compression %d, "), status.compression_type); break; }; strcat(summary_string, buff); switch (status.resolution){ case DC210_FILE_640: snprintf(buff, 1024, "640x480 pixel)\n"); break; case DC210_FILE_1152: snprintf(buff, 1024, "1152x864 pixel)\n"); break; default: snprintf(buff, 1024, _("unknown resolution %d)\n"), status.resolution); break; }; strcat(summary_string, buff); /* battery check still doesn't work */ /* switch (status.battery){ case 0: snprintf(buff,1024,"Battery charge is good\n"); break; case 1: snprintf(buff,1024,"Battery charge is low\n"); break; case 2: snprintf(buff,1024,"Battery is not charged\n"); break; }; strcat(summary_string,buff);*/ if (status.acstatus) snprintf(buff,1024,_("AC adapter is connected.\n")); else snprintf(buff,1024,_("AC adapter is not connected.\n")); strcat(summary_string,buff); /* time string, do not change the % escapes */ strftime(buff,1024,_("Time: %a, %d %b %Y %T\n"), localtime((time_t *)&status.time)); strcat(summary_string,buff); switch (status.zoom){ case DC210_ZOOM_58: snprintf(buff, 1024, _("Zoom: 58 mm\n")); break; case DC210_ZOOM_51: snprintf(buff, 1024, _("Zoom: 51 mm\n")); break; case DC210_ZOOM_41: snprintf(buff, 1024, _("Zoom: 41 mm\n")); break; case DC210_ZOOM_34: snprintf(buff, 1024, _("Zoom: 34 mm\n")); break; case DC210_ZOOM_29: snprintf(buff, 1024, _("Zoom: 29 mm\n")); break; case DC210_ZOOM_MACRO: snprintf(buff, 1024, _("Zoom: macro\n")); break; default: snprintf(buff, 1024, _("Unknown zoom mode %d\n"), status.zoom); break; }; strcat(summary_string,buff); if (status.exp_compensation > -5 && status.exp_compensation < 4) snprintf(buff, 1024, _("Exposure compensation: %s\n"), exp_comp[status.exp_compensation + 4]); else snprintf(buff, 1024, _("Exposure compensation: %d\n"), status.exp_compensation); strcat(summary_string,buff); switch (status.flash){ case DC210_FLASH_AUTO: snprintf(buff, 1024, _("Flash mode: auto, ")); break; case DC210_FLASH_FORCE: snprintf(buff, 1024, _("Flash mode: force, ")); break; case DC210_FLASH_NONE: snprintf(buff, 1024, _("Flash mode: off\n")); break; default: snprintf(buff, 1024, _("Unknown flash mode %d, "), status.flash); break; }; strcat(summary_string,buff); if (status.flash != DC210_FLASH_NONE){ if (status.preflash) /* trans: continuation of "Flash mode:" line */ snprintf(buff,1024,_("red eye flash on.\n")); else /* trans: continuation of "Flash mode:" line */ snprintf(buff,1024,_("red eye flash off.\n")); strcat(summary_string,buff); }; if (status.card_status.open == 0) snprintf(buff, 1024, _("No card in camera.\n")); else snprintf(buff,1024, _("Card name: %s\nFree space on card: %d kB\n"), status.album_name, status.card_status.space); strcat(summary_string,buff); } else{ DC210_DEBUG("Couldn't get summary for camera\n"); }; strcpy(summary->text, summary_string); return (GP_OK); }
static int camera_get_config (Camera *camera, CameraWidget **window, GPContext *context) { CameraWidget *section, *widget; CameraAbilities abilities; GPPortSettings settings; int i; char * wvalue; char stringbuffer[12]; dc210_status status; if (dc210_get_status(camera, &status) == GP_ERROR) return GP_ERROR; gp_widget_new (GP_WIDGET_WINDOW, _("Camera Configuration"), window); gp_widget_new (GP_WIDGET_SECTION, _("File"), §ion); gp_widget_append (*window, section); gp_widget_new (GP_WIDGET_RADIO, _("File type"), &widget); gp_widget_append (section, widget); gp_widget_add_choice (widget, _("JPEG")); gp_widget_add_choice (widget, _("FlashPix")); switch (status.file_type){ case DC210_FILE_TYPE_JPEG: gp_widget_set_value (widget, _("JPEG")); break; case DC210_FILE_TYPE_FPX: gp_widget_set_value (widget, _("FlashPix")); break; }; gp_widget_get_value (widget, &wvalue); gp_widget_new (GP_WIDGET_RADIO, _("File resolution"), &widget); gp_widget_append (section, widget); gp_widget_add_choice (widget, _("640 x 480")); gp_widget_add_choice (widget, _("1152 x 864")); switch (status.resolution){ case DC210_FILE_640: gp_widget_set_value (widget, _("640 x 480")); break; case DC210_FILE_1152: gp_widget_set_value (widget, _("1152 x 864")); break; default: DC210_DEBUG("Undefined value for file resolution.\n"); break; }; gp_widget_get_value (widget, &wvalue); gp_widget_new (GP_WIDGET_MENU, _("File compression"), &widget); gp_widget_append (section, widget); gp_widget_add_choice (widget, _("Low (best quality)")); gp_widget_add_choice (widget, _("Medium (better quality)")); gp_widget_add_choice (widget, _("High (good quality)")); switch (status.compression_type){ case DC210_LOW_COMPRESSION: gp_widget_set_value (widget, _("Low (best quality)")); break; case DC210_MEDIUM_COMPRESSION: gp_widget_set_value (widget, _("Medium (better quality)")); break; case DC210_HIGH_COMPRESSION: gp_widget_set_value (widget, _("High (good quality)")); break; }; gp_widget_get_value (widget, &wvalue); gp_widget_new (GP_WIDGET_SECTION, _("Capture"), §ion); gp_widget_append (*window, section); gp_widget_new (GP_WIDGET_MENU, _("Zoom"), &widget); gp_widget_append (section, widget); gp_widget_add_choice (widget, "58 mm"); /* no need to translate strings with SI units! */ gp_widget_add_choice (widget, "51 mm"); gp_widget_add_choice (widget, "41 mm"); gp_widget_add_choice (widget, "34 mm"); gp_widget_add_choice (widget, "29 mm"); gp_widget_add_choice (widget, _("Macro")); switch (status.zoom){ case DC210_ZOOM_58: gp_widget_set_value (widget, _("58 mm")); break; case DC210_ZOOM_51: gp_widget_set_value (widget, _("51 mm")); break; case DC210_ZOOM_41: gp_widget_set_value (widget, _("41 mm")); break; case DC210_ZOOM_34: gp_widget_set_value (widget, _("34 mm")); break; case DC210_ZOOM_29: gp_widget_set_value (widget, _("29 mm")); break; case DC210_ZOOM_MACRO: gp_widget_set_value (widget, _("Macro")); break; }; gp_widget_get_value (widget, &wvalue); gp_widget_new (GP_WIDGET_MENU, _("Exposure compensation"), &widget); gp_widget_append (section, widget); for (i = 0; i < sizeof(exp_comp)/sizeof(*exp_comp); i++){ gp_widget_add_choice (widget, exp_comp[i]); if (status.exp_compensation + 4 == i) gp_widget_set_value (widget, exp_comp[i]); }; gp_widget_new (GP_WIDGET_RADIO, _("Flash"), &widget); gp_widget_append (section, widget); gp_widget_add_choice (widget, _("Auto")); gp_widget_add_choice (widget, _("Force")); gp_widget_add_choice (widget, _("None")); switch (status.flash){ case DC210_FLASH_AUTO: gp_widget_set_value (widget, _("Auto")); break; case DC210_FLASH_FORCE: gp_widget_set_value (widget, _("Force")); break; case DC210_FLASH_NONE: gp_widget_set_value (widget, _("None")); break; }; gp_widget_get_value (widget, &wvalue); gp_widget_new (GP_WIDGET_RADIO, _("Red eye flash"), &widget); gp_widget_append (section, widget); gp_widget_add_choice (widget, _("On")); gp_widget_add_choice (widget, _("Off")); if (status.preflash) gp_widget_set_value (widget, _("On")); else gp_widget_set_value (widget, _("Off")); gp_widget_get_value (widget, &wvalue); gp_widget_new (GP_WIDGET_SECTION, _("Other"), §ion); gp_widget_append (*window, section); gp_widget_new (GP_WIDGET_BUTTON, "Set time to system time", &widget); gp_widget_append (section, widget); gp_widget_set_value (widget, dc210_system_time_callback); gp_widget_set_info (widget, _("Set clock in camera")); gp_camera_get_abilities(camera, &abilities); gp_port_get_settings (camera->port, &settings); gp_widget_new (GP_WIDGET_MENU, _("Port speed"), &widget); gp_widget_append (section, widget); for (i = 0; i < sizeof(abilities.speed); i++){ if (abilities.speed[i] == 0) break; snprintf(stringbuffer, 12, "%d", abilities.speed[i]); gp_widget_add_choice (widget, stringbuffer); if (settings.serial.speed == abilities.speed[i]) gp_widget_set_value (widget, stringbuffer); }; gp_widget_new (GP_WIDGET_TEXT, _("Album name"), &widget); gp_widget_append (section, widget); gp_widget_set_value (widget, status.album_name); gp_widget_set_info (widget, _("Name to set on card when formatting.")); gp_widget_new (GP_WIDGET_BUTTON, _("Format compact flash"), &widget); gp_widget_append (section, widget); gp_widget_set_value (widget, dc210_format_callback); gp_widget_set_info (widget, _("Format card and set album name.")); #ifdef DEBUG gp_widget_new (GP_WIDGET_SECTION, _("Debug"), §ion); gp_widget_append (*window, section); gp_widget_new (GP_WIDGET_TEXT, "Parameter 1", &widget); gp_widget_append (section, widget); gp_widget_set_value (widget, "0"); gp_widget_new (GP_WIDGET_TEXT, "Parameter 2", &widget); gp_widget_append (section, widget); gp_widget_set_value (widget, "0"); gp_widget_new (GP_WIDGET_TEXT, "Parameter 3", &widget); gp_widget_append (section, widget); gp_widget_set_value (widget, "0"); gp_widget_new (GP_WIDGET_BUTTON, "Execute debug command", &widget); gp_widget_append (section, widget); gp_widget_set_value (widget, dc210_debug_callback); gp_widget_set_info (widget, _("Execute predefined command\nwith parameter values.")); #endif return GP_OK; }