1
0
mirror of https://github.com/lvgl/lvgl.git synced 2025-01-14 06:42:58 +08:00
lvgl/lv_hal/lv_hal_indev.c

106 lines
2.2 KiB
C
Raw Normal View History

/**
* @file hal_indev.c
*
* @description Input device HAL interface
*
*/
/*********************
* INCLUDES
*********************/
#include "../lv_hal/lv_hal_indev.h"
#include "misc/mem/linked_list.h"
/*********************
* DEFINES
*********************/
/**********************
* TYPEDEFS
**********************/
/**********************
* STATIC PROTOTYPES
**********************/
static lv_indev_t *indev_list = NULL;
/**********************
* STATIC VARIABLES
**********************/
/**********************
* MACROS
**********************/
/**********************
* GLOBAL FUNCTIONS
**********************/
/**
2017-10-20 22:41:10 +02:00
* Register an initialized input device driver.
* @param driver pointer to an initialized 'lv_indev_drv_t' variable (can be local variable)
* @return pointer to the new input device or NULL on error
*/
lv_indev_t * lv_indev_register(lv_indev_drv_t *driver)
{
lv_indev_t *node;
node = dm_alloc(sizeof(lv_indev_t));
if (!node) return NULL;
memcpy(&node->driver, driver, sizeof(lv_indev_drv_t));
node->next = NULL;
if (indev_list == NULL) {
indev_list = node;
} else {
lv_indev_t *last = indev_list;
while (last->next)
last = last->next;
last->next = node;
}
return node;
}
/**
* Get the next input device.
* @param indev pointer to the current input device. NULL to initialize.
* @return the next input devise or NULL if no more. Give the first input device when the parameter is NULL
*/
lv_indev_t * lv_indev_next(lv_indev_t * indev)
{
if(indev == NULL) {
return indev_list;
} else {
if(indev_list->next == NULL) return NULL;
else return indev_list->next;
}
}
/**
* Read data from an input device.
* @param indev pointer to an input device
* @param data input device will write its data here
* @return false: no more data; true: there more data to read (buffered)
*/
bool lv_indev_read(lv_indev_t * indev, lv_indev_data_t *data)
{
bool cont = false;
if(indev->driver.get_data) {
cont = indev->driver.get_data(data);
} else {
memset(data, 0, sizeof(lv_indev_data_t));
}
return cont;
}
/**********************
* STATIC FUNCTIONS
**********************/