summaryrefslogtreecommitdiff
path: root/camlibs/dimera/mesalib.h
diff options
context:
space:
mode:
Diffstat (limited to 'camlibs/dimera/mesalib.h')
-rw-r--r--camlibs/dimera/mesalib.h175
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 */