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