summaryrefslogtreecommitdiff
path: root/glcddrivers/serdisp.h
blob: ea1be908ca0caae2841d723ef7d8087371676f74 (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
/*
 * 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:

    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 uint32_t GetDefaultBackgroundColor(void);

public:

    cDriverSerDisp(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 void SetBrightness(unsigned int percent);

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

    virtual cGLCDEvent * GetEvent(void);

};

} // end of namespace
#endif