#ifndef BSP_Q7S_CORE_XIPHOSWDTHANDLER_H_ #define BSP_Q7S_CORE_XIPHOSWDTHANDLER_H_ #include #include #include #include class XiphosWdtHandler : public SystemObject, public ExecutableObjectIF, public HasActionsIF { public: enum ActionId { ENABLE = 0, DISABLE = 1 }; XiphosWdtHandler(object_id_t objectId); ReturnValue_t performOperation(uint8_t opCode) override; ReturnValue_t initialize() override; ReturnValue_t executeAction(ActionId_t actionId, MessageQueueId_t commandedBy, const uint8_t* data, size_t size) override; [[nodiscard]] virtual MessageQueueId_t getCommandQueue() const override; private: // Wrappers to ensure idempotency of trash C API. ReturnValue_t enableWdt(); ReturnValue_t disableWdt(); // Timeout duration range specified by Xiphos: 0.001 seconds to 171 seconds. The libxiphos API // expects an int, so I guess this translates to 1 to 171 seconds. // WARNING: DO NOT SET THIS HIGHER THAN 80 SECONDS! // Possible bug in Xiphos/Xilinx kernel driver for watchdog, related to overflow. int timeoutSeconds = 80; struct watchdog_s* wdtHandle = nullptr; MessageQueueIF* requestQueue = nullptr; ActionHelper actionHelper; }; #endif /* BSP_Q7S_CORE_XIPHOSWDTHANDLER_H_ */