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 "packet_buffer.h" 15 #include "ps2_service.h" 16 17 18 #define SYN_TOUCHPAD 0x47 19 20 // Synaptics modes (values of the "mode" field in synaptics_cookie) 21 #define SYN_MODE_ABSOLUTE (1 << 7) 22 // Absolute mode reports the absolute X/Y position of the finger, 23 // instead of relative X/Y movement 24 25 #define SYN_MODE_W (1 << 0) 26 // Adds finger width (W) value in addition to absolute X/Y 27 #define SYN_MODE_EXTENDED_W (1 << 2) 28 // Supports tracking for multiple fingers 29 #define SYN_FOUR_BYTE_CHILD (1 << 1) 30 // Guest packets size for pass-through device 31 #define SYN_MODE_SLEEP (1 << 3) 32 // Low power sleep mode 33 #define SYN_MODE_PASSTHROUGH_ACPI (1 << 4) 34 #define SYN_MODE_PASSTHROUGH_TRANSPARENT (1 << 5) 35 #define SYN_MODE_HIGH_RATE (1 << 6) 36 // Use 80 packets per second instead of 40 37 38 // Synaptics Passthrough port 39 #define SYN_CHANGE_MODE 0x14 40 #define SYN_PASSTHROUGH_CMD 0x28 41 42 43 #define SYNAPTICS_HISTORY_SIZE 256 44 45 // no touchpad / left / right button pressed 46 #define IS_SYN_PT_PACKAGE(val) ((val[0] & 0xFC) == 0x84 \ 47 && (val[3] & 0xCC) == 0xc4) 48 49 50 typedef struct { 51 ps2_dev* dev; 52 53 sem_id synaptics_sem; 54 struct packet_buffer* synaptics_ring_buffer; 55 size_t packet_index; 56 uint8 buffer[PS2_PACKET_SYNAPTICS]; 57 uint8 mode; 58 } synaptics_cookie; 59 60 61 status_t synaptics_pass_through_set_packet_size(ps2_dev *dev, uint8 size); 62 status_t passthrough_command(ps2_dev *dev, uint8 cmd, const uint8 *out, 63 int out_count, uint8 *in, int in_count, bigtime_t timeout); 64 status_t probe_synaptics(ps2_dev *dev); 65 66 status_t synaptics_open(const char *name, uint32 flags, void **_cookie); 67 status_t synaptics_close(void *_cookie); 68 status_t synaptics_freecookie(void *_cookie); 69 status_t synaptics_ioctl(void *_cookie, uint32 op, void *buffer, size_t length); 70 71 int32 synaptics_handle_int(ps2_dev *dev); 72 void synaptics_disconnect(ps2_dev *dev); 73 74 extern device_hooks gSynapticsDeviceHooks; 75 76 #endif // PS2_SYNAPTICS_H 77