91 p->lowspeed = lowspeed;
102 PID =
udd->idProduct;
141 p->lowspeed = lowspeed;
176 Notify(
PSTR(
"\r\nXbox One Controller Connected\r\n"), 0x80);
189 rcode = XboxCommand(writeBuf, 5);
231 Notify(
PSTR(
"\r\nXbox One Init Failed, error code: "), 0x80);
261 pollInterval =
pep->bInterval;
269 Notify(
PSTR(
"\r\nEndpoint descriptor:"), 0x80);
295 Notify(
PSTR(
"\r\nXbox One Controller Disconnected\r\n"), 0x80);
322 Notify(
PSTR(
"\r\nXbox One Poll Failed, error code: "), 0x80);
330void XBOXONE::readReport() {
331 if(readBuf[0] == 0x07) {
338 if(ButtonState != OldButtonState) {
339 ButtonClickState = ButtonState & ~OldButtonState;
340 OldButtonState = ButtonState;
343 if(readBuf[0] != 0x20) {
353 ButtonState =
xbox | (((
uint16_t)readBuf[5] & 0xF) << 8) | (readBuf[4] & 0xF0) | (((
uint16_t)readBuf[4] & 0x0C) << 10) | ((readBuf[4] & 0x01) << 3) | (((
uint16_t)readBuf[5] & 0xC0) << 8) | ((readBuf[5] & 0x30) >> 4);
364 const bool newShare = (readBuf[22] & 0x01) ? 1 : 0;
371 if(ButtonState != OldButtonState) {
372 ButtonClickState = ButtonState & ~OldButtonState;
373 OldButtonState = ButtonState;
377 if(triggerValue[0] != 0 && triggerValueOld[0] == 0)
379 triggerValueOld[0] = triggerValue[0];
380 if(triggerValue[1] != 0 && triggerValueOld[1] == 0)
382 triggerValueOld[1] = triggerValue[1];
389 if (b ==
SHARE)
return sharePressed;
393 return triggerValue[0];
395 return triggerValue[1];
403 shareClicked =
false;
435 data[2] = cmdCounter++;
439 Notify(
PSTR(
"\r\nXboxCommand failed. Return: "), 0x80);
447void XBOXONE::onInit() {
467 XboxCommand(writeBuf, 13);
492 XboxCommand(writeBuf, 13);
507 writeBuf[6] = leftTrigger;
508 writeBuf[7] = rightTrigger;
514 XboxCommand(writeBuf, 13);
#define USB_ERROR_OUT_OF_ADDRESS_SPACE_IN_POOL
#define USB_ERROR_CLASS_INSTANCE_ALREADY_IN_USE
#define USB_DEV_CONFIG_ERROR_DEVICE_NOT_SUPPORTED
#define USB_ERROR_EPINFO_IS_NULL
#define USB_ERROR_ADDRESS_NOT_FOUND_IN_POOL
#define XBOX_ONE_OUTPUT_PIPE
#define XBOX_ONE_MAX_ENDPOINTS
#define XBOX_ONE_CONTROL_PIPE
#define XBOX_ONE_INPUT_PIPE
#define USB_NAK_MAX_POWER
virtual void FreeAddress(uint8_t addr)=0
virtual UsbDevice * GetUsbDevicePtr(uint8_t addr)=0
virtual uint8_t AllocAddress(uint8_t parent, bool is_hub=false, uint8_t port=0)=0
AddressPool & GetAddressPool()
uint8_t getDevDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t *dataptr)
defined(USB_METHODS_INLINE)
uint8_t setConf(uint8_t addr, uint8_t ep, uint8_t conf_value)
uint8_t setAddr(uint8_t oldaddr, uint8_t ep, uint8_t newaddr)
uint8_t RegisterDeviceClass(USBDeviceConfig *pdev)
uint8_t getConfDescr(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t conf, uint8_t *dataptr)
uint8_t setEpInfoEntry(uint8_t addr, uint8_t epcount, EpInfo *eprecord_ptr)
uint8_t inTransfer(uint8_t addr, uint8_t ep, uint16_t *nbytesptr, uint8_t *data, uint8_t bInterval=0)
uint8_t outTransfer(uint8_t addr, uint8_t ep, uint16_t nbytes, uint8_t *data)
EpInfo epInfo[XBOX_ONE_MAX_ENDPOINTS]
void PrintEndpointDescriptor(const USB_ENDPOINT_DESCRIPTOR *ep_ptr)
void EndpointXtract(uint8_t conf, uint8_t iface, uint8_t alt, uint8_t proto, const USB_ENDPOINT_DESCRIPTOR *ep)
virtual bool VIDPIDOK(uint16_t vid, uint16_t pid)
void setRumbleOn(uint8_t leftTrigger, uint8_t rightTrigger, uint8_t leftMotor, uint8_t rightMotor)
bool getButtonClick(ButtonEnum b)
virtual uint8_t Release()
uint16_t getButtonPress(ButtonEnum b)
virtual uint8_t Init(uint8_t parent, uint8_t port, bool lowspeed)
int16_t getAnalogHat(AnalogHatEnum a)
constexpr int8_t ButtonIndex(ButtonEnum key)
#define NotifyFailSetConfDescr(...)
#define NotifyFailUnknownDevice(...)
#define NotifyFailGetConfDescr(...)
#define NotifyFailSetDevTblEntry(...)
#define NotifyFailGetDevDescr(...)
#define bmUSB_TRANSFER_TYPE
#define USB_TRANSFER_TYPE_INTERRUPT
#define pgm_read_word(addr)
const uint16_t XBOX_BUTTONS[]
int8_t getButtonIndexXbox(ButtonEnum b)