diff options
author | Raymond Penners <raymond@dotsphinx.com> | 2001-09-22 09:31:19 +0000 |
---|---|---|
committer | Raymond Penners <raymond@dotsphinx.com> | 2001-09-22 09:31:19 +0000 |
commit | 4e0061a1204f6db0a29504c598850c402d0430f1 (patch) | |
tree | 845c509ac4505dd494d9734574dd88873951116d /camlibs/sonydscf55/sony.c | |
parent | 8f4c5978bac13c8ae6e8f2561a2f530e8830b3b6 (diff) | |
download | libgphoto2-4e0061a1204f6db0a29504c598850c402d0430f1.tar.gz |
Fixes & eliminated compiler warnings
git-svn-id: https://svn.code.sf.net/p/gphoto/code/trunk/libgphoto2@2298 67ed7778-7388-44ab-90cf-0a291f65f57c
Diffstat (limited to 'camlibs/sonydscf55/sony.c')
-rw-r--r-- | camlibs/sonydscf55/sony.c | 106 |
1 files changed, 79 insertions, 27 deletions
diff --git a/camlibs/sonydscf55/sony.c b/camlibs/sonydscf55/sony.c index d3bb426f7..374dbe7b9 100644 --- a/camlibs/sonydscf55/sony.c +++ b/camlibs/sonydscf55/sony.c @@ -20,6 +20,7 @@ #include <stdio.h> +#include <stdlib.h> #include <gphoto2.h> #include "sony.h" @@ -149,7 +150,7 @@ static int sony_baud_to_id(long baud) */ static int sony_read_byte(Camera * camera, unsigned char *b) { - int n = gp_port_read(sony_data(camera)->dev, b, 1); + int n = gp_port_read(camera->port, b, 1); if (n != 1) return GP_ERROR; else @@ -299,32 +300,32 @@ static int sony_packet_write(Camera * camera, Packet * p) "sony_packet_write()"); data = sony_data(camera); - rc = gp_port_write(data->dev, &START_PACKET, 1); + rc = gp_port_write(camera->port, &START_PACKET, 1); p->buffer[p->length] = p->checksum; for (count = 0; count < p->length + 1 && rc != GP_ERROR; count++) { switch ((unsigned char) p->buffer[count]) { case SONY_ESCAPE_CHAR: - rc = gp_port_write(data->dev, ESC_ESC_STRING, 2); + rc = gp_port_write(camera->port, ESC_ESC_STRING, 2); break; case SONY_START_CHAR: - rc = gp_port_write(data->dev, ESC_START_STRING, 2); + rc = gp_port_write(camera->port, ESC_START_STRING, 2); break; case SONY_END_CHAR: - rc = gp_port_write(data->dev, ESC_END_STRING, 2); + rc = gp_port_write(camera->port, ESC_END_STRING, 2); break; default: - rc = gp_port_write(data->dev, + rc = gp_port_write(camera->port, (char *) &p->buffer[count], 1); break; } } if (rc != GP_ERROR) - rc = gp_port_write(data->dev, (char *) &END_PACKET, 1); + rc = gp_port_write(camera->port, (char *) &END_PACKET, 1); return rc; } @@ -446,14 +447,11 @@ sony_converse(Camera * camera, Packet * out, unsigned char *str, int len) */ static int sony_baud_port_set(Camera * camera, long baud) { - gp_port *dev; gp_port_settings settings; - dev = sony_data(camera)->dev; - - gp_port_settings_get(dev, &settings); + gp_port_settings_get(camera->port, &settings); settings.serial.speed = baud; - gp_port_settings_set(dev, settings); + gp_port_settings_set(camera->port, settings); usleep(70000); @@ -483,30 +481,80 @@ static int sony_baud_set(Camera * camera, long baud) } /** - * Initialises camera + * Port initialisation */ -int sony_init(Camera * camera) +static int sony_init_port (Camera *camera) { - int count = 0; - Packet dp; - SonyData *data = sony_data(camera); + gp_port_settings settings; + int rc; + + rc = gp_port_timeout_set (camera->port, 5000); + if (rc == GP_OK) { + strcpy(settings.serial.port, camera->port_info->path); + + settings.serial.speed = 9600; + settings.serial.bits = 8; + settings.serial.parity = 0; + settings.serial.stopbits = 1; - gp_port_flush(data->dev, 0); + rc = gp_port_settings_set(camera->port, settings); + if (rc == GP_OK) { + rc = gp_port_flush(camera->port, 0); + } + } + return rc; +} +/** + * Establish first contact (remember the prime directive? :) + */ +static int sony_init_first_contact (Camera *camera) +{ + int count = 0; + Packet dp; + SonyData *data = sony_data (camera); + int rc = GP_ERROR; + for (count = 0; count < 3; count++) { data->sequence_id = 0; - if (sony_converse(camera, &dp, IdentString, 12) == GP_OK) { + rc = sony_converse(camera, &dp, IdentString, 12); + if (rc == GP_OK) { gp_debug_printf(GP_DEBUG_LOW, SONY_CAMERA_ID, "Init OK"); - data->initialized = TRUE; - return GP_OK; + break; } usleep(2000); gp_debug_printf(GP_DEBUG_LOW, SONY_CAMERA_ID, "Init - Fail %u", count + 1); } - return GP_ERROR; + return rc; +} + +/** + * Initialises camera + */ +int sony_init (Camera * camera, int msac) +{ + int rc; + + rc = sony_init_port (camera); + if (rc == GP_OK) { + SonyData *data; + data = (SonyData *) malloc(sizeof(SonyData)); + camera->camlib_data = data; + if (data) { + rc = sony_init_first_contact (camera); + if (rc != GP_OK) { + free (data); + camera->camlib_data = NULL; + } + } + else { + rc = GP_ERROR; + } + } + return rc; } /** @@ -515,12 +563,16 @@ int sony_init(Camera * camera) int sony_exit(Camera * camera) { Packet dp; - SonyData *data = sony_data(camera); - int rc; + int rc = GP_ERROR; - rc = sony_baud_set(camera, 9600); - while (rc == GP_OK && data->sequence_id > 0) { - rc = sony_converse(camera, &dp, EmptyPacket, 1); + if (camera->camlib_data) { + SonyData *data = sony_data(camera); + rc = sony_baud_set(camera, 9600); + while (rc == GP_OK && data->sequence_id > 0) { + rc = sony_converse(camera, &dp, EmptyPacket, 1); + } + free (camera->camlib_data); + camera->camlib_data = NULL; } return rc; } |