@@ -24,8 +24,6 @@ int udp_socket;
24
24
25
25
void init_device (int fd )
26
26
{
27
- struct uinput_user_dev uidev ;
28
-
29
27
// enable synchronization
30
28
if (ioctl (fd , UI_SET_EVBIT , EV_SYN ) < 0 )
31
29
die ("error: ioctl UI_SET_EVBIT EV_SYN" );
@@ -52,23 +50,56 @@ void init_device(int fd)
52
50
if (ioctl (fd , UI_SET_ABSBIT , ABS_PRESSURE ) < 0 )
53
51
die ("error: ioctl UI_SETEVBIT ABS_PRESSURE" );
54
52
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
+ }
72
103
}
73
104
74
105
int prepare_socket ()
0 commit comments