@@ -24,8 +24,6 @@ int udp_socket;
2424
2525void init_device (int fd )
2626{
27- struct uinput_user_dev uidev ;
28-
2927 // enable synchronization
3028 if (ioctl (fd , UI_SET_EVBIT , EV_SYN ) < 0 )
3129 die ("error: ioctl UI_SET_EVBIT EV_SYN" );
@@ -52,23 +50,56 @@ void init_device(int fd)
5250 if (ioctl (fd , UI_SET_ABSBIT , ABS_PRESSURE ) < 0 )
5351 die ("error: ioctl UI_SETEVBIT ABS_PRESSURE" );
5452
55- memset (& uidev , 0 , sizeof (uidev ));
56- snprintf (uidev .name , UINPUT_MAX_NAME_SIZE , "Network Tablet" );
57- uidev .id .bustype = BUS_VIRTUAL ;
58- uidev .id .vendor = 0x1 ;
59- uidev .id .product = 0x1 ;
60- uidev .id .version = 1 ;
61- uidev .absmin [ABS_X ] = 0 ;
62- uidev .absmax [ABS_X ] = UINT16_MAX ;
63- uidev .absmin [ABS_Y ] = 0 ;
64- uidev .absmax [ABS_Y ] = UINT16_MAX ;
65- uidev .absmin [ABS_PRESSURE ] = 0 ;
66- uidev .absmax [ABS_PRESSURE ] = INT16_MAX ;
67- if (write (fd , & uidev , sizeof (uidev )) < 0 )
68- die ("error: write" );
69-
70- if (ioctl (fd , UI_DEV_CREATE ) < 0 )
71- die ("error: ioctl" );
53+ {
54+ struct uinput_abs_setup abs_setup ;
55+ struct uinput_setup setup ;
56+
57+ memset (& abs_setup , 0 , sizeof (abs_setup ));
58+ abs_setup .code = ABS_X ;
59+ abs_setup .absinfo .value = 0 ;
60+ abs_setup .absinfo .minimum = 0 ;
61+ abs_setup .absinfo .maximum = UINT16_MAX ;
62+ abs_setup .absinfo .fuzz = 0 ;
63+ abs_setup .absinfo .flat = 0 ;
64+ abs_setup .absinfo .resolution = 400 ;
65+ if (ioctl (fd , UI_ABS_SETUP , & abs_setup ) < 0 )
66+ die ("error: UI_ABS_SETUP ABS_X" );
67+
68+ memset (& abs_setup , 0 , sizeof (abs_setup ));
69+ abs_setup .code = ABS_Y ;
70+ abs_setup .absinfo .value = 0 ;
71+ abs_setup .absinfo .minimum = 0 ;
72+ abs_setup .absinfo .maximum = UINT16_MAX ;
73+ abs_setup .absinfo .fuzz = 0 ;
74+ abs_setup .absinfo .flat = 0 ;
75+ abs_setup .absinfo .resolution = 400 ;
76+ if (ioctl (fd , UI_ABS_SETUP , & abs_setup ) < 0 )
77+ die ("error: UI_ABS_SETUP ABS_Y" );
78+
79+ memset (& abs_setup , 0 , sizeof (abs_setup ));
80+ abs_setup .code = ABS_PRESSURE ;
81+ abs_setup .absinfo .value = 0 ;
82+ abs_setup .absinfo .minimum = 0 ;
83+ abs_setup .absinfo .maximum = INT16_MAX ;
84+ abs_setup .absinfo .fuzz = 0 ;
85+ abs_setup .absinfo .flat = 0 ;
86+ abs_setup .absinfo .resolution = 0 ;
87+ if (ioctl (fd , UI_ABS_SETUP , & abs_setup ) < 0 )
88+ die ("error: UI_ABS_SETUP ABS_PRESSURE" );
89+
90+ memset (& setup , 0 , sizeof (setup ));
91+ snprintf (setup .name , UINPUT_MAX_NAME_SIZE , "Network Tablet" );
92+ setup .id .bustype = BUS_VIRTUAL ;
93+ setup .id .vendor = 0x1 ;
94+ setup .id .product = 0x1 ;
95+ setup .id .version = 2 ;
96+ setup .ff_effects_max = 0 ;
97+ if (ioctl (fd , UI_DEV_SETUP , & setup ) < 0 )
98+ die ("error: UI_DEV_SETUP" );
99+
100+ if (ioctl (fd , UI_DEV_CREATE ) < 0 )
101+ die ("error: ioctl" );
102+ }
72103}
73104
74105int prepare_socket ()
0 commit comments