From 6b990a3b904479f7b47f94ef5ed0d36910d1df87 Mon Sep 17 00:00:00 2001 From: Nishi Date: Fri, 27 Sep 2024 16:15:15 +0000 Subject: [PATCH] psp support git-svn-id: file:///raid/svn-personal/tewi/trunk@183 8739d7e6-ffea-ec47-b151-bdff447c6205 --- Binary/psp.png | Bin 0 -> 9927 bytes Platform/psp.mk | 6 +- Server/Makefile | 2 +- Server/main.c | 170 +++++++++++++++++++++++++++++++++++++++++++++-- Server/server.c | 50 ++++++++------ Server/version.c | 2 + 6 files changed, 198 insertions(+), 32 deletions(-) create mode 100644 Binary/psp.png diff --git a/Binary/psp.png b/Binary/psp.png new file mode 100644 index 0000000000000000000000000000000000000000..2610ecb85b8505ef8dd2ec71aeb01160db458dc2 GIT binary patch literal 9927 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 FV1h^tNVxz2 literal 0 HcmV?d00001 diff --git a/Platform/psp.mk b/Platform/psp.mk index 385321f..9973bb5 100644 --- a/Platform/psp.mk +++ b/Platform/psp.mk @@ -1,10 +1,12 @@ # $Id$ +PREFIX = ms0:/PSP/GAME/httpd + CC = psp-gcc AR = psp-ar CFLAGS = -g -std=c99 -DPREFIX=\"$(PREFIX)\" -I $(PWD)/Common -I /usr/local/pspdev/psp/sdk/include -D_PSP_FW_VERSION=600 -LDFLAGS = -L /usr/local/pspdev/psp/sdk/lib -LIBS = -lpspgum -lpspgu -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspnet -lpspnet_apctl +LDFLAGS = -Wl,-zmax-page-size=128 -L /usr/local/pspdev/psp/sdk/lib +LIBS = -lpspgum -lpspgu -lpspdebug -lpspdisplay -lpspge -lpspctrl -lpspnet -lpspnet_apctl -lcglue -lpspwlan EXEC = .elf LIB = .so MODULE = diff --git a/Server/Makefile b/Server/Makefile index 68322a9..59c05b6 100644 --- a/Server/Makefile +++ b/Server/Makefile @@ -16,7 +16,7 @@ tewi$(EXEC): $(OBJS) ../Common/common.a $(SERVADD) tewi.pbp: tewi_strip$(EXEC) param.sfo - pack-pbp $@ param.sfo NULL NULL NULL NULL NULL tewi_strip$(EXEC) NULL + pack-pbp $@ param.sfo ../Binary/psp.png NULL NULL NULL NULL tewi_strip$(EXEC) NULL param.sfo: mksfoex -d MEMSIZE=1 'Tewi HTTPd' $@ diff --git a/Server/main.c b/Server/main.c index 1fef989..cc827b2 100644 --- a/Server/main.c +++ b/Server/main.c @@ -28,11 +28,19 @@ #ifdef _PSP #include #include +#include +#include +#include +#include +#include PSP_MODULE_INFO("Tewi HTTPd", PSP_MODULE_USER, 1, 1); PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER); #define printf(...) pspDebugScreenPrintf(__VA_ARGS__) +#define STDERR_LOG(...) pspDebugScreenPrintf(__VA_ARGS__) +#else +#define STDERR_LOG(...) fprintf(stderr, __VA_ARGS__) #endif extern bool cm_do_log; @@ -86,6 +94,20 @@ void WINAPI servmain(DWORD argc, LPSTR* argv) { } #endif +int running = 1; +#ifdef _PSP + +int psp_exit_callback(int arg1, int arg2, void* arg3) { running = 0; } + +int psp_callback_thread(SceSize args, void* argp) { + int cid; + cid = sceKernelCreateCallback("Exit Call Back", psp_exit_callback, NULL); + sceKernelRegisterExitCallback(cid); + sceKernelSleepThreadCB(); + return 0; +} +#endif + int main(int argc, char** argv) { logfile = stderr; #ifdef SERVICE @@ -95,10 +117,144 @@ int main(int argc, char** argv) { #ifdef _PSP pspDebugScreenInit(); pspDebugScreenSetXY(0, 0); + printf("PSP Bootstrap, Tewi/%s\n", tw_get_version()); + int thid = sceKernelCreateThread("update_thread", psp_callback_thread, 0x11, 0xfa0, 0, NULL); + if(thid >= 0) { + sceKernelStartThread(thid, 0, NULL); + } else { + printf("Failed to start thread\n"); + while(running) sceKernelDelayThread(50 * 1000); + sceKernelExitGame(); + } + sceCtrlSetSamplingCycle(0); + sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); + sceUtilityLoadNetModule(PSP_NET_MODULE_COMMON); + sceUtilityLoadNetModule(PSP_NET_MODULE_INET); + if(pspSdkInetInit()) { + printf("Could not init the network\n"); + while(running) sceKernelDelayThread(50 * 1000); + sceKernelExitGame(); + } else { + printf("Network initialization successful\n"); + } + if(sceWlanGetSwitchState() != 1) { + printf("Turn the Wi-Fi switch on\n"); + while(sceWlanGetSwitchState() != 1) { + sceKernelDelayThread(1000 * 1000); + } + } else { + printf("Wi-Fi is turned on\n"); + } + int i; + int choice[100]; + int incr = 0; + int last = 0; + int cur = 0; + for(i = 1; i < 100; i++) { + choice[i - 1] = 0; + netData name; + netData data; + if(sceUtilityCheckNetParam(i) != 0) continue; + choice[incr++] = i; + pspDebugScreenSetXY(0, 1 + 3 + incr - 1); + if(incr == 1) printf("> "); + pspDebugScreenSetXY(2, 1 + 3 + incr - 1); + sceUtilityGetNetParam(i, 0, &name); + sceUtilityGetNetParam(i, 1, &data); + printf("SSID=%s", data.asString); + sceUtilityGetNetParam(i, 4, &data); + if(data.asString[0]) { + sceUtilityGetNetParam(i, 5, &data); + printf(" IPADDR=%s\n", data.asString); + } else { + printf(" DHCP\n"); + } + } + int press = 0; + while(1) { + if(!running) { + sceKernelExitGame(); + } + SceCtrlData c; + sceCtrlReadBufferPositive(&c, 1); + press = 0; + if(c.Buttons & PSP_CTRL_DOWN) { + if(cur < incr - 1) { + cur++; + } + press = 1; + } else if(c.Buttons & PSP_CTRL_UP) { + if(cur > 0) { + cur--; + } + press = -1; + } else if(c.Buttons & PSP_CTRL_START) { + break; + } + if(last != cur) { + pspDebugScreenSetXY(0, 1 + 3 + last); + printf(" "); + pspDebugScreenSetXY(0, 1 + 3 + cur); + printf("> "); + last = cur; + } + if(press != 0) { + while(1) { + SceCtrlData c; + sceCtrlReadBufferPositive(&c, 1); + if(press == 1) { + if(!(c.Buttons & PSP_CTRL_DOWN)) break; + } else if(press == -1) { + if(!(c.Buttons & PSP_CTRL_UP)) break; + } + } + } + } + pspDebugScreenSetXY(0, 1 + 3 + incr + 1); + int err = sceNetApctlConnect(choice[cur]); + if(err != 0) { + printf("Apctl initialization failure\n"); + while(running) sceKernelDelayThread(50 * 1000); + sceKernelExitGame(); + } else { + printf("Apctl initialization successful\n"); + } + printf("Apctl connecting\n"); + while(1) { + int state; + err = sceNetApctlGetState(&state); + if(err != 0) { + printf("Apctl getting status failure\n"); + while(running) sceKernelDelayThread(50 * 1000); + sceKernelExitGame(); + } + if(state == 4) { + break; + } + sceKernelDelayThread(50 * 1000); + } + union SceNetApctlInfo info; + if(sceNetApctlGetInfo(8, &info) != 0) { + printf("Got an unknown IP\n"); + while(running) sceKernelDelayThread(50 * 1000); + sceKernelExitGame(); + } + printf("Connected, My IP is %s\n", info.ip); #endif int st = startup(argc, argv); - if(st != -1) return st; + if(st != -1) { +#ifdef _PSP + printf("Error code %d\n", st); + while(running) sceKernelDelayThread(50 * 1000); + sceKernelExitGame(); +#else + return st; +#endif + } tw_server_loop(); +#endif +#ifdef _PSP + sceKernelExitGame(); #endif return 0; } @@ -123,7 +279,7 @@ int startup(int argc, char** argv) { } else if(strcmp(argv[i], "--config") == 0 || strcmp(argv[i], "-C") == 0) { i++; if(argv[i] == NULL) { - fprintf(stderr, "Missing argument\n"); + STDERR_LOG("Missing argument\n"); return 1; } confpath = argv[i]; @@ -131,7 +287,7 @@ int startup(int argc, char** argv) { } else if(strcmp(argv[i], "--logfile") == 0 || strcmp(argv[i], "-l") == 0) { i++; if(argv[i] == NULL) { - fprintf(stderr, "Missing argument\n"); + STDERR_LOG("Missing argument\n"); return 1; } if(logfile != NULL && logfile != stderr) { @@ -139,7 +295,7 @@ int startup(int argc, char** argv) { } logfile = fopen(argv[i], "a"); if(logfile == NULL) { - fprintf(stderr, "Failed to open logfile\n"); + STDERR_LOG("Failed to open logfile\n"); return 1; } #endif @@ -157,7 +313,7 @@ int startup(int argc, char** argv) { printf("--version | -V : Version information\n"); return 0; } else { - fprintf(stderr, "Unknown option: %s\n", argv[i]); + STDERR_LOG("Unknown option: %s\n", argv[i]); return 1; } } @@ -165,11 +321,11 @@ int startup(int argc, char** argv) { } tw_config_init(); if(tw_config_read(confpath) != 0) { - fprintf(stderr, "Could not read the config\n"); + STDERR_LOG("Could not read the config\n"); return 1; } if(tw_server_init() != 0) { - fprintf(stderr, "Could not initialize the server\n"); + STDERR_LOG("Could not initialize the server\n"); return 1; } sprintf(tw_server, "Tewi/%s (%s)%s", tw_get_version(), tw_get_platform(), config.extension == NULL ? "" : config.extension); diff --git a/Server/server.c b/Server/server.c index 9e8374b..5e295c1 100644 --- a/Server/server.c +++ b/Server/server.c @@ -430,8 +430,10 @@ struct pass_entry { unsigned int WINAPI tw_server_pass(void* ptr) { #elif defined(__HAIKU__) int32_t tw_server_pass(void* ptr) { +#elif defined(_PSP) +int tw_server_pass(void* ptr) { #endif -#if defined(__HAIKU__) || defined(__MINGW32__) +#if defined(__HAIKU__) || defined(__MINGW32__) || defined(_PSP) int sock = ((struct pass_entry*)ptr)->sock; bool ssl = ((struct pass_entry*)ptr)->ssl; int port = ((struct pass_entry*)ptr)->port; @@ -854,6 +856,8 @@ struct thread_entry { }; #endif +extern int running; + void tw_server_loop(void) { int i; #if defined(__MINGW32__) || defined(__HAIKU__) @@ -872,7 +876,7 @@ void tw_server_loop(void) { fd_set fdset; struct timeval tv; #endif - while(1) { + while(running) { #ifdef USE_POLL int ret = poll(pollfds, sockcount, 1000); #else @@ -914,7 +918,7 @@ void tw_server_loop(void) { socklen_t clen = sizeof(claddr); int sock = accept(sockets[i], (struct sockaddr*)&claddr, &clen); cm_log("Server", "New connection accepted"); -#if defined(__MINGW32__) || defined(__HAIKU__) +#if defined(__MINGW32__) || defined(__HAIKU__) || defined(_PSP) struct pass_entry* e = malloc(sizeof(*e)); e->sock = sock; e->ssl = config.ports[i] & (1ULL << 32); @@ -940,29 +944,31 @@ void tw_server_loop(void) { break; } } +#elif defined(_PSP) + tw_server_pass(e); #elif defined(__HAIKU__) - int j; - for(j = 0; j < sizeof(threads) / sizeof(threads[0]); j++) { - if(threads[j].used) { - thread_info info; - bool kill = false; - if(get_thread_info(threads[j].thread, &info) == B_OK) { - } else { - kill = true; - } - if(kill) { - threads[j].used = false; - } + int j; + for(j = 0; j < sizeof(threads) / sizeof(threads[0]); j++) { + if(threads[j].used) { + thread_info info; + bool kill = false; + if(get_thread_info(threads[j].thread, &info) == B_OK) { + } else { + kill = true; } - } - for(j = 0; j < sizeof(threads) / sizeof(threads[0]); j++) { - if(!threads[j].used) { - threads[j].thread = spawn_thread(tw_server_pass, "Tewi HTTPd", 60, e); - threads[j].used = true; - resume_thread(threads[j].thread); - break; + if(kill) { + threads[j].used = false; } } + } + for(j = 0; j < sizeof(threads) / sizeof(threads[0]); j++) { + if(!threads[j].used) { + threads[j].thread = spawn_thread(tw_server_pass, "Tewi HTTPd", 60, e); + threads[j].used = true; + resume_thread(threads[j].thread); + break; + } + } #else pid_t pid = fork(); if(pid == 0) { diff --git a/Server/version.c b/Server/version.c index c4cbb4c..3d49ce3 100644 --- a/Server/version.c +++ b/Server/version.c @@ -19,6 +19,8 @@ const char* tw_platform = "Haiku" #elif defined(__CYGWIN__) "Cygwin" +#elif defined(_PSP) + "PSP" #else "Unix" #endif -- 2.45.2