Xbox 360 Wireless Controller for Windows library

Dependencies:   USBHost USBHostXpad mbed

Fork of USBHostMSD_HelloWorld by Samuel Mokrani

Xbox 360 Wireless Controller for Windows

Microsoftの XBOX 360 ワイヤレスコントローラーを、パソコン用のUSB接続型レシーバーで mbed に接続して使えるライブラリです。
ワイヤードのXBOX360コントローラーや、初代XBOXコントローラーのコードも含んでいますが未確認です。

USB Host 機能を使いますので mbed LPC1768 専用です。

たまに usb_thread could not read dev descr を出力して処理が停止する不具合があります。

/media/uploads/samux/usb_host_schema.jpg

Import libraryUSBHostXpad

Xbox 360 Wireless Controller for Windows library. sample: http://mbed.org/users/okini3939/code/USBHostXpad_HelloWorld/

main.cpp

Committer:
okini3939
Date:
2014-02-01
Revision:
12:f6d7bcc93e97
Parent:
11:f76e120a8520

File content as of revision 12:f6d7bcc93e97:

#include "mbed.h"
#include "USBHostXpad.h"

Serial pc(USBTX, USBRX);
DigitalOut led(LED1);
volatile int poll = 0;

void onXpadEvent (int buttons, int stick_lx, int stick_ly, int stick_rx, int stick_ry, int trigger_l, int trigger_r) {
    std::printf("Xpad: %04x %-5d %-5d %-5d %-5d %02x %02x\r\n", buttons, stick_lx, stick_ly, stick_rx, stick_ry, trigger_l, trigger_r);
    poll = 0;
}

void xpad_task(void const *) {
    USBHostXpad xpad;

    while(1) {
        // try to connect a Xbox 360 Wireless Controller
        while(!xpad.connect())
            Thread::wait(500);
    
        // when connected, attach handler called on xpad event
        xpad.attachEvent(onXpadEvent);

        xpad.led(USBHostXpad::LED_ROTATE);
        Thread::wait(500);
        xpad.rumble(0xff, 0);
        Thread::wait(500);
        xpad.rumble(0, 0xff);
        Thread::wait(500);
        xpad.rumble(0, 0);
        Thread::wait(500);
        xpad.led(USBHostXpad::LED1_ON);

        // wait until the mouse is disconnected
        while(xpad.connected()) {
            Thread::wait(500);
            poll ++;
            if (poll > 10) {
                xpad.restart();
                poll = 0;
            }
        }
    }
}


int main() {
    pc.baud(115200);
    pc.printf("----------\r\n");
    Thread xpadTask(xpad_task, NULL, osPriorityNormal, 1024 * 4);
    while(1) {
        led=!led;
        Thread::wait(500);
    }
}