1 /* 2 * Copyright 2008-2010, Haiku, Inc. 3 * Distributed under the terms of the MIT License. 4 * 5 * Authors: 6 * Clemens Zeidler (haiku@Clemens-Zeidler.de) 7 */ 8 #ifndef PS2_SYNAPTICS_H 9 #define PS2_SYNAPTICS_H 10 11 12 #include <KernelExport.h> 13 14 #include <touchpad_settings.h> 15 16 #include "movement_maker.h" 17 #include "packet_buffer.h" 18 #include "ps2_service.h" 19 20 21 #define SYN_TOUCHPAD 0x47 22 // Synaptics modes 23 #define SYN_ABSOLUTE_MODE 0x80 24 // Absolute plus w mode 25 #define SYN_ABSOLUTE_W_MODE 0x81 26 #define SYN_FOUR_BYTE_CHILD (1 << 1) 27 // Low power sleep mode 28 #define SYN_SLEEP_MODE 0x0C 29 // Synaptics Passthrough port 30 #define SYN_CHANGE_MODE 0x14 31 #define SYN_PASSTHROUGH_CMD 0x28 32 33 34 #define SYNAPTICS_HISTORY_SIZE 256 35 36 // no touchpad / left / right button pressed 37 #define IS_SYN_PT_PACKAGE(val) ((val[0] & 0xFC) == 0x84 \ 38 && (val[3] & 0xCC) == 0xc4) 39 40 41 typedef struct { 42 uint8 majorVersion; 43 uint8 minorVersion; 44 45 bool capExtended; 46 bool capMiddleButton; 47 bool capSleep; 48 bool capFourButtons; 49 bool capMultiFinger; 50 bool capPalmDetection; 51 bool capPassThrough; 52 bool capClickPad; 53 54 uint8 nExtendedButtons; 55 uint8 firstExtendedButton; 56 uint8 extendedButtonsState; 57 } touchpad_info; 58 59 60 typedef struct { 61 ps2_dev* dev; 62 63 sem_id synaptics_sem; 64 struct packet_buffer* synaptics_ring_buffer; 65 size_t packet_index; 66 uint8 buffer[PS2_PACKET_SYNAPTICS]; 67 uint8 mode; 68 69 TouchpadMovement movementMaker; 70 71 touchpad_settings settings; 72 } synaptics_cookie; 73 74 75 status_t synaptics_pass_through_set_packet_size(ps2_dev *dev, uint8 size); 76 status_t passthrough_command(ps2_dev *dev, uint8 cmd, const uint8 *out, 77 int out_count, uint8 *in, int in_count, bigtime_t timeout); 78 status_t probe_synaptics(ps2_dev *dev); 79 80 status_t synaptics_open(const char *name, uint32 flags, void **_cookie); 81 status_t synaptics_close(void *_cookie); 82 status_t synaptics_freecookie(void *_cookie); 83 status_t synaptics_ioctl(void *_cookie, uint32 op, void *buffer, size_t length); 84 85 int32 synaptics_handle_int(ps2_dev *dev); 86 void synaptics_disconnect(ps2_dev *dev); 87 88 extern device_hooks gSynapticsDeviceHooks; 89 90 #endif // PS2_SYNAPTICS_H 91