1 /* 2 * Copyright 2005-2007 Haiku, Inc. 3 * Distributed under the terms of the MIT License. 4 * 5 * PS/2 bus manager 6 * 7 * Authors (in chronological order): 8 * Marcus Overhagen (marcus@overhagen.de) 9 */ 10 #ifndef __PS2_DEV_H 11 #define __PS2_DEV_H 12 13 struct ps2_dev; 14 typedef struct ps2_dev ps2_dev; 15 16 #include "ps2_common.h" 17 18 19 typedef struct { 20 bigtime_t time; 21 uint8 data; 22 bool error; 23 } data_history; 24 25 struct ps2_dev { 26 const char * name; 27 bool active; 28 uint8 idx; 29 sem_id result_sem; 30 vint32 flags; 31 uint8 * result_buf; 32 int result_buf_idx; 33 int result_buf_cnt; 34 void * cookie; 35 data_history history[2]; 36 ps2_dev * parent_dev; 37 size_t packet_size; 38 39 // functions 40 void (*disconnect)(ps2_dev *); 41 int32 (*handle_int)(ps2_dev *); 42 status_t (*command)(ps2_dev *dev, uint8 cmd, const uint8 *out, 43 int out_count, uint8 *in, int in_count, bigtime_t timeout); 44 }; 45 46 #define PS2_DEVICE_COUNT 6 47 48 extern ps2_dev ps2_device[PS2_DEVICE_COUNT]; 49 50 #define PS2_DEVICE_MOUSE 0 51 #define PS2_DEVICE_SYN_PASSTHROUGH 4 52 #define PS2_DEVICE_KEYB 5 53 54 #define PS2_FLAG_KEYB (1 << 0) 55 #define PS2_FLAG_OPEN (1 << 1) 56 #define PS2_FLAG_ENABLED (1 << 2) 57 #define PS2_FLAG_CMD (1 << 3) 58 #define PS2_FLAG_ACK (1 << 4) 59 #define PS2_FLAG_NACK (1 << 5) 60 #define PS2_FLAG_GETID (1 << 6) 61 62 void ps2_dev_send(ps2_dev *dev, uint8 data); 63 64 status_t ps2_dev_detect_pointing(ps2_dev *dev, device_hooks **hooks); 65 66 status_t ps2_dev_init(void); 67 void ps2_dev_exit(void); 68 69 status_t standard_command_timeout(ps2_dev *dev, uint8 cmd, const uint8 *out, 70 int out_count, uint8 *in, int in_count, bigtime_t timeout); 71 72 status_t ps2_dev_command(ps2_dev *dev, uint8 cmd, const uint8 *out, 73 int out_count, uint8 *in, int in_count); 74 status_t ps2_dev_command_timeout(ps2_dev *dev, uint8 cmd, const uint8 *out, 75 int out_count, uint8 *in, int in_count, bigtime_t timeout); 76 77 status_t ps2_reset_mouse(ps2_dev *dev); 78 79 void ps2_dev_publish(ps2_dev *dev); 80 void ps2_dev_unpublish(ps2_dev *dev); 81 82 int32 ps2_dev_handle_int(ps2_dev *dev); 83 84 #endif 85