diff options
Diffstat (limited to 'camlibs/dimera/mesalib.h')
-rw-r--r-- | camlibs/dimera/mesalib.h | 175 |
1 files changed, 175 insertions, 0 deletions
diff --git a/camlibs/dimera/mesalib.h b/camlibs/dimera/mesalib.h new file mode 100644 index 000000000..91f69191f --- /dev/null +++ b/camlibs/dimera/mesalib.h @@ -0,0 +1,175 @@ +/* + * Copyright © 2000-2001, Brian Beattie <beattie@aracnet.com>, et. al. + * + * This software was created with the help of proprietary + * information belonging to StarDot Technologies + * + * Permission to copy and use and modify this file is granted + * provided the above notices are retained, intact. + * + */ + +#ifndef MESALIB_H +#define MESALIB_H + +#include <_stdint.h> +#include <gphoto2/gphoto2-port.h> + +#define CHECK(result) {int res = (result); if (res < 0) return (res);} + +/* MESA commands */ +#define NOP 0x01 /* No operation */ +#define MESA_VERSION 0x05 /* Send Version command */ +#define XMIT_TEST 0x09 /* Send test sequent */ +#define RAM_TEST 0x0d /* Test Camera RAM */ +#define SEND_RAM 0x15 /* Send Ram contents */ +#define SNAP_IMAGE 0x19 /* Snap an Image (no flash or shutter) */ +#define SND_BLACK 0x1d /* Send Black level bytes */ +#define SNAP_VIEW 0x21 /* Snap (and Send) viewfinder image */ +#define XTRA_STP_BIT 0x25 /* Stop bits (extra time between bytes */ +#define SND_VIEW 0x29 /* Send viewfinder image */ +#define SNAP_PICTURE 0x2d /* Snap a picture */ +#define SND_ID 0x35 /* Send Manufacture/year/week of manufacture */ +#define AT_COMMAND 0x41 /* Modem Detect command */ +#define SND_IMAGE 0x49 /* Send image stored in RAM */ +#define RCV_TEST 0x4d /* Echo six bytes */ +#define IMAGE_CNT 0x55 /* Send count of images */ +#define LD_IMAGE 0x59 /* Load Image from EEPROM into RAM */ +#define EEPROM_INFO 0x5d /* Send information about EEPROM */ +#define SND_THUMB 0x61 /* Send Thumbnail of image */ +#define SET_SPEED 0x69 /* Set serial link speed */ +#define FEATURES 0x6d /* Send features */ +#define SND_IMG_INFO 0x71 /* Send Image Info */ + +#define CMD_ACK 0x21 /* Command ACK */ + +#define RAM_IMAGE_NUM 0x10000 /* image number for image in RAM */ + +/* RAM Test results */ +#define RAM_GOOD 0x2a /* RAM tests good */ +#define RAM_ERROR 0x2d /* RAM error detected */ +#define EE_ERROR 0x45 /* Failure to restore EEPROM dir */ + +/* DownLoad ViewFinder */ +#define ALL_LOWRES 0xff /* Send all of a LowRES 64x48 viewfinder */ +#define EVEN_LOWRES 0xfe /* Send even rows of LowRES */ +#define ODD_LOWRES 0xfd /* Send odd rows of LowRES */ +#define NONE 0xfc /* Send nothing (for Snap Viewfinder) */ +#define ALL_HIRES 0xfb /* Send All of a HighRES 128x96 viewfinder */ +#define EVEN_HIRES 0xfa /* Send even rows of HiRES */ +#define ODD_HIRES 0xf9 /* Send odd rows of HiRES */ + +/* Feature bits */ +struct mesa_feature { + uint8_t feature_bits_lo; +#define HAVE_FLASH 0x01 /* Flash present */ +#define HAVE_RES_SW 0x02 /* Resolution switch present */ +#define FLASH_FILL 0x04 /* Flash is in Fill mode */ +#define FLASH_READY 0x08 /* Flash is charged and ready */ +#define LOW_RES 0x10 /* Switch is in low res position */ +#define DUAL_IRIS 0x20 /* Dual Iris is present */ +#define AC_PRESENT 0x40 /* AC Adapter is connected */ +#define FLASH_ON 0x80 /* Flash is on */ + uint8_t feature_bits_hi; +#define IRIS_ADJUST 0x1f +#define BAT_VALID 0x20 /* Battery level valid */ +#define NO_PWR_LIGHT 0x40 /* No power light */ +#define BAT_DIGITAL 0x80 /* Battery level is binary */ + uint8_t battery_level; /* Battery level */ + uint8_t battery_zero; /* Battery dead level */ + uint8_t battery_full; /* Battery full level */ +}; + +/* Send Image */ +struct mesa_image_arg { + uint16_t row; /* row to start sending */ + uint16_t start; /* 0x1e */ + uint8_t send; /* 0x04 */ + uint8_t skip; /* 0x00 */ + uint16_t repeat; /* 0xA0 */ + uint8_t row_cnt; /* 0x20 */ + uint8_t inc1; /* 0x01 */ + uint8_t inc2; /* 0x80 */ + uint8_t inc3; /* 0x00 */ + uint8_t inc4; /* 0x00 */ +}; + +struct mesa_id { + uint16_t man; /* 12bit manufacturer ID */ + uint16_t year; /* year of manufacture - 1996 */ + uint8_t ver; /* 4bit version */ + uint8_t week; /* week of manufacture 0 - 51 */ +}; + +#define MESA_THUMB_SZ (64*60) /* (64x60x4)/8 */ + +struct mesa_image_info { + uint32_t num_bytes; /* size of image in eeprom */ + uint8_t standard_res; /* image is standard res */ +}; + +#define MESA_VERSION_SZ 7 /* min. buffer length needed for mesa_version */ +#define MESA_EEPROM_SZ 49 /* min. buffer length needed for mesa_eeprom_info */ + +void +mesa_flush( GPPort *port, int timeout ); +int +mesa_read( GPPort *port, uint8_t *b, int s, int timeout2, int timeout1 ); +int +mesa_send_command( GPPort *port, uint8_t *cmd, int n, int ackTimeout ); +int +mesa_port_open( GPPort *port ); +int +mesa_port_close( GPPort *port ); +int +mesa_reset( GPPort *port ); +int +mesa_set_speed( GPPort *port, int speed ); +int +mesa_version( GPPort *port,char *version_string); +int +mesa_transmit_test( GPPort *port ); +int +mesa_ram_test( GPPort *port ); +int +mesa_read_row( GPPort *port, uint8_t *r, struct mesa_image_arg *s ); +int +mesa_snap_image( GPPort *port, uint16_t exposure ); +int +mesa_black_levels( GPPort *port, uint8_t r[2] ); +int +mesa_snap_view( GPPort *port, uint8_t *r, unsigned int hi_res, unsigned int zoom, + unsigned int row, unsigned int col, uint16_t exposure, + uint8_t download ); +int +mesa_set_stopbits( GPPort *port, unsigned int bits ); +int +mesa_download_view( GPPort *port, uint8_t *r, uint8_t download ); +int +mesa_snap_picture( GPPort *port, uint16_t exposure ); +int +mesa_send_id( GPPort *port, struct mesa_id *id ); +int +mesa_modem_check( GPPort *port ); +int +mesa_read_image( GPPort *port, uint8_t *r, struct mesa_image_arg *s ); +int +mesa_recv_test( GPPort *port, uint8_t r[6] ); +int +mesa_get_image_count( GPPort *port ); +int +mesa_load_image( GPPort *port, int image); +int +mesa_eeprom_info( GPPort *port, int long_read, uint8_t info[MESA_EEPROM_SZ] ); +int32_t +mesa_read_thumbnail( GPPort *port, int picture, uint8_t *image ); +int +mesa_read_features( GPPort *port, struct mesa_feature *f ); +int +mesa_battery_check( GPPort *port ); +int32_t +mesa_read_image_info( GPPort *port, int i, struct mesa_image_info *info ); +uint8_t * +mesa_get_image( GPPort *port, int image ); + +#endif /* MESALIB_H */ |