Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
CTCaer
GitHub Repository: CTCaer/hekate
Path: blob/master/bdk/libs/lvgl/lv_hal/lv_hal_indev.c
1476 views
1
/**
2
* @file hal_indev.c
3
*
4
* @description Input device HAL interface
5
*
6
*/
7
8
/*********************
9
* INCLUDES
10
*********************/
11
#include "../lv_hal/lv_hal_indev.h"
12
#include "../lv_misc/lv_mem.h"
13
#include "../lv_misc/lv_gc.h"
14
15
#if defined(LV_GC_INCLUDE)
16
# include LV_GC_INCLUDE
17
#endif /* LV_ENABLE_GC */
18
19
20
/*********************
21
* DEFINES
22
*********************/
23
24
/**********************
25
* TYPEDEFS
26
**********************/
27
28
/**********************
29
* STATIC PROTOTYPES
30
**********************/
31
32
/**********************
33
* STATIC VARIABLES
34
**********************/
35
36
/**********************
37
* MACROS
38
**********************/
39
40
/**********************
41
* GLOBAL FUNCTIONS
42
**********************/
43
44
/**
45
* Initialize an input device driver with default values.
46
* It is used to surly have known values in the fields ant not memory junk.
47
* After it you can set the fields.
48
* @param driver pointer to driver variable to initialize
49
*/
50
void lv_indev_drv_init(lv_indev_drv_t * driver)
51
{
52
driver->read = NULL;
53
driver->type = LV_INDEV_TYPE_NONE;
54
driver->user_data = NULL;
55
}
56
57
/**
58
* Register an initialized input device driver.
59
* @param driver pointer to an initialized 'lv_indev_drv_t' variable (can be local variable)
60
* @return pointer to the new input device or NULL on error
61
*/
62
lv_indev_t * lv_indev_drv_register(lv_indev_drv_t * driver)
63
{
64
lv_indev_t * node;
65
66
node = lv_mem_alloc(sizeof(lv_indev_t));
67
if(!node) return NULL;
68
69
memset(node, 0, sizeof(lv_indev_t));
70
memcpy(&node->driver, driver, sizeof(lv_indev_drv_t));
71
72
node->next = NULL;
73
node->proc.reset_query = 1;
74
node->cursor = NULL;
75
node->group = NULL;
76
node->btn_points = NULL;
77
78
if(LV_GC_ROOT(_lv_indev_list) == NULL) {
79
LV_GC_ROOT(_lv_indev_list) = node;
80
} else {
81
lv_indev_t * last = LV_GC_ROOT(_lv_indev_list);
82
while(last->next)
83
last = last->next;
84
85
last->next = node;
86
}
87
88
return node;
89
}
90
91
/**
92
* Get the next input device.
93
* @param indev pointer to the current input device. NULL to initialize.
94
* @return the next input devise or NULL if no more. Give the first input device when the parameter is NULL
95
*/
96
lv_indev_t * lv_indev_next(lv_indev_t * indev)
97
{
98
99
if(indev == NULL) {
100
return LV_GC_ROOT(_lv_indev_list);
101
} else {
102
if(indev->next == NULL) return NULL;
103
else return indev->next;
104
}
105
}
106
107
/**
108
* Read data from an input device.
109
* @param indev pointer to an input device
110
* @param data input device will write its data here
111
* @return false: no more data; true: there more data to read (buffered)
112
*/
113
bool lv_indev_read(lv_indev_t * indev, lv_indev_data_t * data)
114
{
115
bool cont = false;
116
117
memset(data, 0, sizeof(lv_indev_data_t));
118
data->state = LV_INDEV_STATE_REL;
119
120
if(indev->driver.read) {
121
data->user_data = indev->driver.user_data;
122
123
LV_LOG_TRACE("idnev read started");
124
cont = indev->driver.read(data);
125
LV_LOG_TRACE("idnev read finished");
126
} else {
127
LV_LOG_WARN("indev function registered");
128
}
129
130
return cont;
131
}
132
133
/**********************
134
* STATIC FUNCTIONS
135
**********************/
136
137