Kodi Development 22.0
for Binary and Script based Add-Ons
 
Loading...
Searching...
No Matches
PeripheralUtils.h
1/*
2 * Copyright (C) 2014-2018 Team Kodi
3 * This file is part of Kodi - https://kodi.tv
4 *
5 * SPDX-License-Identifier: GPL-2.0-or-later
6 * See LICENSES/README.md for more information.
7 */
8
9#pragma once
10
11#include "../../AddonBase.h"
12#include "../../c-api/addon-instance/peripheral.h"
13
14#ifdef __cplusplus
15
16#include <array> // Requires c++11
17#include <cstring>
18#include <memory>
19#include <string>
20#include <utility>
21#include <vector>
22
23#define PERIPHERAL_SAFE_DELETE(x) \
24 do \
25 { \
26 delete (x); \
27 (x) = NULL; \
28 } while (0)
29#define PERIPHERAL_SAFE_DELETE_ARRAY(x) \
30 do \
31 { \
32 delete[](x); \
33 (x) = NULL; \
34 } while (0)
35
36namespace kodi
37{
38namespace addon
39{
40
41class CInstancePeripheral;
42
46template<class THE_CLASS, typename THE_STRUCT>
48{
49public:
50 static void ToStructs(const std::vector<THE_CLASS>& vecObjects, THE_STRUCT** pStructs)
51 {
52 if (!pStructs)
53 return;
54
55 if (vecObjects.empty())
56 {
57 *pStructs = NULL;
58 }
59 else
60 {
61 (*pStructs) = new THE_STRUCT[vecObjects.size()];
62 for (unsigned int i = 0; i < vecObjects.size(); i++)
63 vecObjects.at(i).ToStruct((*pStructs)[i]);
64 }
65 }
66
67 static void ToStructs(const std::vector<THE_CLASS*>& vecObjects, THE_STRUCT** pStructs)
68 {
69 if (!pStructs)
70 return;
71
72 if (vecObjects.empty())
73 {
74 *pStructs = NULL;
75 }
76 else
77 {
78 *pStructs = new THE_STRUCT[vecObjects.size()];
79 for (unsigned int i = 0; i < vecObjects.size(); i++)
80 vecObjects.at(i)->ToStruct((*pStructs)[i]);
81 }
82 }
83
84 static void ToStructs(const std::vector<std::shared_ptr<THE_CLASS>>& vecObjects,
85 THE_STRUCT** pStructs)
86 {
87 if (!pStructs)
88 return;
89
90 if (vecObjects.empty())
91 {
92 *pStructs = NULL;
93 }
94 else
95 {
96 *pStructs = new THE_STRUCT[vecObjects.size()];
97 for (unsigned int i = 0; i < vecObjects.size(); i++)
98 vecObjects.at(i)->ToStruct((*pStructs)[i]);
99 }
100 }
101
102 static void FreeStructs(unsigned int structCount, THE_STRUCT* structs)
103 {
104 if (structs)
105 {
106 for (unsigned int i = 0; i < structCount; i++)
107 THE_CLASS::FreeStruct(structs[i]);
108 }
109 PERIPHERAL_SAFE_DELETE_ARRAY(structs);
110 }
111};
112
113//==============================================================================
132class PeripheralCapabilities : public CStructHdl<PeripheralCapabilities, PERIPHERAL_CAPABILITIES>
133{
135 friend class CInstancePeripheral;
138public:
141 {
142 m_cStructure->provides_joysticks = false;
143 m_cStructure->provides_joystick_rumble = false;
144 m_cStructure->provides_joystick_power_off = false;
145 m_cStructure->provides_buttonmaps = false;
146 }
147
162
165
167 void SetProvidesJoysticks(bool providesJoysticks)
168 {
169 m_cStructure->provides_joysticks = providesJoysticks;
170 }
171
173 bool GetProvidesJoysticks() const { return m_cStructure->provides_joysticks; }
174
176 void SetProvidesJoystickRumble(bool providesJoystickRumble)
177 {
178 m_cStructure->provides_joystick_rumble = providesJoystickRumble;
179 }
180
182 bool GetProvidesJoystickRumble() const { return m_cStructure->provides_joystick_rumble; }
183
185 void SetProvidesJoystickPowerOff(bool providesJoystickPowerOff)
186 {
187 m_cStructure->provides_joystick_power_off = providesJoystickPowerOff;
188 }
189
191 bool GetProvidesJoystickPowerOff() const { return m_cStructure->provides_joystick_power_off; }
192
194 void SetProvidesButtonmaps(bool providesButtonmaps)
195 {
196 m_cStructure->provides_buttonmaps = providesButtonmaps;
197 }
198
200 bool GetProvidesButtonmaps() const { return m_cStructure->provides_buttonmaps; }
201
203
204private:
206 PeripheralCapabilities(PERIPHERAL_CAPABILITIES* data) : CStructHdl(data) {}
207};
209//------------------------------------------------------------------------------
210
211//==============================================================================
225{
226public:
244
247
253 Peripheral(PERIPHERAL_TYPE type = PERIPHERAL_TYPE_UNKNOWN, const std::string& strName = "")
254 : m_type(type), m_strName(strName)
255 {
256 }
257
259 virtual ~Peripheral(void) = default;
260
265 bool operator==(const Peripheral& rhs) const
266 {
267 // clang-format off
268 return m_type == rhs.m_type &&
269 m_strName == rhs.m_strName &&
270 m_vendorId == rhs.m_vendorId &&
271 m_productId == rhs.m_productId;
272 // clang-format on
273 }
274
278 PERIPHERAL_TYPE Type(void) const { return m_type; }
279
283 const std::string& Name(void) const { return m_strName; }
284
288 uint16_t VendorID(void) const { return m_vendorId; }
289
293 uint16_t ProductID(void) const { return m_productId; }
294
298 unsigned int Index(void) const { return m_index; }
299
305 bool IsVidPidKnown(void) const { return m_vendorId != 0 || m_productId != 0; }
306
310 void SetType(PERIPHERAL_TYPE type) { m_type = type; }
311
315 void SetName(const std::string& strName) { m_strName = strName; }
316
320 void SetVendorID(uint16_t vendorId) { m_vendorId = vendorId; }
321
325 void SetProductID(uint16_t productId) { m_productId = productId; }
326
330 void SetIndex(unsigned int index) { m_index = index; }
331
333
334 explicit Peripheral(const PERIPHERAL_INFO& info)
335 : m_type(info.type),
336 m_strName(info.name ? info.name : ""),
337 m_vendorId(info.vendor_id),
338 m_productId(info.product_id),
339 m_index(info.index)
340 {
341 }
342
343 void ToStruct(PERIPHERAL_INFO& info) const
344 {
345 info.type = m_type;
346 info.name = new char[m_strName.size() + 1];
347 info.vendor_id = m_vendorId;
348 info.product_id = m_productId;
349 info.index = m_index;
350
351 std::strcpy(info.name, m_strName.c_str());
352 }
353
354 static void FreeStruct(PERIPHERAL_INFO& info) { PERIPHERAL_SAFE_DELETE_ARRAY(info.name); }
355
356private:
357 PERIPHERAL_TYPE m_type;
358 std::string m_strName;
359 uint16_t m_vendorId = 0;
360 uint16_t m_productId = 0;
361 unsigned int m_index = 0;
362};
364//------------------------------------------------------------------------------
365
366typedef PeripheralVector<Peripheral, PERIPHERAL_INFO> Peripherals;
367
368//==============================================================================
383{
384public:
401
404
406 PeripheralEvent() = default;
407
413 PeripheralEvent(unsigned int peripheralIndex,
414 unsigned int buttonIndex,
417 m_peripheralIndex(peripheralIndex),
418 m_driverIndex(buttonIndex),
419 m_buttonState(state)
420 {
421 }
422
428 PeripheralEvent(unsigned int peripheralIndex, unsigned int hatIndex, JOYSTICK_STATE_HAT state)
430 m_peripheralIndex(peripheralIndex),
431 m_driverIndex(hatIndex),
432 m_hatState(state)
433 {
434 }
435
441 PeripheralEvent(unsigned int peripheralIndex, unsigned int axisIndex, JOYSTICK_STATE_AXIS state)
443 m_peripheralIndex(peripheralIndex),
444 m_driverIndex(axisIndex),
445 m_axisState(state)
446 {
447 }
448
452 PERIPHERAL_EVENT_TYPE Type(void) const { return m_type; }
453
457 unsigned int PeripheralIndex(void) const { return m_peripheralIndex; }
458
462 unsigned int DriverIndex(void) const { return m_driverIndex; }
463
467 JOYSTICK_STATE_BUTTON ButtonState(void) const { return m_buttonState; }
468
472 JOYSTICK_STATE_HAT HatState(void) const { return m_hatState; }
473
477 JOYSTICK_STATE_AXIS AxisState(void) const { return m_axisState; }
478
482 JOYSTICK_STATE_MOTOR MotorState(void) const { return m_motorState; }
483
487 void SetType(PERIPHERAL_EVENT_TYPE type) { m_type = type; }
488
492 void SetPeripheralIndex(unsigned int index) { m_peripheralIndex = index; }
493
497 void SetDriverIndex(unsigned int index) { m_driverIndex = index; }
498
502 void SetButtonState(JOYSTICK_STATE_BUTTON state) { m_buttonState = state; }
503
507 void SetHatState(JOYSTICK_STATE_HAT state) { m_hatState = state; }
508
512 void SetAxisState(JOYSTICK_STATE_AXIS state) { m_axisState = state; }
513
517 void SetMotorState(JOYSTICK_STATE_MOTOR state) { m_motorState = state; }
518
520
521 explicit PeripheralEvent(const PERIPHERAL_EVENT& event)
522 : m_type(event.type),
523 m_peripheralIndex(event.peripheral_index),
524 m_driverIndex(event.driver_index),
525 m_buttonState(event.driver_button_state),
526 m_hatState(event.driver_hat_state),
527 m_axisState(event.driver_axis_state),
528 m_motorState(event.motor_state)
529 {
530 }
531
532 void ToStruct(PERIPHERAL_EVENT& event) const
533 {
534 event.type = m_type;
535 event.peripheral_index = m_peripheralIndex;
536 event.driver_index = m_driverIndex;
537 event.driver_button_state = m_buttonState;
538 event.driver_hat_state = m_hatState;
539 event.driver_axis_state = m_axisState;
540 event.motor_state = m_motorState;
541 }
542
543 static void FreeStruct(PERIPHERAL_EVENT& event) { (void)event; }
544
545private:
547 unsigned int m_peripheralIndex = 0;
548 unsigned int m_driverIndex = 0;
551 JOYSTICK_STATE_AXIS m_axisState = 0.0f;
552 JOYSTICK_STATE_MOTOR m_motorState = 0.0f;
553};
555//------------------------------------------------------------------------------
556
557typedef PeripheralVector<PeripheralEvent, PERIPHERAL_EVENT> PeripheralEvents;
558
559//==============================================================================
582class Joystick : public Peripheral
583{
584public:
610
613
618 Joystick(const std::string& provider = "", const std::string& strName = "")
620 m_provider(provider),
621 m_requestedPort(NO_PORT_REQUESTED)
622 {
623 }
624
628 Joystick(const Joystick& other) : Peripheral(other) { *this = other; }
629
632 ~Joystick(void) override = default;
633
638 {
639 if (this != &rhs)
640 {
641 Peripheral::operator=(rhs);
642
643 m_provider = rhs.m_provider;
644 m_requestedPort = rhs.m_requestedPort;
645 m_buttonCount = rhs.m_buttonCount;
646 m_hatCount = rhs.m_hatCount;
647 m_axisCount = rhs.m_axisCount;
648 m_motorCount = rhs.m_motorCount;
649 m_supportsPowerOff = rhs.m_supportsPowerOff;
650 }
651 return *this;
652 }
653
655 bool operator==(const Joystick& rhs) const
656 {
657 // clang-format off
658 return Peripheral::operator==(rhs) &&
659 m_provider == rhs.m_provider &&
660 m_requestedPort == rhs.m_requestedPort &&
661 m_buttonCount == rhs.m_buttonCount &&
662 m_hatCount == rhs.m_hatCount &&
663 m_axisCount == rhs.m_axisCount &&
664 m_motorCount == rhs.m_motorCount &&
665 m_supportsPowerOff == rhs.m_supportsPowerOff;
666 // clang-format on
667 }
668
672 const std::string& Provider(void) const { return m_provider; }
673
677 int RequestedPort(void) const { return m_requestedPort; }
678
682 unsigned int ButtonCount(void) const { return m_buttonCount; }
683
687 unsigned int HatCount(void) const { return m_hatCount; }
688
692 unsigned int AxisCount(void) const { return m_axisCount; }
693
697 unsigned int MotorCount(void) const { return m_motorCount; }
698
702 bool SupportsPowerOff(void) const { return m_supportsPowerOff; }
703
707 void SetProvider(const std::string& provider) { m_provider = provider; }
708
712 void SetRequestedPort(int requestedPort) { m_requestedPort = requestedPort; }
713
717 void SetButtonCount(unsigned int buttonCount) { m_buttonCount = buttonCount; }
718
722 void SetHatCount(unsigned int hatCount) { m_hatCount = hatCount; }
723
727 void SetAxisCount(unsigned int axisCount) { m_axisCount = axisCount; }
728
732 void SetMotorCount(unsigned int motorCount) { m_motorCount = motorCount; }
733
737 void SetSupportsPowerOff(bool supportsPowerOff) { m_supportsPowerOff = supportsPowerOff; }
738
740
741 explicit Joystick(const JOYSTICK_INFO& info)
742 : Peripheral(info.peripheral),
743 m_provider(info.provider ? info.provider : ""),
744 m_requestedPort(info.requested_port),
745 m_buttonCount(info.button_count),
746 m_hatCount(info.hat_count),
747 m_axisCount(info.axis_count),
748 m_motorCount(info.motor_count),
749 m_supportsPowerOff(info.supports_poweroff)
750 {
751 }
752
753 void ToStruct(JOYSTICK_INFO& info) const
754 {
755 Peripheral::ToStruct(info.peripheral);
756
757 info.provider = new char[m_provider.size() + 1];
758 info.requested_port = m_requestedPort;
759 info.button_count = m_buttonCount;
760 info.hat_count = m_hatCount;
761 info.axis_count = m_axisCount;
762 info.motor_count = m_motorCount;
763 info.supports_poweroff = m_supportsPowerOff;
764
765 std::strcpy(info.provider, m_provider.c_str());
766 }
767
768 static void FreeStruct(JOYSTICK_INFO& info)
769 {
770 Peripheral::FreeStruct(info.peripheral);
771
772 PERIPHERAL_SAFE_DELETE_ARRAY(info.provider);
773 }
774
775private:
776 std::string m_provider;
777 int m_requestedPort;
778 unsigned int m_buttonCount = 0;
779 unsigned int m_hatCount = 0;
780 unsigned int m_axisCount = 0;
781 unsigned int m_motorCount = 0;
782 bool m_supportsPowerOff = false;
783};
785//------------------------------------------------------------------------------
786
787typedef PeripheralVector<Joystick, JOYSTICK_INFO> Joysticks;
788
789class JoystickFeature;
790
791//==============================================================================
835{
836protected:
840 DriverPrimitive(JOYSTICK_DRIVER_PRIMITIVE_TYPE type, unsigned int driverIndex)
841 : m_type(type), m_driverIndex(driverIndex)
842 {
843 }
844
845public:
848
850 DriverPrimitive(void) = default;
851
856 static DriverPrimitive CreateButton(unsigned int buttonIndex)
857 {
859 }
860
866 DriverPrimitive(unsigned int hatIndex, JOYSTICK_DRIVER_HAT_DIRECTION direction)
868 m_driverIndex(hatIndex),
869 m_hatDirection(direction)
870 {
871 }
872
880 DriverPrimitive(unsigned int axisIndex,
881 int center,
883 unsigned int range)
885 m_driverIndex(axisIndex),
886 m_center(center),
887 m_semiAxisDirection(direction),
888 m_range(range)
889 {
890 }
891
896 static DriverPrimitive CreateMotor(unsigned int motorIndex)
897 {
899 }
900
904 DriverPrimitive(std::string keycode)
905 : m_type(JOYSTICK_DRIVER_PRIMITIVE_TYPE_KEY), m_keycode(std::move(keycode))
906 {
907 }
908
914 {
916 static_cast<unsigned int>(buttonIndex));
917 }
918
924 : m_type(JOYSTICK_DRIVER_PRIMITIVE_TYPE_RELPOINTER_DIRECTION), m_relPointerDirection(direction)
925 {
926 }
927
931 JOYSTICK_DRIVER_PRIMITIVE_TYPE Type(void) const { return m_type; }
932
936 unsigned int DriverIndex(void) const { return m_driverIndex; }
937
941 JOYSTICK_DRIVER_HAT_DIRECTION HatDirection(void) const { return m_hatDirection; }
942
946 int Center(void) const { return m_center; }
947
951 JOYSTICK_DRIVER_SEMIAXIS_DIRECTION SemiAxisDirection(void) const { return m_semiAxisDirection; }
952
956 unsigned int Range(void) const { return m_range; }
957
961 const std::string& Keycode(void) const { return m_keycode; }
962
967 {
968 return static_cast<JOYSTICK_DRIVER_MOUSE_INDEX>(m_driverIndex);
969 }
970
975 {
976 return m_relPointerDirection;
977 }
978
983 bool operator==(const DriverPrimitive& other) const
984 {
985 if (m_type == other.m_type)
986 {
987 switch (m_type)
988 {
990 {
991 return m_driverIndex == other.m_driverIndex;
992 }
994 {
995 return m_driverIndex == other.m_driverIndex && m_hatDirection == other.m_hatDirection;
996 }
998 {
999 return m_driverIndex == other.m_driverIndex && m_center == other.m_center &&
1000 m_semiAxisDirection == other.m_semiAxisDirection && m_range == other.m_range;
1001 }
1003 {
1004 return m_keycode == other.m_keycode;
1005 }
1007 {
1008 return m_driverIndex == other.m_driverIndex;
1009 }
1011 {
1012 return m_driverIndex == other.m_driverIndex;
1013 }
1015 {
1016 return m_relPointerDirection == other.m_relPointerDirection;
1017 }
1018 default:
1019 break;
1020 }
1021 }
1022 return false;
1023 }
1024
1026
1027 explicit DriverPrimitive(const JOYSTICK_DRIVER_PRIMITIVE& primitive) : m_type(primitive.type)
1028 {
1029 switch (m_type)
1030 {
1032 {
1033 m_driverIndex = primitive.button.index;
1034 break;
1035 }
1037 {
1038 m_driverIndex = primitive.hat.index;
1039 m_hatDirection = primitive.hat.direction;
1040 break;
1041 }
1043 {
1044 m_driverIndex = primitive.semiaxis.index;
1045 m_center = primitive.semiaxis.center;
1046 m_semiAxisDirection = primitive.semiaxis.direction;
1047 m_range = primitive.semiaxis.range;
1048 break;
1049 }
1051 {
1052 m_driverIndex = primitive.motor.index;
1053 break;
1054 }
1056 {
1057 m_keycode = primitive.key.keycode;
1058 break;
1059 }
1061 {
1062 m_driverIndex = primitive.mouse.button;
1063 break;
1064 }
1066 {
1067 m_relPointerDirection = primitive.relpointer.direction;
1068 break;
1069 }
1070 default:
1071 break;
1072 }
1073 }
1074
1075 void ToStruct(JOYSTICK_DRIVER_PRIMITIVE& driver_primitive) const
1076 {
1077 driver_primitive.type = m_type;
1078 switch (m_type)
1079 {
1081 {
1082 driver_primitive.button.index = m_driverIndex;
1083 break;
1084 }
1086 {
1087 driver_primitive.hat.index = m_driverIndex;
1088 driver_primitive.hat.direction = m_hatDirection;
1089 break;
1090 }
1092 {
1093 driver_primitive.semiaxis.index = m_driverIndex;
1094 driver_primitive.semiaxis.center = m_center;
1095 driver_primitive.semiaxis.direction = m_semiAxisDirection;
1096 driver_primitive.semiaxis.range = m_range;
1097 break;
1098 }
1100 {
1101 driver_primitive.motor.index = m_driverIndex;
1102 break;
1103 }
1105 {
1106 const size_t size = sizeof(driver_primitive.key.keycode);
1107 std::strncpy(driver_primitive.key.keycode, m_keycode.c_str(), size - 1);
1108 driver_primitive.key.keycode[size - 1] = '\0';
1109 break;
1110 }
1112 {
1113 driver_primitive.mouse.button = static_cast<JOYSTICK_DRIVER_MOUSE_INDEX>(m_driverIndex);
1114 break;
1115 }
1117 {
1118 driver_primitive.relpointer.direction = m_relPointerDirection;
1119 break;
1120 }
1121 default:
1122 break;
1123 }
1124 }
1125
1126 static void FreeStruct(JOYSTICK_DRIVER_PRIMITIVE& primitive) { (void)primitive; }
1127
1128private:
1130 unsigned int m_driverIndex = 0;
1132 int m_center = 0;
1134 unsigned int m_range = 1;
1135 std::string m_keycode;
1137};
1139//------------------------------------------------------------------------------
1140
1141typedef PeripheralVector<DriverPrimitive, JOYSTICK_DRIVER_PRIMITIVE> DriverPrimitives;
1142
1143//==============================================================================
1169{
1170public:
1173
1179 JoystickFeature(const std::string& name = "",
1181 : m_name(name), m_type(type), m_primitives{}
1182 {
1183 }
1184
1188 JoystickFeature(const JoystickFeature& other) { *this = other; }
1189
1194 {
1195 if (this != &rhs)
1196 {
1197 m_name = rhs.m_name;
1198 m_type = rhs.m_type;
1199 m_primitives = rhs.m_primitives;
1200 }
1201 return *this;
1202 }
1203
1208 bool operator==(const JoystickFeature& other) const
1209 {
1210 return m_name == other.m_name && m_type == other.m_type && m_primitives == other.m_primitives;
1211 }
1212
1216 const std::string& Name(void) const { return m_name; }
1217
1221 JOYSTICK_FEATURE_TYPE Type(void) const { return m_type; }
1222
1226 bool IsValid() const { return m_type != JOYSTICK_FEATURE_TYPE_UNKNOWN; }
1227
1231 void SetName(const std::string& name) { m_name = name; }
1232
1236 void SetType(JOYSTICK_FEATURE_TYPE type) { m_type = type; }
1237
1240
1246 {
1247 return m_primitives[which];
1248 }
1249
1255 {
1256 m_primitives[which] = primitive;
1257 }
1258
1262 std::array<DriverPrimitive, JOYSTICK_PRIMITIVE_MAX>& Primitives() { return m_primitives; }
1263
1267 const std::array<DriverPrimitive, JOYSTICK_PRIMITIVE_MAX>& Primitives() const
1268 {
1269 return m_primitives;
1270 }
1271
1273
1274 explicit JoystickFeature(const JOYSTICK_FEATURE& feature)
1275 : m_name(feature.name ? feature.name : ""), m_type(feature.type)
1276 {
1277 for (unsigned int i = 0; i < JOYSTICK_PRIMITIVE_MAX; i++)
1278 m_primitives[i] = DriverPrimitive(feature.primitives[i]);
1279 }
1280
1281 void ToStruct(JOYSTICK_FEATURE& feature) const
1282 {
1283 feature.name = new char[m_name.length() + 1];
1284 feature.type = m_type;
1285 for (unsigned int i = 0; i < JOYSTICK_PRIMITIVE_MAX; i++)
1286 m_primitives[i].ToStruct(feature.primitives[i]);
1287
1288 std::strcpy(feature.name, m_name.c_str());
1289 }
1290
1291 static void FreeStruct(JOYSTICK_FEATURE& feature) { PERIPHERAL_SAFE_DELETE_ARRAY(feature.name); }
1292
1293private:
1294 std::string m_name;
1295 JOYSTICK_FEATURE_TYPE m_type;
1296 std::array<DriverPrimitive, JOYSTICK_PRIMITIVE_MAX> m_primitives;
1297};
1299//------------------------------------------------------------------------------
1300
1301typedef PeripheralVector<JoystickFeature, JOYSTICK_FEATURE> JoystickFeatures;
1302
1303} /* namespace addon */
1304} /* namespace kodi */
1305
1306#endif /* __cplusplus */
Definition Peripheral.h:210
Definition AddonBase.h:206
Definition PeripheralUtils.h:1169
Definition PeripheralUtils.h:583
Definition PeripheralUtils.h:133
Definition PeripheralUtils.h:383
Definition PeripheralUtils.h:225
Definition PeripheralUtils.h:48
JOYSTICK_STATE_BUTTON
Definition peripheral.h:148
@ JOYSTICK_STATE_BUTTON_UNPRESSED
button is released
Definition peripheral.h:150
JOYSTICK_STATE_HAT
Definition peripheral.h:165
@ JOYSTICK_STATE_HAT_UNPRESSED
no directions are pressed
Definition peripheral.h:167
PERIPHERAL_EVENT_TYPE
Definition peripheral.h:122
@ PERIPHERAL_EVENT_TYPE_DRIVER_HAT
state changed for joystick driver hat
Definition peripheral.h:130
@ PERIPHERAL_EVENT_TYPE_NONE
unknown event
Definition peripheral.h:124
@ PERIPHERAL_EVENT_TYPE_DRIVER_AXIS
state changed for joystick driver axis
Definition peripheral.h:133
@ PERIPHERAL_EVENT_TYPE_DRIVER_BUTTON
state changed for joystick driver button
Definition peripheral.h:127
float JOYSTICK_STATE_AXIS
Axis value in the closed interval [-1.0, 1.0].
Definition peripheral.h:204
float JOYSTICK_STATE_MOTOR
Motor value in the closed interval [0.0, 1.0].
Definition peripheral.h:210
DriverPrimitive(void)=default
Construct an invalid driver primitive.
bool operator==(const DriverPrimitive &other) const
Compare this with another class of this type.
Definition PeripheralUtils.h:983
static DriverPrimitive CreateMouseButton(JOYSTICK_DRIVER_MOUSE_INDEX buttonIndex)
Construct a driver primitive representing a mouse button.
Definition PeripheralUtils.h:913
DriverPrimitive(std::string keycode)
Construct a driver primitive representing a key on a keyboard.
Definition PeripheralUtils.h:904
static DriverPrimitive CreateButton(unsigned int buttonIndex)
Construct a driver primitive representing a joystick button.
Definition PeripheralUtils.h:856
DriverPrimitive(unsigned int axisIndex, int center, JOYSTICK_DRIVER_SEMIAXIS_DIRECTION direction, unsigned int range)
Construct a driver primitive representing the positive or negative half of an axis.
Definition PeripheralUtils.h:880
unsigned int Range(void) const
Get range.
Definition PeripheralUtils.h:956
JOYSTICK_DRIVER_HAT_DIRECTION HatDirection(void) const
Get hat direction.
Definition PeripheralUtils.h:941
DriverPrimitive(JOYSTICK_DRIVER_RELPOINTER_DIRECTION direction)
Construct a driver primitive representing one of the four direction in which a relative pointer can m...
Definition PeripheralUtils.h:923
int Center(void) const
Get center.
Definition PeripheralUtils.h:946
JOYSTICK_DRIVER_SEMIAXIS_DIRECTION SemiAxisDirection(void) const
Get semi axis direction.
Definition PeripheralUtils.h:951
JOYSTICK_DRIVER_RELPOINTER_DIRECTION RelPointerDirection(void) const
Get relative pointer direction.
Definition PeripheralUtils.h:974
static DriverPrimitive CreateMotor(unsigned int motorIndex)
Construct a driver primitive representing a motor.
Definition PeripheralUtils.h:896
JOYSTICK_DRIVER_MOUSE_INDEX MouseIndex(void) const
Get mouse index.
Definition PeripheralUtils.h:966
const std::string & Keycode(void) const
Get key code as string.
Definition PeripheralUtils.h:961
DriverPrimitive(unsigned int hatIndex, JOYSTICK_DRIVER_HAT_DIRECTION direction)
Construct a driver primitive representing one of the four direction arrows on a dpad.
Definition PeripheralUtils.h:866
unsigned int DriverIndex(void) const
Get driver index.
Definition PeripheralUtils.h:936
JOYSTICK_DRIVER_PRIMITIVE_TYPE Type(void) const
Get type of primitive.
Definition PeripheralUtils.h:931
JOYSTICK_DRIVER_HAT_DIRECTION
Definition peripheral.h:310
@ JOYSTICK_DRIVER_HAT_UNKNOWN
Driver hat unknown.
Definition peripheral.h:312
JOYSTICK_DRIVER_MOUSE_INDEX
Definition peripheral.h:392
JOYSTICK_DRIVER_PRIMITIVE_TYPE
Definition peripheral.h:267
@ JOYSTICK_DRIVER_PRIMITIVE_TYPE_MOTOR
Driver input primitive type motor.
Definition peripheral.h:281
@ JOYSTICK_DRIVER_PRIMITIVE_TYPE_MOUSE_BUTTON
Driver input primitive type mouse button.
Definition peripheral.h:287
@ JOYSTICK_DRIVER_PRIMITIVE_TYPE_UNKNOWN
Driver input primitive type unknown.
Definition peripheral.h:269
@ JOYSTICK_DRIVER_PRIMITIVE_TYPE_RELPOINTER_DIRECTION
Driver input primitive type relative pointer direction.
Definition peripheral.h:290
@ JOYSTICK_DRIVER_PRIMITIVE_TYPE_HAT_DIRECTION
Driver input primitive type hat direction.
Definition peripheral.h:275
@ JOYSTICK_DRIVER_PRIMITIVE_TYPE_BUTTON
Driver input primitive type button.
Definition peripheral.h:272
@ JOYSTICK_DRIVER_PRIMITIVE_TYPE_SEMIAXIS
Driver input primitive type semiaxis.
Definition peripheral.h:278
@ JOYSTICK_DRIVER_PRIMITIVE_TYPE_KEY
Driver input primitive type key.
Definition peripheral.h:284
JOYSTICK_DRIVER_RELPOINTER_DIRECTION
Definition peripheral.h:441
@ JOYSTICK_DRIVER_RELPOINTER_UNKNOWN
Relative pointer direction unknown.
Definition peripheral.h:443
JOYSTICK_DRIVER_SEMIAXIS_DIRECTION
Definition peripheral.h:345
@ JOYSTICK_DRIVER_SEMIAXIS_UNKNOWN
unknown direction
Definition peripheral.h:350
JOYSTICK_FEATURE_PRIMITIVE
Definition peripheral.h:539
@ JOYSTICK_PRIMITIVE_MAX
Maximum number of primitives.
Definition peripheral.h:588
JOYSTICK_FEATURE_TYPE
Definition peripheral.h:497
@ JOYSTICK_FEATURE_TYPE_UNKNOWN
Unknown type.
Definition peripheral.h:499
std::array< DriverPrimitive, JOYSTICK_PRIMITIVE_MAX > & Primitives()
Get all primitives on this class.
Definition PeripheralUtils.h:1262
void SetType(JOYSTICK_FEATURE_TYPE type)
Set type of feature.
Definition PeripheralUtils.h:1236
void SetInvalid(void)
Set type as invalid.
Definition PeripheralUtils.h:1239
JoystickFeature & operator=(const JoystickFeature &rhs)
Copy data from another JoystickFeature class to here.
Definition PeripheralUtils.h:1193
const DriverPrimitive & Primitive(JOYSTICK_FEATURE_PRIMITIVE which) const
Get primitive of feature by wanted type.
Definition PeripheralUtils.h:1245
const std::string & Name(void) const
Get name of feature.
Definition PeripheralUtils.h:1216
JOYSTICK_FEATURE_TYPE Type(void) const
Get name of feature.
Definition PeripheralUtils.h:1221
void SetPrimitive(JOYSTICK_FEATURE_PRIMITIVE which, const DriverPrimitive &primitive)
Set primitive for feature by wanted type.
Definition PeripheralUtils.h:1254
void SetName(const std::string &name)
Set name of feature.
Definition PeripheralUtils.h:1231
const std::array< DriverPrimitive, JOYSTICK_PRIMITIVE_MAX > & Primitives() const
Get all primitives on this class (as constant).
Definition PeripheralUtils.h:1267
bool operator==(const JoystickFeature &other) const
Compare this with another class of this type.
Definition PeripheralUtils.h:1208
bool IsValid() const
Check this feature is valid.
Definition PeripheralUtils.h:1226
JoystickFeature(const std::string &name="", JOYSTICK_FEATURE_TYPE type=JOYSTICK_FEATURE_TYPE_UNKNOWN)
Class constructor.
Definition PeripheralUtils.h:1179
JoystickFeature(const JoystickFeature &other)
Class copy constructor.
Definition PeripheralUtils.h:1188
void SetMotorCount(unsigned int motorCount)
Get motor count.
Definition PeripheralUtils.h:732
const std::string & Provider(void) const
Get provider name.
Definition PeripheralUtils.h:672
Joystick & operator=(const Joystick &rhs)
Copy data from another Joystick class to here.
Definition PeripheralUtils.h:637
unsigned int ButtonCount(void) const
Get button count.
Definition PeripheralUtils.h:682
unsigned int HatCount(void) const
Get hat count.
Definition PeripheralUtils.h:687
Joystick(const Joystick &other)
Class copy constructor.
Definition PeripheralUtils.h:628
bool SupportsPowerOff(void) const
Get supports power off.
Definition PeripheralUtils.h:702
bool operator==(const Joystick &rhs) const
Comparison operator.
Definition PeripheralUtils.h:655
void SetButtonCount(unsigned int buttonCount)
Get button count.
Definition PeripheralUtils.h:717
int RequestedPort(void) const
Get requested port number.
Definition PeripheralUtils.h:677
void SetSupportsPowerOff(bool supportsPowerOff)
Get supports power off.
Definition PeripheralUtils.h:737
void SetProvider(const std::string &provider)
Set provider name.
Definition PeripheralUtils.h:707
void SetRequestedPort(int requestedPort)
Get requested port number.
Definition PeripheralUtils.h:712
Joystick(const std::string &provider="", const std::string &strName="")
Constructor.
Definition PeripheralUtils.h:618
unsigned int AxisCount(void) const
Get axis count.
Definition PeripheralUtils.h:692
void SetAxisCount(unsigned int axisCount)
Get axis count.
Definition PeripheralUtils.h:727
void SetHatCount(unsigned int hatCount)
Get hat count.
Definition PeripheralUtils.h:722
unsigned int MotorCount(void) const
Get motor count.
Definition PeripheralUtils.h:697
~Joystick(void) override=default
Destructor.
PERIPHERAL_TYPE
Definition peripheral.h:71
@ PERIPHERAL_TYPE_UNKNOWN
Type declared as unknown.
Definition peripheral.h:73
@ PERIPHERAL_TYPE_JOYSTICK
Type declared as joystick.
Definition peripheral.h:76
void SetType(PERIPHERAL_EVENT_TYPE type)
Set type of event.
Definition PeripheralUtils.h:487
JOYSTICK_STATE_HAT HatState(void) const
Get hat state.
Definition PeripheralUtils.h:472
void SetAxisState(JOYSTICK_STATE_AXIS state)
Set axis state.
Definition PeripheralUtils.h:512
JOYSTICK_STATE_MOTOR MotorState(void) const
Get motor state.
Definition PeripheralUtils.h:482
JOYSTICK_STATE_BUTTON ButtonState(void) const
Get button state.
Definition PeripheralUtils.h:467
PeripheralEvent(unsigned int peripheralIndex, unsigned int hatIndex, JOYSTICK_STATE_HAT state)
Constructor.
Definition PeripheralUtils.h:428
void SetDriverIndex(unsigned int index)
Set driver index.
Definition PeripheralUtils.h:497
PeripheralEvent()=default
Constructor.
unsigned int PeripheralIndex(void) const
Get peripheral index.
Definition PeripheralUtils.h:457
void SetPeripheralIndex(unsigned int index)
Set peripheral index.
Definition PeripheralUtils.h:492
void SetHatState(JOYSTICK_STATE_HAT state)
Set hat state.
Definition PeripheralUtils.h:507
JOYSTICK_STATE_AXIS AxisState(void) const
Get axis state.
Definition PeripheralUtils.h:477
PERIPHERAL_EVENT_TYPE Type(void) const
Get type of event.
Definition PeripheralUtils.h:452
void SetMotorState(JOYSTICK_STATE_MOTOR state)
Set motor state.
Definition PeripheralUtils.h:517
PeripheralEvent(unsigned int peripheralIndex, unsigned int buttonIndex, JOYSTICK_STATE_BUTTON state)
Constructor.
Definition PeripheralUtils.h:413
PeripheralEvent(unsigned int peripheralIndex, unsigned int axisIndex, JOYSTICK_STATE_AXIS state)
Constructor.
Definition PeripheralUtils.h:441
void SetButtonState(JOYSTICK_STATE_BUTTON state)
Set button state.
Definition PeripheralUtils.h:502
unsigned int DriverIndex(void) const
Get driver index.
Definition PeripheralUtils.h:462
uint16_t VendorID(void) const
Get peripheral vendor id.
Definition PeripheralUtils.h:288
void SetName(const std::string &strName)
Set peripheral name.
Definition PeripheralUtils.h:315
uint16_t ProductID(void) const
Get peripheral product id.
Definition PeripheralUtils.h:293
void SetIndex(unsigned int index)
Set peripheral index.
Definition PeripheralUtils.h:330
const std::string & Name(void) const
Get peripheral name.
Definition PeripheralUtils.h:283
virtual ~Peripheral(void)=default
Destructor.
bool IsVidPidKnown(void) const
Check VID and PID are known.
Definition PeripheralUtils.h:305
void SetType(PERIPHERAL_TYPE type)
Set peripheral type.
Definition PeripheralUtils.h:310
Peripheral(PERIPHERAL_TYPE type=PERIPHERAL_TYPE_UNKNOWN, const std::string &strName="")
Constructor.
Definition PeripheralUtils.h:253
void SetProductID(uint16_t productId)
Set peripheral product identifier.
Definition PeripheralUtils.h:325
bool operator==(const Peripheral &rhs) const
Comparison operator.
Definition PeripheralUtils.h:265
unsigned int Index(void) const
Get peripheral index identifier.
Definition PeripheralUtils.h:298
PERIPHERAL_TYPE Type(void) const
Get peripheral type.
Definition PeripheralUtils.h:278
void SetVendorID(uint16_t vendorId)
Set peripheral vendor id.
Definition PeripheralUtils.h:320
void SetProvidesJoystickPowerOff(bool providesJoystickPowerOff)
Set true if the add-on provides power off about joystick.
Definition PeripheralUtils.h:185
bool GetProvidesJoysticks() const
To get with SetProvidesJoysticks changed values.
Definition PeripheralUtils.h:173
void SetProvidesButtonmaps(bool providesButtonmaps)
Set true if the add-on provides button maps.
Definition PeripheralUtils.h:194
bool GetProvidesButtonmaps() const
To get with SetProvidesButtonmaps changed values.
Definition PeripheralUtils.h:200
bool GetProvidesJoystickPowerOff() const
To get with SetProvidesJoystickPowerOff changed values.
Definition PeripheralUtils.h:191
bool GetProvidesJoystickRumble() const
To get with SetProvidesJoystickRumble changed values.
Definition PeripheralUtils.h:182
void SetProvidesJoysticks(bool providesJoysticks)
Set true if the add-on provides joysticks.
Definition PeripheralUtils.h:167
void SetProvidesJoystickRumble(bool providesJoystickRumble)
Set true if the add-on provides joystick rumble.
Definition PeripheralUtils.h:176
Driver primitive struct.
Definition peripheral.h:472
Mapping between higher-level controller feature and its driver primitives.
Definition peripheral.h:597
Info specific to joystick peripherals.
Definition peripheral.h:242
Peripheral add-on capabilities.
Definition peripheral.h:103
bool provides_joysticks
Definition peripheral.h:104
bool provides_buttonmaps
Definition peripheral.h:107
Event information.
Definition peripheral.h:217
Information shared between peripherals.
Definition peripheral.h:91
Definition PeripheralUtils.h:835
DriverPrimitive(JOYSTICK_DRIVER_PRIMITIVE_TYPE type, unsigned int driverIndex)
Construct a driver primitive of the specified type.
Definition PeripheralUtils.h:840