// =========================================================================== // Cybook Event Manager - cyevent.h // Copyright (C) 2008-2010 Bookeen - All rights reserved // =========================================================================== #define CYEV_CURRENT_VERSION 0x10 /* 1.0 */ #pragma pack(1) typedef struct sCyEvent_t { unsigned char type; unsigned char flags; unsigned char version; /*** Use for later compatibility */ union { unsigned char raw[13]; struct { unsigned short x1; unsigned short y1; unsigned short x2; unsigned short y2; unsigned char fingers; } touch; unsigned char key; unsigned char orientation; unsigned char timer_type; } data; } CyEvent_t; #pragma pack() #define NEW_CYEVENT(evType) { \ .type = evType, \ .flags = 0, \ .version = CYEV_CURRENT_VERSION, \ .data.raw = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, } enum { CYEVENT_TYPE_KEY = 'k', CYEVENT_TYPE_TOUCH = 't', CYEVENT_TYPE_ORIENTATION = 'o', CYEVENT_TYPE_TIMER = 'z', CYEVENT_TYPE_SYSTEM = 's', //CYIO_EVENT_ = '', }; // Key events #define CYEVENT_KEY_ENTER 'e' #define CYEVENT_KEY_RIGHT 'r' #define CYEVENT_KEY_DOWN 'd' #define CYEVENT_KEY_LEFT 'l' #define CYEVENT_KEY_UP 'u' #define CYEVENT_KEY_F1 '1' #define CYEVENT_KEY_F2 '2' #define CYEVENT_KEY_F3 '3' #define CYEVENT_KEY_F4 '4' #define CYEVENT_KEY_OFF 'o' #define CYEVENT_KEY_DSLP 's' #define CYEVENT_KEY_VOLP '+' #define CYEVENT_KEY_VOLN '-' #define CYEVENT_KEY_TOGGLE_ACCEL 'a' #define CYEVENT_KEY_FACTORY_RESET 'f' #define CYEVENT_KEY_USB_IN 'p' #define CYEVENT_KEY_USB_OUT 'P' /* Timer event */ #define CYEVENT_TIMER_SCREEN 's' #define CYEVENT_TIMER_DEVICE 'd' /* Flags definitions */ /* Bit 7 to Bit 4 are event type dependent. If the event need more than 4 flags, * it can use it's own "private" values */ /* Key event flags */ #define CYEVENT_FLAG_KEY_CONTROL_CHARS (1 << 7) /***< Signal that the current key is not a real key (ie not an ascii value) */ /* Touch event flags */ #define CYEVENT_FLAG_TOUCH_UP (0x1 << 6) #define CYEVENT_FLAG_TOUCH_MOVE (0x2 << 6) #define CYEVENT_FLAG_TOUCH_DOWN (0x3 << 6) #define CYEVENT_FLASH_TOUCH_MASK (0x3 << 6) #define CYEVENT_FLAG_TWO_FINGER_DOWN (1 << 5) /* System Event */ #define CYEVENT_FLAG_USB_MESSAGE (0x0 << 6) /***< this is an USB event */ //#define CYEVENT_FLAG_AC_MESSAGE (0x1 << 6) /***< this is an AC event */ #define CYEVENT_FLAG_SD_MESSAGE (0x2 << 6) /***< this is a SD event */ #define CYEVENT_FLAG_SYS_STATUS (1 << 5) /***< this event is a plug (1) or unplug (0) event */ /* These bits are set by the implementation and should not be touched by the driver / receiver */ /* Bit 3 to Bit 2 are reserved (v1) */ #define CYEVENT_FLAG_ENDOFREPEAT (1 << 1) #define CYEVENT_FLAG_REPEATEVENT (1 << 0) // =========================================================================== #ifdef __KERNEL__ // =========================================================================== /* Exported function of CyEvent */ int CyEvent_PushNewEvent(CyEvent_t *CyEvent, char wantRepeat); int CyEvent_PushNewUniqueEvent(CyEvent_t *CyEvent); int CyEvent_PushOrUpdateUniqueEvent(CyEvent_t *CyEvent, char wantRepeat); int CyEvent_PushOrUpdateUniqueEventFlaged(CyEvent_t *CyEvent, char wantRepeat, unsigned char flagMask); int CyEvent_InvalidateUniqueEvent(CyEvent_t *CyEvent); int CyEvent_InvalidateRepeatableEvent(CyEvent_t *CyEvent); // =========================================================================== typedef void (*callback_func)(void); typedef void (*callback2_func)(unsigned char data); typedef int (*ioctl_func)(unsigned int cmd, unsigned long arg); typedef struct cyevent_device { callback_func resume, suspend, deepsleep; callback2_func event_read; callback_func event_listempty; ioctl_func ioctl; unsigned int ioctl_prefix; unsigned char event_read_listen; /* 0 here mean all events */ } cyevent_device; #define NEW_CYDEV() { .resume = NULL, .suspend = NULL, .deepsleep = NULL .ioctl = NULL,\ .event_listempty = NULL, .event_read = NULL, .event_read_listen = 0, } #define IOCTL_PFX(c) ((c & 0xFF) << 8) int CyEvent_RegisterDevice(cyevent_device *dev); int CyEvent_DeregisterDevice(cyevent_device *dev); // =========================================================================== #endif // =========================================================================== /* TODO: This part should be moved elsewhere... */ // =========================================================================== /* Non directly CyIO related values, but used for the Accelerometer */ #define G_SENSOR_ON '1' #define G_SENSOR_OFF '0' #define G_SENSOR_CAL 'C' enum { CYGSENSOR_STATUS_ENABLED = 0, /** The accelerometer is enabled */ CYGSENSOR_STATUS_DISABLED = 1, /** The accelerometer is disabled */ CYGSENSOR_STATUS_NOTCALIB = 2, /** Not calibrated, or invalid calibration data */ CYGSENSOR_STATUS_CALIBRATED = 3, /** This status should never been read, but it could help to debug */ CYGSENSOR_STATUS_UNKNOWN = 4, /** This status should never been read, but it could help to debug */ CYGSENSOR_STATUS_CHIPDETECTED = 5, /** This status should never been read, used to say if we correctly detected the I²C accelerometer Chip */ CYGSENSOR_STATUS_CRITICALERROR = 6, /** If we are in this status, the G-Sensor is non working: possible cause, defective chip */ CYGSENSOR_STATUS_SUSPENDED = 7, /** The GSENSOR was on, the device go to deepsleep, so we go in this state. */ }; #define SET_IOCTL(c, v) (((c & 0xFF) << 8) | (v & 0xFF)) #define GET_IOCTL_PREFIX(c) (c & 0xFF00) #define CYIO_CTL_LED_CMD SET_IOCTL('C', 'l') #define CYIO_CTL_USB_STATUS SET_IOCTL('C', 'u') #define CYIO_CTL_SD_STATUS SET_IOCTL('C', 's') #define CYIO_CTL_PWRLED_CHANGE 0x002 #define CYIO_CTL_WFILED_CHANGE 0x020 #define CYIO_CTL_BTHLED_CHANGE 0x200 #define CYIO_CTL_PWRLED_SETON (CYIO_CTL_PWRLED_CHANGE | 0x001) #define CYIO_CTL_WFILED_SETON (CYIO_CTL_WFILED_CHANGE | 0x010) #define CYIO_CTL_BTHLED_SETON (CYIO_CTL_BTHLED_CHANGE | 0x100) #define CYIO_CTL_PWRLED_SETOFF (CYIO_CTL_PWRLED_CHANGE | 0x000) #define CYIO_CTL_WFILED_SETOFF (CYIO_CTL_WFILED_CHANGE | 0x000) #define CYIO_CTL_BTHLED_SETOFF (CYIO_CTL_BTHLED_CHANGE | 0x000)