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

Dependents:   USBHostXpad_HelloWorld USBHostXpad_HelloWorld

Xbox 360 Wireless Controller for Windows

Microsoftの XBOX 360 ワイヤレスコントローラーを、パソコン用のUSB接続型レシーバーで mbed に接続して使えるライブラリです。

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

たまに処理が停止する不具合があります。

/media/uploads/samux/usb_host_schema.jpg

Committer:
okini3939
Date:
Tue Dec 10 06:50:37 2013 +0000
Revision:
0:bd0f6bf72a8b
Child:
1:5bb153989f33
1st build;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:bd0f6bf72a8b 1 /*
okini3939 0:bd0f6bf72a8b 2 * Xbox 360 Wireless Controller for Windows library
okini3939 0:bd0f6bf72a8b 3 * for mbed USBHost library
okini3939 0:bd0f6bf72a8b 4 * Copyright (c) 2013 Hiroshi Suga
okini3939 0:bd0f6bf72a8b 5 *
okini3939 0:bd0f6bf72a8b 6 * VID=0x045e PID=0x0719
okini3939 0:bd0f6bf72a8b 7 */
okini3939 0:bd0f6bf72a8b 8
okini3939 0:bd0f6bf72a8b 9 #ifndef USBHostXpad_H
okini3939 0:bd0f6bf72a8b 10 #define USBHostXpad_H
okini3939 0:bd0f6bf72a8b 11
okini3939 0:bd0f6bf72a8b 12 #include "USBHostConf.h"
okini3939 0:bd0f6bf72a8b 13
okini3939 0:bd0f6bf72a8b 14 #if 1 or USBHOST_XPAD
okini3939 0:bd0f6bf72a8b 15
okini3939 0:bd0f6bf72a8b 16 #include "USBHost.h"
okini3939 0:bd0f6bf72a8b 17
okini3939 0:bd0f6bf72a8b 18 #define XPAD_HAT_TOP 0x0001
okini3939 0:bd0f6bf72a8b 19 #define XPAD_HAT_BOTTOM 0x0002
okini3939 0:bd0f6bf72a8b 20 #define XPAD_HAT_LEFT 0x0004
okini3939 0:bd0f6bf72a8b 21 #define XPAD_HAT_RIGHT 0x0008
okini3939 0:bd0f6bf72a8b 22 #define XPAD_START 0x0010
okini3939 0:bd0f6bf72a8b 23 #define XPAD_BACK 0x0020
okini3939 0:bd0f6bf72a8b 24 #define XPAD_ANALOG_L 0x0040
okini3939 0:bd0f6bf72a8b 25 #define XPAD_ANALOG_R 0x0080
okini3939 0:bd0f6bf72a8b 26 #define XPAD_PAD_LB 0x0100
okini3939 0:bd0f6bf72a8b 27 #define XPAD_PAD_RB 0x0200
okini3939 0:bd0f6bf72a8b 28 #define XPAD_XLOGO 0x0400
okini3939 0:bd0f6bf72a8b 29 #define XPAD_PAD_A 0x1000
okini3939 0:bd0f6bf72a8b 30 #define XPAD_PAD_B 0x2000
okini3939 0:bd0f6bf72a8b 31 #define XPAD_PAD_X 0x4000
okini3939 0:bd0f6bf72a8b 32 #define XPAD_PAD_Y 0x8000
okini3939 0:bd0f6bf72a8b 33
okini3939 0:bd0f6bf72a8b 34 /**
okini3939 0:bd0f6bf72a8b 35 * A class to communicate a USB flash disk
okini3939 0:bd0f6bf72a8b 36 */
okini3939 0:bd0f6bf72a8b 37 class USBHostXpad : public IUSBEnumerator {
okini3939 0:bd0f6bf72a8b 38 public:
okini3939 0:bd0f6bf72a8b 39 /**
okini3939 0:bd0f6bf72a8b 40 * Constructor
okini3939 0:bd0f6bf72a8b 41 *
okini3939 0:bd0f6bf72a8b 42 * @param rootdir mount name
okini3939 0:bd0f6bf72a8b 43 */
okini3939 0:bd0f6bf72a8b 44 USBHostXpad();
okini3939 0:bd0f6bf72a8b 45
okini3939 0:bd0f6bf72a8b 46 /**
okini3939 0:bd0f6bf72a8b 47 * Check if a MSD device is connected
okini3939 0:bd0f6bf72a8b 48 *
okini3939 0:bd0f6bf72a8b 49 * @return true if a MSD device is connected
okini3939 0:bd0f6bf72a8b 50 */
okini3939 0:bd0f6bf72a8b 51 bool connected();
okini3939 0:bd0f6bf72a8b 52
okini3939 0:bd0f6bf72a8b 53 /**
okini3939 0:bd0f6bf72a8b 54 * Try to connect to a MSD device
okini3939 0:bd0f6bf72a8b 55 *
okini3939 0:bd0f6bf72a8b 56 * @return true if connection was successful
okini3939 0:bd0f6bf72a8b 57 */
okini3939 0:bd0f6bf72a8b 58 bool connect();
okini3939 0:bd0f6bf72a8b 59
okini3939 0:bd0f6bf72a8b 60 /**
okini3939 0:bd0f6bf72a8b 61 * Attach a callback called when a mouse event is received
okini3939 0:bd0f6bf72a8b 62 *
okini3939 0:bd0f6bf72a8b 63 * @param ptr function pointer
okini3939 0:bd0f6bf72a8b 64 */
okini3939 0:bd0f6bf72a8b 65 inline void attachEvent(void (*ptr)(int buttons, int stick_lx, int stick_ly, int stick_rx, int stick_ry, int trigger_l, int trigger_r)) {
okini3939 0:bd0f6bf72a8b 66 if (ptr != NULL) {
okini3939 0:bd0f6bf72a8b 67 onUpdate = ptr;
okini3939 0:bd0f6bf72a8b 68 }
okini3939 0:bd0f6bf72a8b 69 }
okini3939 0:bd0f6bf72a8b 70
okini3939 0:bd0f6bf72a8b 71 bool effect(uint8_t strong, uint8_t weak);
okini3939 0:bd0f6bf72a8b 72
okini3939 0:bd0f6bf72a8b 73 void poll ();
okini3939 0:bd0f6bf72a8b 74
okini3939 0:bd0f6bf72a8b 75 protected:
okini3939 0:bd0f6bf72a8b 76 //From IUSBEnumerator
okini3939 0:bd0f6bf72a8b 77 virtual void setVidPid(uint16_t vid, uint16_t pid);
okini3939 0:bd0f6bf72a8b 78 virtual bool parseInterface(uint8_t intf_nb, uint8_t intf_class, uint8_t intf_subclass, uint8_t intf_protocol); //Must return true if the interface should be parsed
okini3939 0:bd0f6bf72a8b 79 virtual bool useEndpoint(uint8_t intf_nb, ENDPOINT_TYPE type, ENDPOINT_DIRECTION dir); //Must return true if the endpoint will be used
okini3939 0:bd0f6bf72a8b 80
okini3939 0:bd0f6bf72a8b 81 private:
okini3939 0:bd0f6bf72a8b 82 USBHost * host;
okini3939 0:bd0f6bf72a8b 83 USBDeviceConnected * dev;
okini3939 0:bd0f6bf72a8b 84 bool dev_connected;
okini3939 0:bd0f6bf72a8b 85
okini3939 0:bd0f6bf72a8b 86 USBEndpoint * int_in;
okini3939 0:bd0f6bf72a8b 87 USBEndpoint * int_out;
okini3939 0:bd0f6bf72a8b 88 uint8_t nb_ep;
okini3939 0:bd0f6bf72a8b 89 int xpad_intf;
okini3939 0:bd0f6bf72a8b 90 bool xpad_device_found;
okini3939 0:bd0f6bf72a8b 91 uint8_t report[32];
okini3939 0:bd0f6bf72a8b 92
okini3939 0:bd0f6bf72a8b 93 uint32_t buttons;
okini3939 0:bd0f6bf72a8b 94 int16_t stick_lx, stick_ly, stick_rx, stick_ry;
okini3939 0:bd0f6bf72a8b 95 uint8_t trigger_l, trigger_r;
okini3939 0:bd0f6bf72a8b 96
okini3939 0:bd0f6bf72a8b 97 void rxHandler();
okini3939 0:bd0f6bf72a8b 98 void (*onUpdate)(int buttons, int stick_lx, int stick_ly, int stick_rx, int stick_ry, int trigger_l, int trigger_r);
okini3939 0:bd0f6bf72a8b 99 void init();
okini3939 0:bd0f6bf72a8b 100 bool probe(int val1, int val2, int val3, int val4);
okini3939 0:bd0f6bf72a8b 101
okini3939 0:bd0f6bf72a8b 102 };
okini3939 0:bd0f6bf72a8b 103
okini3939 0:bd0f6bf72a8b 104 #endif
okini3939 0:bd0f6bf72a8b 105
okini3939 0:bd0f6bf72a8b 106 #endif