switch-examples/templates/sysmodule/source/main.c

105 lines
2.8 KiB
C

// Include the most common headers from the C standard library
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
// Include the main libnx system header, for Switch development
#include <switch.h>
// Size of the inner heap (adjust as necessary).
#define INNER_HEAP_SIZE 0x80000
#ifdef __cplusplus
extern "C" {
#endif
// Sysmodules should not use applet*.
u32 __nx_applet_type = AppletType_None;
// Sysmodules will normally only want to use one FS session.
u32 __nx_fs_num_sessions = 1;
// Newlib heap configuration function (makes malloc/free work).
void __libnx_initheap(void)
{
static u8 inner_heap[INNER_HEAP_SIZE];
extern void* fake_heap_start;
extern void* fake_heap_end;
// Configure the newlib heap.
fake_heap_start = inner_heap;
fake_heap_end = inner_heap + sizeof(inner_heap);
}
// Service initialization.
void __appInit(void)
{
Result rc;
// Open a service manager session.
rc = smInitialize();
if (R_FAILED(rc))
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_InitFail_SM));
// Retrieve the current version of Horizon OS.
rc = setsysInitialize();
if (R_SUCCEEDED(rc)) {
SetSysFirmwareVersion fw;
rc = setsysGetFirmwareVersion(&fw);
if (R_SUCCEEDED(rc))
hosversionSet(MAKEHOSVERSION(fw.major, fw.minor, fw.micro));
setsysExit();
}
// Enable this if you want to use HID.
/*rc = hidInitialize();
if (R_FAILED(rc))
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_InitFail_HID));*/
// Enable this if you want to use time.
/*rc = timeInitialize();
if (R_FAILED(rc))
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_InitFail_Time));
__libnx_init_time();*/
// Disable this if you don't want to use the filesystem.
rc = fsInitialize();
if (R_FAILED(rc))
diagAbortWithResult(MAKERESULT(Module_Libnx, LibnxError_InitFail_FS));
// Disable this if you don't want to use the SD card filesystem.
fsdevMountSdmc();
// Add other services you want to use here.
// Close the service manager session.
smExit();
}
// Service deinitialization.
void __appExit(void)
{
// Close extra services you added to __appInit here.
fsdevUnmountAll(); // Disable this if you don't want to use the SD card filesystem.
fsExit(); // Disable this if you don't want to use the filesystem.
//timeExit(); // Enable this if you want to use time.
//hidExit(); // Enable this if you want to use HID.
}
#ifdef __cplusplus
}
#endif
// Main program entrypoint
int main(int argc, char* argv[])
{
// Initialization code can go here.
// Your code / main loop goes here.
// If you need threads, you can use threadCreate etc.
// Deinitialization and resources clean up code can go here.
return 0;
}