Anuncios Google

Problema raro con libnds

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);}
}


Anuncios Google

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 kNightFox

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.

Imagen de kNightFox

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?

Imagen de kNightFox

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

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.