cyevent.h 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163
  1. // ===========================================================================
  2. // Cybook Event Manager - cyevent.h
  3. // Copyright (C) 2008-2010 Bookeen - All rights reserved
  4. // ===========================================================================
  5. #define CYEV_CURRENT_VERSION 0x10 /* 1.0 */
  6. #pragma pack(1)
  7. typedef struct sCyEvent_t
  8. {
  9. unsigned char type;
  10. unsigned char flags;
  11. unsigned char version; /*** Use for later compatibility */
  12. union
  13. {
  14. unsigned char raw[13];
  15. struct
  16. {
  17. unsigned short x1;
  18. unsigned short y1;
  19. unsigned short x2;
  20. unsigned short y2;
  21. unsigned char fingers;
  22. } touch;
  23. unsigned char key;
  24. unsigned char orientation;
  25. unsigned char timer_type;
  26. } data;
  27. } CyEvent_t;
  28. #pragma pack()
  29. #define NEW_CYEVENT(evType) { \
  30. .type = evType, \
  31. .flags = 0, \
  32. .version = CYEV_CURRENT_VERSION, \
  33. .data.raw = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 }, }
  34. enum
  35. {
  36. CYEVENT_TYPE_KEY = 'k',
  37. CYEVENT_TYPE_TOUCH = 't',
  38. CYEVENT_TYPE_ORIENTATION = 'o',
  39. CYEVENT_TYPE_TIMER = 'z',
  40. CYEVENT_TYPE_SYSTEM = 's',
  41. //CYIO_EVENT_ = '',
  42. };
  43. // Key events
  44. #define CYEVENT_KEY_ENTER 'e'
  45. #define CYEVENT_KEY_RIGHT 'r'
  46. #define CYEVENT_KEY_DOWN 'd'
  47. #define CYEVENT_KEY_LEFT 'l'
  48. #define CYEVENT_KEY_UP 'u'
  49. #define CYEVENT_KEY_F1 '1'
  50. #define CYEVENT_KEY_F2 '2'
  51. #define CYEVENT_KEY_F3 '3'
  52. #define CYEVENT_KEY_F4 '4'
  53. #define CYEVENT_KEY_OFF 'o'
  54. #define CYEVENT_KEY_DSLP 's'
  55. #define CYEVENT_KEY_VOLP '+'
  56. #define CYEVENT_KEY_VOLN '-'
  57. #define CYEVENT_KEY_TOGGLE_ACCEL 'a'
  58. #define CYEVENT_KEY_FACTORY_RESET 'f'
  59. #define CYEVENT_KEY_USB_IN 'p'
  60. #define CYEVENT_KEY_USB_OUT 'P'
  61. /* Timer event */
  62. #define CYEVENT_TIMER_SCREEN 's'
  63. #define CYEVENT_TIMER_DEVICE 'd'
  64. /* Flags definitions */
  65. /* Bit 7 to Bit 4 are event type dependent. If the event need more than 4 flags,
  66. * it can use it's own "private" values
  67. */
  68. /* Key event flags */
  69. #define CYEVENT_FLAG_KEY_CONTROL_CHARS (1 << 7) /***< Signal that the current key is not a real key (ie not an ascii value) */
  70. /* Touch event flags */
  71. #define CYEVENT_FLAG_TOUCH_UP (0x1 << 6)
  72. #define CYEVENT_FLAG_TOUCH_MOVE (0x2 << 6)
  73. #define CYEVENT_FLAG_TOUCH_DOWN (0x3 << 6)
  74. #define CYEVENT_FLASH_TOUCH_MASK (0x3 << 6)
  75. #define CYEVENT_FLAG_TWO_FINGER_DOWN (1 << 5)
  76. /* System Event */
  77. #define CYEVENT_FLAG_USB_MESSAGE (0x0 << 6) /***< this is an USB event */
  78. //#define CYEVENT_FLAG_AC_MESSAGE (0x1 << 6) /***< this is an AC event */
  79. #define CYEVENT_FLAG_SD_MESSAGE (0x2 << 6) /***< this is a SD event */
  80. #define CYEVENT_FLAG_SYS_STATUS (1 << 5) /***< this event is a plug (1) or unplug (0) event */
  81. /* These bits are set by the implementation and should not be touched by the driver / receiver */
  82. /* Bit 3 to Bit 2 are reserved (v1) */
  83. #define CYEVENT_FLAG_ENDOFREPEAT (1 << 1)
  84. #define CYEVENT_FLAG_REPEATEVENT (1 << 0)
  85. // ===========================================================================
  86. #ifdef __KERNEL__
  87. // ===========================================================================
  88. /* Exported function of CyEvent */
  89. int CyEvent_PushNewEvent(CyEvent_t *CyEvent, char wantRepeat);
  90. int CyEvent_PushNewUniqueEvent(CyEvent_t *CyEvent);
  91. int CyEvent_PushOrUpdateUniqueEvent(CyEvent_t *CyEvent, char wantRepeat);
  92. int CyEvent_PushOrUpdateUniqueEventFlaged(CyEvent_t *CyEvent, char wantRepeat, unsigned char flagMask);
  93. int CyEvent_InvalidateUniqueEvent(CyEvent_t *CyEvent);
  94. int CyEvent_InvalidateRepeatableEvent(CyEvent_t *CyEvent);
  95. // ===========================================================================
  96. typedef void (*callback_func)(void);
  97. typedef void (*callback2_func)(unsigned char data);
  98. typedef int (*ioctl_func)(unsigned int cmd, unsigned long arg);
  99. typedef struct cyevent_device
  100. {
  101. callback_func resume, suspend, deepsleep;
  102. callback2_func event_read;
  103. callback_func event_listempty;
  104. ioctl_func ioctl;
  105. unsigned int ioctl_prefix;
  106. unsigned char event_read_listen; /* 0 here mean all events */
  107. } cyevent_device;
  108. #define NEW_CYDEV() { .resume = NULL, .suspend = NULL, .deepsleep = NULL .ioctl = NULL,\
  109. .event_listempty = NULL, .event_read = NULL, .event_read_listen = 0, }
  110. #define IOCTL_PFX(c) ((c & 0xFF) << 8)
  111. int CyEvent_RegisterDevice(cyevent_device *dev);
  112. int CyEvent_DeregisterDevice(cyevent_device *dev);
  113. // ===========================================================================
  114. #endif
  115. // ===========================================================================
  116. /* TODO: This part should be moved elsewhere... */
  117. // ===========================================================================
  118. /* Non directly CyIO related values, but used for the Accelerometer */
  119. #define G_SENSOR_ON '1'
  120. #define G_SENSOR_OFF '0'
  121. #define G_SENSOR_CAL 'C'
  122. enum
  123. {
  124. CYGSENSOR_STATUS_ENABLED = 0, /** The accelerometer is enabled */
  125. CYGSENSOR_STATUS_DISABLED = 1, /** The accelerometer is disabled */
  126. CYGSENSOR_STATUS_NOTCALIB = 2, /** Not calibrated, or invalid calibration data */
  127. CYGSENSOR_STATUS_CALIBRATED = 3, /** This status should never been read, but it could help to debug */
  128. CYGSENSOR_STATUS_UNKNOWN = 4, /** This status should never been read, but it could help to debug */
  129. CYGSENSOR_STATUS_CHIPDETECTED = 5, /** This status should never been read, used to say if we correctly detected the I²C accelerometer Chip */
  130. CYGSENSOR_STATUS_CRITICALERROR = 6, /** If we are in this status, the G-Sensor is non working: possible cause, defective chip */
  131. CYGSENSOR_STATUS_SUSPENDED = 7, /** The GSENSOR was on, the device go to deepsleep, so we go in this state. */
  132. };
  133. #define SET_IOCTL(c, v) (((c & 0xFF) << 8) | (v & 0xFF))
  134. #define GET_IOCTL_PREFIX(c) (c & 0xFF00)
  135. #define CYIO_CTL_LED_CMD SET_IOCTL('C', 'l')
  136. #define CYIO_CTL_USB_STATUS SET_IOCTL('C', 'u')
  137. #define CYIO_CTL_SD_STATUS SET_IOCTL('C', 's')
  138. #define CYIO_CTL_PWRLED_CHANGE 0x002
  139. #define CYIO_CTL_WFILED_CHANGE 0x020
  140. #define CYIO_CTL_BTHLED_CHANGE 0x200
  141. #define CYIO_CTL_PWRLED_SETON (CYIO_CTL_PWRLED_CHANGE | 0x001)
  142. #define CYIO_CTL_WFILED_SETON (CYIO_CTL_WFILED_CHANGE | 0x010)
  143. #define CYIO_CTL_BTHLED_SETON (CYIO_CTL_BTHLED_CHANGE | 0x100)
  144. #define CYIO_CTL_PWRLED_SETOFF (CYIO_CTL_PWRLED_CHANGE | 0x000)
  145. #define CYIO_CTL_WFILED_SETOFF (CYIO_CTL_WFILED_CHANGE | 0x000)
  146. #define CYIO_CTL_BTHLED_SETOFF (CYIO_CTL_BTHLED_CHANGE | 0x000)