Files
libgphoto2/camlibs/barbie/barbie.c
Arnaud Launay 64e420e288 <config.h> -> "config.h"
git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@5859 67ed7778-7388-44ab-90cf-0a291f65f57c
2002-11-29 16:09:58 +00:00

193 lines
4.9 KiB
C

#include "config.h"
#include <ctype.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <gphoto2.h>
#ifdef ENABLE_NLS
# include <libintl.h>
# undef _
# define _(String) dgettext (GETTEXT_PACKAGE, String)
# ifdef gettext_noop
# define N_(String) gettext_noop (String)
# else
# define N_(String) (String)
# endif
#else
# define _(String) (String)
# define N_(String) (String)
#endif
#include "barbie.h"
#define GP_MODULE "barbie"
extern char packet_1[];
static char *models[] = {
"Barbie",
"Nick Click",
"WWF",
"Hot Wheels",
NULL
};
int
camera_id (CameraText *id)
{
strcpy(id->text, "barbie");
return (GP_OK);
}
int
camera_abilities (CameraAbilitiesList *list)
{
int x=0;
CameraAbilities a;
while (models[x]) {
/* Fill in the appropriate flags/data */
memset (&a, 0, sizeof(a));
strcpy(a.model, models[x]);
a.status = GP_DRIVER_STATUS_PRODUCTION;
a.port = GP_PORT_SERIAL;
a.speed[0] = 57600;
a.speed[1] = 0;
a.operations = GP_OPERATION_NONE;
a.file_operations = GP_FILE_OPERATION_PREVIEW;
a.folder_operations = GP_FOLDER_OPERATION_NONE;
/* Append it to the list */
gp_abilities_list_append(list, a);
x++;
}
return (GP_OK);
}
static int
file_list_func (CameraFilesystem *fs, const char *folder, CameraList *list,
void *data, GPContext *context)
{
Camera *camera = data;
int count;
count = barbie_file_count (camera->port);
gp_list_populate (list, "mattel%02i.ppm", count);
return GP_OK;
}
static int
get_file_func (CameraFilesystem *fs, const char *folder, const char *filename,
CameraFileType type, CameraFile *file, void *user_data,
GPContext *context)
{
Camera *camera = user_data;
int size, num;
char *data;
/* Retrieve the number of the photo on the camera */
num = gp_filesystem_number (camera->fs, "/", filename, context);
switch (type) {
case GP_FILE_TYPE_NORMAL:
data = barbie_read_picture (camera->port, num, 0, &size);
break;
case GP_FILE_TYPE_PREVIEW:
data = barbie_read_picture (camera->port, num, 1, &size);
break;
default:
return (GP_ERROR_NOT_SUPPORTED);
}
if (!data)
return GP_ERROR;
gp_file_set_name (file, filename);
gp_file_set_mime_type (file, "image/ppm");
gp_file_set_data_and_size (file, data, size);
return GP_OK;
}
#if 0
int camera_capture (Camera *camera, int capture_type, CameraFilePath *path) {
char cmd[4], resp[4];
memcpy(cmd, packet_1, 4);
cmd[COMMAND_BYTE] = 'G';
cmd[DATA1_BYTE] = 0x40;
if (barbie_exchange(cmd, 4, resp, 4) == 0)
return (0);
cmd[COMMAND_BYTE] = 'Y';
cmd[DATA1_BYTE] = 0;
if (barbie_exchange(cmd, 4, resp, 4) == 0)
return (0);
return(resp[DATA1_BYTE] == 0? GP_OK: GP_ERROR);
return (GP_ERROR);
}
#endif
static int
camera_summary (Camera *camera, CameraText *summary, GPContext *context)
{
int num;
char *firm;
num = barbie_file_count (camera->port);
firm = barbie_read_firmware (camera->port);
sprintf(summary->text, _("Number of pictures: %i\nFirmware Version: %s"), num,firm);
free(firm);
return GP_OK;
}
static int
camera_about (Camera *camera, CameraText *about, GPContext *context)
{
strcpy (about->text,_("Barbie/HotWheels/WWF\nScott Fritzinger <scottf@unr.edu>\nAndreas Meyer <ahm@spies.com>\nPete Zaitcev <zaitcev@metabyte.com>\n\nReverse engineering of image data by:\nJeff Laing <jeffl@SPATIALinfo.com>\n\nImplemented using documents found on\nthe web. Permission given by Vision."));
return GP_OK;
}
int
camera_init (Camera *camera, GPContext *context)
{
GPPortSettings settings;
int res;
/* First, set up all the function pointers */
camera->functions->summary = camera_summary;
camera->functions->about = camera_about;
/* Set up the CameraFilesystem */
gp_filesystem_set_list_funcs (camera->fs, file_list_func, NULL,
camera);
gp_filesystem_set_file_funcs (camera->fs, get_file_func, NULL, camera);
/* Set up the port */
gp_port_set_timeout (camera->port, 5000);
gp_port_get_settings (camera->port, &settings);
settings.serial.speed = 57600;
settings.serial.bits = 8;
settings.serial.parity = 0;
settings.serial.stopbits= 1;
gp_port_set_settings (camera->port, settings);
res = barbie_ping (camera->port);
if (res)
return (GP_OK);
return (GP_ERROR);
}