:: PlayerAdvance.org ::  

Précédent   :: PlayerAdvance.org :: > :: Forums Hébergés :: > OldSchool Library > Aide au développement

Aide au développement Aide sur l'utilisation d'OSLib

Publicité

Réponse
 
Outils de la discussion Modes d'affichage
Vieux 19/03/2008, 19h51   #1
tonin59
Membre
 
Date d'inscription: 05/10/2007
Localisation: Lille
Messages: 35
Par défaut GPS psp et OSlib

Bonjour
J'essaye d'utiliser Oslib pour jouer du son avec un code qui détecte les valeurs du GPS. Je n'ai aucune erreur tant que je ne fais que :
Code:
oslInit(0);
mais dés que je cherche à initialiser les fonctions son ou graphique :
Code:
//Initialisation du mode graphique
 	oslInitGfx(OSL_PF_8888, 1);

 	//Initialisation de la console texte
 	oslInitConsole();

 	//Initialiser l'audio
 	oslInitAudio();
la psp m'affiche un écran noir.
Je n'ai pourtant aucun message d'erreur lorsque je compile sous eclipse.
Je suis sous la dernière version d'OSlib est-ce que le souci peut-il venir de là?

j'avoue ne pas tout comprendre dans le code du gps que j'ai récupéré sur le site de mapthis surtout le :
int main_thread (SceSize args, void *argp)
que j'aimerai transformer en un simple int main

j'avais fait un test avec la lib pspaudiolib en générant des waves en variant la fréquence en fonction des latitudes et longitudes mais j'aimerais maintenant aller un peu plus loin et jouer des mélodies wav.

Mon code est assez brute mais voilà :

Code:
//La librairie principale OSLib
#include <oslib/oslib.h>


#include <pspsdk.h>
#include <pspdisplay.h>
#include <pspuser.h>
#include <pspctrl.h>
#include <string.h>
#include <pspusb.h>
#include "pspusbgps.h"
#include <stdio.h>
#include <sys/unistd.h>

// *** DEFINES ***

#define printf						pspDebugScreenPrintf


// *** MODULE DECLARATION ***

PSP_MODULE_INFO("PSP 290 GPS TEST", 0, 1, 0);
PSP_MAIN_THREAD_ATTR(PSP_THREAD_ATTR_USER);

// *** GLOBALS VARIABLES ***

u32 currentY = 0;
unsigned int usbState = 0;
u32 gpsState = -1;
long initLocation=0;
long getLocation=0;


// *** FUNCTIONS DECLARATIONS ***

int cleanExit (void);


// *** FUNCTIONS CALLBACKS ***

int CallbackExit (int arg1, int arg2, void *common)
{
 return cleanExit();
}

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


 cbid = sceKernelCreateCallback("ExitCallback",CallbackExit,NULL);
 sceKernelRegisterExitCallback(cbid);

 sceKernelSleepThreadCB();

 return 0;
}

int SetupCallbacks (void)
{
 int thid;


 thid = sceKernelCreateThread("UpdateThread",CallbackThread,0x11,0xFA0,PSP_THREAD_ATTR_USER,0);
 if (thid >= 0) sceKernelStartThread(thid,0,0);

 return thid;
}

// *** FUNCTIONS ***

u32 waitButton (u32 codemask, u32 block)
{
 SceCtrlData pad;
 static u32 oldButtons = 0;
 

 for (;;)
 {
  // Read the buttons
  sceCtrlReadBufferPositive(&pad,1);

  // Check the buttons
  if ((oldButtons != pad.Buttons) || (!(block)))
  {
   // Save the buttons
   oldButtons = pad.Buttons;

   // Exit if ok
   if (pad.Buttons & codemask) return pad.Buttons;
  }

  // For wait without block
  sceDisplayWaitVblankStart();
 }
}

u32 moduleLoadStart (const char *path)
{
 SceUID loadResult, startResult;
 int status;


 loadResult = sceKernelLoadModule(path,0,NULL);
 if (loadResult & 0x80000000) { 
	 printf("[ loadResult=%x ]\n",loadResult);
	 return 1;
 }

 startResult = sceKernelStartModule(loadResult,0,NULL,&status,NULL);
 if (loadResult != startResult) return 2;

 return 0;
}

int cleanExit (void)
{
 unsigned int ret;


 // Stop usb drivers
 ret = sceUsbStop(PSP_USBGPS_DRIVERNAME,0,0);
 if (ret) printf("Error stopping USB Gps driver (0x%08X)\n",ret);

 ret = sceUsbStop("USBAccBaseDriver",0,0);
 if (ret) printf("Error stopping USB Acc driver (0x%08X)\n",ret);

 ret = sceUsbStop(PSP_USBBUS_DRIVERNAME,0,0);
 if (ret) printf("Error stopping USB BUS driver (0x%08X)\n",ret);

 // Unload module
 //moduleUnload("sceUSBGps_Driver");
 //moduleUnload("sceUSBAcc_Driver");

 // X to quit
 printf("\nPress X to quit\n");
 //waitButton(PSP_CTRL_CROSS,1);

 // Exit
 //return sceKernelExitDeleteThread(0);
  sceKernelExitGame();
  return 0;
}

void printLong(char * buf) {
	char fb[4];
	memcpy(fb,buf,4);
	long l = *((long *)fb);
	printf("[%ld]",l);
}
void printFloat(char * buf) {
	char fb[4];
	memcpy(fb,buf,4);
	float l = *((float *)fb);
	printf("[%f]",l);
}

void printDouble(char * buf) {
	char fb[8];
	memcpy(fb,buf,8);
	double d = *((double *)fb);
	printf("[%f]",d);
}

void updateDisplay (gpsdata gpsd, satdata satd,long getLocation) 
{


 // Wait vblank
 sceDisplayWaitVblankStart();

 // Set current Y
 pspDebugScreenSetXY(0,currentY-1);
 //pspDebugScreenSetXY(0,0);

 // Show texts
 printf("\n- USB State = 0x%X %s \n",usbState,(usbState & PSP_USB_ACTIVATED) ? "[activated]    " : "[deactivated]");
 printf("- GPS State = %d location: %ld\n",(unsigned int)gpsState, initLocation);

 
pspDebugScreenSetTextColor(0xFFFFFF);
printf("--------------------------------------------------------------------");
printf("\nDATE/TIME:%02d/%02d/%04d %02d:%02d:%02d  SAT IN VIEW: %d HDOP:%f\n", gpsd.month, gpsd.date, gpsd.year, gpsd.hour, gpsd.minute, gpsd.second, satd.satellites_in_view, gpsd.hdop);
 

printf("LAT:%f LON:%f ALT:%f SPD:%5.2f BEARING:%3.0f\n\n", gpsd.latitude, gpsd.longitude, gpsd.altitude, gpsd.speed, gpsd.bearing);


int j;
int fix=0;
for (j=0; j<satd.satellites_in_view; j++) {
	printf("SAT ID: %02d ELEV:%02d AZIM:%03d SNR:%02d FIX:%d\n", satd.satinf[j].id, satd.satinf[j].elevation, satd.satinf[j].azimuth, satd.satinf[j].snr, satd.satinf[j].good);
	if ( satd.satinf[j].good==1)
		fix++;
  }
 
  for (j=14-satd.satellites_in_view; j>0; j--)
	printf("                                                  \n"); 
	
   printf("\n");
  printf("INITIAL LOCATION:%02ld   FIXED ON %02d SATELLITES",getLocation,fix);
  printf("\n--------------------------------------------------------------------");

 printf("\n\t[CROSS to activate/deactivate USB device | TRIANGLE to quit]");
}

int main_thread (SceSize args, void *argp)
{
 SceCtrlData pad;
 u32 oldButtons = 0;
 // Must be local ?
 gpsdata gpsd;
 satdata  satd; 

 // Init psp
 SetupCallbacks();
 pspDebugScreenInit();
 pspDebugScreenSetBackColor(0x00007700);
 
 ///////////////////////////////////////
 ////////////////////////les init oslib
 //Initialisation de la librairie
 	oslInit(0);

 	//Initialisation du mode graphique
 	oslInitGfx(OSL_PF_8888, 1);

 	//Initialisation de la console texte
 	oslInitConsole();

 	//Initialiser l'audio
 	oslInitAudio();

 //pspDebugScreenSetBackColor(0xC0C0C0);

 pspDebugScreenClear();
 pspDebugScreenPrintf("\t\t\t\tPSP-290 GPS TEST");
  printf("\n--------------------------------------------------------------------");
 pspDebugScreenSetTextColor(0xC0C0C0);

 // Init usb
 printf("- Loading USB Accessory module...");
 if (moduleLoadStart("ms0:/camprx/usbacc.prx"))
 {
  printf("\terror\n");
  
  
  //testwithout the cleanexit
  //cleanExit();
 }
 else
  printf("\t ok\n");

 if(fopen("ms0:/camprx/usbgps.prx","r"))
	 printf("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!");
 else
	 printf("XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX");
	 
 printf("- Loading USB GPS module... ");
 if (moduleLoadStart("ms0:/camprx/usbgps.prx"))
 //if (moduleLoadStart("./usbgps.prx"))
 {
  printf("\t\terror\n");
  //cleanExit();
 }
 else
  printf("\t\t ok\n");

 // Start usb drivers
 printf("- Starting USB BUS driver...");
 if (sceUsbStart(PSP_USBBUS_DRIVERNAME,0,0))
 {
  printf("\t\terror\n");
  cleanExit();
 }
 else
  printf("\t\t ok\n");

 printf("- Starting USB Accessory driver...");
 if (sceUsbStart("USBAccBaseDriver",0,0))
 {
  printf("\terror\n");
  cleanExit();
 }
 else
  printf("\tok\n");

 printf("- Starting USB GPS driver...");
 if (sceUsbStart(PSP_USBGPS_DRIVERNAME,0,0))
 {
  printf("\t\terror\n");
  cleanExit();
 }
 else
  printf("\t\t ok\n");

 // Initialize GPS device
 printf("- Opening USB GPS device...");
 if (sceUsbGpsOpen())
 {
  printf("\t\terror\n");
  cleanExit();
 }
 else
  printf("\t\t  ok\n");


 // Initialize data
 memset(&gpsd,0x0,sizeof(gpsd));
 memset(&satd,0,sizeof(satd));
 currentY = pspDebugScreenGetY();

 // Show main menu
 for (;;)
 {
  // Get state of GPS
  if (usbState & PSP_USB_ACTIVATED)
   sceUsbGpsGetState(&gpsState);
  else
   gpsState = -1;

 memset(&gpsd,0x0,sizeof(gpsd));
 memset(&satd,0,sizeof(satd));
getLocation=0;

  // Get data of GPS
  if (gpsState == 0x3) { 
	sceUsbGpsGetData(&gpsd,&satd);
	sceUsbGpsGetInitDataLocation(&getLocation);
  }

  // Read the buttons
  sceCtrlReadBufferPositive(&pad,1);
  if (oldButtons != pad.Buttons)
  {
   // Save the buttons
   oldButtons = pad.Buttons;

   // Exit if TRIANGLE
   if (pad.Buttons & PSP_CTRL_TRIANGLE) break;
   if (pad.Buttons & PSP_CTRL_CIRCLE) {
		initLocation++;
	sceUsbGpsSetInitDataLocation (initLocation);
   } 
   if (pad.Buttons & PSP_CTRL_SQUARE) {
	initLocation--;
	sceUsbGpsSetInitDataLocation (initLocation);
   } 

   // Start / Stop GPS if CROSS
   if (pad.Buttons & PSP_CTRL_CROSS)
   {
    if (usbState & PSP_USB_ACTIVATED)
	 sceUsbDeactivate(PSP_USBGPS_PID);
    else
 	 sceUsbActivate(PSP_USBGPS_PID);

    //sceUsbWaitCancel();

    // Get state of the USB
    usbState = sceUsbGetState();
   }
  }

sceKernelDelayThread(300000);

  // Update display
  updateDisplay(gpsd,satd,getLocation);
 }

 pspDebugScreenClear();
 printf("- Close program...\n");

 // Close gps
 sceUsbGpsClose();
 // USB Deactivate
 sceUsbDeactivate(PSP_USBGPS_PID);
 //sceUsbWaitCancel();
 // Exit
 return cleanExit();
}

int module_start (SceSize args, void *argp)
{
 SceUID thid;


 thid = sceKernelCreateThread("main_thread",main_thread,0x20,0x10000,0,NULL);
 if (thid >= 0) sceKernelStartThread(thid,args,argp);

 return 0;
}
Si quelqu'un a une idée
Merci
__________________
-----------------------
mon site
tonin59 est déconnecté   Réponse avec citation

Publicité

Réponse

Liens sociaux

Publicité



Utilisateurs regardant la discussion actuelle : 1 (0 membre(s) et 1 invité(s))
 
Outils de la discussion
Modes d'affichage

Règles de messages
Vous ne pouvez pas créer de nouvelles discussions
Vous ne pouvez pas envoyer des réponses
Vous ne pouvez pas envoyer des pièces jointes
Vous ne pouvez pas modifier vos messages

Les balises BB sont activées : oui
Les smileys sont activés : oui
La balise [IMG] est activée : oui
Le code HTML peut être employé : non
Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 04h40.


Édité par : vBulletin® version 3.7.2
Copyright ©2000 - 2019, Jelsoft Enterprises Ltd. Tous droits réservés.
Version française #16 par l'association vBulletin francophone
Design par Ass-Itch, DJP et Dr.Vince