|
Программирование для PSP Вы программист? Welcome сюда... |
31.01.2021, 21:36
|
Сообщение: #1 (1231425)
|
Регистрация: 15.01.2021
Возраст: 34
Сообщений: 3
Вы сказали Спасибо: 0
Поблагодарили 0 раз(а) в 0 сообщениях
Сила репутации: 0Репутация: 0 
(пока ничем не отличился)
|
Callback on resume from sleep
ENG:
Sorry If I write here but this seems the most active community.
I wrote a plugin to keep all leds of, it works and now I'm just fixing some minor stuffs...
This is the code:
#include <pspsyscon.h>
#include "systemctrl.h"
#define UNUSED __attribute__((unused))
#define SYSCON_CTRL_LED_SUCCES 0
#define NO_ERROR 0
PSP_MODULE_INFO("noLED", 0x1000, 1, 0);
PSP_MAIN_THREAD_ATTR(0);
int sceSysconCtrlLED_nop(int SceLED UNUSED, int state UNUSED)
{
return SYSCON_CTRL_LED_SUCCES;
}
int module_start(SceSize args UNUSED, void *argp UNUSED)
{
sceSysconCtrlLED(0, LED_OFF);
sceSysconCtrlLED(1, LED_OFF);
sceSysconCtrlLED(2, LED_OFF);
sceSysconCtrlLED(3, LED_OFF);
u32 address = sctrlHENFindFunction("sceSyscon_driver", "sceSysconCtrlLED", 0x18BFBE65);
if (address)
{
sctrlHENPatchSyscall(address, sceSysconCtrlLED_nop);
}
return NO_ERROR;
}
int module_stop(SceSize args UNUSED, void *argp UNUSED)
{
return NO_ERROR;
}
It simply turn off al leds and redirect all subsequent sceSysconCtrlLED calls to a function that does nothing.
I have 2 question: - Online I see that when some call redirect is done usually the patching process is placed between this code:
int intr = sceKernelCpuSuspendIntr(); // suspend interrupts
// < patching code here >
sceKernelDcacheWritebackAll(); // clear cache
sceKernelIcacheClearAll(); // clear cache
sceKernelCpuResumeIntr(intr); // suspend interrupts
Why do this?
- When I PSP resume after sleep/suspend the patch is "gone"... This should be simple to fix by symply calling the patching code again when the PSP resume from suspend, but I do not know how to do it. I saw some call back example online but nothing on "calling a function" when the PSP resume from sleep.
RUS (Translated with Google Translate):
Извините, если я напишу здесь, но это кажется наиболее активным сообществом.
Я написал плагин, чтобы сохранить все светодиоды, он работает, и теперь я просто исправляю некоторые мелочи ...
Это код:
#include <pspsyscon.h>
#include "systemctrl.h"
#define UNUSED __attribute__((unused))
#define SYSCON_CTRL_LED_SUCCES 0
#define NO_ERROR 0
PSP_MODULE_INFO("noLED", 0x1000, 1, 0);
PSP_MAIN_THREAD_ATTR(0);
int sceSysconCtrlLED_nop(int SceLED UNUSED, int state UNUSED)
{
return SYSCON_CTRL_LED_SUCCES;
}
int module_start(SceSize args UNUSED, void *argp UNUSED)
{
sceSysconCtrlLED(0, LED_OFF);
sceSysconCtrlLED(1, LED_OFF);
sceSysconCtrlLED(2, LED_OFF);
sceSysconCtrlLED(3, LED_OFF);
u32 address = sctrlHENFindFunction("sceSyscon_driver", "sceSysconCtrlLED", 0x18BFBE65);
if (address)
{
sctrlHENPatchSyscall(address, sceSysconCtrlLED_nop);
}
return NO_ERROR;
}
int module_stop(SceSize args UNUSED, void *argp UNUSED)
{
return NO_ERROR;
}
Он просто отключает все светодиоды и перенаправляет все последующие вызовы sceSysconCtrlLED на функцию, которая ничего не делает.
У меня 2 вопроса: - В сети я вижу, что когда выполняется какое-то перенаправление вызовов, обычно процесс исправления помещается между этим кодом:
int intr = sceKernelCpuSuspendIntr(); // suspend interrupts
// < patching code here >
sceKernelDcacheWritebackAll(); // clear cache
sceKernelIcacheClearAll(); // clear cache
sceKernelCpuResumeIntr(intr); // suspend interrupts
Зачем это нужно?
- Когда я возобновляю PSP после сна / приостановки, патч "ушел" ... Это должно быть просто исправить, снова вызывая исправляющий код, когда PSP возобновляет работу из приостановки, но я не знаю, как это сделать. Я видел несколько примеров обратного вызова в сети, но ничего не касалось «вызова функции», когда PSP выходит из спящего режима.
|
|
|
31.01.2021, 22:17
|
Сообщение: #2 (1231427)
|
Модель консоли: PSP-1004
Прошивка: 6.61 PROMOD-C2p
Другие консоли: Все PSP, все PSV, SCPH-1002, SCPH-102, SCPH-77008, CECH-4208C, SCPH-1000R
Регистрация: 19.03.2008
Адрес: Россия
Сообщений: 5,734
Вы сказали Спасибо: 819
Поблагодарили 3,835 раз(а) в 2,013 сообщениях
Сила репутации: 1Репутация: 3835 
(репутация неоспорима)
|
Последний раз редактировалось Yoti; 01.02.2021 в 00:45.
|
|
|
Здесь присутствуют: 1 (пользователей: 0 , гостей: 1)
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Текущее время: 09:01. Часовой пояс GMT +3.
Powered by vBulletin® Version 3.8.7 Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.
|
|
|