Nous sommes actuellement le 25 Mai 2012, 00:26

Règles du forum


Avant de poser votre question, commencez par faire une recherche sur le forum.
Nous mettons également à votre disposition un dictionnaire et une FAQ.
Pour éviter toute censure ou fermeture de votre topic, veuillez lire les règles en vigueur et le rappel lié au piratage.



Publier un nouveau sujet Répondre au sujet
 C probleme avec sceHttpCreateRequestWithURL 
Auteur Message
PSP addict
Avatar de l’utilisateur

Messages: 243
 C probleme avec sceHttpCreateRequestWithURL
Bonjour ,
je veux afficher une image jpg qui vien du "net" avec ma PSP en boucle (car c'est une webcam) :
Code :
#include <pspkernel.h>
#include <oslib/oslib.h>

#include <psphttp.h>
#include <psprtc.h>

PSP_MODULE_INFO("Net Test", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
PSP_HEAP_SIZE_KB(-2048);

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Globals:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

static int runningFlag = 1;
OSL_IMAGE *bkg = NULL;
static char message[100] = "";
static char buffer[100] = "";

SceULong64 length;
void* target;

char *url = "http://192.168.10.90:8888/";

int template, connexion, request, ret, status;

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Callbacks:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
/* Exit callback */
int exit_callback(int arg1, int arg2, void *common) {
    runningFlag = 0;
    return 0;
}

/* Callback thread */
int CallbackThread(SceSize args, void *argp) {
    int cbid;

    cbid = sceKernelCreateCallback("Exit Callback", exit_callback, NULL);
    sceKernelRegisterExitCallback(cbid);
    sceKernelSleepThreadCB();
    return 0;
}

/* Sets up the callback thread and returns its thread id */
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;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Init OSLib:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int initOSLib(){
    oslInit(0);
    oslInitGfx(OSL_PF_8888, 1);
    oslInitAudio();
    oslSetQuitOnLoadFailure(1);
    oslSetKeyAutorepeatInit(40);
    oslSetKeyAutorepeatInterval(10);
    return 0;
}


///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Connect to Access Point:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int connectAPCallback(int state){
    oslStartDrawing();
    oslDrawImageXY(bkg, 0, 0);
    oslDrawString(30, 200, "Connecting to AP...");
    sprintf(buffer, "State: %i", state);
    oslDrawString(30, 230, buffer);
    oslEndDrawing();
    oslEndFrame();
    oslSyncFrame();

    return 0;
}


int connectToAP(int config){
    oslStartDrawing();
    oslDrawImageXY(bkg, 0, 0);
    oslDrawString(30, 200, "Connecting to AP...");
    oslEndDrawing();
    oslEndFrame();
    oslSyncFrame();

    int result = oslConnectToAP(config, 10, connectAPCallback);
    if (!result){
      template = sceHttpCreateTemplate("OSL-agent/0.0.1 libhttp/1.0.0", 1, 1);if(template < 0) return 0;
      connexion = sceHttpCreateConnectionWithURL(template, url, 0);if(connexion < 0) return 0;
      return 1;
    }else{
        oslStartDrawing();
        oslDrawImageXY(bkg, 0, 0);
        sprintf(buffer, "Error connecting to AP!");
        oslDrawString(30, 200, buffer);
        oslEndDrawing();
        oslEndFrame();
        oslSyncFrame();
      sceKernelDelayThread(3*1000000);
    }
    //oslDisconnectFromAP();
    return 0;
}


int Net_IMG_Load(int save_MS){

   //ret = sceHttpSetResolveTimeOut(template, 500000);if(ret < 0) return 0;
   //ret = sceHttpSetRecvTimeOut(template, 10000000);if(ret < 0) return 0;
   //ret = sceHttpSetSendTimeOut(template, 10000000);if(ret < 0) return 0;
   request = sceHttpCreateRequestWithURL(connexion, PSP_HTTP_METHOD_GET, (char*)url, 0);if(request < 0) return 0;
   ret = sceHttpSendRequest(request, 0, 0);if(ret < 0) return 0;
   ret = sceHttpGetStatusCode(request, &status);if(ret < 0) return 0;if(status != 200) return 0;

//***merci biscottealacrevette
   sceHttpGetContentLength (request, &length);
   target = malloc((SceULong64)length);
   sceHttpReadData(request,target,(SceULong64)length);
//***

   //Set data for the temporary file
   oslSetTempFileData(target, length, &VF_MEMORY);
   //Load a JPG file using the temporary file (oslGetTempFileName to get its name)
   oslDeleteImage(bkg);
   bkg = oslLoadImageFileJPG(oslGetTempFileName(), OSL_IN_RAM | OSL_SWIZZLED, OSL_PF_8888);
   //oslScaleImage  (bkg,bkg,0,0,480,272);
   
   if (save_MS>0) {
     int fd;
      char *filepath="";
      pspTime TimePSP;
      sceRtcGetCurrentClockLocalTime(&TimePSP);
      sprintf(filepath,"ms0:/PSP/PHOTO/FOX_%02dH%02dM%02dS%02dms.jpg" , TimePSP.hour , TimePSP.minutes , TimePSP.seconds , (TimePSP.microseconds>>12) & 0xff);
      fd = sceIoOpen(filepath, PSP_O_WRONLY | PSP_O_CREAT, 0777);
      sceIoWrite(fd, target, (SceULong64)length);
      sceIoClose(fd);
   }
     free(target);
     return 0;
}

///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
// Main:
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
int main(){
   int skip = 0;
    int enabled = 1;
    int selectedConfig = 0;
    SetupCallbacks();

    initOSLib();
    oslIntraFontInit(INTRAFONT_CACHE_MED);
    oslNetInit();

    //Loads image:
    bkg = oslLoadImageFilePNG("bkg.png", OSL_IN_RAM | OSL_SWIZZLED, OSL_PF_8888);

    //Load font:
    OSL_FONT *font = oslLoadFontFile("flash0:/font/ltn0.pgf");
    oslSetFont(font);

    if (!oslIsWlanPowerOn())
        sprintf(message, "Please turn on the WLAN.");

    //Get connections list:
    struct oslNetConfig configs[OSL_MAX_NET_CONFIGS];
    int numconfigs = oslGetNetConfigs(configs);
    if (!numconfigs){
        sprintf(message, "No configuration found!");
        enabled = 0;
    }

   int connected = 0;

    while(runningFlag && !osl_quit){
        if (!skip){
         oslStartDrawing();
         oslDrawImageXY(bkg, 0, 0);
            if (enabled){
                sprintf(buffer, "Press X to connect to %s.", configs[selectedConfig].name);
             oslDrawString(30, 5, buffer);
             oslDrawString(30, 25, "Press UP and DOWN to change settings.");
            }
            oslDrawString(30, 60, "Press /\\ to quit.");

         sprintf(buffer, "Memory Available %iko.", oslGetRamStatus().maxAvailable/1024);
         oslDrawString(30, 95, buffer);
         sprintf(buffer, "Image %iko.", length/1024);
         oslDrawString(30, 115, buffer);
         sprintf(buffer, "Connected %i.template %i,\nconnexion  %i,request %i,\nret %i, status %i", connected, template, connexion, request, ret, status);
         oslDrawString(30, 135, buffer);
         oslDrawString(30, 250, message);

         oslEndDrawing();
      }
        oslEndFrame();
        skip = oslSyncFrame();

        oslReadKeys();
        if (osl_keys->released.triangle)
            runningFlag = 0;

        if (osl_keys->released.cross){

            connected = connectToAP(selectedConfig + 1);
         while (connected==0)
         {connected = connectToAP(selectedConfig + 1);}

      }else if (osl_keys->released.circle){
            //Net_IMG_Load(0);

      }else if (osl_keys->released.up){
            if (++selectedConfig >= numconfigs)
                selectedConfig = numconfigs - 1;

      }else if (osl_keys->released.down){
            if (--selectedConfig < 0)
                selectedConfig = 0;
        }
      if (connected>0)
      {
         Net_IMG_Load(0);
      }
    }
    //Quit OSL:
    oslNetTerm();
    oslEndGfx();
    sceKernelExitGame();
    return 0;

}

mais au bout de quelques sceHttpCreateRequestWithURL j'ai un request negatif , et probleme avec la lenteur de oslScaleImage qui me fais perdre bcp de "FPS" ,
pendant que j'y suis, je voudrais utiliser un peu plus de ram (c'est une slim) mais je n'arrive pas a liberer toute la memoire de la slim (cf 6.60)


12 Jan 2012, 17:25
Profil
publicité
PSP bronze
Avatar de l’utilisateur

Messages: 1248
Message Re: C probleme avec sceHttpCreateRequestWithURL
Pour ton problème de sceHttp aucune idée, jamais test.
Si je me souviens bien c'est avec "PSP_HEAP_SIZE_KB(-2048);" que tu dis combien de RAM tu veux utiliser.
Là tu utilise toute la RAM, sauf 2048kB pour les autres threads etc.


14 Jan 2012, 04:28
Profil
PSP addict
Avatar de l’utilisateur

Messages: 243
Message Re: C probleme avec sceHttpCreateRequestWithURL
merci , oui pour la memoire j'utilise en theorie tout sauf 2 mo (pour la connexion) mais oslGetRamStatus().maxAvailable/1024 me renvoie "que" 19 XXX (19 Mo) lorque je lance l'eboot et 47 XXX sous psplink.


14 Jan 2012, 15:14
Profil
PSP bronze
Avatar de l’utilisateur

Messages: 1248
Message Re: C probleme avec sceHttpCreateRequestWithURL
Akabane pourra t'aider mieux que moi pour des 'blem OSLib.
Passes sur xtreamlua si t'as 2 min. Avec un peu de chance il sera connecté quand tu passeras ^^.


15 Jan 2012, 06:12
Profil
Afficher les messages depuis:  Trier par  
Publier un nouveau sujet Répondre au sujet


Qui est en ligne ?

Utilisateurs parcourant actuellement ce forum : Aucun utilisateur inscrit


Vous ne pouvez pas publier de nouveaux sujets dans ce forum
Vous ne pouvez pas répondre aux sujets dans ce forum
Vous ne pouvez pas éditer vos messages dans ce forum
Vous ne pouvez pas supprimer vos messages dans ce forum
Vous ne pouvez pas insérer de pièces jointes dans ce forum

Rechercher pour:
Sauter vers:  

Actualité PSP

Exploitez votre PSP

Aide et information

Nos partenaires