Changeset 183 in Main for trunk/Server/main.c


Ignore:
Timestamp:
Sep 28, 2024, 1:15:15 AM (7 weeks ago)
Author:
Nishi
Message:

psp support

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/Server/main.c

    r182 r183  
    2929#include <pspkernel.h>
    3030#include <pspdebug.h>
     31#include <pspsdk.h>
     32#include <psputility.h>
     33#include <pspctrl.h>
     34#include <pspnet_apctl.h>
     35#include <pspwlan.h>
    3136
    3237PSP_MODULE_INFO("Tewi HTTPd", PSP_MODULE_USER, 1, 1);
     
    3439
    3540#define printf(...) pspDebugScreenPrintf(__VA_ARGS__)
     41#define STDERR_LOG(...) pspDebugScreenPrintf(__VA_ARGS__)
     42#else
     43#define STDERR_LOG(...) fprintf(stderr, __VA_ARGS__)
    3644#endif
    3745
     
    8795#endif
    8896
     97int running = 1;
     98#ifdef _PSP
     99
     100int psp_exit_callback(int arg1, int arg2, void* arg3) { running = 0; }
     101
     102int psp_callback_thread(SceSize args, void* argp) {
     103        int cid;
     104        cid = sceKernelCreateCallback("Exit Call Back", psp_exit_callback, NULL);
     105        sceKernelRegisterExitCallback(cid);
     106        sceKernelSleepThreadCB();
     107        return 0;
     108}
     109#endif
     110
    89111int main(int argc, char** argv) {
    90112        logfile = stderr;
     
    96118        pspDebugScreenInit();
    97119        pspDebugScreenSetXY(0, 0);
     120        printf("PSP Bootstrap, Tewi/%s\n", tw_get_version());
     121        int thid = sceKernelCreateThread("update_thread", psp_callback_thread, 0x11, 0xfa0, 0, NULL);
     122        if(thid >= 0) {
     123                sceKernelStartThread(thid, 0, NULL);
     124        } else {
     125                printf("Failed to start thread\n");
     126                while(running) sceKernelDelayThread(50 * 1000);
     127                sceKernelExitGame();
     128        }
     129        sceCtrlSetSamplingCycle(0);
     130        sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG);
     131        sceUtilityLoadNetModule(PSP_NET_MODULE_COMMON);
     132        sceUtilityLoadNetModule(PSP_NET_MODULE_INET);
     133        if(pspSdkInetInit()) {
     134                printf("Could not init the network\n");
     135                while(running) sceKernelDelayThread(50 * 1000);
     136                sceKernelExitGame();
     137        } else {
     138                printf("Network initialization successful\n");
     139        }
     140        if(sceWlanGetSwitchState() != 1) {
     141                printf("Turn the Wi-Fi switch on\n");
     142                while(sceWlanGetSwitchState() != 1) {
     143                        sceKernelDelayThread(1000 * 1000);
     144                }
     145        } else {
     146                printf("Wi-Fi is turned on\n");
     147        }
     148        int i;
     149        int choice[100];
     150        int incr = 0;
     151        int last = 0;
     152        int cur = 0;
     153        for(i = 1; i < 100; i++) {
     154                choice[i - 1] = 0;
     155                netData name;
     156                netData data;
     157                if(sceUtilityCheckNetParam(i) != 0) continue;
     158                choice[incr++] = i;
     159                pspDebugScreenSetXY(0, 1 + 3 + incr - 1);
     160                if(incr == 1) printf("> ");
     161                pspDebugScreenSetXY(2, 1 + 3 + incr - 1);
     162                sceUtilityGetNetParam(i, 0, &name);
     163                sceUtilityGetNetParam(i, 1, &data);
     164                printf("SSID=%s", data.asString);
     165                sceUtilityGetNetParam(i, 4, &data);
     166                if(data.asString[0]) {
     167                        sceUtilityGetNetParam(i, 5, &data);
     168                        printf(" IPADDR=%s\n", data.asString);
     169                } else {
     170                        printf(" DHCP\n");
     171                }
     172        }
     173        int press = 0;
     174        while(1) {
     175                if(!running) {
     176                        sceKernelExitGame();
     177                }
     178                SceCtrlData c;
     179                sceCtrlReadBufferPositive(&c, 1);
     180                press = 0;
     181                if(c.Buttons & PSP_CTRL_DOWN) {
     182                        if(cur < incr - 1) {
     183                                cur++;
     184                        }
     185                        press = 1;
     186                } else if(c.Buttons & PSP_CTRL_UP) {
     187                        if(cur > 0) {
     188                                cur--;
     189                        }
     190                        press = -1;
     191                } else if(c.Buttons & PSP_CTRL_START) {
     192                        break;
     193                }
     194                if(last != cur) {
     195                        pspDebugScreenSetXY(0, 1 + 3 + last);
     196                        printf("  ");
     197                        pspDebugScreenSetXY(0, 1 + 3 + cur);
     198                        printf("> ");
     199                        last = cur;
     200                }
     201                if(press != 0) {
     202                        while(1) {
     203                                SceCtrlData c;
     204                                sceCtrlReadBufferPositive(&c, 1);
     205                                if(press == 1) {
     206                                        if(!(c.Buttons & PSP_CTRL_DOWN)) break;
     207                                } else if(press == -1) {
     208                                        if(!(c.Buttons & PSP_CTRL_UP)) break;
     209                                }
     210                        }
     211                }
     212        }
     213        pspDebugScreenSetXY(0, 1 + 3 + incr + 1);
     214        int err = sceNetApctlConnect(choice[cur]);
     215        if(err != 0) {
     216                printf("Apctl initialization failure\n");
     217                while(running) sceKernelDelayThread(50 * 1000);
     218                sceKernelExitGame();
     219        } else {
     220                printf("Apctl initialization successful\n");
     221        }
     222        printf("Apctl connecting\n");
     223        while(1) {
     224                int state;
     225                err = sceNetApctlGetState(&state);
     226                if(err != 0) {
     227                        printf("Apctl getting status failure\n");
     228                        while(running) sceKernelDelayThread(50 * 1000);
     229                        sceKernelExitGame();
     230                }
     231                if(state == 4) {
     232                        break;
     233                }
     234                sceKernelDelayThread(50 * 1000);
     235        }
     236        union SceNetApctlInfo info;
     237        if(sceNetApctlGetInfo(8, &info) != 0) {
     238                printf("Got an unknown IP\n");
     239                while(running) sceKernelDelayThread(50 * 1000);
     240                sceKernelExitGame();
     241        }
     242        printf("Connected, My IP is %s\n", info.ip);
    98243#endif
    99244        int st = startup(argc, argv);
    100         if(st != -1) return st;
     245        if(st != -1) {
     246#ifdef _PSP
     247                printf("Error code %d\n", st);
     248                while(running) sceKernelDelayThread(50 * 1000);
     249                sceKernelExitGame();
     250#else
     251                return st;
     252#endif
     253        }
    101254        tw_server_loop();
     255#endif
     256#ifdef _PSP
     257        sceKernelExitGame();
    102258#endif
    103259        return 0;
     
    124280                                        i++;
    125281                                        if(argv[i] == NULL) {
    126                                                 fprintf(stderr, "Missing argument\n");
     282                                                STDERR_LOG("Missing argument\n");
    127283                                                return 1;
    128284                                        }
     
    132288                                        i++;
    133289                                        if(argv[i] == NULL) {
    134                                                 fprintf(stderr, "Missing argument\n");
     290                                                STDERR_LOG("Missing argument\n");
    135291                                                return 1;
    136292                                        }
     
    140296                                        logfile = fopen(argv[i], "a");
    141297                                        if(logfile == NULL) {
    142                                                 fprintf(stderr, "Failed to open logfile\n");
     298                                                STDERR_LOG("Failed to open logfile\n");
    143299                                                return 1;
    144300                                        }
     
    158314                                        return 0;
    159315                                } else {
    160                                         fprintf(stderr, "Unknown option: %s\n", argv[i]);
     316                                        STDERR_LOG("Unknown option: %s\n", argv[i]);
    161317                                        return 1;
    162318                                }
     
    166322        tw_config_init();
    167323        if(tw_config_read(confpath) != 0) {
    168                 fprintf(stderr, "Could not read the config\n");
     324                STDERR_LOG("Could not read the config\n");
    169325                return 1;
    170326        }
    171327        if(tw_server_init() != 0) {
    172                 fprintf(stderr, "Could not initialize the server\n");
     328                STDERR_LOG("Could not initialize the server\n");
    173329                return 1;
    174330        }
Note: See TracChangeset for help on using the changeset viewer.