forked from xboxdrv/xboxdrv
-
Notifications
You must be signed in to change notification settings - Fork 0
/
TODO
1029 lines (653 loc) · 34.1 KB
/
TODO
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
Pre Release Testing:
====================
* check the version number
* update NEWS
* check git status
* remove log_tmp()
VERSION="$(cat VERSION)"
TAG="v${VERSION}"
git tag -s "${TAG}" -m "xboxdrv ${TAG}"
# Normal Source
git archive --format=tar --prefix="xboxdrv-linux-${VERSION}/" ${TAG} | bzip2 -c > /tmp/xboxdrv-linux-${VERSION}.tar.bz2
git push --tags
* also remember to "git push --tags" both the xboxdrv-ubuntu and
xboxdrv-htdocs repositories
Ubuntu Package:
===============
cd ../debian/xboxdrv
# Ubuntu 11.04
# ============
git checkout master
git-import-orig -u 0.8.4 ~/projects/xboxdrv/htdocs/xboxdrv-linux-0.8.4.tar.bz2
dch -v "0.8.4-0.8.4-0ubuntu1" "xboxdrv 0.8.4 release"
git commit -m "xboxdrv 0.8.4 release" -a
git-buildpackage --git-no-create-orig --git-tag --git-builder="debuild -S"
sudo pbuilder --build --basetgz /var/cache/pbuilder/base-natty.tgz ../xboxdrv_0.8.4-0ubuntu1.dsc
dput my-ppa ../xboxdrv_0.8.4-0ubuntu1_source.changes
# Ubuntu 10.10
# ============
git checkout master-10.10
git merge master
git checkout master -- debian/changelog
dch -b -v "0.8.4-0ubuntu1~maverick1" --distribution maverick "xboxdrv 0.8.4 backport"
git commit -m "xboxdrv 0.8.4 backport" -a
git-buildpackage --git-no-create-orig --git-debian-branch=master-10.10 --git-tag --git-builder="debuild -S"
sudo pbuilder --build --basetgz /var/cache/pbuilder/base-maverick.tgz ../xboxdrv_0.8.4-0ubuntu1~maverick1.dsc
dput my-ppa ../xboxdrv_0.8.4-0ubuntu1~maverick1_source.changes
# Ubuntu 10.04 (LTS)
# ==================
git checkout master-lts
git merge master
git checkout master -- debian/changelog
dch -b -v "0.8.4-0ubuntu1~lucid1" --distribution lucid "xboxdrv 0.8.4 backport"
git commit -m "xboxdrv 0.8.4 backport" -a
git-buildpackage --git-no-create-orig --git-debian-branch=master-lts --git-tag --git-builder="debuild -S"
sudo pbuilder --build --basetgz /var/cache/pbuilder/base-lucid.tgz ../xboxdrv_0.8.4-0ubuntu1~lucid1.dsc
dput my-ppa ../xboxdrv_0.8.4-0ubuntu1~lucid1_source.changes
# Ubuntu 10.10 - xboxdrv-stable
# =============================
git checkout stable
git-buildpackage --git-no-create-orig --git-debian-branch=stable --git-tag --git-builder="debuild -S" --git-debian-tag="stable/0.6.6-1"
sudo pbuilder --build --basetgz /var/cache/pbuilder/base-maverick.tgz ../xboxdrv-stable_0.6.6-1.dsc
# Ubuntu 10.04 - xboxdrv-stable
# =============================
git checkout stable-lts
git-buildpackage --git-no-create-orig --git-debian-branch=stable-lts --git-tag --git-builder="debuild -S" --git-debian-tag="stable/0.6.6-1_lucid2"
sudo pbuilder --build --basetgz /var/cache/pbuilder/base-lucid.tgz ../xboxdrv-stable_0.6.6-1~lucid2.dsc
Target for 0.9.?
================
* allow ini-parser to handle \n\r style line endings better (i.e. handle \r properly as whitespace)
* in ini parser, allow options in global namespace, so that [xboxdrv]
isn't required
* http://dbus.freedesktop.org/doc/dbus-daemon.1.html
* update documentation on how to run as non-root (i.e. add user to
'root' group, see mail from james.c@videotron.ca)
* maybe do something with setuid() to drop permissions of the program that gets exec'd
* macros could need locking, so that the next one isn't run before the first one executed
* add NullButtonEvent, useful to kill unwanted keybindings
* Wiimote must try to reconnect after connection got lost
* use separate In/Out Ports for Modifier, never use InOut ports, make
InOut ports a feature of the parser (i.e. two args -> InOut, four
args -> 2 In, 2 Out)
* verify that all ButtonEvent and AxisEvent work, write test protocol for all
* document qmacro, Sector2ButtonModifier and analog-keyboard
* need support for blacklisting controllers so that they aren't picked up automatically (could recycle match rules)
* scan for BROKEN and "#if 0"
* do not use hardcoded default configuration, but read most stuff from
examples/default.xboxdrv
* support arguments in exec via quoting:
--ui-buttonmap du=exec:/usr/bin/script:Arg1:Arg2:Arg3
--ui-buttonmap du=exec:/usr/bin/script:[Arg1:Arg2:Arg3]
- what about more common quoting style:
--ui-buttonmap du=exec:"/usr/bin/script":"Arg1":"Arg2":"Arg3"
-> bad idea, as the " are eaten by bash, thus one would need double quots
--ui-buttonmap 'du=exec:"/usr/bin/script":"Arg1":"Arg2":"Arg3"'
* print warning or something when people don't use rel with -1
* update Standards-Version in the Ubuntu packages
* XboxController rumble code is wrong, old usb stuff
* -r 128,128 --quit doesn't work:
[TEMP] USBController::~USBController(): ~USBController
libusb:warning [libusb_close] internal signalling write failed, closing anyway
* chatpad doesn't get a 0x1b signal when its connected after xboxdrv
is already running
* rumble-test is broken completely
* add "null" button and key event to disable a button or axis (useful
to not triggering regular events when a shift button is pressed)
- LB+A=do_something,LB+B=null
- naming needs to be cleaned up: null (send nothing), void (clear
the binding) would be confusing
== Documentation ==
* X11 will convert a REL_WHEEL value of 1 into a single click (press
and release) of button 4, values of 3 would result in three clicks,
etc. REL_HWEEL will be button 6 and 7, add that to documentation somewhere
== Bugs ==
* multiple ControllerThread lead to UInput::update() being called
multiple times, as UInputMessageProcessor does call the update()
which is wrong
* glib/D-Bus causes crash/exit when USBController::get_name() returns an invalid unicode string?!
Checklist
=========
* print which sub features are enabled: chatpad, force feedback, headset
* make dbus optional, make --no-dbus an alias for --dbus NONE or --dbus false (easier for config file)
* check force feedback
* check output when --silent not given
* check clean shutdown
* check valgrind
* check daemon
* check autofire and other modifier that depend on time
* test all controller
* check that the child process works
* check that uinput gets its timeout/update calls (send_rel_event)
* cleanup a lot of the log_trace() and other temporary debug output
* check that repeated wireless controller connects and disconnects work [done]
* check that --quit works, currently broken
* search for "#ifdef FIXME"
* do proper error checking:
xboxdrv: src/usb_controller.cpp:218: void USBController::on_read_data(libusb_transfer*): Assertion `ret == LIBUSB_SUCCESS' failed.
Aborted
* exceptions in glib main loop might be dangerous and not really do what is intended
* move sigint/sigterm handling out of main.cpp and into xboxdrv_daemon.cpp (needs to use gmain_quit())
* LED do currently not get down on controller quit
* move LED setting into ControllerThread or somewhere else, not at controller creation time
* check that threads are cleaned up in daemon
* go through checklist, disable headset and chatpad support for now,
do a source only release
Virtual Keyboard
================
* -d, --device DEVICE - the input device from which to read
* -b, --buttonmap KEY_A=key:KEY_Z maps input key KEY_A directly to output
key KEY_Z, the graphical keyboard should show which of those bound
keys are pressed, mainly useful for shift, ctrl, backspace and
other frequently used keys
* -b, --buttonmap KEY_A=function:cursor_left,KEY_B=function:send_key
button KEY_A to some internal function, such as advancing the
cursor, sending the key currently under the cursor, etc.
* -a, --axismap
ABS_X+=function:cursor_right,ABS_X-=function:cursor_left maps a
half axis to an internal function, support for configurable
auto-repeat on analog axis should be provided
* full input filter and modifier stack might be worth a consideration
* crazy stuff: allow both left and right analog sticks for cursor
movement to allow double handed typing, sending would be done with
the trigger
Target for 0.9.0
================
* add support for multiple Wiimotes
-> can CWiid listen to multiple ones at once or does it need an Addr for that?
* cleanup all the assert("not implemented")/assert("implement me");
* set_axis_float(foo, 0) does not result in a 0 value due to two-complement
* cleanup axis, half-axis and rel events
-> Linux doesn't handle half-axis special
-> some filter might need to know if its a half axis or not
-> CompressHalfAxisFilter?
* allow something like [done, test it some more]:
void=BTN_A
to create empty events on uinput
- boost::tokenizer() with an empty input string produces no tokens,
not a single token with an empty string
- see: CommandLineParser::set_ui_buttonmap(ButtonMap& btn_map, const std::string& name, const std::string& value)
- need ButtonCombination::void() or something like that, just
ButtonCombination() probably already does the right thing, except
for the btn_map.lookup() thing
ButtonCombination::from_string("void") -> ButtonCombination() could be the solution
* implement AxisEvent::send_clear()
* rewrite AxisMap to support unlimited number of shift key
* implement ButtonEventPtr ButtonMap::lookup(const ButtonCombination& buttons) const;
* check if key_copy_modifier is needed or if it could be done with
axismap/buttonmap
* add --clear-buttonmap, --clear-axismap
* make --led X part of the --config, that would allow free LED switching
* add battery status as axis output
* wireless controller LED should be reset on connect
* "--ui-buttonmap=void" style button events are broken
* Playstation3 Controller ignores its analog data and doesn't record it into ControllerMsg
* don't bother with virtualkeyboard, just make it basically functional, not polished
* cleanup event output, add ControllerMessageDescription or something like that
* check that Playstation3 controller works with new ControllerMessage
* mouse emulation is broken?! axis are inverted
* update/fix man-page: document
-> rewrite the --ui-axismap, --ui-buttonmap section, currently kind
of confusing and overlapping with Input Event section
* test if its possible to mix cycle-key with macro: or other advanced
ButtonEvents
* "--dbus system" currently does not work as expected
$ sudo ./xboxdrv --daemon --dbus system --quiet
[ERROR] XboxdrvDaemon::run(): fatal exception: failed to get unique dbus name: Connection ":1.55" is not allowed to own the service "org.seul.Xboxdrv" due to security policies in the configuration file
libusb:warning [libusb_close] internal signalling write failed, closing anyway
libusb:warning [libusb_close] internal signalling write failed, closing anyway
libusb:warning [libusb_close] internal signalling write failed, closing anyway
libusb:warning [libusb_close] internal signalling write failed, closing anyway
-> http://stackoverflow.com/questions/4560877/dbus-bus-request-name-connections-are-not-allowed-to-own-the-service
* update/fix man-page
-> rewrite the --ui-axismap, --ui-buttonmap section, currently kind
of confusing
-> add --dbus documentation
* cycle-key is incomplete, should have additional mode that allows
next/prev without sending events, also has issues with stuck buttons
when multiple keys are pressed
-> only one key should be allowed to be pressed, last one will always be released (still fishy)
-> separate last and curr key to allow toggle without press
-> have each ButtonEvent be responsible to release the keys it
pressed? -> tricky, as it doesn't know those right now
-> need a time delay before button is actually send for situations
where sending the key is expensive (weapon switching in game might be slow)
-> add an option to have the cycle sequence not wrap around:
-> possible use: throttle in a flightsim mapped to 1-9
Possible future improvements:
- next/prev button that don't trigger the key, an activate button or
activate by timeout (to work around slow weapon change in some
games)
- graphical overlay that displays the current position
-> requires separate process
- single button inventory: next, hold to activate
* d-bus requires X11?! -> try system bus when running as root
Target for 0.?.?
================
* RelButtonEventHandler: add DELAY:REPEAT (like keyboard keys) instead
of just REPEAT (or not? should be doable with autofire filter)
* alternative inventory solution: use the dpad, which gives however
only eight directions, need some timeout thing to make the
directions sticky
- modifier that separates the dpad into eight buttons
- hold button to make it 'sticky' (maybe a delay filter to allow two
level hold buttons, one to not confuse diagonals with vert/horz
movement, another regular hold buttos)
* MacroButtonEventHandler is still using raw UInput::send(), should
use UIEventEmitterPtr instead
- UInput::send_rel_repetitive() should be removed or refactored into
its own class
* develop a simple scripting language or use an existing one
- script gets message object and last message object as input,
provides modified message object as output
* look at suspend handling
* pass /dev/input/eventX, slot and serial number to on-connect script
- write a class to guess which event devices will be created given a
configuration
* write DummyController that can be used in automated test cases
* allow the creation of virtual mice and keyboards with all buttons
and rel events, to allow realtime reconfiguration
- --all-key-events, --add-rel-events, --add-abs-events (might cause
trouble with type auto detection, thus limiting to only mouse-,
joystick- and keyboard-events might be needed instead of
separating by REL, ABS and KEY alone
- call should be just a shortcut for --ui-buttonmap void=BTN_A,void=BTN_B,...
* native REL events
* get rid of UIEvent::resolve_device_id() if possible
* implement filter that removes glitched button events, i.e. events
that happen in very low timespans and are caused by broken micro switches
* use FIXME for random code improvements, use BUG for actual problems
* Collect Linux games with force feedback support: Bzflag?
* provide more meaningful debug output for force feedback
* cleanup UIEvent
* --chatpad-debug is broken, use it for all the log_tmp()
* there is a long delay in processing rumble messages, currently
worked around by only sending rumble commands on changes, but that
isn't a full solution, proper solution would be discarding messages
and only sending the current value
* active wireless controller aren't detected on startup of the daemon,
only they have send an event, any way to get activity status of the thing?
* print which sub features are enabled: chatpad, force feedback, headset
* check force feedback
* rumble-test is broken completely
* check output when --silent not given
* check clean shutdown
* check valgrind
* check daemon
* check autofire and other modifier that depend on time
* test all controller
* check that the child process works
* check that uinput gets its timeout/update calls (send_rel_event)
* cleanup a lot of the log_trace() and other temporary debug output
* check that repeated wireless controller connects and disconnects work [done]
* check that --quit works, currently broken
* search for "#ifdef FIXME"
* do proper error checking:
xboxdrv: src/usb_controller.cpp:218: void USBController::on_read_data(libusb_transfer*): Assertion `ret == LIBUSB_SUCCESS' failed.
Aborted
* exceptions in glib main loop might be dangerous and not really do what is intended
* move sigint/sigterm handling out of main.cpp and into xboxdrv_daemon.cpp (needs to use gmain_quit())
* LED do currently not get down on controller quit
* move LED setting into ControllerThread or somewhere else, not at controller creation time
* check that threads are cleaned up in daemon
* go through checklist, disable headset and chatpad support for now,
do a source only release
Stuff to do before 0.8.x release:
=================================
* add LD_PRELOAD joystick override hack to running xboxdrv with an app.exe
* change response curve syntax to allow defining two values for the
same point, one for the left one for the right to allow hard jumps
or allow giving x,y coordinates to have points net evenly spaced out, maybe both
* add expression modifier:
--modifier X1^expr=V*6+1<<2
* old udev errors:
g++ -o src/xboxdrv_daemon.o -c -isystem/usr/include/dbus-1.0 -isystem/
usr/lib/dbus-1.0/include -isystem/usr/include/glib-2.0 -isystem/usr/
lib/glib-2.0/include -pthread -isystem/usr/local/include/libusb-1.0 -g
-O3 -Wall -ansi -pedantic -DPACKAGE_VERSION='"0.7.3"' -Isrc src/
xboxdrv_daemon.cpp
src/xboxdrv_daemon.cpp: In member function 'void
XboxdrvDaemon::init_udev_monitor(const Options&)':
src/xboxdrv_daemon.cpp:251: error:
'udev_monitor_filter_add_match_subsystem_devtype' was not declared in
this scope
scons: *** [src/xboxdrv_daemon.o] Error 1
scons: building terminated because of errors.
make: *** [xboxdrv] Error 2
* macro support needs to search files in a few more locations;
* current directory
* directory of parent .ini file
* users xboxdrv config directory (don't have that yet)
* macro supports needs "init" command (somewhat done)
* add support for "include" in macro
* add support for macros that always reload when evaluated (makes testing easier)
* document REL_ -1 better
* when verbose is given, warn when keys are dual mapped, give list of free keys
* space is currently illegal, but shouldn't be "GUIDE = KEY_LEFTALT + KEY_E"
* extra-devices adds a button when one only uses JS_0 buttons, shouldn't happen
-> or maybe it should, as not only the kernel matters, but also SDL
* invert y axis on --evdev
* add double-click button, in the same way as hold-button
* add --controller 4 or --controller-count 4 or something like that
* add special LED status set switches the LED with the given config
* export build-in config files, both as text and as directory, so that users can browse them
* deadzone:MIN:MAX:SMOOTH is broken (fixed)
* deadzone filter documentation is wrong
Autolaunch error: X11 initialization failed." failed to open connection to bus: /bin/dbus-launch terminated abnormally with the following error: Autolaunch error: X11 initialization failed.
* add named output variables to chain filters and modifiers?!
== Daemon ==
* check how daemon reacts on suspend
- suspending the computer leads to LIBUSB_ERROR_IO, unplugging the
controller leads to LIBUSB_ERROR_OTHER
-> couldn't be replicated, both give LIBUSB_ERROR_OTHER
- errno is set to EBUSY
- the device handle can't be reused, device has to be reallocated
- integrate this with the "keep backlog of devices currently in use"
* do something with stdout/stderr when its run in --detach mode
== Other ==
* add a way to refresh/reshuffle controller asignment with xboxdrvctrl
(i.e. having two controller and unplugging the first won't reassign
the second to the first slot, that should be available on request)
* button presses are lost even with "--priority realtime" for the wireless controller
-> xboxdrv isn't running under realtime priority, only its subthreads, fix that
-> figure out how USBReadThread reacts to the device being closed
-> USBReadThread doesn't react at all, it becomes stuck in the last call
* use static X11 keysym map to do the string translation?
* split src/axis_event.hpp and src/button_event.hpp
* mouse emulation is very jaggy (try painting in Gimp), caused by
REL_X and REL_Y being send independently, while they should be
synced up, this is a side-effect of the deadzone, without deadzone,
no jaggies
-> UInput::send_rel_repetitive() needs to syncronize all REL events
with the same repeat interval whenever a new event comes in
send_val = value * time_count / repeat;
time_count = 0;
-> add a repeat timeout 0 that sends on each update
-> should be use special value '-1' or repurpose '0'?
-> do we need more rel types? rel-once? or can repeat values be
abused?
repeat: 0 - always repeat, -1, never repeat, NUM - repeat every NUM msec
-> add rel-repeat:{repeat} type that repeats more often the more the
stick is pressed, to give better scroll wheel emulation
* add "key-repeat", similar to rel-repeat
* add "key-once" or something like that, that only clicks a key
without keeping it pressed
* documentation needs to be improved
* --ui-axismap LT=KEY_A:KEY_B:1
Here KEY_B is the key you want to send and KEY_A is a random other key
that you don't need. It's a hack as mapping both to KEY_B seems to
cause some trouble with automatic key repeat for some reason. Note
that you must not combine this with --trigger-as-zaxis as that will
disable LT and RT -> already fixed, check it
* add a "click" filter or something like that, that causes a button to only be clicked, not hold
* LED isn't set proper when wireless controllers wake up from power-down
== Unsolved/WontFix ==
* after every thread cleanup, do an enumeration over all USB devices,
find those not currently used by a Slot and recreate them, this
should fix resume issues, this would also fix the issue with
ignoring controllers when all slots are full
-> bad idea, as it would let unused controllers slip into the free
slots, could lead to unexpected behaviour
-> maybe as D-Bus interface?
* allow multiple controllers in non-daemon mode
-> not a good idea, complicates stuff and duplicates code
-> make daemon mode the default in the future and make it as solid
as non-daemon mode
* remember controllers that couldn't be used when all slots where full
and use them when a slot got free -> discard, bad idea, as it
results in confusing behaviour
* daemon and regular xboxdrv have different controller orderings
-> hard to avoid, as wireless controllers are only picked up when
active, which they always become later then the wired ones, which
are active by default)
* BTN_A@joystick.1 doesn't work for a single joystick, why? (joystick isn't id=0, why?)
- should there be a '@default'? should @joystick be the default?
* improve output on which uinput devices are created (even with udev
there doesn't seem to be a bullet proof way to detect what gets
created)
-> insert "guess code" before the uinput create call and just pretent thats bullet proof
-> figure out how exactly device names are choosen (first free or
are there other means? need to take special axes/buttons into account)
== Daemon ==
* improve output in daemon mode, when --quiet is not given print the
number of allocated controller slots
* get rid of all std::cout stuff when using detached daemon, redirect
log output to a file, syslog or somewhere else:
--silent: stops event output
--quiet: stops all stdout output (automatically used when --detach is given, except for errors)
--verbose: print info level log output
--debug: print debug level log output
== D-Bus ==
* interface for next release:
Daemon/GetControllerSlotCount -> INT // do we need those or can
Daemon/GetControllerCount -> INT // directories be browsed?
== Other ==
* document that Xbox360 wireless controller shuts down at 15min
* give proper exit code when no controller is found
* sort options a bit more between global ones, slot local ones and
config local ones
* in INI files should allow:
[xboxdrv]
ui-buttonmap = A=BTN_A,B=BTN_B,...
- in general cleanup config handling, turn almost everything into
proper functions and use the same functions for both cmdline and ini
* allow setting a --default-name from which all other controller names
are derived
-> already there in the form of auto.auto?
-> No, as those don't derive the name, but set a fixed one
* allow swap/assign of controller to slots via dbus
* do modifier/filter dump when --verbose is given, make verbose
overall more useful
* make more use of percentance values (in deadzone filter for example)
* couldn't convert 'XK_Page_Up' to enum, not a member of X11Keysym
currenty code can't handle multple names for a single key
* add a fun modifier that counts button presses and other useless stuff
- count button presses (done)
- count time a button is held down, both in min:sec and percent
- count distance an axis travels
- allow access/reset via dbus
* document them, ignore axis and button time for now
* look at Joy2key for better mouse support (mouse acceleration), see Dustin Moline mails
* timeout makes a huge difference, real MarbleMouse Trackball send around every 10msec
* need to deal with rounding errors to allow small movements
* add --ui-buttonmap A=KEY_A:KEY_B:1000:1
the last 0/1 parameter tells if it should do:
- 0: send on release
- 1: always send when pressed
different games might require different behaviours for the
hold-button, so it should be an user option
* add double shift buttons: L+R+start
* add execv: that takes arguments in ARG0:ARG1,... style
* add system: that takes arguments "ARG0 ARG1 ..." style
* add [controller0/config0] support for ControllerOptions
* add [controller0] support for ControllerSlotOptions
* write relaxation modifier/filter
* make extra-event creation a bit more clever, i.e. only create BTN_A
when needed, not when another button is present that can be used to
identify the device as joystick, also document exactly which
buttons/axis combinations are valid.
Other Stuff
===========
* remove uinput.send_rel_repetitive() replace with just EventHandler::update()
-> might not be needed, send_rel_repetitive() is kind of convenient
-> send_rel_repetitive() doesn't work with multi-axis REL events (mouse emulation)
* boost::lexical_cast<> error messages are useless, make some better ones
Daemon Match Rules
==================
* add match rule for wireless id -> not really useful as that id is
more or less random
* add --exclude, --exclude-group as ControllerMatchRules
* XboxdrvThread or XboxGenericController must hold information on
their: bus:dev, vendor:product and other potentially useful
information, match rule must match against controller, not
udev_device
-> doesn't work, as we don't have a controller at that point
-> match against abstract ControllerInfo object?
-> get_busnum()
-> get_devnum()
-> figure out potential matches early and save the valid slots?
-> ugly but could work
* --match again sysname could make sense, seems somewhat constant:
"5-2" Xbox1 controller results in "5-2.1", due to being really two
devices, would help to now how exactly those are formed
* extend usbid match rule to bcd device
Stuff to do before 0.7.3 release:
=================================
* turn EnumBox into singleton
* allow EnumBox to have multiple names per values per key
* allow --modifier help, --ui-buttonmap X2^help
* move XBOX_BTN_UNKNOWN behind XBOX_BTN_MAX (or make it -1), so
iteration can start from 0 instead of 1, also fix incorrect
iterations all over the place -> doesn't work as some code uses
XBOX_BTN_UNKNOWN as 'no button is pressed'
* document significant patches in AUTHORS
2 Added latest version of runxboxdrv from Michael Rans <rans@email.com>
1 Added trigger deadzone patch from Jan Henning Thorsen <git@flodhest.net> with a few changes
1 Applied daniel åkerud <daniel.akerud@gmail.com>'s SIGTERM patch
1 Applied low latency patch from daniel åkerud <daniel.akerud@gmail.com>
1 Author: Aaron Denney <wnoise@ofb.net>
1 hal daemon from Thomas Debouverie <debouverie_thomas@yahoo.fr>
1 Implemented --ui-buttonmap A=BTN_A@{device_id} ??!?!?
* need to hide/disable the toggle button from the UIButtonmap
- maybe implement some full post-parsing option verification to
check for conflicts and necessary modifications?
- Options::finish() to do final things?
* add Wiimote and PS3 bluetooth support
* -R, --rumble-test is broken for FirestormDualController (has no analog triggers)
* add ABS support to macros events (need to deal with min/max)
* add support for pairing the controller to the PC (or zero)
--ps3-pair 00:00:00:00:00:00
--ps3-pair-with-bluetooth
* get rid of set_button()/get_button(), turn the message objects into full classes
* make chatpad configurable:
--ui-chatpad a=KEY_A,green+a=SHIFT_X+KEY_B,...
* make sure that XK_??? names work with keys that are
shifted/mode_switched in the keymap, i.e. send key combination
* can't parse:
--ui-axismap x2=2-ABS_X,y2=2-ABS_Y
only this works:
--ui-axismap x2=abs:2-ABS_X,y2=abs:2-ABS_Y
implement better guessing
* current deadzone code messes up the diagonals
* shifted axis without default mapping don't work:
./xboxdrv --ui-axismap lb+x1^cal:-64000:0:64000
in those cases the default mapping for the unshifted axis should be used
* add analog emulation for button (i.e. the longer its pressed, the higher the value)
* write UIEvent::from_string()
* basic Dualstrike mouse emulation with absolute position:
./xboxdrv-dualstrike \
--ui-clear \
--ui-buttonmap rb=key:1-BTN_LEFT,lb=key:1-BTN_RIGHT \
--ui-axismap x2^cal:-25000:0:25000=abs:1-ABS_X,y2^cal:-25000:0:25000=abs:1-ABS_Y \
--ui-axismap x1=KEY_LEFT:KEY_RIGHT,y1=KEY_DOWN:KEY_UP -s
Chatpad
=======
Figure out a way to load custom keymaps:
* http://madduck.net/docs/extending-xkb/
* http://stackoverflow.com/questions/1557689/keyboard-remapping-with-more-modifiers
* http://tldp.org/HOWTO/Keyboard-and-Console-HOWTO-15.html
* setxkbmap -device ... -I xboxdrv/xorg/
xkbprint -label name $DISPLAY - | gv -orientation=seascape -
http://www.charvolant.org/~doug/xkb/html/xkb.html
http://pascal.tsu.ru/en/xkb/
http://wiki.debian.org/XStrikeForce/InputHotplugGuide
http://git.madduck.net/v/etc/xsession.git?a=blob;f=.xkb/symbols/madduck;hb=refs/heads/xkb
http://www.x.org/wiki/XKB
http://sourceforge.net/tracker/download.php?group_id=286545&atid=1214224&file_id=361450&aid=2945171
http://www.x.org/docs/XKB/XKBlib.pdf
http://www.mp3car.com/vbulletin/input-devices/108554-xbox360-chatpad-awsome-backlit-mini-keyboard-16.html#post1256444
* change default axis/button map depending on controller type (tricky as
type is only really known after the axis/buttonmap as already been
build):
* remove guide button from default mapping when its an Xbox1 controller
* guitar handling was changed in a4e1003cba0ff925358ce5ed84d2bf9a728e93d6
* REL_ events could need acceleration support, as mouse emulation is currently kind of imprecise
* add extra checks to make sure the evdev buttons and axis given exist
on the current device when using --evdev
* allow --type to work even when --device-by-id is not given
* axis emulation
--ui-axisemulation A:B=ABS_X:5
* match by protocol not, just vendor/product, from xpad.c:
/* Xbox 360 has a vendor-specific class, so we cannot match it with only
* USB_INTERFACE_INFO (also specifically refused by USB subsystem), so we
* match against vendor id as well. Wired Xbox 360 devices have protocol 1,
* wireless controllers have protocol 129. */
#define XPAD_XBOX360_VENDOR_PROTOCOL(vend,pr) \
.match_flags = USB_DEVICE_ID_MATCH_VENDOR | USB_DEVICE_ID_MATCH_INT_INFO, \
.idVendor = (vend), \
.bInterfaceClass = USB_CLASS_VENDOR_SPEC, \
.bInterfaceSubClass = 93, \
.bInterfaceProtocol = (pr)
#define XPAD_XBOX360_VENDOR(vend) \
{ XPAD_XBOX360_VENDOR_PROTOCOL(vend,1) }, \
{ XPAD_XBOX360_VENDOR_PROTOCOL(vend,129) }
--ui-axismap LT=KEY_A:KEY_A:1
Feature
=======
* figure out a way to make userspace force feedback driver not become dead processes
* test TR:Anniversary with max effect 16
fixme:dinput:joy_polldev joystick cannot handle type 21 event (code 0) <- 21 == EV_FF (status report?)
http://www.immersion.com/developer/downloads/ImmFundamentals/HTML/
http://msdn.microsoft.com/en-us/library/bb219655(VS.85).aspx
Later versions:
===============
* The World Tour wireless guitar have 5 buttons and a
slide. Currently, the slide is mapped to the x axis, but I don't
know if it allows multiple presses at once. I don't have a Xbox, so
I don't know if it is allowed at all in the console.
Colour: Button: Value in X1 (slide):
Green A -27500
Red B -12900
Yellow Y +7000
Blue X +18500
Orange LB1 +32767
(None) (None) -300
* send FF status reports (maybe, is that used by anything?)
* figure out the max values of force feedback effects so that stuff is
mapped more properly (kind of done, could need verification)
* figure out which devices xorg/hal handles as keyboard and how to
make it always happen, seems to require two keyboard keys, devices
with only one aren't registered
* report more precisly what devices got created, include device name (HAL has that information)
* add support for LED messages (can this be used by anything?)
Stuff to do before 0.8.0 release:
=================================
* Playstation 3 controller bluetooth support
- http://www.pabr.org/sixlinux/sixlinux.en.html
- http://www.motioninjoy.com/
- figure out what the remaining unknown bits mean:
data from just pluging the controller in and out a few times
without much pause inbetween:
Dualshock3:
// leaving controller plugged in for a longer time settles to this:
00 00 03 ef 16 00 00 00 00 33 fc 77 01 de
00 00 03 ef 16 00 00 00 00 33 fc 77 01 de
00 00 03 ef 16 00 00 00 00 33 fc 77 01 c0
00 00 02 ee 12 00 00 00 00 12 fc 77 01 de
^^^^^ ^^^^^
00 00 01 ee 12 00 00 00 00 12 fc 77 01 de
00 00 03 ef 16 00 00 00 00 11 fc 77 01 de
00 00 03 ef 16 00 00 00 00 33 fc 77 01 de
00 00 02 ee 12 00 00 00 00 12 fc 77 01 de
wrong ideas: bluetooth master id
00 00 01 ef 16 00 00 00 00 11 fc 77 01 c0