Anuncios Google

Creando un plugin (frustración!!!)

Bueno pues haciendo mis experimentos en C, salió esto:

Bright Controler

Su función debería ser la de permitirnos aumentar o disminuir el brillo con más precisión que el típico botón SCREEN.

¿El problema? Pues bueno al final lo dejé con los botones UP y DOWN (del D-Pad) pero ni aún así...

pensé en cualquier tontería... pero sigo sin entender el por qué no funciona... :-(

El código:

main.c 

<textarea name="code" class="c" language="c">#include <pspsdk.h>
#include <pspkernel.h>
#include <pspthreadman.h>
#include <pspdebug.h> // Librería básica de control de pantalla
#include <pspctrl.h> // Librería de control de botones
#include <pspdisplay.h> // Librería necesaria?
#include <pspdisplay_kernel.h> // Librería de control y manejo de la pantalla
 
PSP_MODULE_INFO("BC", 0x1000, 1, 0); //BC, de 'Bright Controler'
PSP_MAIN_THREAD_ATTR(0x1000);
 
int main_thread(SceSize argc, void* argp) // Main thread del plugin
{
  while(1)
  {
	SceCtrlData pad; //, oldpad;
	sceCtrlSetSamplingCycle(0);
	sceCtrlSetSamplingMode(PSP_CTRL_MODE_DIGITAL);
	sceCtrlReadBufferPositive(&pad, 1);
	pspDebugScreenInit();
	pspDebugScreenClear();
	int brillo; // Creamos una variable 'brillo'
    sceDisplayGetBrightness(&brillo, 0); // Asignamos el nivel de brillo actual a la variable 'brillo'
 
	//if(pad.Buttons != oldpad.Buttons)
	//{
	//oldpad = pad;
			if(pad.Buttons & PSP_CTRL_UP) // Si se pulsa el D-Pad button UP...
			{
				if(brillo < 100) { // Si el brillo es menor que 100...
				sceDisplaySetBrightness(brillo + 10, 0);
		        } else if(brillo == 100) {
				sceDisplaySetBrightness(0,0);
			    }
			}
			if(pad.Buttons & PSP_CTRL_DOWN)
			{
				if(brillo > 0) {
				sceDisplaySetBrightness(brillo - 10, 0);
		   		} else if(brillo == 0) {
				sceDisplaySetBrightness(100,0);
				}
			}
 
	sceKernelDelayThread(100000); // 0.1 segundos
    return 0;
}
}
 
int module_start(SceSize args, void *argp)
{
	int thid = sceKernelCreateThread("BC", main_thread, 0x30, 0x1000, 0, NULL);
	if(thid >= 0)
	{
	sceKernelStartThread(thid, args, argp);
	}
	return 0;
}

Makefile

TARGET = Bright_Controler
OBJS = main.o
 
BUILD_PRX = 1
 
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
 
LIBS = -lpspdisplay_driver -lpspkernel
 
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build_prx.mak

PD: he incluido muchísimas librerías por la desesperación (loool)

Como siempre gracias a todos, ojalá que avance en C porque esto es... ridículo... xD


http://www.mhypnok.blogspot.com/

Gracias a Dark_AleX, Total_Noob, VirtuousFlame, Coldbird, Codestation...


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 barney77

O.o

O.o, me doy el tiro con Lua y quiero programar en C y me veo esto xD..

Imagen de DeViaNTe

Jej, asi por encima veo algun

Jej, asi por encima veo algun error que otro:
- Declaras todo dentro del while, nunca guardarás el brillo.
- Usas readcontrols en vez de peekcontrols. Los controles se te anularán.
- No necesitas main thread, lo creas tu.
- PSPdebugscreen ... eso para apps, remember, esto es vsh plugin.
- return justo después del delay, sólo se ejecutará una sola vez el ciclo. Nunca te funcionará.

Con lo que me he tomado la libertad de reescribirtelo un poco:

#include <pspsdk.h>
#include <pspkernel.h>
#include <pspthreadman.h>
#include <pspdebug.h>
#include <pspctrl.h>
#include <pspdisplay.h>
#include <pspdisplay_kernel.h>
 
PSP_MODULE_INFO("BC", 0x1007, 1, 0);		// Kernel powered
PSP_NO_CREATE_MAIN_THREAD();				// Sin main, ya me encargo yo.
PSP_HEAP_SIZE_KB(80);						// 80 Kb.
 
#define PRIORIDAD 0x15
#define MODOTHREAD 0x1000
 
void GetBrillo(int * brillo) {
	u32 k1;
	k1 = pspSdkSetK1(0);
	sceDisplayGetBrightness(brillo,0);
	pspSdkSetK1(k1);
}
 
void PonBrillo(int * brillo) {
	u32 k1;
	int b = *brillo;
	k1 = pspSdkSetK1(0);
	sceDisplaySetBrightness(brillo,0);
	pspSdkSetK1(k1);
}
 
 
 
int main_thread(SceSize argc, void* argp) {
	SceCtrlData pad;
	SceCtrlData oldpad;
	int brillo;
 
	sceCtrlSetSamplingCycle(0);
	sceCtrlSetSamplingMode(PSP_CTRL_MODE_DIGITAL);
	sceCtrlPeekBufferPositive(&pad, 1);
	sceCtrlPeekBufferPositive(&oldpad, 1);
 
	while(1) {
		sceCtrlPeekBufferPositive(&pad, 1);
		if(pad.Buttons != oldpad.Buttons) {
			oldpad = pad;
			if(pad.Buttons & PSP_CTRL_UP) {
				GetBrillo(&brillo);
				brillo += 10;
				if (brillo > 100) { brillo = 100; }
				PonBrillo(&brillo);
			}
			if(pad.Buttons & PSP_CTRL_DOWN) {
				GetBrillo(&brillo);
				brillo -= 10;
				if (brillo < 0) { brillo = 0; }
				PonBrillo(&brillo);
			}
		}
		sceKernelDelayThread(100000);
	}
	return 0;
}
 
int module_start(SceSize args, void *argp) {
	int thid = sceKernelCreateThread("BC", main_thread, PRIORIDAD, MODOTHREAD, 0, NULL);
	return sceKernelStartThread(thid, 0, NULL);
}

Y añadir al makefile:
USE_KERNEL_LIBS = 1

P.D: No lo he probado, la verdad, puede que funcione y puede que no, pero la idea seria esta.


Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es

Imagen de dj51_Shura

Gracias ;-)

aunque lo compilé y... no me funciona... >.<

probaré a 'intentar' comprender lo que haces porque es demasiado para mí, aver si descubro cualquier cosa.

Ya no sé qué es lo que puede pasar...

Igualmente gracias por todo


http://www.mhypnok.blogspot.com/

Gracias a Dark_AleX, Total_Noob, VirtuousFlame, Coldbird, Codestation...

Imagen de DeViaNTe

mmm, weno si, al arrancar,

mmm, weno si, al arrancar, nada mas arrancar, deberias hacer un wait de mm unos 4 segundos, k es lo k tarda en iniciar el vsh. luego de eso, deberias añadir una especie de debug, abrir un archivo y ir escribiendo hemos llegado aki, se esta haciendo esto, se está haciendo esto otro, para saber donde te falla. Programar a ciegas, es como ir a oscuras.


Actualmente desarrollando nuestra web y UXCode : http://www.gcrew.es

Imagen de Chimecho

....?

No se mucho de C, pero si de programación en general y veo esto:

sceDisplaySetBrightness(brillo - 10, 0);
// y también:
sceDisplaySetBrightness(brillo + 10, 0);

Yo digo que deberías guardar el cambio en la variable:

brillo-=10;
sceDisplaySetBrightness(brillo, 0);
// y también:
brillo+=10;
sceDisplaySetBrightness(brillo, 0);

Y así te ahorras leerlo a cada rato...

Saludos!



PSP FAT [5.00 M33-6] [6.60 ME] [Hard Moded] / Nintendo Wii [4.1U] [cIOS Hermes] [D2X cIOS] / iPhone 3G [4.2.1] [BB 05.13.04] [redsn0w] / iPod Touch 4 [6.1] [evasi0n]

07/05/10: Tuve el placer de llamarle con todo derecho "N00B" a molotovi xDDD

Recuerda: Sé el intérprete -_-

Imagen de Dioni0396

Creo que deberias comenzar con algo mas

simple, es decir comienza con LUA

Imagen de dj51_Shura

Mmmm...

prefiero C.

Lo digo porque en LUA no puedes crear plugins; aparte, C, dá muchísimas más opciones.

Lo que buscaba, como dije antes, es un plugin que modifique el nivel de brillo al presionar las D-Pad UP y DOWN...


http://www.mhypnok.blogspot.com/

Gracias a Dark_AleX, Total_Noob, VirtuousFlame, Coldbird, Codestation...

Imagen de Nevado0

Si sabe hacer ese codigo en C

Si sabe hacer ese codigo en C , te digo yo que algo de lua sabe xD

Imagen de -Adolso-Gallardo-

Mhm

Con LUA No Se Hace Plugins.

Imagen de Dioni0396

Yo le he dado

un consejo el que haga lo que quiera, con lua se puede hacer muchas cosas tambien

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.