mirror of
https://github.com/cathery/sys-con.git
synced 2025-03-29 22:20:09 +00:00
Rework main.cpp with stratosphere
This commit is contained in:
parent
345a14d17d
commit
72497b76f1
8
.vscode/c_cpp_properties.json
vendored
8
.vscode/c_cpp_properties.json
vendored
@ -9,11 +9,15 @@
|
||||
"${DEVKITPRO}/libnx/include/",
|
||||
"source/ControllerLib",
|
||||
"source/ControllerSwitch",
|
||||
"source/inih"
|
||||
"source/inih",
|
||||
"source/libstratosphere/libstratosphere/include",
|
||||
"source/libstratosphere/libvapours/include"
|
||||
],
|
||||
"defines": [
|
||||
"SWITCH",
|
||||
"__SWITCH__"
|
||||
"__SWITCH__",
|
||||
"ATMOSPHERE_BOARD_NINTENDO_SWITCH",
|
||||
"ATMOSPHERE_IS_STRATOSPHERE"
|
||||
],
|
||||
"compilerPath": "${DEVKITPRO}/devkitA64/bin/aarch64-none-elf-g++",
|
||||
"cStandard": "c11",
|
||||
|
@ -1,107 +1,64 @@
|
||||
#include "switch.h"
|
||||
#include "log.h"
|
||||
#include "mainLoop.h"
|
||||
#include <stratosphere.hpp>
|
||||
|
||||
//CHANGELOG
|
||||
// Fixed an issue where unplugging one controller would unplug others
|
||||
|
||||
//ISSUES:
|
||||
// Kosmos Toolbox doesn't free up the memory associated with the sysmodule due to hiddbgAttachHdlsWorkBuffer() memory not being freed up
|
||||
// After plugging and unplugging a controller for a while, sysmodule stops working
|
||||
// DS3 controller seems to send random inputs
|
||||
|
||||
//TODO:
|
||||
// Shrink unneessary heap memory/stack size used for the sysmodule
|
||||
// Make a config application companion to test controller input and edit various preferences (buttons, deadzones)
|
||||
|
||||
// libnx fake heap initialization
|
||||
extern "C"
|
||||
{
|
||||
// Adjust size as needed.
|
||||
#define INNER_HEAP_SIZE 0x40'000
|
||||
#ifndef __APPLET__
|
||||
|
||||
u32 __nx_applet_type = AppletType_None;
|
||||
|
||||
#define INNER_HEAP_SIZE 0x40 * ams::os::MemoryPageSize
|
||||
size_t nx_inner_heap_size = INNER_HEAP_SIZE;
|
||||
char nx_inner_heap[INNER_HEAP_SIZE];
|
||||
|
||||
void __libnx_initheap(void)
|
||||
{
|
||||
void *addr = nx_inner_heap;
|
||||
size_t size = nx_inner_heap_size;
|
||||
|
||||
// Newlib
|
||||
extern char *fake_heap_start;
|
||||
extern char *fake_heap_end;
|
||||
|
||||
fake_heap_start = (char *)addr;
|
||||
fake_heap_end = (char *)addr + size;
|
||||
fake_heap_start = nx_inner_heap;
|
||||
fake_heap_end = nx_inner_heap + nx_inner_heap_size;
|
||||
}
|
||||
}
|
||||
|
||||
#endif
|
||||
// libstratosphere variables
|
||||
namespace ams
|
||||
{
|
||||
ncm::ProgramId CurrentProgramId = {0x690000000000000D};
|
||||
namespace result { bool CallFatalOnResultAssertion = false; }
|
||||
}
|
||||
|
||||
void userAppInit(void)
|
||||
|
||||
extern "C" void __appInit(void)
|
||||
{
|
||||
ams::hos::SetVersionForLibnx();
|
||||
ams::sm::DoWithSession([]
|
||||
{
|
||||
//Seems like every thread on the switch needs to sleep for a little
|
||||
// or it will block the entire console
|
||||
//Specifically in Kosmos Toolbox's case, you need to wait about 0.2 sec
|
||||
// or it won't let you turn it on/off the sysmodule after a few tries
|
||||
svcSleepThread(2e+8L);
|
||||
Result rc = 0;
|
||||
rc = hiddbgInitialize();
|
||||
if (R_FAILED(rc))
|
||||
fatalThrow(rc);
|
||||
|
||||
R_ASSERT(timeInitialize());
|
||||
R_ASSERT(fsInitialize());
|
||||
R_ASSERT(fsdevMountSdmc());
|
||||
R_ASSERT(hiddbgInitialize());
|
||||
if (hosversionAtLeast(7, 0, 0))
|
||||
{
|
||||
rc = hiddbgAttachHdlsWorkBuffer();
|
||||
if (R_FAILED(rc))
|
||||
fatalThrow(rc);
|
||||
}
|
||||
R_ASSERT(hiddbgAttachHdlsWorkBuffer());
|
||||
R_ASSERT(usbHsInitialize());
|
||||
R_ASSERT(pscmInitialize());
|
||||
});
|
||||
}
|
||||
|
||||
rc = usbHsInitialize();
|
||||
if (R_FAILED(rc))
|
||||
fatalThrow(rc);
|
||||
|
||||
rc = pscmInitialize();
|
||||
if (R_FAILED(rc))
|
||||
fatalThrow(rc);
|
||||
}
|
||||
|
||||
void userAppExit(void)
|
||||
{
|
||||
pscmExit();
|
||||
usbHsExit();
|
||||
hiddbgReleaseHdlsWorkBuffer();
|
||||
hiddbgExit();
|
||||
}
|
||||
|
||||
alignas(16) u8 __nx_exception_stack[0x1000];
|
||||
u64 __nx_exception_stack_size = sizeof(__nx_exception_stack);
|
||||
__attribute__((weak)) u32 __nx_exception_ignoredebug = 1;
|
||||
|
||||
void __libnx_exception_handler(ThreadExceptionDump *ctx)
|
||||
{
|
||||
WriteToLog("Sysmodule crashed with error 0x%x", ctx->error_desc);
|
||||
LockedUpdateConsole();
|
||||
}
|
||||
extern "C" void __appExit(void)
|
||||
{
|
||||
pscmExit();
|
||||
usbHsExit();
|
||||
hiddbgReleaseHdlsWorkBuffer();
|
||||
hiddbgExit();
|
||||
fsdevUnmountAll();
|
||||
fsExit();
|
||||
timeExit();
|
||||
}
|
||||
|
||||
int main(int argc, char *argv[])
|
||||
{
|
||||
Result rc;
|
||||
|
||||
#ifdef __APPLET__
|
||||
appletLockExit();
|
||||
consoleInit(nullptr);
|
||||
#endif
|
||||
|
||||
rc = mainLoop();
|
||||
|
||||
#ifdef __APPLET__
|
||||
consoleExit(nullptr);
|
||||
userAppExit();
|
||||
appletUnlockExit();
|
||||
#endif
|
||||
|
||||
return rc;
|
||||
return mainLoop();
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user