#pragma once #include "helpers.hpp" #include "kernel_types.hpp" #include "logger.hpp" #include "memory.hpp" #include "result/result.hpp" class NDMService { using Handle = HorizonHandle; enum class ExclusiveState : u32 { None = 0, Infrastructure = 1, LocalComms = 2, StreetPass = 3, StreetPassData = 4, }; Handle handle = KernelHandles::NDM; Memory& mem; MAKE_LOG_FUNCTION(log, ndmLogger) // Service commands void clearHalfAwakeMacFilter(u32 messagePointer); void enterExclusiveState(u32 messagePointer); void exitExclusiveState(u32 messagePointer); void overrideDefaultDaemons(u32 messagePointer); void queryExclusiveState(u32 messagePointer); void resumeDaemons(u32 messagePointer); void resumeScheduler(u32 messagePointer); void suspendDaemons(u32 messagePointer); void suspendScheduler(u32 messagePointer); ExclusiveState exclusiveState = ExclusiveState::None; public: NDMService(Memory& mem) : mem(mem) {} void reset(); void handleSyncRequest(u32 messagePointer); };