현재 위치 - 중국 분류 정보 발표 플랫폼 - 비즈니스 서비스 정보 - Input event2 사용 방법

Input event2 사용 방법

1. 정의된 구조체는 input_dev

를 상속합니다

Struct bma150_data {

Structi2c _ client * bma150 _ client;

Struct bma150 _ platform _ data * platform _ data;

Intirq;

Atomic_t delay;;

Unsigned char mode;;

Structinput _ dev * input;

Struct BMA 150 ACC 값 :

Struct mutex value_mutex;;

Struct mutex mode_mutex;;

Structdelayed _ workwork;

Structwork _ structirq _ work;

}

2. input_dev 에 이름과 버스 유형을 지정합니다. input 이벤트 유형에 대해서는 다음 코드를 참조할 수 있습니다

EV_MSC 유형 참조 아래

Set_bit(EV_MSC, dev-gt;; Evbit);

Set_bit(MSC_RAW, dev-gt;; Mscbit);

EV_ABS 유형 참조 아래

Input-gt;; Evbit [0] = bit (ev _ ABS);

Input-gt;; Absbit [0] = bit (ABS _ x) | bit (ABS _ y) | bit (ABS _ z);

Input_set_capability 실제 호출도 __set_bit,

입니다

Input_set_abs_params 호출은 실제로 set_bit 이며 매개변수 (dev, axis, min, max, fuzz, flat) fuzz 에 필터 효과가 있습니다

3. input_register_device(dev) 를 통해 input 디바이스 등록

Static int bma150 _ input _ init (struct bma150 _ data * bma150)

{

Structinput _ dev * dev;

Interr;

Dev = input _ allocate _ device ();

If (! Dev)

Return -ENOMEM;;

Dev-gt;; Name = SENSOR_NAME;;

Dev-gt;; Id.bustype = BUS_I2C;;

Input_set_capability(dEV, ev

_ABS, ABS _ misc);

Input_set_abs_params(dev, ABS_X, ABSMIN_2G, ABSMAX_2G, 0,0);

Input_set_abs_params(dev, ABS_Y, ABSMIN_2G, ABSMAX_2G, 0,0);

Input_set_abs_params(dev, ABS_Z, ABSMIN_2G, ABSMAX_2G, 0,0);

Input_set_drvdata(dev, bma150);

Err = input _ register _ device (dev);

If (err lt;; 0) {

Input _ free _ device (dev);

Return err;;

}

Bma 150-gt; Input = dev;;

Return 0;;

}

입력 번호

를 지정할 수 있다고 합니다

Dev-gt;; Phys = "BMA 150/input 0";

Dev-gt;; Id.bustype = BUS_HOST;;

4. 인터럽트 함수 또는 작업 대기열에서 input_event 에스컬레이션 이벤트 호출

Static inline void input _ report _ ABS (struct input _ dev * dev, unsigned int code, int value)

{

Input_event(dev, EV_ABS, 코드, 값);

}

Input_event 함수 설명, input 호출 input_handle_event

다양한 이벤트 유형에 대한 처리는 주로 input_handle_event 함수에 반영됩니다

Static void input _ handle _ event (structinput _ dev * dev,

Unsigned int type, unsigned int code, int value)

{

Intdisposition = input _ ignore _ event; //이벤트 무시

스위치 (유형) {

Case ev _ syn:

스위치 (코드) {

Casesyn _ config:

Disposition = input _ pass _ to _ all; //디바이스 및 handle 에 전달 처리

브레크;

Casesyn _ report:

If (! Dev-gt;; S

Ync) {

Dev-gt;; Sync = true;;

Disposition = input _ pass _ to _ handlers; //동기화 이벤트를 처리하기 위해 handle 에 전달

}

브레크;

Casesyn _ mt _ report:

Dev-gt;; Sync = false;;

Disposition = input _ pass _ to _ handlers; //핸드에게 멀티 터치 처리 전달

브레크;

}

브레크;

Case ev _ key:

If (if (is_event_supported(code (코드, dev-gt;; 키 비트, 키 _ 최대) amp; Amp;;

! ! Test _ bit (코드, dev-gt;; 키)! = 값) {

If (값! = 2) {

_ _ change _ bit (코드, dev-gt;; 키);

If (값)

Input_start_autorepeat(dev, code);

Else

Input _ stop _ autorepeat (dev);

}

Disposition = input _ pass _ to _ handlers;

}

브레크;

Case ev _ SW://헤드폰 이벤트

If (if (is_event_supported(code (코드, dev-gt;; Swbit, SW_MAX) amp;; Amp;;

! ! Test _ bit (코드, dev-gt;; Sw)! = 값) {

_ _ change _ bit (코드, dev-gt;; Sw);

Disposition = input _ pass _ to _ handlers;

}

브레크;

Case ev _ ABS:

If (if (is_event_supported(code (코드, dev-gt;; Absbit, ABS_MAX))

Disposition = input _ handle _ ABS _ event (dev, 코드, amp;; Value); //여기서 호출된 input_handle_abs_event 는 마지막 값과 이번 값이 같은 이벤트를 필터링합니다

브레크;

Case ev _ rel:

If (is_event_su

P ported (코드, dev-gt;; Relbit, REL_MAX) amp;; Amp;; 값)

Disposition = input _ pass _ to _ handlers;

브레크;

Case ev _ MSC:

If (if (is_event_supported(code (코드, dev-gt;; Mscbit, MSC_MAX))

Disposition = input _ pass _ to _ all;

브레크;

Case ev _ led:

If (if (is_event_supported(code (코드, dev-gt;; Ledbit, LED_MAX) amp;; Amp;;

! ! Test _ bit (코드, dev-gt;; Led)! = 값) {

_ _ change _ bit (코드, dev-gt;; Led);

Disposition = input _ pass _ to _ all;

}

브레크;

Case ev _ snd:

If (if (is_event_supported(code (코드, dev-gt;; Sndbit, SND_MAX)) {

If (! ! Test _ bit (코드, dev-gt;; Snd)! =! ! 값)

_ _ change _ bit (코드, dev-gt;; Snd);

Disposition = input _ pass _ to _ all;

}

브레크;

Case ev _ rep:

If (code lt;; = rep _ maxamp; Amp;; Valuegt; = 0 amp;; Amp;; Dev-gt;; Rep [코드]! = 값) {

Dev-gt;; Rep [코드] = 값;

Disposition = input _ pass _ to _ all;

}

브레크;

Case ev _ ff:

If (valuegt; = 0)

Disposition = input _ pass _ to _ all;

브레크;

Case ev _ PWR:

Disposition = input _ pass _ to _ all;

브레크;

}

If (disposition! = input _ ignore _ eventamp; Amp;; 타입! = EV_SYN)

#111#