371 lines
9.6 KiB
C
371 lines
9.6 KiB
C
#ifndef SYS_EVENT_H
|
||
#define SYS_EVENT_H
|
||
|
||
#include "generic/typedef.h"
|
||
#include "generic/list.h"
|
||
#include "generic/rect.h"
|
||
|
||
#define KEY_POWER_START 0
|
||
#define KEY_POWER 1
|
||
#define KEY_PREV 2
|
||
#define KEY_NEXT 3
|
||
#define KEY_OK 4
|
||
#define KEY_CANCLE 5
|
||
#define KEY_MENU 6
|
||
#define KEY_MODE 7
|
||
#define KEY_PHOTO 8
|
||
#define KEY_ENC 9
|
||
#define KEY_VOLUME_DEC 10
|
||
#define KEY_VOLUME_INC 11
|
||
#define KEY_PHONE 12
|
||
|
||
|
||
#define KEY_LEFT 37
|
||
#define KEY_UP 38
|
||
#define KEY_RIGHT 39
|
||
#define KEY_DOWN 40
|
||
|
||
#define KEY_0 48
|
||
#define KEY_1 49
|
||
#define KEY_2 50
|
||
#define KEY_3 51
|
||
#define KEY_4 52
|
||
#define KEY_5 53
|
||
#define KEY_6 54
|
||
#define KEY_7 55
|
||
#define KEY_8 56
|
||
#define KEY_9 57
|
||
|
||
|
||
#define KEY_F1 60
|
||
|
||
#define SYS_ALL_EVENT 0xffff
|
||
#define SYS_KEY_EVENT 0x0001
|
||
#define SYS_TOUCH_EVENT 0x0002
|
||
#define SYS_DEVICE_EVENT 0x0004
|
||
#define SYS_NET_EVENT 0x0008
|
||
#define SYS_BT_EVENT 0x0010
|
||
#define SYS_IR_EVENT 0x0020
|
||
#define SYS_PBG_EVENT 0x0040
|
||
#define SYS_BT_AI_EVENT 0x0080
|
||
#define SYS_AI_EVENT 0x0100
|
||
#define SYS_MATRIX_KEY_EVENT 0x0200
|
||
#define SYS_TOUCHPAD_EVENT 0x0400
|
||
#define SYS_ADT_EVENT 0x0800
|
||
|
||
|
||
|
||
|
||
#define DEVICE_EVENT_FROM_AT_UART (('A' << 24) | ('T' << 16) | ('U' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_CHARGE (('C' << 24) | ('H' << 16) | ('G' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_SOUNDBOX_TOOL (('S' << 24) | ('B' << 16) | ('T' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_POWER (('P' << 24) | ('O' << 16) | ('W' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_CI_UART (('C' << 24) | ('I' << 16) | ('U' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_CI_TWS (('C' << 24) | ('I' << 16) | ('T' << 8) | '\0')
|
||
#define DEVICE_EVENT_CHARGE_STORE (('S' << 24) | ('T' << 16) | ('O' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_TONE (('T' << 24) | ('N' << 16) | ('E' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_FM (('F' << 24) | ('M' << 16) | ('\0'<< 8) | '\0')
|
||
#define KEY_EVENT_FROM_TWS (('T' << 24) | ('W' << 16) | ('S' << 8) | '\0')
|
||
#define SYS_BT_EVENT_FROM_TWS (('T' << 24) | ('W' << 16) | ('S' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_LINEIN (('A' << 24) | ('U' << 16) | ('X' << 8) | '\0')
|
||
#define DRIVER_EVENT_FROM_SD0 (('S' << 24) | ('D' << 16) | ('0' << 8) | '\0')
|
||
#define DRIVER_EVENT_FROM_SD1 (('S' << 24) | ('D' << 16) | ('1' << 8) | '\0')
|
||
#define DRIVER_EVENT_FROM_SD2 (('S' << 24) | ('D' << 16) | ('2' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_MUSIC (('M' << 24) | ('S' << 16) | ('C' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_USB_HOST (('U' << 24) | ('H' << 16) | '\0' | '\0')
|
||
#define DEVICE_EVENT_FROM_OTG (('O' << 24) | ('T' << 16) | ('G' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_PC (('P' << 24) | ('C' << 16) | '\0' | '\0')
|
||
#define DEVICE_EVENT_FROM_UAC (('U' << 24) | ('A' << 16) | ('C' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_ALM (('A' << 24) | ('L' << 16) | ('M' << 8) | '\0')
|
||
#define SYS_BT_EVENT_TYPE_CON_STATUS (('C' << 24) | ('O' << 16) | ('N' << 8) | '\0')
|
||
#define SYS_BT_EVENT_TYPE_HCI_STATUS (('H' << 24) | ('C' << 16) | ('I' << 8) | '\0')
|
||
#define SYS_BT_EVENT_BLE_STATUS (('B' << 24) | ('L' << 16) | ('E' << 8) | '\0')
|
||
#define SYS_BT_EVENT_FORM_COMMON (('C' << 24) | ('M' << 16) | ('M' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_KEY (('K' << 24) | ('E' << 16) | ('Y' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_CUSTOM (('C' << 24) | ('S' << 16) | ('T' << 8) | '\0')
|
||
#define SYS_BT_AI_EVENT_TYPE_STATUS (('B' << 24) | ('A' << 16) | ('I' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_UART_RX_OVERFLOW (('U' << 24) | ('R' << 16) | ('F' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_UART_RX_OUTTIME (('U' << 24) | ('R' << 16) | ('T' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_DAC (('D' << 24) | ('A' << 16) | ('C' << 8) | '\0')
|
||
#define SYS_EVENT_FROM_CTRLER (('C' << 24) | ('T' << 16) | ('R' << 8) | '\0')
|
||
#define SYS_EVENT_FROM_RECORD (('R' << 24) | ('E' << 16) | ('C' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_ENDLESS_LOOP_DEBUG (('E' << 24) | ('L' << 16) | ('D' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_EARTCH (('E' << 24) | ('T' << 16) | ('H' << 8) | '\0')
|
||
#define DEVICE_EVENT_ONLINE_DATA (('O' << 24) | ('L' << 16) | ('D' << 8) | '\0')
|
||
#define SYS_BT_EVENT_FROM_KEY (('K' << 24) | ('E' << 16) | ('Y' << 8) | '\0')
|
||
#define SYS_BT_EVENT_FORM_SELF (('S' << 24) | ('E' << 16) | ('F' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_ANC (('A' << 24) | ('N' << 16) | ('C' << 8) | '\0')
|
||
#define SYS_BT_EVENT_FORM_AT (('I' << 24) | ('A' << 16) | ('T' << 8) | '\0')
|
||
#define DEVICE_EVENT_FROM_ADAPTER (('A' << 24) | ('D' << 16) | ('A' << 8) | '\0')
|
||
|
||
enum {
|
||
KEY_EVENT_CLICK,
|
||
KEY_EVENT_LONG,
|
||
KEY_EVENT_HOLD,
|
||
KEY_EVENT_UP,
|
||
KEY_EVENT_DOUBLE_CLICK,
|
||
KEY_EVENT_TRIPLE_CLICK,
|
||
KEY_EVENT_FOURTH_CLICK,
|
||
KEY_EVENT_FIRTH_CLICK,
|
||
KEY_EVENT_USER,
|
||
KEY_EVENT_MAX,
|
||
};
|
||
|
||
|
||
enum {
|
||
DEVICE_EVENT_IN,
|
||
DEVICE_EVENT_OUT,
|
||
DEVICE_EVENT_ONLINE,
|
||
DEVICE_EVENT_OFFLINE,
|
||
DEVICE_EVENT_CHANGE,
|
||
};
|
||
|
||
enum {
|
||
TOUCH_EVENT_DOWN,
|
||
TOUCH_EVENT_MOVE,
|
||
TOUCH_EVENT_HOLD,
|
||
TOUCH_EVENT_UP,
|
||
TOUCH_EVENT_CLICK,
|
||
TOUCH_EVENT_DOUBLE_CLICK,
|
||
};
|
||
|
||
enum {
|
||
NET_EVENT_CMD,
|
||
NET_EVENT_DATA,
|
||
NET_EVENT_CONNECTED,
|
||
NET_EVENT_DISCONNECTED,
|
||
NET_EVENT_SMP_CFG_TIMEOUT,
|
||
};
|
||
|
||
|
||
struct key_event {
|
||
u8 init;
|
||
u8 type;
|
||
u16 event;
|
||
u32 value;
|
||
u32 tmr;
|
||
};
|
||
|
||
struct ir_event {
|
||
u8 event;
|
||
};
|
||
|
||
struct msg_event {
|
||
u8 event;
|
||
u8 value;
|
||
};
|
||
|
||
#if EVENT_TOUCH_ENABLE_CONFIG
|
||
struct touch_event {
|
||
u8 event;
|
||
struct position pos;
|
||
};
|
||
#endif
|
||
|
||
struct device_event {
|
||
u8 event;
|
||
int value;
|
||
};
|
||
struct chargestore_event {
|
||
u8 event;
|
||
u8 *packet ;
|
||
u8 size;
|
||
};
|
||
|
||
struct soundbox_tool_event {
|
||
u8 event;
|
||
u8 *packet ;
|
||
u8 size;
|
||
};
|
||
|
||
struct ancbox_event {
|
||
u8 event;
|
||
u32 value;
|
||
};
|
||
|
||
struct net_event {
|
||
u8 event;
|
||
u8 value;
|
||
};
|
||
struct bt_event {
|
||
u8 event;
|
||
u8 args[7];
|
||
u32 value;
|
||
};
|
||
|
||
struct axis_event {
|
||
u8 event;
|
||
s16 x;
|
||
s16 y;
|
||
};
|
||
|
||
struct codesw_event {
|
||
u8 event;
|
||
s8 value;
|
||
};
|
||
|
||
struct pbg_event {
|
||
u8 event;
|
||
u8 args[3];
|
||
};
|
||
|
||
struct adt_event {
|
||
u8 event;
|
||
u8 args[3];
|
||
};
|
||
|
||
struct uart_event {
|
||
void *ut_bus;
|
||
};
|
||
|
||
struct uart_cmd_event {
|
||
u8 type;
|
||
u8 cmd;
|
||
};
|
||
|
||
struct ai_event {
|
||
u32 value;
|
||
};
|
||
|
||
struct ear_event {
|
||
u8 value;
|
||
};
|
||
|
||
struct rcsp_event {
|
||
u8 event;
|
||
u8 args[6];
|
||
u8 size;
|
||
};
|
||
|
||
struct chargebox_event {
|
||
u8 event;
|
||
};
|
||
|
||
struct matrix_key_event {
|
||
u16 args[6]; //最多推6个按键出来,如果需要推多个按键需要自行修改,每个u16 低八位标识row 高八位标识col
|
||
u8 *map;
|
||
};
|
||
|
||
struct touchpad_event {
|
||
u8 gesture_event; //手势事件
|
||
s8 x;
|
||
s8 y;
|
||
};
|
||
|
||
struct sys_event {
|
||
u16 type;
|
||
u8 consumed;
|
||
void *arg;
|
||
union {
|
||
struct key_event key;
|
||
struct axis_event axis;
|
||
struct codesw_event codesw;
|
||
#if EVENT_TOUCH_ENABLE_CONFIG
|
||
struct touch_event touch;
|
||
#endif
|
||
struct device_event dev;
|
||
struct net_event net;
|
||
struct bt_event bt;
|
||
struct msg_event msg;
|
||
struct chargestore_event chargestore;
|
||
struct soundbox_tool_event soundbox_tool;
|
||
struct ir_event ir;
|
||
struct pbg_event pbg;
|
||
struct uart_event uart;
|
||
struct uart_cmd_event uart_cmd;
|
||
struct ai_event ai;
|
||
struct ear_event ear;
|
||
struct rcsp_event rcsp;
|
||
struct chargebox_event chargebox;
|
||
struct ancbox_event ancbox;
|
||
struct matrix_key_event matrix_key;
|
||
struct touchpad_event touchpad;
|
||
struct adt_event adt;
|
||
} u;
|
||
};
|
||
|
||
|
||
|
||
|
||
struct static_event_handler {
|
||
int event_type;
|
||
void (*handler)(struct sys_event *);
|
||
};
|
||
|
||
|
||
#define SYS_EVENT_HANDLER(type, fn, pri) \
|
||
const struct static_event_handler __event_handler_##fn sec(.sys_event.pri.handler) = { \
|
||
.event_type = type, \
|
||
.handler = fn, \
|
||
}
|
||
|
||
extern struct static_event_handler sys_event_handler_begin[];
|
||
extern struct static_event_handler sys_event_handler_end[];
|
||
|
||
#define list_for_each_static_event_handler(p) \
|
||
for (p = sys_event_handler_begin; p < sys_event_handler_end; p++)
|
||
|
||
|
||
|
||
int register_sys_event_handler(int event_type, int from, u8 priority,
|
||
void (*handler)(struct sys_event *));
|
||
|
||
|
||
void unregister_sys_event_handler(void (*handler)(struct sys_event *));
|
||
|
||
|
||
/*
|
||
* 事件通知函数,系统有事件发生时调用此函数
|
||
*/
|
||
void sys_event_notify(struct sys_event *e);
|
||
|
||
void sys_event_clear(struct sys_event *e);
|
||
|
||
void sys_key_event_disable();
|
||
|
||
|
||
void sys_key_event_enable();
|
||
|
||
void sys_key_event_filter_disable();
|
||
|
||
void sys_key_event_filter_enable();
|
||
|
||
void sys_touch_event_disable();
|
||
|
||
|
||
void sys_touch_event_enable();
|
||
|
||
/*
|
||
*下面四个为系统事件消耗函数,调用此函数后则对应的事件不在分发给其它任务
|
||
*
|
||
*/
|
||
void sys_event_consume(struct sys_event *e);
|
||
|
||
void sys_key_event_consume(struct key_event *e);
|
||
|
||
#if EVENT_TOUCH_ENABLE_CONFIG
|
||
void sys_touch_event_consume(struct touch_event *e);
|
||
#endif
|
||
|
||
void sys_device_event_consume(struct device_event *e);
|
||
|
||
|
||
/*
|
||
* 下面两个函数为按键和触摸事件接管函数,调用此函数后则对应的事件只发到当前任务
|
||
*
|
||
* on=true: 开始接管, on=false: 取消接管
|
||
*
|
||
* once: on = false 时有效,当前这次不接管, 事件可以继续发送到其它任务
|
||
*
|
||
*/
|
||
void sys_key_event_takeover(bool on, bool once);
|
||
|
||
void sys_touch_event_takeover(bool on, bool once);
|
||
|
||
|
||
int sys_key_event_map(struct key_event *org, struct key_event *new);
|
||
int sys_key_event_unmap(struct key_event *org, struct key_event *new);
|
||
|
||
|
||
#endif
|