peripherals  1.4.2
RoadNarrows Robotics Hardware Peripherals Package
HIDXbox360.h File Reference

Xbox360 Controller C interface. More...

#include <sys/types.h>
#include <sys/stat.h>
#include <sys/time.h>
#include <sys/ioctl.h>
#include <limits.h>
#include <fcntl.h>
#include <termios.h>
#include <unistd.h>
#include <stdlib.h>
#include <stdarg.h>
#include <time.h>
#include <stdio.h>
#include <string.h>
#include <pthread.h>
#include <map>
#include <string>
#include <libusb-1.0/libusb.h>
#include "rnr/rnrconfig.h"
#include "rnr/usbext.h"
#include "rnr/hid/HID.h"

Go to the source code of this file.

Classes

class  rnr::HIDXbox360
 Xbox360 controller HID input class. More...
 
struct  rnr::HIDXbox360::UsbPkt_T
 USB application packet transfer structure. More...
 

Namespaces

 rnr
 RoadNarrows Robotics standard namespace.
 

Macros

#define MICROSOFT_VENDOR_ID   0x045e
 
#define XBOX360_WIRED_PROD_ID   0x028e
 
#define XBOX360_TETHERED_PROD_ID   0x028f
 
#define XBOX360_WIRELESS_PROD_ID   0x0719
 
#define XBOX360_WIRELESS_WIN_PROD_ID   0x0291
 
#define XBOX360_NO_PROD_ID   0x0000
 
#define XBOX360_READ_ENDPOINT   0x81
 
#define XBOX360_WRITE_ENDPOINT   0x01
 
#define XBOX360_NUM_OF_INTERFACES   4
 
#define XBOX_LIBUSB_DEBUG_OFF   0
 libusb logging off More...
 
#define XBOX_LIBUSB_DEBUG_ERROR   1
 log libusb errors More...
 
#define XBOX_LIBUSB_DEBUG_WARN   2
 log libusb warnings and errors More...
 
#define XBOX_LIBUSB_DEBUG_INFO   3
 log libusb info, warnings and errors More...
 
#define XBOX_LIBUSB_DEBUG_DFT   XBOX_LIBUSB_DEBUG_OFF
 default libusb logging More...
 
#define XBOX360_MSG_OFFSET_DFT   0
 default message start byte offset More...
 
#define XBOX360_MSG_OFFSET_W   0
 wired message start byte offset More...
 
#define XBOX360_MSG_OFFSET_WL   4
 wireless message start byte offset More...
 
#define XBOX360_WL_PKT_HDR_LEN   XBOX360_MSG_OFFSET_WL
 wireless packet header length More...
 
#define XBOX360_WL_LINK_PKT_LEN   2
 link status change packet length More...
 
#define XBOX360_WL_NORM_PKT_LEN   29
 normal packet length More...
 
#define XBOX360_WL_PKT_TYPE_POS   0
 byte position More...
 
#define XBOX360_WL_PKT_TYPE_NORM   0x00
 normal link message More...
 
#define XBOX360_WL_PKT_TYPE_CHG   0x08
 link status changed message More...
 
#define XBOX360_WL_PKT_TYPE_20   0x20
 ? 20 d7 67 fc 01 88 ff ff 00... More...
 
#define XBOX360_WL_PKT_TYPE_40   0x40
 ? 40 7c 78 a7 01 88 ff ff 00... More...
 
#define XBOX360_WL_PKT_TYPE_60   0x40
 ? 60 4e 23 ff 01 88 ff ff 00... More...
 
#define XBOX360_WL_PKT_TYPE_80   0x80
 
#define XBOX360_WL_PKT_TYPE_C0   0xc0
 
#define XBOX360_WL_LINK_STATUS_POS   1
 byte position More...
 
#define XBOX360_WL_LINK_STATUS_NO_LINK   0x00
 no link More...
 
#define XBOX360_WL_LINK_STATUS_HEADSET   0x40
 linked w/ headset More...
 
#define XBOX360_WL_LINK_STATUS_CTLR   0x80
 linked w/ controller More...
 
#define XBOX360_WL_LINK_STATUS_CTLR_HEADSET   0xc0
 linked w/ ctlr & headset More...
 
#define XBOX360_WL_ANN_PAT_1   0x0f
 header pattern at byte 1 More...
 
#define XBOX360_WL_ANN_PAT_2   0x00
 header pattern at byte 2 More...
 
#define XBOX360_WL_ANN_PAT_3   0xf0
 header pattern at byte 3 More...
 
#define XBOX360_WL_ANN_SN_POS   7
 serial number field position More...
 
#define XBOX360_WL_ANN_SN_LEN   7
 serial number field length More...
 
#define XBOX360_WL_ANN_BATT_POS   17
 battery status field position More...
 
#define XBOX360_WL_ANN_BATT_LEN   1
 battery status field length More...
 
#define XBOX360_WL_BATT_PAT_1   0x00
 header pattern at byte 1 More...
 
#define XBOX360_WL_BATT_PAT_2   0x00
 header pattern at byte 2 More...
 
#define XBOX360_WL_BATT_PAT_3   0x13
 header pattern at byte 3 More...
 
#define XBOX360_WL_BATT_BATT_POS   4
 battery status field position More...
 
#define XBOX360_WL_BATT_BATT_LEN   1
 battery status field length More...
 
#define XBOX360_WL_NULL_PAT_1   0x00
 header pattern at byte 1 More...
 
#define XBOX360_WL_NULL_PAT_2   0x00
 header pattern at byte 2 More...
 
#define XBOX360_WL_NULL_PAT_3_00   0x00
 header pattern at byte 3 More...
 
#define XBOX360_WL_NULL_PAT_3_10   0x10
 header pattern at byte 3 More...
 
#define XBOX360_WL_NULL_PAT_3_20   0x20
 header pattern at byte 3 More...
 
#define XBOX360_WL_NULL_PAT_3_40   0x40
 header pattern at byte 3 More...
 
#define XBOX360_WL_NULL_PAT_3_ACK   0xf0
 header pattern at byte 3 More...
 
#define XBOX360_WL_BTTN_PAT_1   0x01
 header pattern at byte 1 More...
 
#define XBOX360_WL_BTTN_PAT_2   0x00
 header pattern at byte 2 More...
 
#define XBOX360_WL_BTTN_PAT_3   0xf0
 header pattern at byte 3 More...
 
#define XBOX360_WL_RUMBLE_PAT_1   0x01
 header pattern at byte 1 More...
 
#define XBOX360_WL_RUMBLE_PAT_2   0x0f
 header pattern at byte 2 More...
 
#define XBOX360_WL_RUMBLE_PAT_3   0xc0
 header pattern at byte 3 More...
 
#define XBOX360_WL_LED_PAT_1   0x00
 header pattern at byte 1 More...
 
#define XBOX360_WL_LED_PAT_2   0x08
 header pattern at byte 2 More...
 
#define XBOX360_WL_LED_PAT_3   0x40
 header pattern at byte 3 More...
 
#define XBOX360_WL_F8_PAT_1   0xf8
 header pattern at byte 1 More...
 
#define XBOX360_WL_F8_PAT_2_1   0x01
 header pattern at byte 2 More...
 
#define XBOX360_WL_F8_PAT_2_2   0x02
 header pattern at byte 2 More...
 
#define XBOX360_WL_F8_PAT_2_3   0x03
 header pattern at byte 2 More...
 
#define XBOX360_WL_F8_PAT_3   0x00
 header pattern at byte 3 More...
 
#define XBOX360_WL_32_PAT_1   0x32
 header pattern at byte 1 More...
 
#define XBOX360_WL_32_PAT_2   0x00
 header pattern at byte 2? More...
 
#define XBOX360_WL_32_PAT_3   0x00
 header pattern at byte 3? More...
 
#define XBOX360_MSG_TYPE_POS   0
 message type byte position More...
 
#define XBOX360_MSG_LEN_POS   1
 message length byte position More...
 
#define XBOX360_BTTN_MSG_TYPE   0x00
 button update msg type More...
 
#define XBOX360_BTTN_MSG_LEN   20
 wired button msg length More...
 
#define XBOX360_WL_BTTN_MSG_LEN   19
 wireless button msg len More...
 
#define XBOX360_BTTN_MSG_MIN_LEN   XBOX360_WL_BTTN_MSG_LEN
 
#define XBOX360_BTTN_PAD_UP_POS   2
 byte position More...
 
#define XBOX360_BTTN_PAD_UP_MASK   0x01
 bit mask More...
 
#define XBOX360_BTTN_PAD_DOWN_POS   2
 byte position More...
 
#define XBOX360_BTTN_PAD_DOWN_MASK   0x02
 bit mask More...
 
#define XBOX360_BTTN_PAD_LEFT_POS   2
 byte position More...
 
#define XBOX360_BTTN_PAD_LEFT_MASK   0x04
 bit mask More...
 
#define XBOX360_BTTN_PAD_RIGHT_POS   2
 byte position More...
 
#define XBOX360_BTTN_PAD_RIGHT_MASK   0x08
 bit mask More...
 
#define XBOX360_BTTN_START_POS   2
 byte position More...
 
#define XBOX360_BTTN_START_MASK   0x10
 bit mask More...
 
#define XBOX360_BTTN_BACK_POS   2
 byte position More...
 
#define XBOX360_BTTN_BACK_MASK   0x20
 bit mask More...
 
#define XBOX360_BTTN_LEFT_STICK_CLICK_POS   2
 byte position More...
 
#define XBOX360_BTTN_LEFT_STICK_CLICK_MASK   0x40
 bit mask More...
 
#define XBOX360_BTTN_RIGHT_STICK_CLICK_POS   2
 byte position More...
 
#define XBOX360_BTTN_RIGHT_STICK_CLICK_MASK   0x80
 bit mask More...
 
#define XBOX360_BTTN_LEFT_BUMP_POS   3
 byte position More...
 
#define XBOX360_BTTN_LEFT_BUMP_MASK   0x01
 bit mask More...
 
#define XBOX360_BTTN_RIGHT_BUMP_POS   3
 byte position More...
 
#define XBOX360_BTTN_RIGHT_BUMP_MASK   0x02
 bit mask More...
 
#define XBOX360_BTTN_CENTER_X_POS   3
 byte position More...
 
#define XBOX360_BTTN_CENTER_X_MASK   0x04
 bit mask More...
 
#define XBOX360_BTTN_A_BUTTON_POS   3
 byte position More...
 
#define XBOX360_BTTN_A_BUTTON_MASK   0x10
 bit mask More...
 
#define XBOX360_BTTN_B_BUTTON_POS   3
 byte position More...
 
#define XBOX360_BTTN_B_BUTTON_MASK   0x20
 bit mask More...
 
#define XBOX360_BTTN_X_BUTTON_POS   3
 byte position More...
 
#define XBOX360_BTTN_X_BUTTON_MASK   0x40
 bit mask More...
 
#define XBOX360_BTTN_Y_BUTTON_POS   3
 byte position More...
 
#define XBOX360_BTTN_Y_BUTTON_MASK   0x80
 bit mask More...
 
#define XBOX360_BTTN_LEFT_TRIGGER_POS   4
 byte position More...
 
#define XBOX360_BTTN_LEFT_TRIGGER_MASK   0xff
 bit mask More...
 
#define XBOX360_BTTN_RIGHT_TRIGGER_POS   5
 byte position More...
 
#define XBOX360_BTTN_RIGHT_TRIGGER_MASK   0xff
 bit mask More...
 
#define XBOX360_TRIGGER_MIN   0
 minimum trigger value More...
 
#define XBOX360_TRIGGER_MAX   255
 maximum trigger value More...
 
#define XBOX360_BTTN_LEFT_X_POS_L   6
 byte position More...
 
#define XBOX360_BTTN_LEFT_X_POS_H   7
 byte position More...
 
#define XBOX360_BTTN_LEFT_X_MASK   0xffff
 bit mask More...
 
#define XBOX360_BTTN_LEFT_Y_POS_L   8
 byte position More...
 
#define XBOX360_BTTN_LEFT_Y_POS_H   9
 byte position More...
 
#define XBOX360_BTTN_LEFT_Y_MASK   0xffff
 bit mask More...
 
#define XBOX360_BTTN_RIGHT_X_POS_L   10
 byte position More...
 
#define XBOX360_BTTN_RIGHT_X_POS_H   11
 byte position More...
 
#define XBOX360_BTTN_RIGHT_X_MASK   0xffff
 bit mask More...
 
#define XBOX360_BTTN_RIGHT_Y_POS_L   12
 byte position More...
 
#define XBOX360_BTTN_RIGHT_Y_POS_H   13
 byte position More...
 
#define XBOX360_BTTN_RIGHT_Y_MASK   0xffff
 bit mask More...
 
#define XBOX360_JOY_MIN   -32767
 minimum joystick value More...
 
#define XBOX360_JOY_MAX   32767
 maximum joystick value More...
 
#define XBOX360_RUMBLE_MSG_TYPE   0x00
 rumble message type More...
 
#define XBOX360_RUMBLE_MSG_LEN   8
 rumble read/write message length More...
 
#define XBOX360_RUMBLE_ZERO_2   2
 byte position with 0 value More...
 
#define XBOX360_RUMBLE_LEFT_POS   3
 byte position More...
 
#define XBOX360_RUMBLE_LEFT_MASK   0xff
 bit mask More...
 
#define XBOX360_RUMBLE_LEFT_MAX   255
 left rumble motor maximum More...
 
#define XBOX360_RUMBLE_RIGHT_POS   4
 byte position More...
 
#define XBOX360_RUMBLE_RIGHT_MASK   0xff
 bit mask More...
 
#define XBOX360_RUMBLE_RIGHT_MAX   255
 right rumble motor maximum More...
 
#define XBOX360_RUMBLE_ZERO_5   5
 byte position with 0 value More...
 
#define XBOX360_RUMBLE_ZERO_6   6
 byte position with 0 value More...
 
#define XBOX360_RUMBLE_ZERO_7   7
 byte position with 0 value More...
 
#define XBOX360_LED_MSG_TYPE   0x01
 LED message type. More...
 
#define XBOX360_LED_MSG_LEN   3
 LED message length. More...
 
#define XBOX360_LED_PAT_POS   2
 LED messge byte position. More...
 
#define XBOX360_WL_LED_MSG_TYPE   0x00
 LED message type. More...
 
#define XBOX360_WL_LED_MSG_LEN   8
 LED message length. More...
 
#define XBOX360_WL_LED_PAT_POS   3
 LED position is in PACKET header. More...
 
#define XBOX360_LED_PAT_MASK   0x0f
 bit mask More...
 
#define XBOX360_LED_PAT_ALL_OFF   0
 all 4 LEDs off More...
 
#define XBOX360_LED_PAT_ALL_BLINK_ON_1   1
 all 4 LEDs blink, then #1 on More...
 
#define XBOX360_LED_PAT_1_BLINK_ON   2
 #1 LED blinks, then #1 on More...
 
#define XBOX360_LED_PAT_2_BLINK_ON   3
 #2 LED blinks, then #2 on More...
 
#define XBOX360_LED_PAT_3_BLINK_ON   4
 #3 LED blinks, then #3 on More...
 
#define XBOX360_LED_PAT_4_BLINK_ON   5
 #4 LED blinks, then #4 on More...
 
#define XBOX360_LED_PAT_1_ON   6
 #1 LED on More...
 
#define XBOX360_LED_PAT_2_ON   7
 #2 LED on More...
 
#define XBOX360_LED_PAT_3_ON   8
 #3 LED on More...
 
#define XBOX360_LED_PAT_4_ON   9
 #4 LED on More...
 
#define XBOX360_LED_PAT_ALL_SPIN   10
 spinnig LEDs one at a time More...
 
#define XBOX360_LED_PAT_4_BLINK_ON_L   11
 #4 LED blinks long, then #4 on More...
 
#define XBOX360_LED_PAT_4_BLINK   12
 #4 LED blinks slowly More...
 
#define XBOX360_LED_PAT_ALL_SPIN_2   13
 auto-transitions to previous More...
 
#define XBOX360_LED_PAT_ALL_BLINK   14
 all 4 LEDs blink continuously More...
 
#define XBOX360_LED_PAT_NUMOF   15
 number of patterns More...
 
#define XBOX360_LEFT_DEAD_ZONE   ((int)(0.25 * XBOX360_JOY_MAX))
 
#define XBOX360_RIGHT_DEAD_ZONE   ((int)(0.25 * XBOX360_JOY_MAX))
 

Enumerations

enum  rnr::Xbox360FeatId {
  rnr::Xbox360FeatIdPadUp = 0,
  rnr::Xbox360FeatIdPadDown,
  rnr::Xbox360FeatIdPadLeft,
  rnr::Xbox360FeatIdPadRight,
  rnr::Xbox360FeatIdStart,
  rnr::Xbox360FeatIdBack,
  rnr::Xbox360FeatIdLeftStickClick,
  rnr::Xbox360FeatIdRightStickClick,
  rnr::Xbox360FeatIdLeftBump,
  rnr::Xbox360FeatIdRightBump,
  rnr::Xbox360FeatIdCenterX,
  rnr::Xbox360FeatIdAButton,
  rnr::Xbox360FeatIdBButton,
  rnr::Xbox360FeatIdXButton,
  rnr::Xbox360FeatIdYButton,
  rnr::Xbox360FeatIdLeftTrigger,
  rnr::Xbox360FeatIdRightTrigger,
  rnr::Xbox360FeatIdLeftJoyX,
  rnr::Xbox360FeatIdLeftJoyY,
  rnr::Xbox360FeatIdRightJoyX,
  rnr::Xbox360FeatIdRightJoyY,
  rnr::Xbox360FeatIdLeftRumble,
  rnr::Xbox360FeatIdRightRumble,
  rnr::Xbox360FeatIdLEDPat,
  rnr::Xbox360FeatIdNumOf
}
 Xbox360 Feature IDs. More...
 

Detailed Description

Xbox360 Controller C interface.

LastChangedDate
2014-07-10 15:03:23 -0600 (Thu, 10 Jul 2014)
Rev
3696
Author
Rob Shiely (rob.k.nosp@m.nigh.nosp@m.t@roa.nosp@m.dnar.nosp@m.rows..nosp@m.com)
Daniel Packard (danie.nosp@m.l@ro.nosp@m.adnar.nosp@m.rows.nosp@m..com)
Robin Knight (robin.nosp@m..kni.nosp@m.ght@r.nosp@m.oadn.nosp@m.arrow.nosp@m.s.co.nosp@m.m)

Definition in file HIDXbox360.h.