diff --git a/src/DebugToolDrivers/DebugTool.hpp b/src/DebugToolDrivers/DebugTool.hpp index c5c1a5e0..7234f13d 100644 --- a/src/DebugToolDrivers/DebugTool.hpp +++ b/src/DebugToolDrivers/DebugTool.hpp @@ -1,5 +1,7 @@ #pragma once +#include "TargetInterfaces/TargetPowerManagementInterface.hpp" + #include "TargetInterfaces/Microchip/AVR/AVR8/Avr8DebugInterface.hpp" #include "TargetInterfaces/Microchip/AVR/AvrIspInterface.hpp" @@ -40,6 +42,21 @@ namespace Bloom virtual std::string getSerialNumber() = 0; + /** + * All debug tools that support target power management functions must provide an implementation of the + * TargetPowerManagementInterface class, via this function. + * + * For debug tools that cannot manage target power, a nullptr should be returned. + * + * Note: the caller of this function will not manage the lifetime of the returned TargetPowerManagementInterface + * instance. + * + * @return + */ + virtual DebugToolDrivers::TargetInterfaces::TargetPowerManagementInterface* getTargetPowerManagementInterface() { + return nullptr; + } + /** * All debug tools that support debugging operations on AVR8 targets must provide an implementation of * the Avr8DebugInterface class, via this function. diff --git a/src/DebugToolDrivers/TargetInterfaces/TargetPowerManagementInterface.hpp b/src/DebugToolDrivers/TargetInterfaces/TargetPowerManagementInterface.hpp new file mode 100644 index 00000000..5454a26e --- /dev/null +++ b/src/DebugToolDrivers/TargetInterfaces/TargetPowerManagementInterface.hpp @@ -0,0 +1,33 @@ +#pragma once + +#include + +namespace Bloom::DebugToolDrivers::TargetInterfaces +{ + /** + * Some debug tools provide target power management functions. Those that do should expose an implementation of + * this interface via DebugTool::getTargetPowerManagementInterface(); + */ + class TargetPowerManagementInterface + { + public: + TargetPowerManagementInterface() = default; + virtual ~TargetPowerManagementInterface() = default; + + TargetPowerManagementInterface(const TargetPowerManagementInterface& other) = default; + TargetPowerManagementInterface(TargetPowerManagementInterface&& other) = default; + + TargetPowerManagementInterface& operator = (const TargetPowerManagementInterface& other) = default; + TargetPowerManagementInterface& operator = (TargetPowerManagementInterface&& other) = default; + + /** + * Should enable the target power if currently disabled. + */ + virtual void enableTargetPower() = 0; + + /** + * Should disable the target power if currently enabled. + */ + virtual void disableTargetPower() = 0; + }; +}