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 41typedef 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} touchpad_info; 53 54 55typedef struct { 56 ps2_dev* dev; 57 58 sem_id synaptics_sem; 59struct packet_buffer* synaptics_ring_buffer; 60 size_t packet_index; 61 uint8 buffer[PS2_PACKET_SYNAPTICS]; 62 uint8 mode; 63 64 TouchpadMovement movementMaker; 65 66 touchpad_settings settings; 67} synaptics_cookie; 68 69 70status_t synaptics_pass_through_set_packet_size(ps2_dev *dev, uint8 size); 71status_t passthrough_command(ps2_dev *dev, uint8 cmd, const uint8 *out, 72 int out_count, uint8 *in, int in_count, bigtime_t timeout); 73status_t probe_synaptics(ps2_dev *dev); 74 75status_t synaptics_open(const char *name, uint32 flags, void **_cookie); 76status_t synaptics_close(void *_cookie); 77status_t synaptics_freecookie(void *_cookie); 78status_t synaptics_ioctl(void *_cookie, uint32 op, void *buffer, size_t length); 79 80int32 synaptics_handle_int(ps2_dev *dev); 81void synaptics_disconnect(ps2_dev *dev); 82 83extern device_hooks gSynapticsDeviceHooks; 84 85#endif // PS2_SYNAPTICS_H 86