Anuncios Google

[C] ¿Excedo el uso de memoria en PSP Slim?

Algunos conocerán el plugin BrightControler... pues bien tengo un dilema. En la nueva versión 0.3 parece que no es compatible con PSP Slim, en la 0.1 tampoco lo era pero en la 0.2, según PspRekiem, sí que lo es.

¿Alguien podría ayudarme al respecto? Dejo el Makefile y el main.c de ambas versiones, cabe destacar que tienen algunas diferencias como por ejemplo, la 0.3 es configurable...

¿Puede ser por el 4096 en ves de 0x1000 que pongo en la 0.2 / 0.3 respectivamente?

Makefile v0.3

TARGET = BrightControler
OBJS = main.o
 
INCDIR = 
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
 
LIBDIR =
LDFLAGS =
 
LIBS = -lpspkernel -lpspdisplay
 
USE_KERNEL_LIBC = 1
USE_KERNEL_LIBS = 1
 
BUILD_PRX = 1
 
PSP_FW_VERSION = 500
 
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build_prx.mak

main.c v0.3

/*
	*** dj51_Shura ***
 
	>>> Visit www.mhypnok.blogspot.com
 
	--------------------------------------------------------------------------------------------------------------
 
	BrightControler plugin for XMB & GAME & POPS
 
	--------------------------------------------------------------------------------------------------------------
 
	version 0.3. All rights reserved. Opensource.
 
	--------------------------------------------------------------------------------------------------------------
 
	This prx module allows you to adjuste the bright level between
	1 and 100 percent, using the analogic stick.
*/
 
#include <pspkernel.h> // The basic library xD
#include <pspdebug.h> // The Debug Utility Library
 
#include <pspctrl.h> // The Controller Kernel Library
 
#include <pspdisplay.h> // Library for manage display functions
#include <pspdisplay_kernel.h> // Library for manage display functions
 
#include <pspsyscon.h> // Library for manage LEDs
 
#include <pspinit.h> // Library which allow us to know if our plugin is started by the VSH, a GAME or a POPS
 
#include <pspthreadman.h>
 
#include <pspioutilities.h>
 
PSP_MODULE_INFO("BC", 0x1000, 0, 3); // Main thread name: "BC", Thread mode: Kernel Mode, Major version: 0, Minor version: 3
PSP_MAIN_THREAD_ATTR(0); // DON'T convert the main thread into User Mode
PSP_HEAP_SIZE_KB(8); // Use 8 KB of the system memory (RAM)
 
#define MS_LED 0
#define WLAN_LED 1
#define POWER_LED 2
 
#define STATE_ON 1
#define STATE_OFF 0
 
int power = 0, wlan = 0, ms = 0;
 
void LEDs() {
	if(power == 1) {
		sceSysconCtrlLED(POWER_LED, STATE_OFF); // Apagamos el LED de POWER (esto no afecta si se conecta el cable de alimentaci¨®n)
	}
	if(wlan == 1) {
		sceSysconCtrlLED(WLAN_LED, STATE_OFF); // Apagamos el LED de WLAN
	}
	if(ms == 1) {
		sceSysconCtrlLED(MS_LED, STATE_OFF); // Apagamos el LED de acceso a la memory stick
	}
}
 
void conf() {
	if(sceIoFileExists("ms0:/seplugins/bc_powerled.txt") == 1) {
		power = 1;
	} else {
		power = 0;
	}
	if(sceIoFileExists("ms0:/seplugins/bc_wlanled.txt") == 1) {
		wlan = 1;
	} else {
		wlan = 0;
	}
	if(sceIoFileExists("ms0:/seplugins/bc_msled.txt") == 1) {
		ms = 1;
	} else {
		ms = 0;
	}
}
 
int xmb() {
 
	int brillo; // Creamos una variable vac¨ªa 'brillo'
	sceDisplayGetBrightness(&brillo,0); // Asignamos el nivel de brillo actual a la variable 'brillo'
 
	SceCtrlData paddata; // Asignamos la lectura de los controles a la variable 'pad'
	sceCtrlSetSamplingCycle(0);
	sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); // Establecemos el modo de los controles
 
	conf();
 
	while(1) {
 
		sceCtrlPeekBufferPositive(&paddata, 1); // Asignamos la lectura de los controles a la variable 'pad'
 
		if(paddata.Ly < 60) { // Si el 'AnalogicPad.Y' tiene un valor negativo (pad anal¨®gico hacia abajo) ...
			if(brillo <= 96){ // Si el nivel de brillo es menor o igual que 95 ...
				brillo = brillo + 4; // La varible 'brillo' ser¨¢ igual al valor actual de 'brillo' + 5 ...
				sceDisplaySetBrightness(brillo, 0); // Establecemos el nivel de brillo de la pantalla seg¨²n la variable 'brillo'
				LEDs();
			}
		}
 
		if(paddata.Ly > 220) { // Si el 'AnalogicPad.Y' tiene un valor negativo (pad anal¨®gico hacia abajo) ...
			if(brillo >= 5){ // Si el nivel de brillo es mayor o igual que 5 ...
				brillo = brillo - 4; // La varible 'brillo' ser¨¢ igual al valor actual de 'brillo' - 5 ...
				sceDisplaySetBrightness(brillo, 0); // Establecemos el nivel de brillo de la pantalla seg¨²n la variable 'brillo'
				LEDs();
			}
		}
 
		sceDisplaySetBrightness(brillo, 0);
		/*
		Esta linea en el bucle infinito sirve para que, aunque apaguemos la pantalla mantiendo la tecla
		'SCREEN', al volver a encenderla, vuelva a estar con el brillo que la dejamos. Sin esto,
		si apagásemos la pantalla, al encenderla de nuevo pulsando 'SCREEN' el brillo se setear¨ªa
		a uno de los niveles por defecto (el m¨ªnimo, seg¨²n mis testeos).
		*/
 
		sceKernelDelayThread(5000);
 
	}
 
	return 0; // Devolvemos 0 para cerrar el thread
 
}
 
int game() {
 
	int brillo; // Creamos una variable vac¨ªa 'brillo'
	sceDisplayGetBrightness(&brillo, 0); // Asignamos el nivel de brillo actual a la variable 'brillo'
 
	SceCtrlData paddata; // Asignamos la lectura de los controles a la variable 'pad'
	sceCtrlSetSamplingCycle(0);
	sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); // Establecemos el modo de los controles
 
	conf();
 
	while(1) {
 
		sceCtrlPeekBufferPositive(&paddata, 1); // Asignamos la lectura de los controles a la variable 'pad'
 
		if(paddata.Buttons & PSP_CTRL_SELECT) {
 
			if(paddata.Ly < 60) { // Si el 'AnalogicPad.Y' tiene un valor negativo (pad anal¨®gico hacia abajo) ...
				if(brillo <= 96){ // Si el nivel de brillo es menor o igual que 95 ...
					brillo = brillo + 4; // La varible 'brillo' ser¨¢ igual al valor actual de 'brillo' + 5 ...
					sceDisplaySetBrightness(brillo, 0); // Establecemos el nivel de brillo de la pantalla seg¨²n la variable 'brillo'
					LEDs();
				}
			}
 
			if(paddata.Ly > 220) { // Si el 'AnalogicPad.Y' tiene un valor negativo (pad anal¨®gico hacia abajo) ...
				if(brillo >= 5){ // Si el nivel de brillo es mayor o igual que 5 ...
					brillo = brillo - 4; // La varible 'brillo' ser¨¢ igual al valor actual de 'brillo' - 5 ...
					sceDisplaySetBrightness(brillo, 0); // Establecemos el nivel de brillo de la pantalla seg¨²n la variable 'brillo'
					LEDs();
				}
			}
 
		}
 
		sceDisplaySetBrightness(brillo, 0);
		/*
		Esta linea en el bucle infinito sirve para que, aunque apaguemos la pantalla mantiendo la tecla
		'SCREEN', al volver a encenderla, vuelva a estar con el brillo que la dejamos. Sin esto,
		si apagásemos la pantalla, al encenderla de nuevo pulsando 'SCREEN' el brillo se setear¨ªa
		a uno de los niveles por defecto (el m¨ªnimo, seg¨²n mis testeos).
		*/
 
		sceKernelDelayThread(5000);
 
	}
 
	return 0; // Devolvemos 0 para cerrar el thread
 
}
 
int only_leds() {
 
	conf();
 
	while(1) {
		LEDs();
		sceKernelDelayThread(1000 * 1000);
	}
 
}
 
int module_start(SceSize argc, void *argp) {
 
	SceUID thid;
 
	if(sceIoFileExists("ms0:/seplugins/bc_onlyleds.txt") == 1) {
		thid = sceKernelCreateThread("X", only_leds, 0x10, 0x1000, 0, 0);
	} else {
		int check = InitForKernel_7233B5BC();
		if(check == PSP_INIT_KEYCONFIG_VSH){
			thid = sceKernelCreateThread("X", xmb, 0x10, 0x1000, 0, 0);
		} else {
			thid = sceKernelCreateThread("X", game, 0x10, 0x1000, 0, 0);
		}
	}
 
	if(thid >= 0) sceKernelStartThread(thid, argc, argp);
 
	return 0;
}
 
int module_stop(SceSize argc, void *argp) {
	return 0;
}

Makefile v0.2

TARGET = BrightControler
OBJS = main.o
 
INCDIR = 
CFLAGS = -O2 -G0 -Wall
CXXFLAGS = $(CFLAGS) -fno-exceptions -fno-rtti
ASFLAGS = $(CFLAGS)
 
LIBDIR =
LDFLAGS =
 
LIBS = -lpspkernel -lpspdisplay
 
USE_KERNEL_LIBC = 1
USE_KERNEL_LIBS = 1
 
BUILD_PRX = 1
 
PSP_FW_VERSION = 500
 
PSPSDK=$(shell psp-config --pspsdk-path)
include $(PSPSDK)/lib/build_prx.mak

main.c v0.2

/*
	*** dj51_Shura ***
 
	>>> Visit www.mhypnok.blogspot.com
 
	--------------------------------------------------------------------------------------------------------------
 
	BrightControler plugin for XMB & GAME & POPS
 
	--------------------------------------------------------------------------------------------------------------
 
	version 0.2. All rights reserved.
 
	--------------------------------------------------------------------------------------------------------------
 
	This prx module allows you to adjuste the bright level between
	5 and 100 percent, using the analogic stick.
*/
 
#include <pspkernel.h> // The basic library xD
#include <pspdebug.h> // The Debug Utility Library
 
#include <pspctrl.h> // The Controller Kernel Library
 
#include <pspdisplay.h> // Library for manage display functions
#include <pspdisplay_kernel.h>
 
#include <pspsyscon.h> // Library for manage power functions
#include <pspinit.h> // Library which allow us to know if our plugin is started by the VSH, a GAME or a POPS
 
#include <pspthreadman.h>
 
PSP_MODULE_INFO("BC", 0x1000, 2, 0); // Main thread name: "BC", Thread mode: Kernel Mode, Major version: 2, Minor version: 0
PSP_MAIN_THREAD_ATTR(0); // DON'T convert the main thread into User Mode
PSP_HEAP_SIZE_KB(8); // Use 8 KB of the system memory
 
#define MS_LED 0
#define WLAN_LED 1
#define POWER_LED 2
 
#define STATE_ON 1
#define STATE_OFF 0
 
char config_readed[22];
 
void LEDs() {
	sceSysconCtrlLED(POWER_LED, STATE_OFF); // Apagamos el LED de POWER (esto no afecta si se conecta el cable de alimentaci¨®n)
	sceSysconCtrlLED(WLAN_LED, STATE_OFF); // Apagamos el LED de WLAN
	//sceSysconCtrlLED(MS_LED, STATE_OFF); // Apagamos el LED de acceso a la memory stick
}
 
int xmb() {
	int brillo; // Creamos una variable vac¨ªa 'brillo'
	sceDisplayGetBrightness(&brillo,0); // Asignamos el nivel de brillo actual a la variable 'brillo'
 
	SceCtrlData paddata; // Asignamos la lectura de los controles a la variable 'pad'
	sceCtrlSetSamplingCycle(0);
	sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); // Establecemos el modo de los controles
 
	while(1) {
		sceCtrlPeekBufferPositive(&paddata, 1); // Asignamos la lectura de los controles a la variable 'pad'
			if(paddata.Ly < 60) { // Si el 'AnalogicPad.Y' tiene un valor negativo (pad anal¨®gico hacia abajo) ...
				if(brillo <= 95){ // Si el nivel de brillo es menor o igual que 95 ...
					brillo = brillo + 5; // La varible 'brillo' ser¨¢ igual al valor actual de 'brillo' + 5 ...
					sceDisplaySetBrightness(brillo,0); // Establecemos el nivel de brillo de la pantalla seg¨²n la variable 'brillo'
				}
				LEDs();
			}
			if(paddata.Ly > 220) { // Si el 'AnalogicPad.Y' tiene un valor negativo (pad anal¨®gico hacia abajo) ...
				if(brillo >= 10){ // Si el nivel de brillo es mayor o igual que 5 ...
					brillo = brillo - 5; // La varible 'brillo' ser¨¢ igual al valor actual de 'brillo' - 5 ...
					sceDisplaySetBrightness(brillo,0); // Establecemos el nivel de brillo de la pantalla seg¨²n la variable 'brillo'
				}
				LEDs();
			}
			sceDisplaySetBrightness(brillo,0);
			/*
			Esta linea en el bucle infinito sirve para que, aunque apaguemos la pantalla mantiendo la tecla
			'SCREEN', al volver a encenderla, vuelva a estar con el brillo que la dejamos. Sin esto,
			si apag¨¢semos la pantalla, al encenderla de nuevo pulsando 'SCREEN' el brillo se setear¨ªa
			a uno de los niveles por defecto (el m¨ªnimo, seg¨²n mis testeos).
			*/
			sceKernelDelayThread(10000);  // Esto evitar¨¢ el crasheo (freezeo) de la PSP ...
	}
	return 0; // Devolvemos 0 para cerrar el thread
}
 
int game() {
	int brillo; // Creamos una variable vac¨ªa 'brillo'
	sceDisplayGetBrightness(&brillo,0); // Asignamos el nivel de brillo actual a la variable 'brillo'
 
	SceCtrlData paddata; // Asignamos la lectura de los controles a la variable 'pad'
	sceCtrlSetSamplingCycle(0);
	sceCtrlSetSamplingMode(PSP_CTRL_MODE_ANALOG); // Establecemos el modo de los controles
 
	while(1) {
		sceCtrlPeekBufferPositive(&paddata, 1); // Asignamos la lectura de los controles a la variable 'pad'
			if(paddata.Buttons & PSP_CTRL_SELECT) {
				if(paddata.Ly < 60) { // Si el 'AnalogicPad.Y' tiene un valor negativo (pad anal¨®gico hacia abajo) ...
					if(brillo <= 95){ // Si el nivel de brillo es menor o igual que 95 ...
						brillo = brillo + 5; // La varible 'brillo' ser¨¢ igual al valor actual de 'brillo' + 5 ...
						sceDisplaySetBrightness(brillo,0); // Establecemos el nivel de brillo de la pantalla seg¨²n la variable 'brillo'
					}
					LEDs();
				}
				if(paddata.Ly > 220) { // Si el 'AnalogicPad.Y' tiene un valor negativo (pad anal¨®gico hacia abajo) ...
					if(brillo >= 10){ // Si el nivel de brillo es mayor o igual que 5 ...
						brillo = brillo - 5; // La varible 'brillo' ser¨¢ igual al valor actual de 'brillo' - 5 ...
						sceDisplaySetBrightness(brillo,0); // Establecemos el nivel de brillo de la pantalla seg¨²n la variable 'brillo'
					}
					LEDs();
				}
			}
			sceDisplaySetBrightness(brillo,0);
			/*
			Esta linea en el bucle infinito sirve para que, aunque apaguemos la pantalla mantiendo la tecla
			'SCREEN', al volver a encenderla, vuelva a estar con el brillo que la dejamos. Sin esto,
			si apag¨¢semos la pantalla, al encenderla de nuevo pulsando 'SCREEN' el brillo se setear¨ªa
			a uno de los niveles por defecto (el m¨ªnimo, seg¨²n mis testeos).
			*/
			sceKernelDelayThread(50000);  // Esto evitar¨¢ el crasheo (freezeo) de la PSP ...
	}
	return 0; // Devolvemos 0 para cerrar el thread
}
 
int module_start(SceSize argc, void *argp) {
 
	SceUID thid;
 
	int check = InitForKernel_7233B5BC();
	if(check == PSP_INIT_KEYCONFIG_VSH){
		thid = sceKernelCreateThread("X", xmb, 0x10, 4096, 0, 0);
	} else {
		thid = sceKernelCreateThread("X", game, 0x10, 4096, 0, 0);
	}
 
	if(thid >= 0) sceKernelStartThread(thid, argc, argp);
 
	return 0;
}
 
int module_stop(SceSize argc, void *argp) {
	return 0;
}

GRACIAS Y UN SALUDO A TODOS!


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

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


Anuncios Google