helloworld_cpp/source/main.cpp

116 lines
2.3 KiB
C++

#include <coreinit/thread.h>
#include <coreinit/ios.h>
#include <sysapp/launch.h>
#include <coreinit/time.h>
#include <coreinit/systeminfo.h>
#include <proc_ui/procui.h>
#include <coreinit/memheap.h>
#include <coreinit/memfrmheap.h>
#include <nn/ac.h>
#include <whb/proc.h>
#include <whb/log.h>
#include <whb/log_udp.h>
#include <thread>
static bool logginginitDone = false;
bool logWhileRunning(int* last_tm_sec){
switch(ProcUIProcessMessages(true))
{
case PROCUI_STATUS_EXITING:
{
if(logginginitDone){
WHBLogUdpDeinit();
logginginitDone = false;
}
return false;
}
case PROCUI_STATUS_RELEASE_FOREGROUND:
{
if(logginginitDone){
WHBLogUdpDeinit();
logginginitDone = false;
}
ProcUIDrawDoneRelease();
break;
}
case PROCUI_STATUS_IN_FOREGROUND:
{
if(!logginginitDone){
WHBLogUdpInit();
logginginitDone = true;
}
OSCalendarTime tm;
OSTicksToCalendarTime(OSGetTime(), &tm);
if (tm.tm_sec != *last_tm_sec) {
WHBLogPrintf("%02d/%02d/%04d %02d:%02d:%02d I'm still here.",
tm.tm_mday, tm.tm_mon, tm.tm_year,
tm.tm_hour, tm.tm_min, tm.tm_sec);
*last_tm_sec = tm.tm_sec;
}
break;
}
case PROCUI_STATUS_IN_BACKGROUND:
default:
break;
}
return true;
}
int
hello_thread()
{
int last_tm_sec = -1;
uint32_t ip = 0;
WHBLogPrintf("Hello World from a std::thread!");
if (!nn::ac::GetAssignedAddress(&ip)) {
WHBLogPrintf("GetAssignedAddress failed!");
}
WHBLogPrintf("My IP is: %u.%u.%u.%u",
(ip >> 24) & 0xFF,
(ip >> 16) & 0xFF,
(ip >> 8) & 0xFF,
(ip >> 0) & 0xFF);
while(logWhileRunning(&last_tm_sec)) {
OSSleepTicks(OSMillisecondsToTicks(100));
}
WHBLogPrintf("Exiting... good bye.");
OSSleepTicks(OSMillisecondsToTicks(1000));
return 0;
}
int
main(int argc, char **argv)
{
nn::ac::ConfigIdNum configId;
nn::ac::Initialize();
nn::ac::GetStartupId(&configId);
nn::ac::Connect(configId);
WHBLogUdpInit();
logginginitDone = true;
WHBProcInit();
std::thread t(hello_thread);
t.join();
if(logginginitDone){
WHBLogUdpDeinit();
}
WHBProcShutdown();
nn::ac::Finalize();
return 0;
}