Kodi Development 22.0
for Binary and Script based Add-Ons
 
Loading...
Searching...
No Matches
Peripheral.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 "peripheral/PeripheralUtils.h"
13
14#ifdef __cplusplus
15namespace kodi
16{
17namespace addon
18{
19
20//##############################################################################
28
29//##############################################################################
39
40//##############################################################################
46
47//##############################################################################
53
54//##############################################################################
60
61//==============================================================================
209class ATTR_DLL_LOCAL CInstancePeripheral : public IAddonInstance
210{
211public:
212 //============================================================================
219 : IAddonInstance(IInstanceInfo(CPrivateBase::m_interface->firstKodiInstance))
220 {
221 if (CPrivateBase::m_interface->globalSingleInstance != nullptr)
222 throw std::logic_error("kodi::addon::CInstancePeripheral: Creation of more as one in single "
223 "instance way is not allowed!");
224
225 SetAddonStruct(CPrivateBase::m_interface->firstKodiInstance);
226 CPrivateBase::m_interface->globalSingleInstance = this;
227 }
228 //----------------------------------------------------------------------------
229
230 //============================================================================
264 explicit CInstancePeripheral(const IInstanceInfo& instance) : IAddonInstance(instance)
265 {
266 if (CPrivateBase::m_interface->globalSingleInstance != nullptr)
267 throw std::logic_error("kodi::addon::CInstancePeripheral: Creation of multiple together with "
268 "single instance way is not allowed!");
269
270 SetAddonStruct(instance);
271 }
272 //----------------------------------------------------------------------------
273
274 //============================================================================
278 ~CInstancePeripheral() override = default;
279 //----------------------------------------------------------------------------
280
281 //============================================================================
296
297 //============================================================================
324 //----------------------------------------------------------------------------
325
326 //============================================================================
342 std::vector<std::shared_ptr<kodi::addon::Peripheral>>& scan_results)
343 {
345 }
346 //----------------------------------------------------------------------------
347
348 //============================================================================
359 virtual PERIPHERAL_ERROR GetEvents(std::vector<kodi::addon::PeripheralEvent>& events)
360 {
362 }
363 //----------------------------------------------------------------------------
364
365 //============================================================================
371 virtual bool SendEvent(const kodi::addon::PeripheralEvent& event) { return false; }
372 //----------------------------------------------------------------------------
373
375
376 //============================================================================
392
393 //============================================================================
405 virtual PERIPHERAL_ERROR GetJoystickInfo(unsigned int index, kodi::addon::Joystick& info)
406 {
408 }
409 //----------------------------------------------------------------------------
410
411 //============================================================================
423 std::string& controllerId)
424 {
426 }
427 //----------------------------------------------------------------------------
428
429 //============================================================================
440 const std::string& controllerId)
441 {
443 }
444 //----------------------------------------------------------------------------
445
446 //============================================================================
458 const std::string& controller_id,
459 std::vector<kodi::addon::JoystickFeature>& features)
460 {
462 }
463 //----------------------------------------------------------------------------
464
465 //============================================================================
475 const std::string& controller_id,
476 const std::vector<kodi::addon::JoystickFeature>& features)
477 {
479 }
480 //----------------------------------------------------------------------------
481
482 //============================================================================
493 const kodi::addon::Joystick& joystick, std::vector<kodi::addon::DriverPrimitive>& primitives)
494 {
496 }
497 //----------------------------------------------------------------------------
498
499 //============================================================================
507 const kodi::addon::Joystick& joystick,
508 const std::vector<kodi::addon::DriverPrimitive>& primitives)
509 {
511 }
512 //----------------------------------------------------------------------------
513
514 //============================================================================
519 virtual void SaveButtonMap(const kodi::addon::Joystick& joystick) {}
520 //----------------------------------------------------------------------------
521
522 //============================================================================
526 virtual void RevertButtonMap(const kodi::addon::Joystick& joystick) {}
527 //----------------------------------------------------------------------------
528
529 //============================================================================
534 virtual void ResetButtonMap(const kodi::addon::Joystick& joystick,
535 const std::string& controller_id)
536 {
537 }
538 //----------------------------------------------------------------------------
539
540 //============================================================================
544 virtual void PowerOffJoystick(unsigned int index) {}
545 //----------------------------------------------------------------------------
546
548
549 //============================================================================
555
556 //============================================================================
561 const std::string AddonPath() const { return m_instanceData->props->addon_path; }
562 //----------------------------------------------------------------------------
563
564 //============================================================================
573 const std::string UserPath() const { return m_instanceData->props->user_path; }
574 //----------------------------------------------------------------------------
575
576 //============================================================================
581 void TriggerScan(void)
582 {
583 return m_instanceData->toKodi->trigger_scan(m_instanceData->toKodi->kodiInstance);
584 }
585 //----------------------------------------------------------------------------
586
587 //============================================================================
595 void RefreshButtonMaps(const std::string& deviceName = "", const std::string& controllerId = "")
596 {
597 return m_instanceData->toKodi->refresh_button_maps(m_instanceData->toKodi->kodiInstance,
598 deviceName.c_str(), controllerId.c_str());
599 }
600 //----------------------------------------------------------------------------
601
602 //============================================================================
611 unsigned int FeatureCount(const std::string& controllerId,
613 {
614 return m_instanceData->toKodi->feature_count(m_instanceData->toKodi->kodiInstance,
615 controllerId.c_str(), type);
616 }
617 //----------------------------------------------------------------------------
618
619 //============================================================================
627 JOYSTICK_FEATURE_TYPE FeatureType(const std::string& controllerId, const std::string& featureName)
628 {
629 return m_instanceData->toKodi->feature_type(m_instanceData->toKodi->kodiInstance,
630 controllerId.c_str(), featureName.c_str());
631 }
632 //----------------------------------------------------------------------------
633
635
636private:
637 void SetAddonStruct(KODI_ADDON_INSTANCE_STRUCT* instance)
638 {
639 instance->hdl = this;
640
641 instance->peripheral->toAddon->get_capabilities = ADDON_GetCapabilities;
642 instance->peripheral->toAddon->perform_device_scan = ADDON_PerformDeviceScan;
643 instance->peripheral->toAddon->free_scan_results = ADDON_FreeScanResults;
644 instance->peripheral->toAddon->get_events = ADDON_GetEvents;
645 instance->peripheral->toAddon->free_events = ADDON_FreeEvents;
646 instance->peripheral->toAddon->send_event = ADDON_SendEvent;
647
648 instance->peripheral->toAddon->get_joystick_info = ADDON_GetJoystickInfo;
649 instance->peripheral->toAddon->free_joystick_info = ADDON_FreeJoystickInfo;
650 instance->peripheral->toAddon->get_appearance = ADDON_GetAppearance;
651 instance->peripheral->toAddon->set_appearance = ADDON_SetAppearance;
652 instance->peripheral->toAddon->get_features = ADDON_GetFeatures;
653 instance->peripheral->toAddon->free_features = ADDON_FreeFeatures;
654 instance->peripheral->toAddon->map_features = ADDON_MapFeatures;
655 instance->peripheral->toAddon->get_ignored_primitives = ADDON_GetIgnoredPrimitives;
656 instance->peripheral->toAddon->free_primitives = ADDON_FreePrimitives;
657 instance->peripheral->toAddon->set_ignored_primitives = ADDON_SetIgnoredPrimitives;
658 instance->peripheral->toAddon->save_button_map = ADDON_SaveButtonMap;
659 instance->peripheral->toAddon->revert_button_map = ADDON_RevertButtonMap;
660 instance->peripheral->toAddon->reset_button_map = ADDON_ResetButtonMap;
661 instance->peripheral->toAddon->power_off_joystick = ADDON_PowerOffJoystick;
662
663 m_instanceData = instance->peripheral;
664 m_instanceData->toAddon->addonInstance = this;
665 }
666
667 inline static void ADDON_GetCapabilities(const AddonInstance_Peripheral* addonInstance,
668 PERIPHERAL_CAPABILITIES* capabilities)
669 {
670 if (!addonInstance || !capabilities)
671 return;
672
673 kodi::addon::PeripheralCapabilities peripheralCapabilities(capabilities);
674 static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
675 ->GetCapabilities(peripheralCapabilities);
676 }
677
678 inline static PERIPHERAL_ERROR ADDON_PerformDeviceScan(
679 const AddonInstance_Peripheral* addonInstance,
680 unsigned int* peripheral_count,
681 PERIPHERAL_INFO** scan_results)
682 {
683 if (!addonInstance || !peripheral_count || !scan_results)
685
686 std::vector<std::shared_ptr<kodi::addon::Peripheral>> peripherals;
687 PERIPHERAL_ERROR err = static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
688 ->PerformDeviceScan(peripherals);
689 if (err == PERIPHERAL_NO_ERROR)
690 {
691 *peripheral_count = static_cast<unsigned int>(peripherals.size());
692 kodi::addon::Peripherals::ToStructs(peripherals, scan_results);
693 }
694
695 return err;
696 }
697
698 inline static void ADDON_FreeScanResults(const AddonInstance_Peripheral* addonInstance,
699 unsigned int peripheral_count,
700 PERIPHERAL_INFO* scan_results)
701 {
702 if (!addonInstance)
703 return;
704
705 kodi::addon::Peripherals::FreeStructs(peripheral_count, scan_results);
706 }
707
708 inline static PERIPHERAL_ERROR ADDON_GetEvents(const AddonInstance_Peripheral* addonInstance,
709 unsigned int* event_count,
710 PERIPHERAL_EVENT** events)
711 {
712 if (!addonInstance || !event_count || !events)
714
715 std::vector<kodi::addon::PeripheralEvent> peripheralEvents;
716 PERIPHERAL_ERROR err = static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
717 ->GetEvents(peripheralEvents);
718 if (err == PERIPHERAL_NO_ERROR)
719 {
720 *event_count = static_cast<unsigned int>(peripheralEvents.size());
721 kodi::addon::PeripheralEvents::ToStructs(peripheralEvents, events);
722 }
723
724 return err;
725 }
726
727 inline static void ADDON_FreeEvents(const AddonInstance_Peripheral* addonInstance,
728 unsigned int event_count,
729 PERIPHERAL_EVENT* events)
730 {
731 if (!addonInstance)
732 return;
733
734 kodi::addon::PeripheralEvents::FreeStructs(event_count, events);
735 }
736
737 inline static bool ADDON_SendEvent(const AddonInstance_Peripheral* addonInstance,
738 const PERIPHERAL_EVENT* event)
739 {
740 if (!addonInstance || !event)
741 return false;
742 return static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
743 ->SendEvent(kodi::addon::PeripheralEvent(*event));
744 }
745
746 inline static PERIPHERAL_ERROR ADDON_GetJoystickInfo(
747 const AddonInstance_Peripheral* addonInstance, unsigned int index, JOYSTICK_INFO* info)
748 {
749 if (!addonInstance || !info)
751
752 kodi::addon::Joystick addonInfo;
753 PERIPHERAL_ERROR err = static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
754 ->GetJoystickInfo(index, addonInfo);
755 if (err == PERIPHERAL_NO_ERROR)
756 {
757 addonInfo.ToStruct(*info);
758 }
759
760 return err;
761 }
762
763 inline static void ADDON_FreeJoystickInfo(const AddonInstance_Peripheral* addonInstance,
764 JOYSTICK_INFO* info)
765 {
766 if (!addonInstance)
767 return;
768
769 kodi::addon::Joystick::FreeStruct(*info);
770 }
771
772 inline static PERIPHERAL_ERROR ADDON_GetAppearance(const AddonInstance_Peripheral* addonInstance,
773 const JOYSTICK_INFO* joystick,
774 char* buffer,
775 unsigned int bufferSize)
776 {
777 if (addonInstance == nullptr || joystick == nullptr || buffer == nullptr || bufferSize == 0)
779
780 kodi::addon::Joystick addonJoystick(*joystick);
781 std::string controllerId;
782
783 PERIPHERAL_ERROR err = static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
784 ->GetAppearance(addonJoystick, controllerId);
785 if (err == PERIPHERAL_NO_ERROR)
786 {
787 std::strncpy(buffer, controllerId.c_str(), bufferSize - 1);
788 buffer[bufferSize - 1] = '\0';
789 }
790
791 return err;
792 }
793
794 inline static PERIPHERAL_ERROR ADDON_SetAppearance(const AddonInstance_Peripheral* addonInstance,
795 const JOYSTICK_INFO* joystick,
796 const char* controllerId)
797 {
798 if (addonInstance == nullptr || joystick == nullptr || controllerId == nullptr)
800
801 kodi::addon::Joystick addonJoystick(*joystick);
802 std::string strControllerId(controllerId);
803
804 return static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
805 ->SetAppearance(addonJoystick, strControllerId);
806 }
807
808 inline static PERIPHERAL_ERROR ADDON_GetFeatures(const AddonInstance_Peripheral* addonInstance,
809 const JOYSTICK_INFO* joystick,
810 const char* controller_id,
811 unsigned int* feature_count,
812 JOYSTICK_FEATURE** features)
813 {
814 if (!addonInstance || !joystick || !controller_id || !feature_count || !features)
816
817 kodi::addon::Joystick addonJoystick(*joystick);
818 std::vector<kodi::addon::JoystickFeature> featuresVector;
819
820 PERIPHERAL_ERROR err = static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
821 ->GetFeatures(addonJoystick, controller_id, featuresVector);
822 if (err == PERIPHERAL_NO_ERROR)
823 {
824 *feature_count = static_cast<unsigned int>(featuresVector.size());
825 kodi::addon::JoystickFeatures::ToStructs(featuresVector, features);
826 }
827
828 return err;
829 }
830
831 inline static void ADDON_FreeFeatures(const AddonInstance_Peripheral* addonInstance,
832 unsigned int feature_count,
833 JOYSTICK_FEATURE* features)
834 {
835 if (!addonInstance)
836 return;
837
838 kodi::addon::JoystickFeatures::FreeStructs(feature_count, features);
839 }
840
841 inline static PERIPHERAL_ERROR ADDON_MapFeatures(const AddonInstance_Peripheral* addonInstance,
842 const JOYSTICK_INFO* joystick,
843 const char* controller_id,
844 unsigned int feature_count,
845 const JOYSTICK_FEATURE* features)
846 {
847 if (!addonInstance || !joystick || !controller_id || (feature_count > 0 && !features))
849
850 kodi::addon::Joystick addonJoystick(*joystick);
851 std::vector<kodi::addon::JoystickFeature> primitiveVector;
852
853 for (unsigned int i = 0; i < feature_count; i++)
854 primitiveVector.emplace_back(*(features + i));
855
856 return static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
857 ->MapFeatures(addonJoystick, controller_id, primitiveVector);
858 }
859
860 inline static PERIPHERAL_ERROR ADDON_GetIgnoredPrimitives(
861 const AddonInstance_Peripheral* addonInstance,
862 const JOYSTICK_INFO* joystick,
863 unsigned int* primitive_count,
864 JOYSTICK_DRIVER_PRIMITIVE** primitives)
865 {
866 if (!addonInstance || !joystick || !primitive_count || !primitives)
868
869 kodi::addon::Joystick addonJoystick(*joystick);
870 std::vector<kodi::addon::DriverPrimitive> primitiveVector;
871
872 PERIPHERAL_ERROR err = static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
873 ->GetIgnoredPrimitives(addonJoystick, primitiveVector);
874 if (err == PERIPHERAL_NO_ERROR)
875 {
876 *primitive_count = static_cast<unsigned int>(primitiveVector.size());
877 kodi::addon::DriverPrimitives::ToStructs(primitiveVector, primitives);
878 }
879
880 return err;
881 }
882
883 inline static void ADDON_FreePrimitives(const AddonInstance_Peripheral* addonInstance,
884 unsigned int primitive_count,
885 JOYSTICK_DRIVER_PRIMITIVE* primitives)
886 {
887 if (!addonInstance)
888 return;
889
890 kodi::addon::DriverPrimitives::FreeStructs(primitive_count, primitives);
891 }
892
893 inline static PERIPHERAL_ERROR ADDON_SetIgnoredPrimitives(
894 const AddonInstance_Peripheral* addonInstance,
895 const JOYSTICK_INFO* joystick,
896 unsigned int primitive_count,
897 const JOYSTICK_DRIVER_PRIMITIVE* primitives)
898 {
899 if (!addonInstance || !joystick || (primitive_count > 0 && !primitives))
901
902 kodi::addon::Joystick addonJoystick(*joystick);
903 std::vector<kodi::addon::DriverPrimitive> primitiveVector;
904
905 for (unsigned int i = 0; i < primitive_count; i++)
906 primitiveVector.emplace_back(*(primitives + i));
907
908 return static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
909 ->SetIgnoredPrimitives(addonJoystick, primitiveVector);
910 }
911
912 inline static void ADDON_SaveButtonMap(const AddonInstance_Peripheral* addonInstance,
913 const JOYSTICK_INFO* joystick)
914 {
915 if (!addonInstance || !joystick)
916 return;
917
918 kodi::addon::Joystick addonJoystick(*joystick);
919 static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
920 ->SaveButtonMap(addonJoystick);
921 }
922
923 inline static void ADDON_RevertButtonMap(const AddonInstance_Peripheral* addonInstance,
924 const JOYSTICK_INFO* joystick)
925 {
926 if (!addonInstance || !joystick)
927 return;
928
929 kodi::addon::Joystick addonJoystick(*joystick);
930 static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
931 ->RevertButtonMap(addonJoystick);
932 }
933
934 inline static void ADDON_ResetButtonMap(const AddonInstance_Peripheral* addonInstance,
935 const JOYSTICK_INFO* joystick,
936 const char* controller_id)
937 {
938 if (!addonInstance || !joystick || !controller_id)
939 return;
940
941 kodi::addon::Joystick addonJoystick(*joystick);
942 static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
943 ->ResetButtonMap(addonJoystick, controller_id);
944 }
945
946 inline static void ADDON_PowerOffJoystick(const AddonInstance_Peripheral* addonInstance,
947 unsigned int index)
948 {
949 if (!addonInstance)
950 return;
951
952 static_cast<CInstancePeripheral*>(addonInstance->toAddon->addonInstance)
953 ->PowerOffJoystick(index);
954 }
955
956 AddonInstance_Peripheral* m_instanceData;
957};
958
959} /* namespace addon */
960} /* namespace kodi */
961#endif /* __cplusplus */
Definition Peripheral.h:210
Definition AddonBase.h:565
Definition AddonBase.h:498
Definition PeripheralUtils.h:583
Definition PeripheralUtils.h:133
Definition PeripheralUtils.h:383
PERIPHERAL_ERROR
Definition peripheral.h:36
@ PERIPHERAL_ERROR_INVALID_PARAMETERS
-3 : The parameters of the method are invalid for this operation
Definition peripheral.h:47
@ PERIPHERAL_NO_ERROR
0 : No error occurred
Definition peripheral.h:38
@ PERIPHERAL_ERROR_NOT_IMPLEMENTED
-4 : The method that the frontend called is not implemented
Definition peripheral.h:50
JOYSTICK_FEATURE_TYPE
Definition peripheral.h:497
@ JOYSTICK_FEATURE_TYPE_UNKNOWN
Unknown type.
Definition peripheral.h:499
unsigned int FeatureCount(const std::string &controllerId, JOYSTICK_FEATURE_TYPE type=JOYSTICK_FEATURE_TYPE_UNKNOWN)
Return the number of features belonging to the specified controller.
Definition Peripheral.h:611
void RefreshButtonMaps(const std::string &deviceName="", const std::string &controllerId="")
Notify the frontend that button maps have changed.
Definition Peripheral.h:595
void TriggerScan(void)
Trigger a scan for peripherals.
Definition Peripheral.h:581
JOYSTICK_FEATURE_TYPE FeatureType(const std::string &controllerId, const std::string &featureName)
Return the type of the feature.
Definition Peripheral.h:627
const std::string UserPath() const
Used to get the full path to the add-on's user profile.
Definition Peripheral.h:573
const std::string AddonPath() const
Used to get the full path where the add-on is installed.
Definition Peripheral.h:561
virtual PERIPHERAL_ERROR GetAppearance(const kodi::addon::Joystick &joystick, std::string &controllerId)
Get the ID of the controller that best represents the peripheral's appearance.
Definition Peripheral.h:422
virtual PERIPHERAL_ERROR SetAppearance(const kodi::addon::Joystick &joystick, const std::string &controllerId)
Set the ID of the controller that best represents the peripheral's appearance.
Definition Peripheral.h:439
virtual void RevertButtonMap(const kodi::addon::Joystick &joystick)
Revert the button map to the last time it was loaded or committed to disk.
Definition Peripheral.h:526
virtual PERIPHERAL_ERROR MapFeatures(const kodi::addon::Joystick &joystick, const std::string &controller_id, const std::vector< kodi::addon::JoystickFeature > &features)
Add or update joystick features.
Definition Peripheral.h:474
virtual PERIPHERAL_ERROR SetIgnoredPrimitives(const kodi::addon::Joystick &joystick, const std::vector< kodi::addon::DriverPrimitive > &primitives)
Set the list of driver primitives that are ignored for the device.
Definition Peripheral.h:506
virtual void SaveButtonMap(const kodi::addon::Joystick &joystick)
Save the button map for the given joystick.
Definition Peripheral.h:519
virtual void PowerOffJoystick(unsigned int index)
Powers off the given joystick if supported.
Definition Peripheral.h:544
virtual void ResetButtonMap(const kodi::addon::Joystick &joystick, const std::string &controller_id)
Reset the button map for the given joystick and controller profile ID.
Definition Peripheral.h:534
virtual PERIPHERAL_ERROR GetFeatures(const kodi::addon::Joystick &joystick, const std::string &controller_id, std::vector< kodi::addon::JoystickFeature > &features)
Get the features that allow translating the joystick into the controller profile.
Definition Peripheral.h:457
virtual PERIPHERAL_ERROR GetIgnoredPrimitives(const kodi::addon::Joystick &joystick, std::vector< kodi::addon::DriverPrimitive > &primitives)
Get the driver primitives that should be ignored while mapping the device.
Definition Peripheral.h:492
virtual PERIPHERAL_ERROR GetJoystickInfo(unsigned int index, kodi::addon::Joystick &info)
Get extended info about an attached joystick.
Definition Peripheral.h:405
virtual PERIPHERAL_ERROR PerformDeviceScan(std::vector< std::shared_ptr< kodi::addon::Peripheral > > &scan_results)
Perform a scan for joysticks.
Definition Peripheral.h:341
virtual bool SendEvent(const kodi::addon::PeripheralEvent &event)
Send an input event to the peripheral.
Definition Peripheral.h:371
virtual PERIPHERAL_ERROR GetEvents(std::vector< kodi::addon::PeripheralEvent > &events)
Get all events that have occurred since the last call to GetEvents().
Definition Peripheral.h:359
virtual void GetCapabilities(kodi::addon::PeripheralCapabilities &capabilities)
Get the list of features that this add-on provides.
Definition Peripheral.h:323
CInstancePeripheral()
Peripheral class constructor.
Definition Peripheral.h:218
CInstancePeripheral(const IInstanceInfo &instance)
Peripheral addon class constructor used to support multiple instance types.
Definition Peripheral.h:264
~CInstancePeripheral() override=default
Destructor.
Definition peripheral.h:731
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
Definition addon_base.h:268
Peripheral add-on capabilities.
Definition peripheral.h:103
Event information.
Definition peripheral.h:217
Information shared between peripherals.
Definition peripheral.h:91
Internal used structure to have stored C API data above and available for everything below.
Definition AddonBase.h:73