2019-10-31 18:00:42 +00:00
|
|
|
#pragma once
|
|
|
|
#include <map>
|
|
|
|
//Catch-all header to include all the controllers
|
|
|
|
#include "Controllers/Xbox360Controller.h"
|
|
|
|
#include "Controllers/XboxOneController.h"
|
2019-11-03 19:38:24 +00:00
|
|
|
#include "Controllers/Dualshock3Controller.h"
|
|
|
|
#include "Controllers/Dualshock4Controller.h"
|
2019-10-31 18:00:42 +00:00
|
|
|
|
|
|
|
std::vector<uint16_t> GetVendors()
|
|
|
|
{
|
2019-11-03 19:38:24 +00:00
|
|
|
return {VENDOR_MICROSOFT, VENDOR_SONY};
|
2019-10-31 18:00:42 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
std::vector<uint16_t> GetVendorProducts(uint16_t vendor_id)
|
|
|
|
{
|
|
|
|
switch (vendor_id)
|
|
|
|
{
|
|
|
|
case VENDOR_MICROSOFT:
|
|
|
|
return {PRODUCT_XBOX360,
|
|
|
|
PRODUCT_XBOXONE2013,
|
|
|
|
PRODUCT_XBOXONE2015,
|
|
|
|
PRODUCT_XBOXONEELITE,
|
|
|
|
PRODUCT_XBOXONES,
|
|
|
|
PRODUCT_XBOXADAPTIVE};
|
2019-11-03 19:38:24 +00:00
|
|
|
case VENDOR_SONY:
|
|
|
|
return {PRODUCT_DUALSHOCK3,
|
|
|
|
PRODUCT_DUALSHOCK4};
|
2019-10-31 18:00:42 +00:00
|
|
|
}
|
|
|
|
return {};
|
|
|
|
}
|
|
|
|
|
|
|
|
std::unique_ptr<IController> ConstructControllerFromType(ControllerType type, std::unique_ptr<IUSBDevice> &&device)
|
|
|
|
{
|
|
|
|
|
|
|
|
//surely there must be a better way to pass a class type from a function
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case CONTROLLER_XBOX360:
|
|
|
|
return std::make_unique<Xbox360Controller>(std::move(device));
|
|
|
|
case CONTROLLER_XBOXONE:
|
|
|
|
return std::make_unique<XboxOneController>(std::move(device));
|
2019-11-03 19:38:24 +00:00
|
|
|
case CONTROLLER_DUALSHOCK3:
|
|
|
|
return std::make_unique<Dualshock3Controller>(std::move(device));
|
|
|
|
case CONTROLLER_DUALSHOCK4:
|
|
|
|
return std::make_unique<Dualshock4Controller>(std::move(device));
|
2019-10-31 18:00:42 +00:00
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return std::unique_ptr<IController>{};
|
|
|
|
}
|
|
|
|
|
|
|
|
ControllerType GetControllerTypeFromIds(uint16_t vendor_id, uint16_t product_id)
|
|
|
|
{
|
|
|
|
switch (vendor_id)
|
|
|
|
{
|
|
|
|
case VENDOR_MICROSOFT:
|
|
|
|
switch (product_id)
|
|
|
|
{
|
|
|
|
case PRODUCT_XBOX360:
|
|
|
|
return CONTROLLER_XBOX360;
|
|
|
|
case PRODUCT_XBOXONE2013:
|
|
|
|
case PRODUCT_XBOXONE2015:
|
|
|
|
case PRODUCT_XBOXONEELITE:
|
|
|
|
case PRODUCT_XBOXONES:
|
|
|
|
case PRODUCT_XBOXADAPTIVE:
|
|
|
|
return CONTROLLER_XBOXONE;
|
|
|
|
}
|
|
|
|
break;
|
2019-11-03 19:38:24 +00:00
|
|
|
case VENDOR_SONY:
|
|
|
|
switch (product_id)
|
|
|
|
{
|
|
|
|
case PRODUCT_DUALSHOCK3:
|
|
|
|
return CONTROLLER_DUALSHOCK3;
|
|
|
|
case PRODUCT_DUALSHOCK4:
|
|
|
|
return CONTROLLER_DUALSHOCK4;
|
|
|
|
}
|
|
|
|
break;
|
2019-10-31 18:00:42 +00:00
|
|
|
default:
|
|
|
|
break;
|
|
|
|
}
|
|
|
|
return CONTROLLER_UNDEFINED;
|
2019-11-04 19:11:55 +00:00
|
|
|
}
|
|
|
|
|
|
|
|
bool DoesControllerSupport(ControllerType type, ControllerSupport supportType)
|
|
|
|
{
|
|
|
|
switch (type)
|
|
|
|
{
|
|
|
|
case CONTROLLER_XBOX360:
|
|
|
|
if (supportType == SUPPORTS_RUMBLE)
|
|
|
|
return true;
|
|
|
|
return false;
|
|
|
|
case CONTROLLER_XBOXONE:
|
|
|
|
switch (supportType)
|
|
|
|
{
|
|
|
|
case SUPPORTS_RUMBLE:
|
|
|
|
return true;
|
|
|
|
case SUPPORTS_BLUETOOTH:
|
|
|
|
return true;
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
case CONTROLLER_DUALSHOCK3:
|
|
|
|
switch (supportType)
|
|
|
|
{
|
|
|
|
case SUPPORTS_RUMBLE:
|
|
|
|
return true;
|
|
|
|
case SUPPORTS_BLUETOOTH:
|
|
|
|
return true;
|
|
|
|
case SUPPORTS_PRESSUREBUTTONS:
|
|
|
|
return true;
|
|
|
|
case SUPPORTS_SIXAXIS:
|
|
|
|
return true;
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
default:
|
|
|
|
return false;
|
|
|
|
}
|
|
|
|
return false;
|
2019-10-31 18:00:42 +00:00
|
|
|
}
|