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
|