PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   Программирование для PSP (https://www.pspx.ru/forum/forumdisplay.php?f=101)
-   -   вопрос по работе с сетью (https://www.pspx.ru/forum/showthread.php?t=94452)

indeec-evafan 02.01.2012 15:23

вопрос по работе с сетью
 
Извиняюсь за такое количество новых тем но снова есть вопросы
1) Как заставить мое приложение к инету подключиться? Пытался смотреть примеры из сдк, но они у меня не запустились. Нужно как то выдать диалог с выбором подключения и собственно соединиться.
2) Сильно ли отличается работа с сокетами от "обычной" под линуксом? Ну кроме имен функций.
Заранее спасибо!
З.Ы.
Искал примеры на псп-хаке, но не нашел. Наверное плохо искал:scratch_one-s_head:

Yoti 02.01.2012 15:44

indeec-evafan,
1) Никогда не работал, не подскажу.
2) Работа крайне схожа с тем, что обзывается красивым словом POSIX.
3) А хакс то тут причём? Тут нужно смотреть.

indeec-evafan 02.01.2012 19:16

Yoti, я еще новичек в этом деле - где что искать незнаю. Но на пс2дев действительно кое что нашлось, так что спасибо!
З.Ы. Если кому вдруг понадобиться - вот что у меня получилось (пришлось пример слегка до ума доводить)
main.c
Исходный код
Код:

#include <string.h>
#include <stdlib.h>
#include <pspdebug.h>
#include <pspkernel.h>
#include <pspgu.h>
#include <pspdisplay.h>
#include <psputility.h>
#include <pspnet.h>
#include <pspnet_inet.h>
#include <pspnet_apctl.h>
#include <pspctrl.h>
 
 
PSP_MODULE_INFO("Net Dialog Sample", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);
PSP_HEAP_SIZE_KB(1024);
 
#define BUF_WIDTH (512)
#define SCR_WIDTH (480)
#define SCR_HEIGHT (272)
#define printf pspDebugScreenPrintf
#define setxy pspDebugScreenSetXY

 
static unsigned int __attribute__((aligned(16))) list[262144];
 
static int running = 1;
 
pspUtilityNetconfData data;
 
int exit_callback(int arg1, int arg2, void *common)
{
    running = 0;
    return 0;
}
 
int CallbackThread(SceSize args, void *argp)
{
    int cbid;
    cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
    sceKernelRegisterExitCallback(cbid);
    sceKernelSleepThreadCB();
    return 0;
}
 
int SetupCallbacks(void)
{
    int thid = 0;
    thid = sceKernelCreateThread("update_thread", CallbackThread, 0x11, 0xFA0, PSP_THREAD_ATTR_USER, 0);
    if (thid >= 0)
        sceKernelStartThread(thid, 0, 0);
    return thid;
}
 
void init()
{
    pspDebugScreenInit();
    sceGuInit();
    sceGuStart(GU_DIRECT, list);
    sceGuDrawBuffer(GU_PSM_8888, (void*) 0, BUF_WIDTH);
    sceGuDispBuffer(SCR_WIDTH, SCR_HEIGHT, (void*) 0x88000, BUF_WIDTH);
    sceGuDepthBuffer((void*) 0x110000, BUF_WIDTH);
    sceGuOffset(2048 - (SCR_WIDTH / 2), 2048 - (SCR_HEIGHT / 2));
    sceGuViewport(2048, 2048, SCR_WIDTH, SCR_HEIGHT);
    sceGuDepthRange(0xc350, 0x2710);
    sceGuScissor(0, 0, SCR_WIDTH, SCR_HEIGHT);
    sceGuEnable(GU_SCISSOR_TEST);
    sceGuDepthFunc(GU_GEQUAL);
    sceGuEnable(GU_DEPTH_TEST);
    sceGuFrontFace(GU_CW);
    sceGuShadeModel(GU_SMOOTH);
    sceGuEnable(GU_CULL_FACE);
    sceGuEnable(GU_CLIP_PLANES);
    sceGuEnable(GU_BLEND);
    sceGuBlendFunc(GU_ADD, GU_SRC_ALPHA, GU_ONE_MINUS_SRC_ALPHA, 0, 0);
    sceGuFinish();
    sceGuSync(0, 0);
    sceDisplayWaitVblankStart();
    sceGuDisplay(GU_TRUE);
    sceUtilityLoadNetModule(PSP_NET_MODULE_COMMON);
    sceUtilityLoadNetModule(PSP_NET_MODULE_INET);
    sceNetInit(128 * 1024, 42, 4 * 1024, 42, 4 * 1024);
    sceNetInetInit();
    sceNetApctlInit(0x8000, 48);
}
 
 
void deinit()
{
    sceNetApctlTerm();
    sceNetInetTerm();
    sceNetTerm(); 
}
 
void loadNetDialog(int action)
{
    memset(&data, 0, sizeof(data));
    data.base.size = sizeof(data);
    sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_LANGUAGE, &data.base.language);
    sceUtilityGetSystemParamInt(PSP_SYSTEMPARAM_ID_INT_UNKNOWN, &data.base.buttonSwap);
    data.base.graphicsThread = 17;
    data.base.accessThread = 19;
    data.base.fontThread = 18;
    data.base.soundThread = 16;
    data.action = action;
    struct pspUtilityNetconfAdhoc adhocparam;
    memset(&adhocparam, 0, sizeof(adhocparam));
    data.adhocparam = &adhocparam;
    sceUtilityNetconfInitStart(&data);
}
 
int main(int argc, char** argv)
{
    SetupCallbacks();
    init();
    SceCtrlData pad; 
    while (running)
        {
        sceGuStart(GU_DIRECT, list);
        sceGuClearColor(0x00000000);
        sceGuClearDepth(0);
        sceGuClear(GU_COLOR_BUFFER_BIT | GU_DEPTH_BUFFER_BIT);
        sceGuFinish();
        sceGuSync(0, 0);
        switch (sceUtilityNetconfGetStatus())
        {
            case PSP_UTILITY_DIALOG_NONE:
                break;
            case PSP_UTILITY_DIALOG_VISIBLE:
                sceUtilityNetconfUpdate(1);
                break;
            case PSP_UTILITY_DIALOG_QUIT:
                sceUtilityNetconfShutdownStart();
                break;
            case PSP_UTILITY_DIALOG_FINISHED:
                break;
            default:
                break;
        }
        setxy(0,0);
        printf("\n Press X and connect to AP\n Or press O and see connection status");
        sceDisplayWaitVblankStart();
        sceGuSwapBuffers();
        sceCtrlPeekBufferPositive(&pad, 1);
        if (pad.Buttons & PSP_CTRL_CROSS)
        {
            loadNetDialog(PSP_NETCONF_ACTION_CONNECTAP);
        }
        if (pad.Buttons & PSP_CTRL_CIRCLE)
        {
            loadNetDialog(PSP_NETCONF_ACTION_DISPLAYSTATUS);
        }
    }
    deinit();
    sceKernelExitGame();
    return 0;
}

makefile
Код:

TARGET = template
OBJS = main.o

INCDIR =
LIBS = -lpsputility -lpspgu
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)

LIBDIR =
LDFLAGS =

EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Template

PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak


Yoti 02.01.2012 19:31

indeec-evafan,
спасибо, может и пригодится. Просто над PSPSDK работ не ведётся, а содержимое давно уже требует правки...


Текущее время: 09:24. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2025, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.