summaryrefslogtreecommitdiff
path: root/glcddrivers/serdisp.h
blob: 659b78995f9a49cf2b0cfcf04ada781ccf99af01 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
 * GraphLCD driver library
 *
 * serdisp.h  -  include support for displays supported by serdisplib (if library is installed)
 *               http://serdisplib.sourceforge.net
 *
 * This file is released under the GNU General Public License. Refer
 * to the COPYING file distributed with this package.
 *
 * (c) 2003-2011 Wolfgang Astleitner <mrwastl AT users.sourceforge.net>
 */

#ifndef _GLCDDRIVERS_SERDISP_H_
#define _GLCDDRIVERS_SERDISP_H_

#include "driver.h"
#include <sys/time.h>

namespace GLCD
{

/* event-type for GPIs, GPOs, and data exchange messages. min. size: 16 byte, max size: 12 + 64) */
typedef struct SDGP_event_s { /* 16 to 78 bytes */
  /* byte  0 */
  uint8_t        type;         /* one of SDGPT_* */
  uint8_t        cmdid;        /* command-ID (one of SD_CMD_*) */
  uint8_t        devid;        /* device ID, 0 == local */
  uint8_t        subid;        /* gp-ID or page-ID */
  /* byte  4 */
  struct timeval timestamp;    /* timestamp (8 bytes) */
  /* byte 12 */
  union {
    int32_t      value;        /* if single value event: value  */
    struct {                   /* if streaming event or package: */
      uint16_t   length;       /*   length of stream if known or 0 if some stop tag is used */
      uint8_t    word_size;    /*   stream elements are bytes/chars (0 or 1), shorts (2), or longs (4) */
      uint8_t     _reserved;   /*   reserved for later use */
    };
    uint8_t       data[64];    /* if data-package type: max. 64 byte payload */
  };
} SDGP_event_t;

/* event-payload-type for simple touchscreen events (no multitouch or similar) */
typedef struct SDGP_evpkt_simpletouch_s { /* 16 bytes */
  /* 12 bytes */
  int16_t    raw_x;               /* raw coordinate X */
  int16_t    raw_y;               /* raw coordinate Y */
  int16_t    raw_touch;           /* raw touch value */
  int16_t    norm_x;              /* normalised coordinate X (norm_x <= dd->width) */
  int16_t    norm_y;              /* normalised coordinate Y (norm_y <= dd->height) */
  int16_t    norm_touch;          /* normalised touch value */
} SDGP_evpkt_simpletouch_t;

typedef void (*fp_eventlistener_t) (void* dd, SDGP_event_t* recylce);

class cDriverConfig;

class cDriverSerDisp : public cDriver
{
private:

    cDriverConfig * config;
    cDriverConfig * oldConfig;

    long  serdisp_version;

    int   supports_options;

    void* sdhnd; // serdisplib handle
    void* dd;    // display descriptor
    void* sdcd;  // serdisp connect descriptor

    long  (*fp_serdisp_getversioncode) ();

    void* (*fp_SDCONN_open)            (const char sdcdev[]);

    void* (*fp_serdisp_init)           (void* sdcd, const char dispname[], const char extra[]);
    void  (*fp_serdisp_rewrite)        (void* dd);
    void  (*fp_serdisp_update)         (void* dd);
    void  (*fp_serdisp_clearbuffer)    (void* dd);
    void  (*fp_serdisp_setcolour)      (void* dd, int x, int y, long colour);
    int   (*fp_serdisp_feature)        (void* dd, int feature, int value);
    int   (*fp_serdisp_isoption)       (void* dd, const char* optionname);
    void  (*fp_serdisp_setoption)      (void* dd, const char* optionname, long value);
    long  (*fp_serdisp_getoption)      (void* dd, const char* optionname, int* typesize);
    int   (*fp_serdisp_getwidth)       (void* dd);
    int   (*fp_serdisp_getheight)      (void* dd);
    int   (*fp_serdisp_getcolours)     (void* dd);
    int   (*fp_serdisp_getdepth)       (void* dd);
    void  (*fp_serdisp_quit)           (void* dd);
    void  (*fp_serdisp_close)          (void* dd);
    uint8_t (*fp_SDGPI_search)         (void* dd, const char* gpname);
    int   (*fp_SDGPI_isenabled)        (void* dd, uint8_t gpid);
    int   (*fp_SDGPI_enable)           (void* dd, uint8_t gpid, int enable);
    int   (*fp_SDEVLP_add_listener)    (void* dd, uint8_t gpid, fp_eventlistener_t eventlistener );

    int CheckSetup();

    void  eventListener                (void* dd, SDGP_event_t* recycle);

protected:
    virtual bool GetDriverFeature  (const std::string & Feature, int & value);
    virtual GLCD::cColor GetDefaultBackgroundColor(void);

public:

    cDriverSerDisp(cDriverConfig * config);
    virtual ~cDriverSerDisp();

    virtual int Init();
    virtual int DeInit();

    virtual void Clear();
    virtual void SetPixel(int x, int y, uint32_t data);
    //virtual void Set8Pixels(int x, int y, unsigned char data);
#if 0
    virtual void SetScreen(const unsigned char * data, int width, int height, int lineSize);
#endif
    virtual void Refresh(bool refreshAll = false);
    virtual void SetBrightness(unsigned int percent);

    virtual bool SetFeature  (const std::string & Feature, int value);

    virtual cGLCDEvent * GetEvent(void);

};

} // end of namespace
#endif