2021-11-21 00:20:20 +00:00

164 lines
6.7 KiB
C

// ===========================================================================
// 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)