[PSP] Metodos bloqueantes para leer el controlador

Le he estado echando una ojeada a los tutoriales de psp-programming y en la tercera leccion usa un bucle while para leer del controlador. ¿Existe algun método que no requiera estar ejecutando un bucle while constantemente? Algo así como lo que seria el getchar() de toda la vida, que bloquea la ejecución hasta que se pulse algo.

Por otro lado, ¿existe alguna libreria en plan ncurses para la PSP? (si pido la luna, lo siento :P)

Saludos
No se como irá el tema en la psp, pero supongo que te podras crear tu mismo una simple función que haga ese bucle, y luego solamente tengas que llamarla para que espere una pulsación.

Salu2!
Una función equivalente al getchar() en psp se llama sceKernelSleepThread() .
Para usarla debes incluir la libreria pspkernel.h
Si bueno, pero la idea es que la psp no este tirando ciclos de cpu mientras esperas la pulsación. La idea es que se pudiera hacer por interrupciones, aunque no se si se podrá, de ahí la pregunta : P.

Edito: No habia visto tu respuesta, becus. La función que comentas... ¿no es un sleep()? El sleep se reactivara al cabo de un tiempo (o el proceso se quedara dormido eternamente xD), yo busco algo que se reactive al recibir un input del pad.
buenas.

yo llevo mirando lo de programar en C para psp una semana, así que lo mismo estoy metiendo la gamba hasta el fondo. tu duda me parece muy interesante y es lo mismo que me he estado preguntando yo. tener un while(1) ahí es no querer que se ejecute nada más que eso...

la idea que he tenido (no he tenido tiempo de ponerme a implementarlo, así que lo comento por si te vale de algo) es hacer lo mismo que se hace en linux para el manejo de interrupciones (y tú usando gentoo probablemente sepas de qué va jeje).
esto es: lanzas un hilo y lo dejas dormido. cada vez que haya una pulsación de una tecla que ese hilo despierte, haga lo que tenga que hacer y vuelva a dormir.

en el C de toda la vida esto se hace con
signal(SIGINT, (void *)handler_sigint);


en el main al principio y luego te creas la función:

void *handler_sigint(int sig)
{
   printf("\nCerrando el socket !!!\n\n");
   close(sd);
};


eso lo que hace es controlar el ctrl+c y salir apropiadamente (no a lo bruto)


he estado viendo que hay funciones para manejar hilos prácticamente de la misma forma que en el linux de siempre. de hecho las 3 funciones que se ponen siempre al comenzar un programa eso es lo que hacen. en vez de ponerle que controle el SIGINT le pones que detecte los botones (vale, no sé cómo hacer esto, habría que mirarlo) y listo :D

espero que te valga de algo la idea. si es pura basura dilo y listo xD


suerte con lo que estés haciendo ;)
Si, bueno, se puede investigar en esa dirección, pero me parece algo bruto ponerse con señales cuando se trata de un getchar() : P

Saludos
Dentro del bucle while, hay "acciones" dentro de los if ke se hacen cuando pulsas una teclas, por lo ke si como ultima "accion" de un tecla (de todas, o de la ke te interese) pones: break;

El bucle while se rompe y se ejecuta el codigo ke se encuentre despues del bucle while ke se rompe...


Salu2
6 respuestas