summaryrefslogtreecommitdiff
path: root/glcddrivers/ax206dpf.h
diff options
context:
space:
mode:
Diffstat (limited to 'glcddrivers/ax206dpf.h')
-rw-r--r--glcddrivers/ax206dpf.h300
1 files changed, 300 insertions, 0 deletions
diff --git a/glcddrivers/ax206dpf.h b/glcddrivers/ax206dpf.h
new file mode 100644
index 0000000..d683ccf
--- /dev/null
+++ b/glcddrivers/ax206dpf.h
@@ -0,0 +1,300 @@
+/*
+ * GraphLCD driver library
+ *
+ * ax206dpf.h - AX206dpf driver class
+ * Output goes to AX 206 based photoframe
+ * based on:
+ * simlcd device
+ * (c) 2001-2004 Carsten Siebholz <c.siebholz AT t-online.de>
+ * (c) 2011 Dirk Heiser
+ * (c) 2011 Wolfgang Astleitner <mrwastl AT users.sourceforge.net>
+ *
+ * includes code from:
+ * http://sourceforge.net/projects/dpf-ax/
+ *
+ * Original copyright:
+ *
+ * Copyright (C) 2008 Jeroen Domburg <picframe@spritesmods.com>
+ * Modified from sample code by:
+ * Copyright (C) 2005 Michael Reinelt <michael@reinelt.co.at>
+ * Copyright (C) 2005, 2006, 2007 The LCD4Linux Team <lcd4linux-devel@users.sourceforge.net>
+ * Mods by <hackfin@section5.ch>
+ *
+ * This file is released under the GNU General Public License. Refer
+ * to the COPYING file distributed with this package.
+ *
+ * (c) 2011 Lutz Neumann <superelchi AT wolke7.net>
+ *
+ */
+
+#ifndef _GLCDDRIVERS_AX206DPF_H_
+#define _GLCDDRIVERS_AX206DPF_H_
+
+#include "driver.h"
+
+namespace LIBDPF {
+struct dpf_context;
+typedef dpf_context DPFContext;
+}
+
+namespace GLCD
+{
+#define MAX_DPFS 4
+
+#define DEFAULT_WIDTH 320
+#define DEFAULT_HEIGHT 240
+#define DEFAULT_BPP 2
+
+#define USB_SCAN_INTERVALL 10 // seconds between usb scans for missing displays
+
+typedef struct display_handle {
+ bool attached;
+ char address[8];
+ bool isPortrait;
+ bool rotate90;
+ bool flip;
+ int minx, maxx;
+ int miny, maxy;
+ LIBDPF::DPFContext *dpfh;
+ unsigned char * LCD;
+} DISPLAYHANDLE;
+
+
+class cDriverConfig;
+
+class cDriverAX206DPF : public cDriver
+{
+private:
+ unsigned char * tempLCD; // temp transfer buffer
+
+ bool portrait; // portrait or landscape mode
+ int zoom; // pixel zoom factor
+ unsigned int numdisplays; // number of detected displays
+ unsigned int numxdisplays; // number of displays (horizontal)
+ unsigned int numydisplays; // number of displays (vertical)
+ unsigned int sizex; // logical horizontal size of one display
+ unsigned int sizey; // logical vertical size of one display
+ unsigned int bpp; // bits per pixel
+
+ DISPLAYHANDLE *dh[MAX_DPFS];
+ std::string flips;
+ time_t lastscan;
+ int lastbrightness;
+
+
+ int CheckSetup();
+ void ResetMinMax();
+ bool RescanUSB();
+ int InitSingleDisplay(unsigned int);
+ void DeInitSingleDisplay(unsigned int);
+ void ClearSingleDisplay(unsigned int);
+ void SetSingleDisplayBrightness(unsigned int, unsigned int);
+
+public:
+ cDriverAX206DPF(cDriverConfig * config);
+
+ virtual int Init();
+ virtual int DeInit();
+
+ virtual void Clear();
+ virtual void SetPixel(int x, int y, uint32_t data);
+ virtual void Refresh(bool refreshAll = false);
+ virtual uint32_t GetBackgroundColor(void);
+ virtual void SetBrightness(unsigned int);
+ virtual bool GetDriverFeature (const std::string & Feature, int & value);
+};
+
+} // end of namespace GLCD
+
+
+//##########################################################################################
+//
+// ** START OF UGLY HACK ** START OF UGLY HACK ** START OF UGLY HACK ** START OF UGLY HACK *
+//
+// Because I choose NOT to include the static library libdpf.a and/or their header- and
+// source-files from the original dpf-ax hack, I did some creative copy & paste from there
+// to this place. I will delete this stuff when a usable shared library of libpdf exists.
+//
+//##########################################################################################
+
+// -------------------------------------------------------------------
+// START SELECTIVE COPY & PASTE "dpf.h"
+// -------------------------------------------------------------------
+
+/** libdpf header file
+ *
+ * (c) 2010, 2011 <hackfin@section5.ch>
+ *
+ */
+
+// -------------------------------------------------------------------
+// START SELECTIVE COPY & PASTE "usbuser.h"
+// -------------------------------------------------------------------
+
+#include <usb.h>
+
+namespace LIBDPF
+{
+
+/* USB user commands
+ *
+ * Only temporary. Should move to dpflib or into a dclib configuration.
+ *
+ */
+
+#define PROTOCOL_VERSION 1
+
+/** Our vendor specific USB commands to do stuff on the DPF */
+
+#define USBCMD_GETPROPERTY 0x00 ///< Get property
+#define USBCMD_SETPROPERTY 0x01 ///< Set property
+#define USBCMD_MEMREAD 0x04 ///< Memory read
+#define USBCMD_APPLOAD 0x05 ///< Load and run applet
+#define USBCMD_FILLRECT 0x11 ///< Fill screen rectangle
+#define USBCMD_BLIT 0x12 ///< Blit to screen
+#define USBCMD_COPYRECT 0x13 ///< Copy screen rectangle
+#define USBCMD_FLASHLOCK 0x20 ///< Lock USB for flash access
+#define USBCMD_PROBE 0xff ///< Get version code (probe)
+
+/* Some special return codes */
+#define USB_IN_SEQUENCE 0x7f ///< We're inside a command sequence
+
+// Property handling:
+
+#define PROPERTY_BRIGHTNESS 0x01
+#define PROPERTY_FGCOLOR 0x02
+#define PROPERTY_BGCOLOR 0x03
+#define PROPERTY_ORIENTATION 0x10
+
+// -------------------------------------------------------------------
+// END SELECTIVE COPY & PASTE "usbuser.h"
+// -------------------------------------------------------------------
+
+#define ADDR unsigned int
+
+//#define MODE_SG 0x00 ///< generic device mode (original)
+//#define MODE_USB 0x01 ///< libusb operation mode (hacked)
+#define FLAG_CAN_LOCK 0x80 ///< Has the locking feature (new firmware)
+
+enum {
+ DEVERR_FILE = -16,
+ DEVERR_OPEN,
+ DEVERR_HEX,
+ DEVERR_CHK,
+ DEVERR_IO,
+ DEVERR_MALLOC,
+ DEVERR_TIMEOUT,
+};
+
+/** The DPF context structure */
+
+typedef
+struct dpf_context {
+ unsigned char mode;
+ unsigned char flags;
+ union {
+ usb_dev_handle *udev;
+ int fd;
+ } dev;
+ unsigned int width;
+ unsigned int height;
+ int bpp;
+ int proto;
+ char* buff;
+ unsigned char* oldpix;
+ int offx;
+ int offy;
+} DPFContext;
+
+/** A value proxy for the property API */
+typedef struct dpf_proxy {
+ union {
+ short integer;
+ char *sequence;
+ } value;
+ char type;
+} DPFValue;
+
+enum {
+ TYPE_INTEGER,
+ TYPE_STRING,
+};
+
+#define DPFHANDLE struct dpf_context *
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ Opens the DPF device. if dev is not NULL, open device, otherwise, look for
+ USB device.
+ */
+int dpf_open(const char *dev, DPFHANDLE *h);
+
+/** Close DPF device */
+void dpf_close(DPFHANDLE h);
+
+/** Blit data to screen
+ *
+ * \param buf buffer to 16 bpp RGB 565 image data
+ * \param rect rectangle tuple: [x0, y0, x1, y1]
+ */
+
+int dpf_screen_blit(DPFHANDLE h, const unsigned char *buf, short rect[4]);
+
+/** Set property on DPF
+ * \param token Property token
+ * \param value Pointer to value
+ */
+int dpf_setproperty(DPFHANDLE h, int token, const DPFValue *value);
+
+/* USB raw */
+
+int emulate_scsi(usb_dev_handle *d, unsigned char *cmd, int cmdlen, char out,
+ unsigned char *data, unsigned long block_len);
+
+const char *dev_errstr(int err);
+
+// Private stuff:
+usb_dev_handle *dpf_usb_open(int index);
+int sgdev_open(const char *portname, int *fd);
+
+#ifdef __cplusplus
+}
+#endif
+
+// Some internal address offsets. They may change, but so far all types
+// seem to have the same
+//
+// w: word, <n>: length, [LE, BE]
+//
+// FIXME: Use packed struct later.
+
+// FIXME: Should be 0x0020, once we have the firmware replaced
+#define OFFSET_PROPS 0x3f0020 ///< w[2]:LE : Resolution X, Y
+
+// -------------------------------------------------------------------
+// END SELECTIVE COPY & PASTE "dpf.h"
+// -------------------------------------------------------------------
+
+// -------------------------------------------------------------------
+// START SELECTIVE COPY & PASTE "sglib.h"
+// -------------------------------------------------------------------
+
+/* generic SCSI device stuff: */
+
+#define DIR_IN 0
+#define DIR_OUT 1
+
+// -------------------------------------------------------------------
+// END SELECTIVE COPY & PASTE "sglib.h"
+// -------------------------------------------------------------------
+
+} // end of namespace LIBDPF_HACK
+
+//##########################################################################################
+// ** END OF UGLY HACK ** END OF UGLY HACK ** END OF UGLY HACK ** END OF UGLY HACK *
+//##########################################################################################
+
+#endif //_GLCDDRIVERS_AX206DPF_H_