-
Notifications
You must be signed in to change notification settings - Fork 254
/
Copy pathlvgl.h
89 lines (73 loc) · 2.54 KB
/
lvgl.h
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
//
// lvgl.h
//
// C++ wrapper for LVGL with mouse and touch screen support
//
// Circle - A C++ bare metal environment for Raspberry Pi
// Copyright (C) 2019-2024 R. Stange <[email protected]>
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//
#ifndef _lvgl_lvgl_h
#define _lvgl_lvgl_h
#include <lvgl/lvgl/lvgl.h>
#include <circle/screen.h>
#include <circle/bcmframebuffer.h>
#include <circle/interrupt.h>
#include <circle/input/mouse.h>
#include <circle/input/touchscreen.h>
#include <circle/dmachannel.h>
#include <circle/types.h>
#include <assert.h>
class CLVGL
{
public:
CLVGL (CScreenDevice *pScreen, CInterruptSystem *pInterrupt);
CLVGL (CBcmFrameBuffer *pFrameBuffer, CInterruptSystem *pInterrupt);
~CLVGL (void);
boolean Initialize (void);
void Update (boolean bPlugAndPlayUpdated = FALSE);
private:
static void DisplayFlush (lv_display_t *pDisplay, const lv_area_t *pArea, u8 *pBuffer);
static void DisplayFlushComplete (unsigned nChannel, unsigned nBuffer,
boolean bStatus, void *pParam);
static void PointerRead (lv_indev_t *pIndev, lv_indev_data_t *pData);
static void MouseEventHandler (TMouseEvent Event, unsigned nButtons,
unsigned nPosX, unsigned nPosY, int nWheelMove);
static void TouchScreenEventHandler (TTouchScreenEvent Event, unsigned nID,
unsigned nPosX, unsigned nPosY);
static void LogPrint (lv_log_level_t LogLevel, const char *pMessage);
static void MouseRemovedHandler (CDevice *pDevice, void *pContext);
static void PeriodicTickHandler (void);
#if RASPPI >= 5
void SetupCursor (lv_indev_t *pIndev);
#endif
private:
u16 *m_pBuffer1;
u16 *m_pBuffer2;
CScreenDevice *m_pScreen;
CBcmFrameBuffer *m_pFrameBuffer;
CDMAChannel m_DMAChannel;
unsigned m_nLastUpdate;
CMouseDevice * volatile m_pMouseDevice;
CTouchScreenDevice *m_pTouchScreen;
unsigned m_nLastTouchUpdate;
lv_indev_data_t m_PointerData;
#if RASPPI >= 5
lv_indev_t *m_pIndev;
lv_img_dsc_t *m_pCursorDesc;
#endif
static CLVGL *s_pThis;
};
#endif