Line data Source code
1 1 : /*
2 : * Copyright (c) 2019 Intel Corporation
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : /**
8 : * @file
9 : * @brief Public API for PS/2 devices such as keyboard and mouse.
10 : * Callers of this API are responsible for setting the typematic rate
11 : * and decode keys using their desired scan code tables.
12 : */
13 :
14 : #ifndef ZEPHYR_INCLUDE_DRIVERS_PS2_H_
15 : #define ZEPHYR_INCLUDE_DRIVERS_PS2_H_
16 :
17 : #include <errno.h>
18 : #include <zephyr/types.h>
19 : #include <stddef.h>
20 : #include <zephyr/device.h>
21 :
22 : #ifdef __cplusplus
23 : extern "C" {
24 : #endif
25 :
26 : /**
27 : * @brief PS/2 Driver APIs
28 : * @defgroup ps2_interface PS/2 Driver APIs
29 : * @ingroup io_interfaces
30 : * @{
31 : */
32 :
33 : /**
34 : * @brief PS/2 callback called when user types or click a mouse.
35 : *
36 : * @param dev Pointer to the device structure for the driver instance.
37 : * @param data Data byte passed pack to the user.
38 : */
39 1 : typedef void (*ps2_callback_t)(const struct device *dev, uint8_t data);
40 :
41 : /**
42 : * @cond INTERNAL_HIDDEN
43 : *
44 : * PS2 driver API definition and system call entry points
45 : *
46 : * (Internal use only.)
47 : */
48 : typedef int (*ps2_config_t)(const struct device *dev,
49 : ps2_callback_t callback_isr);
50 : typedef int (*ps2_read_t)(const struct device *dev, uint8_t *value);
51 : typedef int (*ps2_write_t)(const struct device *dev, uint8_t value);
52 : typedef int (*ps2_disable_callback_t)(const struct device *dev);
53 : typedef int (*ps2_enable_callback_t)(const struct device *dev);
54 :
55 : __subsystem struct ps2_driver_api {
56 : ps2_config_t config;
57 : ps2_read_t read;
58 : ps2_write_t write;
59 : ps2_disable_callback_t disable_callback;
60 : ps2_enable_callback_t enable_callback;
61 : };
62 : /**
63 : * @endcond
64 : */
65 :
66 : /**
67 : * @brief Configure a ps2 instance.
68 : *
69 : * @param dev Pointer to the device structure for the driver instance.
70 : * @param callback_isr called when PS/2 devices reply to a configuration
71 : * command or when a mouse/keyboard send data to the client application.
72 : *
73 : * @retval 0 If successful.
74 : * @retval Negative errno code if failure.
75 : */
76 1 : __syscall int ps2_config(const struct device *dev,
77 : ps2_callback_t callback_isr);
78 :
79 : static inline int z_impl_ps2_config(const struct device *dev,
80 : ps2_callback_t callback_isr)
81 : {
82 : const struct ps2_driver_api *api =
83 : (struct ps2_driver_api *)dev->api;
84 :
85 : return api->config(dev, callback_isr);
86 : }
87 :
88 : /**
89 : * @brief Write to PS/2 device.
90 : *
91 : * @param dev Pointer to the device structure for the driver instance.
92 : * @param value Data for the PS2 device.
93 : *
94 : * @retval 0 If successful.
95 : * @retval Negative errno code if failure.
96 : */
97 1 : __syscall int ps2_write(const struct device *dev, uint8_t value);
98 :
99 : static inline int z_impl_ps2_write(const struct device *dev, uint8_t value)
100 : {
101 : const struct ps2_driver_api *api =
102 : (const struct ps2_driver_api *)dev->api;
103 :
104 : return api->write(dev, value);
105 : }
106 :
107 : /**
108 : * @brief Read slave-to-host values from PS/2 device.
109 : * @param dev Pointer to the device structure for the driver instance.
110 : * @param value Pointer used for reading the PS/2 device.
111 : *
112 : * @retval 0 If successful.
113 : * @retval Negative errno code if failure.
114 : */
115 1 : __syscall int ps2_read(const struct device *dev, uint8_t *value);
116 :
117 : static inline int z_impl_ps2_read(const struct device *dev, uint8_t *value)
118 : {
119 : const struct ps2_driver_api *api =
120 : (const struct ps2_driver_api *)dev->api;
121 :
122 : return api->read(dev, value);
123 : }
124 :
125 : /**
126 : * @brief Enables callback.
127 : * @param dev Pointer to the device structure for the driver instance.
128 : *
129 : * @retval 0 If successful.
130 : * @retval Negative errno code if failure.
131 : */
132 1 : __syscall int ps2_enable_callback(const struct device *dev);
133 :
134 : static inline int z_impl_ps2_enable_callback(const struct device *dev)
135 : {
136 : const struct ps2_driver_api *api =
137 : (const struct ps2_driver_api *)dev->api;
138 :
139 : if (api->enable_callback == NULL) {
140 : return -ENOSYS;
141 : }
142 :
143 : return api->enable_callback(dev);
144 : }
145 :
146 : /**
147 : * @brief Disables callback.
148 : * @param dev Pointer to the device structure for the driver instance.
149 : *
150 : * @retval 0 If successful.
151 : * @retval Negative errno code if failure.
152 : */
153 1 : __syscall int ps2_disable_callback(const struct device *dev);
154 :
155 : static inline int z_impl_ps2_disable_callback(const struct device *dev)
156 : {
157 : const struct ps2_driver_api *api =
158 : (const struct ps2_driver_api *)dev->api;
159 :
160 : if (api->disable_callback == NULL) {
161 : return -ENOSYS;
162 : }
163 :
164 : return api->disable_callback(dev);
165 : }
166 :
167 : #ifdef __cplusplus
168 : }
169 : #endif
170 :
171 : /**
172 : * @}
173 : */
174 :
175 : #include <zephyr/syscalls/ps2.h>
176 :
177 : #endif /* ZEPHYR_INCLUDE_DRIVERS_PS2_H_ */
|