Page 1 of 6 123 ... LastLast
Results 1 to 10 of 59

Thread: Sidewinder X4 Keyboard

  1. #1
    Join Date
    Jun 2006
    Beans
    Hidden!

    Sidewinder X4 Keyboard

    I'm thinking of purchasing the Microsoft Sidewinder X4 keyboard and wanted to know if anybody has had experience using one under Ubuntu. I'm specifically interested to know whether or not the volume up/down keys and other media control keys (play/pause, next/previous track) work properly. Thanks.

  2. #2
    Join Date
    Jun 2008
    Location
    Vancouver Canada
    Beans
    3,148
    Distro
    Xubuntu 14.04 Trusty Tahr

    Re: Sidewinder X4 Keyboard

    Hi rawlinc.

    I don't know about that one, but I use a logitec access 600, and everything works great.

    I got it for $20 at staples.

    http://reviews.logitech.com/7061/2996/reviews.htm
    I learn something ubuntu everyday.
    dell precision T7500 1Tb hdd x 2
    2.67 Ghz intel xeon X5550 cpu
    nvidia quadro fx 4800-1.5 Gb video card

  3. #3
    Join Date
    Nov 2008
    Beans
    28

    Re: Sidewinder X4 Keyboard

    Hello!

    I was using the Microsoft X4 Keyboard about 2 weeks ago with Ubuntu 10.04. Everything is working fine except the programmable S1 - S6 keys, the bank switcher ("123"-key) and the record key. I also tried out different methods to get those keys working, but they don't send any scancodes (tried with getscancode, showkeys, and dmesg | tail) to map. So, someone has to write a driver to get those special keys working.

    I've spent some hours analyzing the traffic between the Sidewinder X4 and my PC. That's what I found out:

    Microsoft Sidewinder X4:

    VID: 045e
    PID: 0768
    REV: 0150

    Devices:

    1. VID_045e&PID_0768&REV0150 # USB Composite Device
    2. VID_045e&PID_0768&REV0150&MI_00 # Keyboard / HID
    3. VID_045e&PID_0768&REV0150&MI_01 # Consumer Control Device (S1 - S6, Record, Bank Switch, Play/Pause, Backward, Forward, Mute, Volume Down, Volume Up)

    Raw Communication:

    Key Raw Code
    __________________________________________________ ______________

    S1 - 08 01 00 00 00 08 00 00 00 00
    S2 - 08 02 00 00 00 08 00 00 00 00
    S3 - 08 04 00 00 00 08 00 00 00 00
    S4 - 08 08 00 00 00 08 00 00 00 00
    S5 - 08 10 00 00 00 08 00 00 00 00
    S6 - 08 20 00 00 00 08 00 00 00 00
    Bank Switch - 01 00 00 00 00 00 14 00 01 00 00 00 00 00 00 00
    Record - 01 00 00 00 00 00 11 00 01 00 00 00 00 00 00 00
    Play/Pause - 01 cd 00 00 00 00 00 00 01 00 00 00 00 00 00 00
    Backward - 01 b6 00 00 00 00 00 00 01 00 00 00 00 00 00 00
    Forward - 01 b5 00 00 00 00 00 00 01 00 00 00 00 00 00 00
    Mute - 01 e2 00 00 00 00 00 00 01 00 00 00 00 00 00 00
    Volume Down - 01 ea 00 00 00 00 00 00 01 00 00 00 00 00 00 00
    Volume Up - 01 e9 00 00 00 00 00 00 01 00 00 00 00 00 00 00


    Status
    _______________________________

    Bank 1: 07 04
    Bank 2: 07 09
    Bank 3: 07 11
    Auto: 07 0A
    Record B1: 07 64
    Record B1 (blink): 07 44
    Record B2: 07 69
    Record B2 (blink): 07 49
    Record B3: 07 71
    Record B3 (blink): 07 51
    The communication between Host and Device while switching the Bank (Bank 2 to Bank 3):

    000424: Bulk or Interrupt Transfer (UP), 12.09.2010 12:18:10.012 +10.686. Status: 0x00000000
    Pipe Handle: 0x500f858 (Endpoint Address: 0x83)
    Get 0x8 bytes from the device
    01 00 00 00 00 00 14 00

    000426: Class-Specific Request (DOWN), 12.09.2010 12:18:10.012 +0.0
    Destination: Interface, Index 1
    Reserved Bits: 34
    Request: 0x1
    Value: 0x307
    Get 0x2 bytes from the device

    000427: Control Transfer (UP), 12.09.2010 12:18:10.027 +0.015. Status: 0x00000000
    Pipe Handle: 0x4ff18a0
    07 09
    Setup Packet
    A1 01 07 03 01 00 02 00
    Recipient: Interface
    Request Type: Class
    Direction: Device->Host
    Request: 0x1 (Unknown)
    Value: 0x307
    Index: 0x1
    Length: 0x2

    000428: Class-Specific Request (DOWN), 12.09.2010 12:18:10.027 +0.0
    Destination: Interface, Index 1
    Reserved Bits: 34
    Request: 0x9
    Value: 0x307
    Send 0x2 bytes to the device
    07 11

    000429: Control Transfer (UP), 12.09.2010 12:18:10.027 +0.0. Status: 0x00000000
    Pipe Handle: 0x4ff18a0
    07 11
    Setup Packet
    21 09 07 03 01 00 02 00
    Recipient: Interface
    Request Type: Class
    Direction: Host->Device
    Request: 0x9 (Unknown)
    Value: 0x307
    Index: 0x1
    Length: 0x2

    000430: Bulk or Interrupt Transfer (UP), 12.09.2010 12:18:10.105 +0.078. Status: 0x00000000
    Pipe Handle: 0x500f858 (Endpoint Address: 0x83)
    Get 0x8 bytes from the device
    01 00 00 00 00 00 00 00
    So, the most part is done by IntelliType Pro. S1-S6 (and other special keys) are always sending out the same RAW Data over USB. Depending on which Bank is active, IntelliType can assign different commands. That means for Linux, there should be at least 8 keys, that could be implemented easily (S1-S6, record and bank switcher). On the other hand, (with some effort) we could even make 3 x 6 = 18 (3 Banks, S1-S6), maybe even 3 x 7 = 21 (3 Banks, S1-S6 + record key) or 4 x 7 = 28 (3 Banks + 1 Auto status, S1-S6 + record key) keys work.

    If there is someone, who shares the same interest in getting the X4 (and X6) fully working under Linux, please tell me.

    Tolga
    Attached Images Attached Images
    Attached Files Attached Files
    Last edited by tolga9009; September 12th, 2010 at 01:01 PM. Reason: "TAB" isn't recognized

  4. #4
    Join Date
    Apr 2009
    Beans
    58
    Distro
    Ubuntu 9.10 Karmic Koala

    Re: Sidewinder X4 Keyboard

    status update please?

  5. #5
    Join Date
    Nov 2008
    Beans
    28

    Re: Sidewinder X4 Keyboard

    status update please?
    I found out, that the G15 / G15v2 / G110 / G19 are very similar to the SideWinder X4, so I tried to customize parts of the code (libg15), so the SideWinder X4 can "talk" with the G15daemon. However, I'm not experienced in coding and reverse engineering at all. After compiling / installing the customized libg15, I started the g15daemon: my keyboard didn't worked anymore. I must have made something wrong, but I'm not sure, what it is. I've also posted on the g15tools forums, but they haven't answered yet (after 4 weeks).

    I've done all I could do, but it doesn't work. So, more or less, I gave it up; for now at least.

  6. #6
    Join Date
    Sep 2007
    Beans
    1

    Re: Sidewinder X4 Keyboard

    Quote Originally Posted by tolga9009 View Post
    I found out, that the G15 / G15v2 / G110 / G19 are very similar to the SideWinder X4, so I tried to customize parts of the code (libg15), so the SideWinder X4 can "talk" with the G15daemon. However, I'm not experienced in coding and reverse engineering at all. After compiling / installing the customized libg15, I started the g15daemon: my keyboard didn't worked anymore. I must have made something wrong, but I'm not sure, what it is. I've also posted on the g15tools forums, but they haven't answered yet (after 4 weeks).

    I've done all I could do, but it doesn't work. So, more or less, I gave it up; for now at least.
    I tried the same with the same result also.In case someone is interested, here is the patch to libg15 I used:
    Code:
    Index: libg15.c
    ===================================================================
    --- libg15.c    (Revision 321)
    +++ libg15.c    (Arbeitskopie)
    @@ -30,7 +30,7 @@
     #include "config.h"
     
     static usb_dev_handle *keyboard_device = 0;
    -static int libg15_debugging_enabled = 0;
    +static int libg15_debugging_enabled = 1;
     static int enospc_slowdown = 0;
     
     static int found_devicetype = -1;
    @@ -48,6 +48,7 @@
         DEVICE("Logitech G15 v2",0x46d,0xc227,G15_LCD|G15_KEYS|G15_DEVICE_5BYTE_RETURN),
         DEVICE("Logitech Gamepanel",0x46d,0xc251,G15_LCD|G15_KEYS|G15_DEVICE_IS_SHARED),
         DEVICE("Logitech G13",0x46d,0xc21c,G15_LCD|G15_KEYS|G15_DEVICE_G13),
    +    DEVICE("Microsoft Sidewinder X4",0x45e,0x768,G15_DEVICE_IS_SHARED),
         DEVICE(NULL,0,0,0)
     };
    I have been experimenting with G15_DEVICE_IS_SHARED and all the other possiblities all with same result

  7. #7
    Join Date
    Feb 2010
    Beans
    5
    Distro
    Ubuntu 10.10 Maverick Meerkat

    Re: Sidewinder X4 Keyboard

    Maybe a small bump, but did someone get this to work? I was also trying to get my SideWinder to work with Ubu, but I've failed..

  8. #8
    Join Date
    Feb 2011
    Beans
    7

    Re: Sidewinder X4 Keyboard

    Big bump! Would be interested in helping code up a solution to this. I ought to have some free time in the latter half of March to get started on the problem. There looks to be a lot of good information here, and while I don't currently specialize in C/++, i'm sure it can't be a big leap after becoming mostly fluent umpteen other programming languages. =P

    If any of the OP's who provided the treasure troves of information are still interested in working on this, i'd love to chat via email or IRC to brainstorm.

    Hope this goes well! (My other plan was to hardware bash a middle man to listen for the codes... not exactly the easiest project for someone who's only worked in analog circuits!)

  9. #9
    Join Date
    Apr 2011
    Beans
    2

    Re: Sidewinder X4 Keyboard

    Did anyone get anywhere with this?

  10. #10
    Join Date
    Aug 2009
    Beans
    3
    Distro
    Ubuntu 10.10 Maverick Meerkat

    Re: Sidewinder X4 Keyboard

    No one has gotten back to me, but i'm still very interested in getting this worked on. As I've already said, I have no driver experience and prefer higher level languages (e.g. Python, LISP), but would be more than happy to buckle down in C or even ASM if I had to in order to get access to the macro keys. I'm a bit of an automation buff and it'd be awesome to have a control set built into my keyboard rather than having to build my own hardware console. =]

Page 1 of 6 123 ... LastLast

Tags for this Thread

Bookmarks

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •