PDA

Просмотр полной версии : Коды кнопок PSP


ErikPshat
06.01.2010, 13:36
PSP_CTRL_SELECT => 0x00000001
PSP_CTRL_START => 0x00000008
PSP_CTRL_UP => 0x00000010
PSP_CTRL_RIGHT => 0x00000020
PSP_CTRL_DOWN => 0x00000040
PSP_CTRL_LEFT => 0x00000080
PSP_CTRL_LTRIGGER => 0x00000100
PSP_CTRL_RTRIGGER => 0x00000200
PSP_CTRL_TRIANGLE => 0x00001000
PSP_CTRL_CIRCLE => 0x00002000
PSP_CTRL_CROSS => 0x00004000
PSP_CTRL_SQUARE => 0x00008000
PSP_CTRL_HOME => 0x00010000 // только в режиме ядра либо в user на ядре 6.xx
PSP_CTRL_HOLD => 0x00020000
PSP_CTRL_NOTE => 0x00800000
PSP_CTRL_SCREEN => 0x00400000 // только в режиме ядра
PSP_CTRL_VOLUP => 0x00100000 // только в режиме ядра
PSP_CTRL_VOLDOWN => 0x00200000 // только в режиме ядра
PSP_CTRL_WLAN_UP => 0x00040000 // только в режиме ядра
PSP_CTRL_REMOTE => 0x00080000 // только в режиме ядра
PSP_CTRL_DISC => 0x01000000 // только в режиме ядра
PSP_CTRL_MS => 0x02000000 // только в режиме ядра


Сочетание кнопок происходит путём сложения их байтов, например:

PSP_CTRL_VOLUP + PSP_CTRL_VOLDOWN = 0х100000 + 0х200000 = 0х300000


PSP_CTRL_HOME + PSP_CTRL_START = 0x010000 + 0x000008 = 0x010008


PSP_CTRL_LTRIGGER + PSP_CTRL_CROSS = 0x000100 + 0x004000 = 0x004100





Пример использования в кодах программ:


while(!done)
{
pspDebugScreenSetXY(0, 2);

sceCtrlReadBufferPositive(&pad, 1);

printf("Analog X = %d ", pad.Lx);
printf("Analog Y = %d \n", pad.Ly);

if (pad.Buttons != 0)
{
if (pad.Buttons & PSP_CTRL_SQUARE)
{
printf("Нажата кнопка Квадрат \n");
}
if (pad.Buttons & PSP_CTRL_TRIANGLE)
{
printf("Нажата кнопка Треугольник \n");
}
if (pad.Buttons & PSP_CTRL_CIRCLE)
{
printf("Нажата кнопка Круг \n");
}
if (pad.Buttons & PSP_CTRL_CROSS)
{
printf("Нажата кнопка Крест \n");
}

if (pad.Buttons & PSP_CTRL_UP)
{
printf("Нажата кнопка Вверх \n");
}
if (pad.Buttons & PSP_CTRL_DOWN)
{
printf("Нажата кнопка Вниз \n");
}
if (pad.Buttons & PSP_CTRL_LEFT)
{
printf("Нажата кнопка Влево \n");
}
if (pad.Buttons & PSP_CTRL_RIGHT)
{
printf("Нажата кнопка Вправо \n");
}

if (pad.Buttons & PSP_CTRL_START)
{
printf("Нажата кнопка START \n");
}
if (pad.Buttons & PSP_CTRL_SELECT)
{
printf("Нажата кнопка SELECT \n");
}
if (pad.Buttons & PSP_CTRL_LTRIGGER)
{
printf("Нажата кнопка Левый триггер \n");
}
if (pad.Buttons & PSP_CTRL_RTRIGGER)
{
printf("Нажата кнопка Правый триггер \n");
}
}
}

~cHendler~
09.01.2010, 20:20
А с "аналогом" как быть?

ivy
09.01.2010, 21:13
~cHendler~,
pad.Lx, pad.Ly соответственно оси X и Y. Значение после "sceCtrlReadBufferPositive(&pad, 1);" изменяется от -128 до 127. Где ноль это центр джойстика. При этом учитывай некоторую мертвую зону, где-то в 20-50 единиц.

Vcardpsp
07.02.2010, 23:39
а кнопки типа (volup voldown hold screen note etc..) в юсер можно доставать с помошью модулей, которые не посредственно грузятся в кернел!

st1x51
18.05.2013, 13:39
хм,а зажатие кнопки как реализовывается?)

Yoti
19.05.2013, 00:28
st1x51,
что значит "зажатие"? Пока держишь, код клавиши в переменной. Отпустил - код вычли.