Some more chatpad work
This commit is contained in:
parent
340d1d325c
commit
7006682250
6 changed files with 107 additions and 16 deletions
8
AUTHORS
8
AUTHORS
|
@ -35,8 +35,12 @@ Other parts of the code are inspired or based on cwiid:
|
||||||
* L. Donnie Smith <wiimote@abstrakraft.org>
|
* L. Donnie Smith <wiimote@abstrakraft.org>
|
||||||
|
|
||||||
|
|
||||||
Chatpad USB Protocol Traces:
|
Chatpad USB Reverse Engineering:
|
||||||
^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
|
||||||
* Jani Virta <jani.virta@iqit.fi>
|
* Jani Virta <jani.virta@iqit.fi>
|
||||||
|
* Andy Kirkham
|
||||||
|
* dwomac
|
||||||
|
* GAFBlizzard
|
||||||
|
|
||||||
|
|
||||||
# EOF #
|
# EOF #
|
||||||
|
|
8
NEWS
8
NEWS
|
@ -1,3 +1,11 @@
|
||||||
|
xboxdrv 0.6.3 - (??/Jan/2011)
|
||||||
|
=============================
|
||||||
|
|
||||||
|
* chatpad support, enable with --chatpad (special thanks to Jani
|
||||||
|
Virta, Andy Kirkham, dwomac and GAFBlizzard who helped make it
|
||||||
|
possible)
|
||||||
|
|
||||||
|
|
||||||
xboxdrv 0.6.2 - (31/Dec/2010)
|
xboxdrv 0.6.2 - (31/Dec/2010)
|
||||||
=============================
|
=============================
|
||||||
|
|
||||||
|
|
40
PROTOCOL
40
PROTOCOL
|
@ -256,6 +256,46 @@ usb_control_msg()'s
|
||||||
Sending "0x41 0x0 0x1f 0x02" gives a reply of "0x08, 0x03, 0x01"
|
Sending "0x41 0x0 0x1f 0x02" gives a reply of "0x08, 0x03, 0x01"
|
||||||
(chatpad) or "0x08, 0x03, 0x03" (chatpad + headset)
|
(chatpad) or "0x08, 0x03, 0x03" (chatpad + headset)
|
||||||
|
|
||||||
|
Data from Chatpad
|
||||||
|
=================
|
||||||
|
|
||||||
|
0xf0 0x04
|
||||||
|
0x00 MODIFIER SCAN1 SCAN2 0x00
|
||||||
|
|
||||||
|
,- active LEDs
|
||||||
|
/ ,----,---- clock, counts up to 0x0f then rolls to zero
|
||||||
|
0xf0 0x04 LEDSTATUS 0x0e 0x0e
|
||||||
|
0x00 0x00 0x34 0x00 0x00 <- always zero
|
||||||
|
| | `- scan1 `scan2
|
||||||
|
\ `--- modifier bit field
|
||||||
|
`--- input event
|
||||||
|
|
||||||
|
LED:
|
||||||
|
10111001
|
||||||
|
|
||||||
|
<backlight> <zero> <shift> <orange> <green> 0 0 <people>
|
||||||
|
|
||||||
|
LED_STATUS_PEOPLE = (1<<0)
|
||||||
|
LED_STATUS_SHIFT = (1<<5)
|
||||||
|
LED_STATUS_ORANGE = (1<<4)
|
||||||
|
LED_STATUS_GREEN = (1<<3)
|
||||||
|
LED_STATUS_BACKLIGHT = (1<<7)
|
||||||
|
|
||||||
|
0xa0 - shift
|
||||||
|
0x88 - green
|
||||||
|
0x81 - people
|
||||||
|
0x90 - orange
|
||||||
|
0x91 - people+orange
|
||||||
|
0x98 - orange+green
|
||||||
|
0xb0 - shift+orange
|
||||||
|
0xb9 - shift+orange+green+shift
|
||||||
|
|
||||||
|
|
||||||
|
Chatpad init:
|
||||||
|
|
||||||
|
Hardware version 1.10, uses 0x01 0x02 for init.
|
||||||
|
Hardware version 1.14, uses 0x09 0x00 for init.
|
||||||
|
|
||||||
|
|
||||||
Xbox360 Guitar
|
Xbox360 Guitar
|
||||||
==============
|
==============
|
||||||
|
|
29
TODO
29
TODO
|
@ -17,16 +17,37 @@ Ubuntu Package:
|
||||||
===============
|
===============
|
||||||
|
|
||||||
$ cd ../debian/
|
$ cd ../debian/
|
||||||
$ git-import-orig -u 0.6.1 ~/projects/xboxdrv/htdocs/xboxdrv-linux-0.6.1.tar.bz2
|
$ git-import-orig -u 0.6.3 ~/projects/xboxdrv/htdocs/xboxdrv-linux-0.6.3.tar.bz2
|
||||||
$ dch -v "0.6.1" "New Ubuntu release"
|
$ dch -v "0.6.3" "New xboxdrv release"
|
||||||
$ git-buildpackage --git-tag --git-builder="debuild -S"
|
$ git-buildpackage --git-tag --git-builder="debuild -S"
|
||||||
$ sudo pbuilder --build xboxdrv_0.6.1.dsc
|
$ sudo pbuilder --build xboxdrv_0.6.3.dsc
|
||||||
$ dput my-ppa xboxdrv_0.6.1_source.changes
|
$ dput my-ppa xboxdrv_0.6.3_source.changes
|
||||||
|
|
||||||
|
|
||||||
|
Stuff to do before 0.6.4 release:
|
||||||
|
=================================
|
||||||
|
|
||||||
|
* integrate filters into --buttonmap and --axismap:
|
||||||
|
|
||||||
|
--buttonmap X^toggle:autofire=B
|
||||||
|
--axismap Y1^relative
|
||||||
|
|
||||||
|
main purpose: allow to make shift a toggle button
|
||||||
|
|
||||||
|
* bug: when shifting the last axis state sticks even when they key was released
|
||||||
|
|
||||||
|
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
|
||||||
|
|
||||||
|
|
||||||
Stuff to do before 0.6.x release:
|
Stuff to do before 0.6.x release:
|
||||||
=================================
|
=================================
|
||||||
|
|
||||||
|
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
|
* change default axis/button map depending on controller type (tricky as
|
||||||
type is only really known after the axis/buttonmap as already been
|
type is only really known after the axis/buttonmap as already been
|
||||||
build):
|
build):
|
||||||
|
|
|
@ -183,17 +183,14 @@ Chatpad::read_thread()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (false)
|
if (true)
|
||||||
{
|
{
|
||||||
if (!(data[0] == 0xf0 && data[1] == 0x04)) // ignore timing messages
|
std::cout << "read: " << len << "/5: data: " << std::flush;
|
||||||
|
for(int i = 0; i < len; ++i)
|
||||||
{
|
{
|
||||||
std::cout << "read: " << len << "/5: data: " << std::flush;
|
std::cout << boost::format("0x%02x ") % int(data[i]);
|
||||||
for(int i = 0; i < len; ++i)
|
|
||||||
{
|
|
||||||
std::cout << boost::format("0x%02x ") % int(data[i]);
|
|
||||||
}
|
|
||||||
std::cout << std::endl;
|
|
||||||
}
|
}
|
||||||
|
std::cout << std::endl;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (data[0] == 0x00)
|
if (data[0] == 0x00)
|
||||||
|
@ -231,6 +228,11 @@ Chatpad::process(const ChatpadKeyMsg& msg)
|
||||||
{
|
{
|
||||||
if (m_state[i])
|
if (m_state[i])
|
||||||
{
|
{
|
||||||
|
if (i == CHATPAD_KEY_1)
|
||||||
|
{
|
||||||
|
usb_control_msg(m_handle, 0x41, 0x00, 0x0004, 0x0002, NULL, 0, 0);
|
||||||
|
}
|
||||||
|
|
||||||
if (i == CHATPAD_MOD_PEOPLE)
|
if (i == CHATPAD_MOD_PEOPLE)
|
||||||
{
|
{
|
||||||
set_led(CHATPAD_LED_PEOPLE, !get_led(CHATPAD_LED_PEOPLE));
|
set_led(CHATPAD_LED_PEOPLE, !get_led(CHATPAD_LED_PEOPLE));
|
||||||
|
@ -298,8 +300,16 @@ Chatpad::send_init()
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
buf[0] = 0x01;
|
if (true /* old_xbox360 pad */)
|
||||||
buf[1] = 0x02;
|
{
|
||||||
|
buf[0] = 0x01;
|
||||||
|
buf[1] = 0x02;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
buf[0] = 0x09;
|
||||||
|
buf[1] = 0x00;
|
||||||
|
}
|
||||||
|
|
||||||
ret = usb_control_msg(m_handle, 0x40, 0xa1, 0x0000, 0xe416, buf, 2, 0); // (send 2 bytes, data must be 0x09 0x00)
|
ret = usb_control_msg(m_handle, 0x40, 0xa1, 0x0000, 0xe416, buf, 2, 0); // (send 2 bytes, data must be 0x09 0x00)
|
||||||
std::cout << "ret: " << ret << std::endl;
|
std::cout << "ret: " << ret << std::endl;
|
||||||
|
|
|
@ -84,6 +84,14 @@ enum {
|
||||||
CHATPAD_LED_BACKLIGHT = 1<<4
|
CHATPAD_LED_BACKLIGHT = 1<<4
|
||||||
};
|
};
|
||||||
|
|
||||||
|
enum {
|
||||||
|
CHATPAD_LED_STATUS_PEOPLE = (1<<0),
|
||||||
|
CHATPAD_LED_STATUS_SHIFT = (1<<5),
|
||||||
|
CHATPAD_LED_STATUS_ORANGE = (1<<4),
|
||||||
|
CHATPAD_LED_STATUS_GREEN = (1<<3),
|
||||||
|
CHATPAD_LED_STATUS_BACKLIGHT = (1<<7)
|
||||||
|
};
|
||||||
|
|
||||||
class Chatpad
|
class Chatpad
|
||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
|
|
Loading…
Reference in a new issue