1
0
mirror of https://github.com/cathery/sys-con.git synced 2024-10-06 06:19:43 +00:00
sys-con/source/main.cpp

117 lines
2.8 KiB
C++
Raw Normal View History

2019-10-31 18:00:42 +00:00
#include "switch.h"
#include "log.h"
#include "mainLoop.h"
2019-11-21 21:40:42 +00:00
//CHANGELOG
// Fixed an issue where unplugging one controller would unplug others
2019-10-31 18:00:42 +00:00
//ISSUES:
2019-11-21 21:40:42 +00:00
// 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
2019-10-31 18:00:42 +00:00
//TODO:
2019-10-31 18:15:39 +00:00
// Shrink unneessary heap memory/stack size used for the sysmodule
2019-10-31 18:00:42 +00:00
// Make a config application companion to test controller input and edit various preferences (buttons, deadzones)
extern "C"
{
// Adjust size as needed.
2019-11-21 21:40:42 +00:00
#define INNER_HEAP_SIZE 0x40'000
2019-10-31 18:00:42 +00:00
#ifndef __APPLET__
u32 __nx_applet_type = AppletType_None;
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;
}
#endif
void userAppInit(void)
2019-10-31 18:00:42 +00:00
{
//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))
2019-11-02 09:03:54 +00:00
fatalThrow(rc);
2019-10-31 18:00:42 +00:00
2019-11-10 22:54:46 +00:00
if (hosversionAtLeast(7, 0, 0))
{
rc = hiddbgAttachHdlsWorkBuffer();
if (R_FAILED(rc))
fatalThrow(rc);
}
2019-10-31 18:00:42 +00:00
rc = usbHsInitialize();
if (R_FAILED(rc))
2019-11-02 09:03:54 +00:00
fatalThrow(rc);
2019-10-31 18:00:42 +00:00
rc = pscmInitialize();
if (R_FAILED(rc))
fatalThrow(rc);
2019-11-02 17:42:24 +00:00
#ifndef __APPLET__
rc = hidInitialize();
if (R_FAILED(rc))
fatalThrow(rc);
#endif
2019-10-31 18:00:42 +00:00
}
void userAppExit(void)
2019-10-31 18:00:42 +00:00
{
2019-11-02 17:42:24 +00:00
#ifndef __APPLET__
hidExit();
#endif
pscmExit();
2019-10-31 18:00:42 +00:00
usbHsExit();
hiddbgReleaseHdlsWorkBuffer();
hiddbgExit();
}
2019-11-21 21:40:42 +00:00
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();
2019-11-21 21:40:42 +00:00
}
2019-10-31 18:00:42 +00:00
}
int main(int argc, char *argv[])
{
Result rc;
#ifdef __APPLET__
2019-11-01 22:39:40 +00:00
appletLockExit();
2019-10-31 18:00:42 +00:00
consoleInit(nullptr);
#endif
rc = mainLoop();
#ifdef __APPLET__
consoleExit(nullptr);
2019-11-01 22:39:40 +00:00
userAppExit();
appletUnlockExit();
2019-10-31 18:00:42 +00:00
#endif
return rc;
2019-10-31 18:15:39 +00:00
}