Files
libgphoto2/camlibs/sonydscf55/camera.c
axxel f41df32817 fix white-space and indentation inconsistencies (second round)
This is basically a continuation of the work from #1002 but her for the
camlibs directory. The purpose was to replace spaces as a means for
indentation with tab characters.

Note: there are some files which are still offending the general
rule but are (mostly) consistent within themselves. I let them be for
the moment. Fixing them would basically replace the whole file.

Also: there are still a ton of whitespace related inconsistencies like
"x=10" vs "x = 10" or "func(10)" vs "func (10)".

This is a whitespace only change (if you include newlines as whitespace).
2024-09-15 10:53:41 +02:00

349 lines
7.2 KiB
C

/* Sony DSC-F55 & MSAC-SR1 - gPhoto2 camera library
* Copyright 2001, 2002, 2004 Raymond Penners <raymond@dotsphinx.com>
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Library General Public
* License as published by the Free Software Foundation; either
* version 2 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Library General Public License for more details.
*
* You should have received a copy of the GNU Library General Public
* License along with this library; if not, write to the
* Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
* Boston, MA 02110-1301 USA
*/
#include "config.h"
#include <string.h>
#include <stdlib.h>
#include <gphoto2/gphoto2.h>
#include <sys/types.h>
#include <gphoto2/gphoto2-camera.h>
#include "libgphoto2/i18n.h"
#include "sony.h"
#define GP_MODULE "sonydscf55"
struct ModelInfo {
SonyModel model_id;
const char *model_str;
};
static const struct ModelInfo models[] = {
{ SONY_MODEL_MSAC_SR1, "Sony:MSAC-SR1" },
{ SONY_MODEL_DCR_PC100, "Sony:DCR-PC100" },
{ SONY_MODEL_TRV_20E, "Sony:TRV-20E" },
{ SONY_MODEL_DSC_F55, "Sony:DSC-F55" }
};
int
camera_id(CameraText * id)
{
strcpy(id->text, SONY_CAMERA_ID);
return (GP_OK);
}
int
camera_abilities(CameraAbilitiesList * list)
{
unsigned int i;
CameraAbilities a;
for (i = 0; i < sizeof(models) / sizeof(models[i]); i++) {
memset(&a, 0, sizeof(a));
strcpy(a.model, models[i].model_str);
a.status = GP_DRIVER_STATUS_PRODUCTION;
a.port = GP_PORT_SERIAL;
a.speed[0] = 0;
a.operations = GP_OPERATION_NONE;
a.file_operations = GP_FILE_OPERATION_PREVIEW | GP_FILE_OPERATION_EXIF;
a.folder_operations = GP_FOLDER_OPERATION_NONE;
gp_abilities_list_append(list, a);
}
return (GP_OK);
}
/**
* De-initializes camera
*/
static int
camera_exit(Camera * camera, GPContext *context)
{
int rc;
GP_DEBUG(
"camera_exit()");
if (camera->pl) {
rc = sony_exit (camera);
if (rc < 0)
return (rc);
free (camera->pl);
camera->pl = NULL;
}
return (GP_OK);
}
static int
camera_about(Camera * camera, CameraText * about, GPContext *context)
{
strcpy(about->text,
_("Sony DSC-F55/505 gPhoto library\n"
"Supports Sony MSAC-SR1 and Memory Stick used by DCR-PC100\n"
"Originally written by Mark Davies <mdavies@dial.pipex.com>\n"
"gPhoto2 port by Raymond Penners <raymond@dotsphinx.com>"));
return (GP_OK);
}
static int
file_list_func (CameraFilesystem *fs, const char *folder, CameraList *list,
void *data, GPContext *context)
{
Camera *camera = data;
int mpeg, rc = GP_OK;
GP_DEBUG("camera_folder_list_files()");
for (mpeg = 0; mpeg <= 1 && rc == GP_OK; mpeg++) {
int i, count;
SonyFileType file_type;
file_type = mpeg ? SONY_FILE_MPEG : SONY_FILE_IMAGE;
rc = sony_file_count(camera, file_type, &count);
if (rc != GP_OK) {
break;
}
for (i = 1; i <= count; i++) {
char buf[13];
rc = sony_file_name_get(camera, i, file_type, buf);
if (rc != GP_OK) {
break;
}
gp_list_append(list, buf, NULL);
if (gp_context_cancel(context)
== GP_CONTEXT_FEEDBACK_CANCEL) {
rc = GP_ERROR_CANCEL;
}
}
}
return rc;
}
static int
get_sony_file_id(Camera *camera, const char *folder,
const char *filename, GPContext *context,
int *sony_id, SonyFileType *sony_type)
{
int num = gp_filesystem_number(camera->fs, folder, filename, context);
if (num < 0)
return (num);
num++;
if (sony_is_mpeg_file_name(filename)) {
const char *name_found;
int mpeg_num = 0;
do {
mpeg_num++;
gp_filesystem_name(camera->fs, folder, num-mpeg_num, &name_found, context);
}
while (sony_is_mpeg_file_name(name_found)
&& (mpeg_num<=num));
mpeg_num--;
*sony_type = SONY_FILE_MPEG;
*sony_id = mpeg_num;
}
else {
*sony_type = SONY_FILE_IMAGE;
*sony_id = num;
}
return GP_OK;
}
static int
get_file_func (CameraFilesystem *fs, const char *folder, const char *filename,
CameraFileType type, CameraFile * file, void *data,
GPContext *context)
{
Camera *camera = data;
int num;
SonyFileType file_type;
int rc = GP_ERROR;
GP_DEBUG("camera_file_get(\"%s/%s\")", folder, filename);
rc = get_sony_file_id(camera, folder, filename, context,
&num, &file_type);
if (rc != GP_OK)
return rc;
switch (type) {
case GP_FILE_TYPE_NORMAL:
if (file_type == SONY_FILE_MPEG) {
rc = sony_mpeg_get(camera, num, file, context);
}
else {
rc = sony_image_get(camera, num, file, context);
}
break;
case GP_FILE_TYPE_PREVIEW:
if (file_type == SONY_FILE_MPEG) {
rc = GP_OK;
}
else {
rc = sony_thumbnail_get(camera, num, file, context);
}
break;
case GP_FILE_TYPE_EXIF:
if (file_type == SONY_FILE_MPEG) {
rc = GP_OK;
}
else {
rc = sony_exif_get(camera, num, file, context);
}
break;
default:
rc = GP_ERROR_NOT_SUPPORTED;
}
return rc;
}
static int
get_info_func (CameraFilesystem *fs, const char *folder,
const char *filename, CameraFileInfo *info, void *data,
GPContext *context)
{
Camera *camera = data;
int num, rc;
SonyFileType file_type;
rc = get_sony_file_id(camera, folder, filename, context,
&num, &file_type);
if (rc != GP_OK)
return rc;
rc = sony_image_info(camera, num, file_type, info, context);
return rc;
}
static int
model_compare(const char *a, const char *b)
{
const char *amod;
const char *bmod;
int alen, blen;
alen = strlen(a);
blen = strlen(b);
if (alen != blen)
return 0;
amod = strchr(a, ':');
bmod = strchr(b, ':');
if ((amod == NULL && bmod == NULL)
|| (amod != NULL && bmod != NULL)) {
return !strcasecmp(a, b);
}
if (amod != NULL) {
int aidx = amod - a;
return (!strncasecmp(a, b, aidx))
&& (!strcasecmp(a+aidx+1, b+aidx+1));
}
if (bmod != NULL) {
int bidx = bmod - b;
return (!strncasecmp(a, b, bidx))
&& (!strcasecmp(a+bidx+1, b+bidx+1));
}
/* can't really get here */
return 42;
}
static int
get_camera_model(Camera *camera, SonyModel *model)
{
CameraAbilities a;
int rc;
rc = gp_camera_get_abilities (camera, &a);
if (rc == GP_OK) {
unsigned int i;
rc = GP_ERROR;
for (i = 0; i < sizeof(models) / sizeof(models[i]); i++) {
if (model_compare(models[i].model_str,
a.model)) {
rc = GP_OK;
*model = models[i].model_id;
break;
}
}
}
return rc;
}
static CameraFilesystemFuncs fsfuncs = {
.file_list_func = file_list_func,
.get_file_func = get_file_func,
.get_info_func = get_info_func
};
/**
* Initializes camera
*/
int
camera_init(Camera * camera, GPContext *context)
{
int rc;
SonyModel model;
rc = get_camera_model(camera, &model);
if (rc != GP_OK)
return rc;
camera->functions->exit = camera_exit;
camera->functions->about = camera_about;
gp_filesystem_set_funcs (camera->fs, &fsfuncs, camera);
camera->pl = malloc (sizeof (CameraPrivateLibrary));
if (!camera->pl)
return (GP_ERROR_NO_MEMORY);
rc = sony_init (camera, model);
if (rc < 0) {
free (camera->pl);
camera->pl = NULL;
return (rc);
}
return (GP_OK);
}
/*
* Local Variables:
* c-file-style:"linux"
* indent-tabs-mode:t
* End:
*/