Anuncios Google

OSlib - Funciones de Botones

Tutoriales Avanzados Homebrewmex

Aquí está la siguiente lección, en la lección anterior ya aprendimos a imprimir texto en pantalla ahora les enseñare a leer los botones presionados, también servirá como ejemplo elaborar un “Testeador de botones o button tester”. Ahora en el código que expondré más abajo se colocarán las explicaciones y el SRC viene anexo en el tutorial.

Autor: klozz.

Procedimiento:

Importamos la librería de la oslib sin ella estaríamos trabajando en C normal oslib proporciona muchas nuevas funciones.

#include <oslib/oslib.h>

PSP_MODULE_INFO("nombre del homebrew o plugin",0 para homebrew 1 para PRX,1,1) los últimos son la versión, no por poner el 1 quiere decir que se compilara un plugin sino lo hacen desde el makefile se generara un eboot el 1 es para que sea funcionalidad para plugin ya que estos trabajan en modo Kernel. (Igual puedo equivocarme y si así es pueden corregirme).

PSP_MODULE_INFO("Lectura de controles OSLib", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);

Como todo programa debe tener un inicio y para C se utiliza el tipo de dato y el nombre main() desde donde se lea el main es donde comienza a leer el homebrew, de ahí parte para seguir el programa todo lo anterior no se toma en si como del programa.

int main()
{

NOTA: Debemos recordar que debe haber una llave "{" para abrir y una para cerrar "}" sino al compilar les dará error ya que no encuentra el fin del código.

Se inicia la librería Oslib con el comando oslInit(0);

   oslInit(0);

Iniciamos la parte gráfica indicando el formato de pixeles que queremos usar y si queremos usar doble buffer: void oslInitGfx(int pixelFormat, int bDoubleBuffer); usaremos OSL_PF_8888 para una pantalla de 32 bits o OSL_PF_5650 para 16 0 para buffer simple, 1 para buffer doble.

Usaremos en este caso para una pantalla de 32 bits y de solo buffer simple.

   oslInitGfx(OSL_PF_8888, 0);

Iniciamos la pantalla para poder escribir en ella sin este comando no se mostraría nada de lo que mandemos a imprimir ya sea usando el comando.

oslPrintf o oslPrintf_xy
    oslInitConsole();

Iniciamos el Bucle  principal de tipo while, en un bucle debe haber una "{" que abre y una "}" que cierra para que el compilador a la hora de crear el ejecutable sepa que el bucle finalizó y no quede en bucle infinito o en si de error de compilado.

while (!osl_quit) //Aquí negamos la operación de salir
    {

Nos permite pintar en la pantalla.

   oslStartDrawing();

Ahora la función para leer los botones es oslReadKeys(); para los coders de lua viene siendo como el Controls.Read()

 oslReadKeys();

Ahora limpiamos la pantalla con la función oslCls(); en lua era Screen.clear() para los de C normal era pspDebugScreenClear

   oslCls();

Ahora para escribir en determinada coordenada de la pantalla con oslPrintf_xy le decimos, en pixeles, donde queremos escribir.

  oslPrintf_xy(0,20,"Button tester    –      Leccion 2: Leer los botones en OSlib");
        oslPrintf_xy(0,28,"--------------------------------------------------------------------------");

osl_keys->analogX devuelve la posición X del analógico y osl_keys->analogY devuelve la posición Y del analógico. Y ahora solo usamos la función para imprimir pantalla para que nos muestre como se encuentra el análogo.

    oslPrintf_xy(40,40,"Analogico X : %d  -  Analógico Y : %d",osl_keys->analogX,osl_keys->analogY);

Esto está bastante claro pero igual lo explicare, aquí estamos viendo otro bucle llamado IF que en español es: SI, entonces en algoritmo sería así Si (leer boton->lugar.equis) imprimir_xy(pixelx 100, pixely 70,"X"); y bueno creo que explicando el primero lo demás es mas sencillo :)

 if (osl_keys->held.cross) oslPrintf_xy(100,70,"X");
        if (osl_keys->held.square) oslPrintf_xy(100,70,"CUADRADO");
        if (osl_keys->held.circle) oslPrintf_xy(100,70,"O");
        if (osl_keys->held.triangle) oslPrintf_xy(100,70,"TRIANGULO");
        if (osl_keys->held.up) oslPrintf_xy(100,70,"ARRIBA");
        if (osl_keys->held.down) oslPrintf_xy(100,70,"ABAJO");
        if (osl_keys->held.left) oslPrintf_xy(100,70,"IZQUIERDA");
        if (osl_keys->held.right) oslPrintf_xy(100,70,"DERECHA");
        if (osl_keys->held.L) oslPrintf_xy(100,70,"L");
        if (osl_keys->held.R) oslPrintf_xy(100,70,"R");
        if (osl_keys->held.home) oslPrintf_xy(100,70,"HOME");
        if (osl_keys->held.note) oslPrintf_xy(100,70,"NOTE");
        if (osl_keys->held.select) oslPrintf_xy(100,70,"SELECT");
        if (osl_keys->held.start) oslPrintf_xy(100,70,"START");
        if (osl_keys->held.left) oslPrintf_xy(100,70,"IZQUIERDA");
        if (osl_keys->held.hold) oslPrintf_xy(100,70,"HOLD");

Cerramos el modo dibujo lo usaremos siempre al final de las operaciones de pintar y usaremos oslEndDrawing(); para los coders de lua hm2 se les hará conocido para los user normales que quieran aprender pues ya se les hará familiar pronto.

 oslEndDrawing();

Ahora debemos sincronizar la pantalla para que cuando sea presionado un botón este se muestre al mismo tiempo que es presionado y no haya errores al mostrarlos, usaremos oslSyncFrame();

    oslSyncFrame();
    }

Ahora debemos finalizar la parte grafica y usaremos oslEndGfx();

    oslEndGfx();

Con este comando sale directamente al menú de la psp.

oslQuit();
    return 0;

Con esto finalizamos el main del SRC (Source Code (código fuente)) y el compilador da por terminado el programa.

 }

Main.C

//importamos la librería
#include <oslib/oslib.h>
 
PSP_MODULE_INFO("Lectura de controles OSLib", 0, 1, 1);
PSP_MAIN_THREAD_ATTR(THREAD_ATTR_USER | THREAD_ATTR_VFPU);
 
int main()
{
    //con esta línea la librería ya se encarga de todos los callbacks
   //que se tenia que escribir un código extenso  solo debemos iniciarla
 
    oslInit(0);
 
   //iniciamos la parte grafica indicando el formato de pixeles que queremos usar y si queremos usar doble buffer
   //void oslInitGfx(int pixelFormat, int bDoubleBuffer);
   //usaremos OSL_PF_8888 para una pantalla de 32 bits o OSL_PF_5650 para 16
   //0 para buffer simple, 1 para buffer doble
 
    oslInitGfx(OSL_PF_8888, 0);
 
    //iniciamos la pantalla para poder escribir en ella
    oslInitConsole();
 
    //Bucle  principal
    while (!osl_quit) //Aquí negamos la operación de salir 
    {
       //Nos permite pintar en la pantalla
        oslStartDrawing();
 
        //leemos los botones
        oslReadKeys();
 
       //limpiamos la pantalla
        oslCls();
 
      //con oslPrintf_xy le decimos, en pixels, donde queremos escribir
 
       oslPrintf_xy(0,20,"Button tester    –      Leccion 2: Leer los botones en OSlib");
        oslPrintf_xy(0,28,"--------------------------------------------------------------------------");
 
      //osl_keys->analogX devuelve la posición X del analógico y osl_keys->analogY la Y
        oslPrintf_xy(40,40,"Analogico X : %d  -  Analógico Y : %d",osl_keys->analogX,osl_keys->analogY);
 
      //esto está bastante claro
      if (osl_keys->held.cross) oslPrintf_xy(100,70,"X");
        if (osl_keys->held.square) oslPrintf_xy(100,70,"CUADRADO");
        if (osl_keys->held.circle) oslPrintf_xy(100,70,"O");
        if (osl_keys->held.triangle) oslPrintf_xy(100,70,"TRIANGULO");
      if (osl_keys->held.up) oslPrintf_xy(100,70,"ARRIBA");
        if (osl_keys->held.down) oslPrintf_xy(100,70,"ABAJO");
        if (osl_keys->held.left) oslPrintf_xy(100,70,"IZQUIERDA");
        if (osl_keys->held.right) oslPrintf_xy(100,70,"DERECHA");
      if (osl_keys->held.L) oslPrintf_xy(100,70,"L");
        if (osl_keys->held.R) oslPrintf_xy(100,70,"R");
        if (osl_keys->held.home) oslPrintf_xy(100,70,"HOME");
        if (osl_keys->held.note) oslPrintf_xy(100,70,"NOTE");
      if (osl_keys->held.select) oslPrintf_xy(100,70,"SELECT");
        if (osl_keys->held.start) oslPrintf_xy(100,70,"START");
        if (osl_keys->held.left) oslPrintf_xy(100,70,"IZQUIERDA");
        if (osl_keys->held.hold) oslPrintf_xy(100,70,"HOLD");
 
       //cerramos el modo dibujo
   //lo usaremos siempre al final de las operaciones de pintar
        oslEndDrawing();
 
       //sincronizamos la pantalla
        oslSyncFrame();        
    }
 
 
   //finaliza la parte grafica
    oslEndGfx();
   //sale directamente al menú de la psp
    oslQuit();
    return 0;
}

Makefile

TARGET = Botons
OBJS = main.o  
 
INCDIR =
CFLAGS = -G4 -Wall -O2
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
 
LIBDIR =
LDFLAGS =
STDLIBS= -losl -lpng -lz \
  -lpspsdk -lpspctrl -lpspumd -lpsprtc -lpsppower -lpspgu -lpspaudiolib -lpspaudio -lm
LIBS=$(STDLIBS)$(YOURLIBS)
 
 
EXTRA_TARGETS = EBOOT.PBP
PSP_EBOOT_TITLE = Leccion 2:Control de botones en OSlib
 
 
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build.mak

Listo una lección más.

Descargar OSLib Control de Botones (Sólo Usuarios Registrados).

4.23077
Tu voto: Ninguno Votos totales: 4.2 (39 votos)

Anuncios Google

Comentarios

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.
Imagen de fernandodixon3

jajaja que morboso este klozz y sus tutos +5

muy buena XP  por fin pude gracias 5 estrellas

Imagen de jorge_97

By Jorge_97

Buen tuto compañero ;=)

Un saludo

Imagen de klozz

Grax jorge

Grax jorge

Imagen de Abaddon Ormuz

Que onda Klozz, ye he hecho

Que onda Klozz, ye he hecho mi primer button tester, vamos progresando :D recuerdo que hace tiempo hubo muchos en portada XD

Imagen de klozz

Jajajaja si , recuerdo esas

Jajajaja si , recuerdo esas epocas xD donde todos querian que su button tester estuviera en portada xD luego cuando empezé a sacar autoinstalers todo mundo queria hacer uno xD


TEAM MEX Homebrew y desarrollo PSP

Metal TrooperV.Pre-Alpha (15%)Lua , 10% C .

Ubunshell VProof. (45%)C

RPG Magues (35%)Lua , 5% C


Android development for Xperia X8 ^^ mis roms en XDA-Developers ya que en Scenebeta no las publican xD

Xperience  | MIUI Pikachu | Semc debrand engine | Froyexp | Xperience walkman mod | Android 4.0.4 CN9 Crema de nieve

-- KLOZZ

Opciones de visualización de comentarios

Seleccione la forma que prefiera para mostrar los comentarios y haga clic en «Guardar las opciones» para activar los cambios.