embox

Форк
0
98 строк · 1.8 Кб
1
/**
2
 * @file
3
 *
4
 * @date Apr 28, 2021
5
 * @author Anton Bondarev
6
 */
7

8
#include <util/log.h>
9

10
#include <stdint.h>
11

12
#include <kernel/irq.h>
13

14
#include <drivers/input/input_dev.h>
15
#include <drivers/common/memory.h>
16

17
#include <drivers/pl050.h>
18
#include <drivers/ps_mouse.h>
19

20
#include <embox/unit.h>
21

22
#define BASE_ADDR OPTION_GET(NUMBER,base_addr)
23
#define IRQ_NUM   OPTION_GET(NUMBER,irq_num)
24

25
EMBOX_UNIT_INIT(pl050_mouse_init);
26

27

28
struct pl050_mouse_indev {
29
	struct input_dev input_dev;
30
	struct pl050 *pl050_dev;
31
};
32

33
static int pl050_mouse_stop(struct input_dev *dev) {
34

35
	/* TODO */
36
	return 0;
37
}
38

39
static const struct input_dev_ops mouse_input_ops = {
40
	/*.start = ps_mouse_start,*/
41
	.stop = pl050_mouse_stop,
42
};
43

44
static struct pl050_mouse_indev mouse_dev = {
45
	.input_dev = {
46
		.ops = &mouse_input_ops,
47
		.name = "ps-mouse",
48
		.type = INPUT_DEV_MOUSE,
49
	},
50
};
51

52
static irq_return_t pl050_mouse_irq_hnd(unsigned int irq_nr, void *data) {
53
	struct pl050_mouse_indev *pl050_mouse_indev;
54
	struct pl050 *pl050;
55
	uint8_t rx_data[3];
56
	uint32_t tmp;
57
	struct input_dev *indev;
58

59
	pl050_mouse_indev = (struct pl050_mouse_indev *)data;
60
	pl050 = pl050_mouse_indev->pl050_dev;
61

62
	indev = &pl050_mouse_indev->input_dev;
63

64
	tmp = pl050->data;
65
	if (tmp == MOUSE_ACK) {
66
		goto out;
67
	}
68
	rx_data[0] = tmp & 0xFF;
69

70
	tmp = pl050->data;
71
	rx_data[1] = tmp & 0xFF;
72

73
	tmp = pl050->data;
74
	rx_data[2] = tmp & 0xFF;
75

76
	ps_mouse_event_send(indev, rx_data);
77

78
out:
79
	return IRQ_HANDLED;
80
}
81

82
static int pl050_mouse_init(void) {
83
	int res;
84

85
	res = irq_attach(IRQ_NUM, pl050_mouse_irq_hnd, 0,
86
					 &mouse_dev, "ps mouse");
87
	if (res < 0) {
88
		return res;
89
	}
90

91
	mouse_dev.pl050_dev = (void*)(uintptr_t)BASE_ADDR;
92

93
	pl050_init(mouse_dev.pl050_dev);
94

95
	return input_dev_register(&mouse_dev.input_dev);
96
}
97

98
PERIPH_MEMORY_DEFINE(pl050_mouse, BASE_ADDR, 0x1000);
99

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.