From ca2c5281bfa866b41b819449c43cebf7b4069308 Mon Sep 17 00:00:00 2001 From: Cruel Date: Mon, 17 Aug 2015 01:53:41 -0400 Subject: [PATCH] Add static class to manage services --- include/cpp3ds/System/Service.hpp | 33 +++++++++++++++++ src/cpp3ds/System/Service.cpp | 61 +++++++++++++++++++++++++++++++ src/emu3ds/System/Service.cpp | 13 +++++++ 3 files changed, 107 insertions(+) create mode 100644 include/cpp3ds/System/Service.hpp create mode 100644 src/cpp3ds/System/Service.cpp create mode 100644 src/emu3ds/System/Service.cpp diff --git a/include/cpp3ds/System/Service.hpp b/include/cpp3ds/System/Service.hpp new file mode 100644 index 0000000..c908435 --- /dev/null +++ b/include/cpp3ds/System/Service.hpp @@ -0,0 +1,33 @@ +#ifndef CPP3DS_SERVICE_H +#define CPP3DS_SERVICE_H + +#include +#ifndef EMULATION +#include <3ds.h> +#endif + +namespace cpp3ds { + +enum ServiceName { + NETWORK = 0x0001, + AUDIO = 0x0002, + + ALL = 0xFFFF +}; + +class Service { +public: + static bool enable(ServiceName service); + static bool disable(ServiceName service); + +private: + static Uint16 m_enabledServices; + #ifndef EMULATION + static u32* socBuffer; + #endif +}; + +} // namespace cpp3ds + + +#endif //CPP3DS_SERVICE_H diff --git a/src/cpp3ds/System/Service.cpp b/src/cpp3ds/System/Service.cpp new file mode 100644 index 0000000..3085880 --- /dev/null +++ b/src/cpp3ds/System/Service.cpp @@ -0,0 +1,61 @@ +#include +#include +#include <3ds.h> +#include + +namespace cpp3ds { + +Uint16 Service::m_enabledServices = 0x0; +u32* Service::socBuffer = NULL; + +bool Service::enable(ServiceName service) { + if (service & m_enabledServices) + return true; + + if (service == ALL) + return enable(NETWORK) && enable(AUDIO); + + if (service == NETWORK) { + socBuffer = (u32*) memalign(0x1000, 0x100000); + if (!socBuffer) + return false; + Result socResult = SOC_Initialize(socBuffer, 0x100000); + if (socResult != 0) { + free(socBuffer); + socBuffer = NULL; + return false; + } + m_enabledServices |= service; + return true; + } + + if (service == AUDIO) { + return csndInit() == 0; + } + + return false; +} + +bool Service::disable(ServiceName service) { + if (service & ~m_enabledServices) + return true; + + if (service == ALL) + return disable(NETWORK); + + if (service == NETWORK) { + SOC_Shutdown(); + free(socBuffer); + socBuffer = NULL; + } + + if (service == AUDIO) { + // Stop all audio +// CSND_SetPlayStateR(1, 0); +// CSND_SetPlayStateR(2, 0); + csndExecCmds(true); + csndExit(); + } +} + +} // namespace cpp3ds diff --git a/src/emu3ds/System/Service.cpp b/src/emu3ds/System/Service.cpp new file mode 100644 index 0000000..96ec58a --- /dev/null +++ b/src/emu3ds/System/Service.cpp @@ -0,0 +1,13 @@ +#include + +namespace cpp3ds { + + bool Service::enable(ServiceName service) { + return true; + } + + bool Service::disable(ServiceName service) { + return true; + } + +} // namespace cpp3ds