LVGL 库提交
This commit is contained in:
@@ -0,0 +1,178 @@
|
||||
/**
|
||||
* @file lv_monkey.c
|
||||
*
|
||||
*/
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "lv_monkey_private.h"
|
||||
|
||||
#if LV_USE_MONKEY != 0
|
||||
|
||||
#include "../../misc/lv_math.h"
|
||||
#include "../../misc/lv_assert.h"
|
||||
#include "../../stdlib/lv_mem.h"
|
||||
#include "../../display/lv_display.h"
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
#define MONKEY_PERIOD_RANGE_MIN_DEF 100
|
||||
#define MONKEY_PERIOD_RANGE_MAX_DEF 1000
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
struct _lv_monkey_t {
|
||||
lv_monkey_config_t config;
|
||||
lv_indev_data_t indev_data;
|
||||
lv_indev_t * indev;
|
||||
lv_timer_t * timer;
|
||||
void * user_data;
|
||||
};
|
||||
|
||||
static const lv_key_t lv_key_map[] = {
|
||||
LV_KEY_UP,
|
||||
LV_KEY_DOWN,
|
||||
LV_KEY_RIGHT,
|
||||
LV_KEY_LEFT,
|
||||
LV_KEY_ESC,
|
||||
LV_KEY_DEL,
|
||||
LV_KEY_BACKSPACE,
|
||||
LV_KEY_ENTER,
|
||||
LV_KEY_NEXT,
|
||||
LV_KEY_PREV,
|
||||
LV_KEY_HOME,
|
||||
LV_KEY_END,
|
||||
};
|
||||
|
||||
/**********************
|
||||
* STATIC PROTOTYPES
|
||||
**********************/
|
||||
|
||||
static void lv_monkey_read_cb(lv_indev_t * indev, lv_indev_data_t * data);
|
||||
static int32_t lv_monkey_random(int32_t howsmall, int32_t howbig);
|
||||
static void lv_monkey_timer_cb(lv_timer_t * timer);
|
||||
|
||||
/**********************
|
||||
* GLOBAL FUNCTIONS
|
||||
**********************/
|
||||
|
||||
void lv_monkey_config_init(lv_monkey_config_t * config)
|
||||
{
|
||||
lv_memzero(config, sizeof(lv_monkey_config_t));
|
||||
config->type = LV_INDEV_TYPE_POINTER;
|
||||
config->period_range.min = MONKEY_PERIOD_RANGE_MIN_DEF;
|
||||
config->period_range.max = MONKEY_PERIOD_RANGE_MAX_DEF;
|
||||
}
|
||||
|
||||
lv_monkey_t * lv_monkey_create(const lv_monkey_config_t * config)
|
||||
{
|
||||
lv_monkey_t * monkey = lv_malloc_zeroed(sizeof(lv_monkey_t));
|
||||
LV_ASSERT_MALLOC(monkey);
|
||||
|
||||
monkey->config = *config;
|
||||
monkey->timer = lv_timer_create(lv_monkey_timer_cb, monkey->config.period_range.min, monkey);
|
||||
lv_timer_pause(monkey->timer);
|
||||
|
||||
monkey->indev = lv_indev_create();
|
||||
lv_indev_set_type(monkey->indev, config->type);
|
||||
lv_indev_set_read_cb(monkey->indev, lv_monkey_read_cb);
|
||||
lv_indev_set_user_data(monkey->indev, monkey);
|
||||
return monkey;
|
||||
}
|
||||
|
||||
lv_indev_t * lv_monkey_get_indev(lv_monkey_t * monkey)
|
||||
{
|
||||
LV_ASSERT_NULL(monkey);
|
||||
return monkey->indev;
|
||||
}
|
||||
|
||||
void lv_monkey_set_enable(lv_monkey_t * monkey, bool en)
|
||||
{
|
||||
LV_ASSERT_NULL(monkey);
|
||||
en ? lv_timer_resume(monkey->timer) : lv_timer_pause(monkey->timer);
|
||||
}
|
||||
|
||||
bool lv_monkey_get_enable(lv_monkey_t * monkey)
|
||||
{
|
||||
LV_ASSERT_NULL(monkey);
|
||||
return !lv_timer_get_paused(monkey->timer);
|
||||
}
|
||||
|
||||
void lv_monkey_set_user_data(lv_monkey_t * monkey, void * user_data)
|
||||
{
|
||||
LV_ASSERT_NULL(monkey);
|
||||
monkey->user_data = user_data;
|
||||
}
|
||||
|
||||
void * lv_monkey_get_user_data(lv_monkey_t * monkey)
|
||||
{
|
||||
LV_ASSERT_NULL(monkey);
|
||||
return monkey->user_data;
|
||||
}
|
||||
|
||||
void lv_monkey_delete(lv_monkey_t * monkey)
|
||||
{
|
||||
LV_ASSERT_NULL(monkey);
|
||||
|
||||
lv_timer_delete(monkey->timer);
|
||||
lv_indev_delete(monkey->indev);
|
||||
lv_free(monkey);
|
||||
}
|
||||
|
||||
/**********************
|
||||
* STATIC FUNCTIONS
|
||||
**********************/
|
||||
|
||||
static void lv_monkey_read_cb(lv_indev_t * indev, lv_indev_data_t * data)
|
||||
{
|
||||
lv_monkey_t * monkey = lv_indev_get_user_data(indev);
|
||||
|
||||
data->btn_id = monkey->indev_data.btn_id;
|
||||
data->point = monkey->indev_data.point;
|
||||
data->enc_diff = monkey->indev_data.enc_diff;
|
||||
data->state = monkey->indev_data.state;
|
||||
}
|
||||
|
||||
static int32_t lv_monkey_random(int32_t howsmall, int32_t howbig)
|
||||
{
|
||||
if(howsmall >= howbig) {
|
||||
return howsmall;
|
||||
}
|
||||
int32_t diff = howbig - howsmall;
|
||||
return (int32_t)lv_rand(0, diff) + howsmall;
|
||||
}
|
||||
|
||||
static void lv_monkey_timer_cb(lv_timer_t * timer)
|
||||
{
|
||||
lv_monkey_t * monkey = lv_timer_get_user_data(timer);
|
||||
lv_indev_data_t * data = &monkey->indev_data;
|
||||
|
||||
switch(lv_indev_get_type(monkey->indev)) {
|
||||
case LV_INDEV_TYPE_POINTER:
|
||||
data->point.x = (int32_t)lv_monkey_random(0, LV_HOR_RES - 1);
|
||||
data->point.y = (int32_t)lv_monkey_random(0, LV_VER_RES - 1);
|
||||
break;
|
||||
case LV_INDEV_TYPE_ENCODER:
|
||||
data->enc_diff = (int16_t)lv_monkey_random(monkey->config.input_range.min, monkey->config.input_range.max);
|
||||
break;
|
||||
case LV_INDEV_TYPE_BUTTON:
|
||||
data->btn_id = (uint32_t)lv_monkey_random(monkey->config.input_range.min, monkey->config.input_range.max);
|
||||
break;
|
||||
case LV_INDEV_TYPE_KEYPAD: {
|
||||
int32_t index = lv_monkey_random(0, sizeof(lv_key_map) / sizeof(lv_key_map[0]) - 1);
|
||||
data->key = lv_key_map[index];
|
||||
break;
|
||||
}
|
||||
default:
|
||||
break;
|
||||
}
|
||||
|
||||
data->state = lv_monkey_random(0, 100) < 50 ? LV_INDEV_STATE_RELEASED : LV_INDEV_STATE_PRESSED;
|
||||
|
||||
lv_timer_set_period(monkey->timer, lv_monkey_random(monkey->config.period_range.min, monkey->config.period_range.max));
|
||||
}
|
||||
|
||||
#endif /*LV_USE_MONKEY*/
|
||||
@@ -0,0 +1,115 @@
|
||||
/**
|
||||
* @file lv_monkey.h
|
||||
*
|
||||
*/
|
||||
#ifndef LV_MONKEY_H
|
||||
#define LV_MONKEY_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
#include "../../lv_conf_internal.h"
|
||||
#include "../../indev/lv_indev.h"
|
||||
|
||||
#if LV_USE_MONKEY != 0
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
typedef struct _lv_monkey_t lv_monkey_t;
|
||||
|
||||
struct _lv_monkey_config_t {
|
||||
/** Input device type */
|
||||
lv_indev_type_t type;
|
||||
|
||||
/** Monkey execution period */
|
||||
struct {
|
||||
uint32_t min;
|
||||
uint32_t max;
|
||||
} period_range;
|
||||
|
||||
/** The range of input value */
|
||||
struct {
|
||||
int32_t min;
|
||||
int32_t max;
|
||||
} input_range;
|
||||
};
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
/**
|
||||
* Initialize a monkey config with default values
|
||||
* @param config pointer to 'lv_monkey_config_t' variable to initialize
|
||||
*/
|
||||
void lv_monkey_config_init(lv_monkey_config_t * config);
|
||||
|
||||
/**
|
||||
* Create monkey for test
|
||||
* @param config pointer to 'lv_monkey_config_t' variable
|
||||
* @return pointer to the created monkey
|
||||
*/
|
||||
lv_monkey_t * lv_monkey_create(const lv_monkey_config_t * config);
|
||||
|
||||
/**
|
||||
* Get monkey input device
|
||||
* @param monkey pointer to a monkey
|
||||
* @return pointer to the input device
|
||||
*/
|
||||
lv_indev_t * lv_monkey_get_indev(lv_monkey_t * monkey);
|
||||
|
||||
/**
|
||||
* Enable monkey
|
||||
* @param monkey pointer to a monkey
|
||||
* @param en set to true to enable
|
||||
*/
|
||||
void lv_monkey_set_enable(lv_monkey_t * monkey, bool en);
|
||||
|
||||
/**
|
||||
* Get whether monkey is enabled
|
||||
* @param monkey pointer to a monkey
|
||||
* @return return true if monkey enabled
|
||||
*/
|
||||
bool lv_monkey_get_enable(lv_monkey_t * monkey);
|
||||
|
||||
/**
|
||||
* Set the user_data field of the monkey
|
||||
* @param monkey pointer to a monkey
|
||||
* @param user_data pointer to the new user_data.
|
||||
*/
|
||||
void lv_monkey_set_user_data(lv_monkey_t * monkey, void * user_data);
|
||||
|
||||
/**
|
||||
* Get the user_data field of the monkey
|
||||
* @param monkey pointer to a monkey
|
||||
* @return the pointer to the user_data of the monkey
|
||||
*/
|
||||
void * lv_monkey_get_user_data(lv_monkey_t * monkey);
|
||||
|
||||
/**
|
||||
* Delete monkey
|
||||
* @param monkey pointer to monkey
|
||||
*/
|
||||
void lv_monkey_delete(lv_monkey_t * monkey);
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#endif /*LV_USE_MONKEY*/
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C"*/
|
||||
#endif
|
||||
|
||||
#endif /*LV_MONKEY_H*/
|
||||
@@ -0,0 +1,43 @@
|
||||
/**
|
||||
* @file lv_monkey_private.h
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef LV_MONKEY_PRIVATE_H
|
||||
#define LV_MONKEY_PRIVATE_H
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
/*********************
|
||||
* INCLUDES
|
||||
*********************/
|
||||
|
||||
#include "lv_monkey.h"
|
||||
|
||||
#if LV_USE_MONKEY != 0
|
||||
|
||||
/*********************
|
||||
* DEFINES
|
||||
*********************/
|
||||
|
||||
/**********************
|
||||
* TYPEDEFS
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* GLOBAL PROTOTYPES
|
||||
**********************/
|
||||
|
||||
/**********************
|
||||
* MACROS
|
||||
**********************/
|
||||
|
||||
#endif /* LV_USE_MONKEY != 0 */
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /*extern "C"*/
|
||||
#endif
|
||||
|
||||
#endif /*LV_MONKEY_PRIVATE_H*/
|
||||
Reference in New Issue
Block a user