Verán resulta que estoy haciendo mi homebrew pero me encuentro con un probelmón. Lo enciendo y todo bien pero al poco tiempo (segundos) la pantalla táctil deja de funcionar. Esto que puede ser?
Les dejo todo el código del ARM9 (disculpad por lo sucio que está):
El main.c:
#include <stdio.h> #include <nf_lib.h> #include "touchdesire.h" //--------------------------------------------------------------------------------- int main(void) { //--------------------------------------------------------------------------------- touchPosition touch; s8 bienvenida=1,tocado=0,spriterot=0; u16 keys; char letrax[30],letray[30]; TD_Init("dstouch"); // Quitar sprites de la RAM //NF_UnloadSpritePal(0); // Borra la paleta de la RAM //NF_UnloadSpriteGfx(0); // Borra el sprite bookmark de la RAM //NF_UnloadSpriteGfx(1); // Borra el sprite gnome-applications de la RAM //NF_UnloadSpriteGfx(2); // Borra el sprite configure de la RAM // Carga de la fuente NF_LoadTextFont("fonts/default","default",256,256,0); NF_CreateTextLayer(0,2,0,"default"); // Carga de sprites de la pantalla de apps NF_LoadSpritePal("sprites/calendario",1); // Carga la paleta calendario a la RAM NF_LoadSpriteGfx("sprites/calendario",1,64,64); // Carga el sprite calendario a la RAM NF_LoadSpritePal("sprites/carpetas",2); // Carga la paleta carpetas a la RAM NF_LoadSpriteGfx("sprites/carpetas",2,64,64); // Carga el sprite carpetas a la RAM NF_LoadSpritePal("sprites/correo",3); // Carga la paleta correo a la RAM NF_LoadSpriteGfx("sprites/correo",3,64,64); // Carga el sprite correo a la RAM NF_LoadSpritePal("sprites/internet",4); // Carga la paleta internet a la RAM NF_LoadSpriteGfx("sprites/internet",4,64,64); // Carga el sprite internet a la RAM NF_LoadSpritePal("sprites/juegos",5); // Carga la paleta juegos a la RAM NF_LoadSpriteGfx("sprites/juegos",5,64,64); // Carga el sprite juegos a la RAM NF_LoadSpritePal("sprites/musica",6); // Carga la paleta musica a la RAM NF_LoadSpriteGfx("sprites/musica",6,64,64); // Carga el sprite musica a la RAM NF_LoadSpritePal("sprites/configuracion",7); // Carga la paleta configuracion a la RAM NF_LoadSpriteGfx("sprites/configuracion",7,64,64); // Carga el sprite configuracion a la RAM NF_LoadSpritePal("sprites/config_sonido",8); // Carga la paleta config_sonido a la RAM NF_LoadSpriteGfx("sprites/config_sonido",8,64,64); // Carga el sprite config_sonido a la RAM NF_LoadSpritePal("sprites/ayuda",9); // Carga la paleta ayuda a la RAM NF_LoadSpriteGfx("sprites/ayuda",9,64,64); // Carga el sprite ayuda a la RAM NF_VramSpritePal(1,1,1); // Carga la paleta calendario a la VRAM NF_VramSpriteGfx(1,1,1,false); // Carga el sprite calendario a la VRAM NF_VramSpritePal(1,2,2); // Carga la paleta carpetas a la VRAM NF_VramSpriteGfx(1,2,2,false); // Carga el sprite carpetas a la VRAM NF_VramSpritePal(1,3,3); // Carga la paleta correo a la VRAM NF_VramSpriteGfx(1,3,3,false); // Carga el sprite correo a la VRAM NF_VramSpritePal(1,4,4); // Carga la paleta internet a la VRAM NF_VramSpriteGfx(1,4,4,false); // Carga el sprite internet a la VRAM NF_VramSpritePal(1,5,5); // Carga la paleta juegos a la VRAM NF_VramSpriteGfx(1,5,5,false); // Carga el sprite juegos a la VRAM NF_VramSpritePal(1,6,6); // Carga la paleta musica a la VRAM NF_VramSpriteGfx(1,6,6,false); // Carga el sprite musica a la VRAM NF_VramSpritePal(1,7,7); // Carga la paleta configuracion a la VRAM NF_VramSpriteGfx(1,7,7,false); // Carga el sprite configuracion a la VRAM NF_VramSpritePal(1,8,8); // Carga la paleta config_sonido a la VRAM NF_VramSpriteGfx(1,8,8,false); // Carga el sprite config_sonido a la VRAM NF_VramSpritePal(1,9,9); // Carga la paleta ayuda a la VRAM NF_VramSpriteGfx(1,9,9,false); // Carga el sprite ayuda a la VRAM // Crear los sprites de la pantalla principal NF_CreateSprite (1,1,1,1,192,12); // Crea el sprite calendario NF_CreateSprite (1,2,2,2,192,72); // Crea el sprite carpetas NF_CreateSprite (1,3,3,3,192,132); // Crea el sprite correo NF_CreateSprite (1,4,4,4,132,12); // Crea el sprite internet NF_CreateSprite (1,5,5,5,132,72); // Crea el sprite juegos NF_CreateSprite (1,6,6,6,132,132); // Crea el sprite musica NF_CreateSprite (1,7,7,7,72,12); // Crea el sprite configuracion NF_CreateSprite (1,8,8,8,72,72); // Crea el sprite config_sonido NF_CreateSprite (1,9,9,9,72,132); // Crea el sprite ayuda // Habilitar RotSet TD_CreateAppMenu("backgrounds/fondoapps",9,1,2,3,4,5,6,7,8,9); // Crea el menu de aplicaciones // Cargar los fondos NF_Load16bitsBg("backgrounds/fondods_arriba",1); // Carga el fondo para la pantalla principal NF_Load16bitsBg("backgrounds/barra_abajo",2); // Carga el fondo de la barra de abajo NF_Load16bitsBg("backgrounds/barra_lateral",3); // Carga el fondo lateral NF_LoadTiledBg("backgrounds/fondo","fondo",256,256); // Crear los fondos NF_Copy16bitsBuffer(1, 1, 1); // Crea el fondo para la pantalla principal NF_Draw16bitsImage(1, 2, 0, 0, 1); // Crea el fondo para la pantalla principal NF_CreateTiledBg(0, 3, "fondo"); // Crea el fondo de la pantalla de arriba while(1) { /*NF_ClearTextLayer(0,1); switch(fifoGetValue32(1)){ // Actualiza el estado de la bateria case -1: NF_WriteText(0,1,1,5,"error1"); // Actualiza el texto case 0: NF_WriteText(0,1,1,5,"error2"); case 1: NF_WriteText(0,1,1,5,"error3"); case 2: NF_WriteText(0,1,1,5,"bnc"); case 3: NF_WriteText(0,1,1,5,"bsc"); case 4: NF_WriteText(0,1,1,5,"mnc"); case 5: NF_WriteText(0,1,1,5,"msc"); }*/ touchRead(&touch); scanKeys(); keys=keysHeld(); if (bienvenida){ // Pantalla principal if (keys & KEY_TOUCH){ TD_ChangeToAppMenu(); bienvenida = 0; } } else // En el menú { if (keys & KEY_TOUCH){ // Si se ha tocado la pantalla: if ((touch.px>=192)&&(touch.px<=216)) { if ((touch.py>=12) && (touch.py<=36)) // Se ha tocado el icono X:1 Y:1 {tocado=1; spriterot=1; break;} if ((touch.py>=72) && (touch.py<=96)) // Se ha tocado el icono X:2 Y:1 {tocado=1; spriterot=2; break;} if ((touch.py>=132) && (touch.py<=15)) // Se ha tocado el icono X:3 Y:1 {tocado=1; spriterot=3; break;} } if ((touch.px>=132)&&(touch.px<=156)) { if ((touch.py>=12) && (touch.py<=36)) // Se ha tocado el icono X:1 Y:2 {tocado=1; spriterot=4; break;} if ((touch.py>=72) && (touch.py<=96)) // Se ha tocado el icono X:2 Y:2 {tocado=1; spriterot=5; break;} if ((touch.py>=132) && (touch.py<=15)) // Se ha tocado el icono X:3 Y:2 {tocado=1; spriterot=6; break;} } if ((touch.px>=72)&&(touch.px<=96)) { if ((touch.py>=12) && (touch.py<=36)) // Se ha tocado el icono X:1 Y:3 {tocado=1; spriterot=7; break;} if ((touch.py>=72) && (touch.py<=96)) // Se ha tocado el icono X:2 Y:3 {tocado=1; spriterot=8; break;} if ((touch.py>=132) && (touch.py<=159)) // Se ha tocado el icono X:3 Y:3 {tocado=1; spriterot=9; break;} } if(tocado){ NF_EnableSpriteRotScale(1,spriterot,0,1); NF_SpriteRotScale(1,0,0,128,128);} } } if (keys && KEY_TOUCH){ sprintf(letrax,"Stylus X: %d", touch.px); sprintf(letray,"Stylus Y: %d", touch.py);} NF_WriteText(0,2,3,2,letrax); NF_WriteText(0,2,4,6,letray); //NF_ScrollBg(1,1,0,bandejay); // Actualiza el fondo de la bandeja //NF_MoveSprite(1,0,70,(-bandejay+96)); // Actualiza el botón NF_SpriteOamSet(0); // Actualiza el set de sprites de la pantalla superior NF_SpriteOamSet(1); // Actualiza el set de sprites de la pantalla iferior NF_Flip16bitsBackBuffer(1); NF_UpdateTextLayers(); // Lee la pantalla táctil swiWaitForVBlank(); // Espera al sincronismo vertical oamUpdate(&oamMain); // Actualiza los sprites de la pantalla superior oamUpdate(&oamSub); // Actualiza los sprites de la pantalla inferior } return 0; }
touchdesire.h:
#ifndef __TOUCHDESIRE_H__ #define __TOUCHDESIRE_H__ #include <nds.h> void TD_Init(); int TD_CreateMain(); int TD_CreateAppMenu(char bg_path[], u8 numapps, ...); void TD_ChangeToAppMenu(); #endif
touchdesire.c:
#include "touchdesire.h" #include <nf_lib.h> #include <stdarg.h> typedef struct{ char nombre[20]; //El nombre de la aplicación s8 appx; // La X de la aplicación s8 appy; // La y de la aplicación s8 slotgrafico; //El nombre de su grafico } APP; APP appmenu[9]; s8 numapps; // TD_Init para inicializarlo todo void TD_Init(char dir[]) { NF_SetRootFolder(dir); // Define la carpeta ROOT para usar FAT // Inicia el motor 2D NF_Set2D(0, 0); // Modo 2D en las dos pantallas NF_Set2D(1, 5); NF_InitTiledBgBuffers(); // Inicializa los buffers para almacenar fondos NF_InitTiledBgSys(0); // Inicializa los fondos Tileados para la pantalla superior NF_InitTextSys(0); // Inicializa los fondos en modo "BITMAP" NF_InitBitmapBgSys(1, 1); // Inicializa los buffers para guardar fondos en formato BITMAP NF_Init16bitsBgBuffers(); NF_Init16bitsBackBuffer(1); NF_Enable16bitsBackBuffer(1); // Iniciar los sprites NF_InitSpriteBuffers(); // Inicia el buffer de Sprites NF_InitSpriteSys(0); // Inicia el sistema de Sprites en la pantalla de abajo NF_InitSpriteSys(1); // Inicia el sistema de Sprites en la pantalla de arriba } // TD_CreateMain para crear la pantalla principal int TD_CreateMain() {return 1;} // TD_CreateAppMenu para crear el menu int TD_CreateAppMenu(char bg_path[],u8 numapps2, ...) {s8 a=0; va_list graficos; va_start (graficos,numapps2); numapps=numapps2; NF_Load16bitsBg(bg_path, 0); for (a=0; a<numapps2; a++) { appmenu[a].slotgrafico=va_arg(graficos,int); NF_ShowSprite(1,appmenu[a].slotgrafico,0); } va_end (graficos); return 1; } // TD_ChangeToAppMenu para cambiar al menu void TD_ChangeToAppMenu() {s8 b = 0; NF_Enable16bitsBackBuffer(1); NF_Copy16bitsBuffer(1, 1, 0); NF_Draw16bitsImage(1, 2, 0, 0, 1); NF_Flip16bitsBackBuffer(1); NF_ShowSprite(1,0,0); for (b=0;b<numapps; b++) {NF_ShowSprite(1,appmenu[b].slotgrafico,1);} }
El codigo para leer la
El codigo para leer la pantalla tactil donde esta? Falla en la DS o tambien en el emulador? Has puesto la ultima libnds (la de hace unos 8 dias) que llevava un fix para el arm7?
Nuestra web oficial:
http://www.nightfoxandco.com/
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.
uy...
resulta que en vez de poner el main c he puesto dos veces el touhcdesire.c, ahora lo arreglo de todas formas voy a probar ese fix de arm 7.
EDIT: he probado el fix del default.arm7 y .elf y ahora si no lo toco enseguida deja de ir la pantalla tactil y si lo hago y muevo mucho el stylus se apaga.
Pero el fallo te ocurre igual
Pero el fallo te ocurre igual en la consola que en el emulador?
Disculpa por no haber
Disculpa por no haber contestado antes pero en el emulador no los pruebo mucho ya que uso Linux (aunque falten algunos programas para programas va genial) y no he visto otro emulador para instalar que el desmume y como aquí no funciona ni el fat ni el nitro pues no lo he probado mucho, por cierto si voy a probarlo en algún windows que emus me recomiendas, los que vienen con la NFlib?
El ultimo del no$gba funciona
El ultimo del no$gba funciona perfecto. Te o digo por que algunas flashcards + alguna libnds dan problemas con el arm7, o sea, tactil y demas.
Has intentado compilar el ejemplo de stylus de libnds y probarlo en tu flahscard, a ver si sucede lo mismo?
Nuestra web oficial:
http://www.nightfoxandco.com/
Siguenos en facebook:
http://www.facebook.com/pages/NightFox-Co/284338634917917
Por favor, no useis los MP para preguntas, usar el FORO:
http://www.nightfoxandco.com/forum/
Asi nos ahorramos de contestar lo mismo 20 veces.
si, eso lo probé y va
si, eso lo probé y va perfecto