PSPx форум

PSPx форум (https://www.pspx.ru/forum/index.php)
-   Программирование для PSP (https://www.pspx.ru/forum/forumdisplay.php?f=101)
-   -   Коды кнопок PSP (https://www.pspx.ru/forum/showthread.php?t=85749)

ErikPshat 06.01.2010 13:36

Коды кнопок PSP
 
Код:

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,
что значит "зажатие"? Пока держишь, код клавиши в переменной. Отпустил - код вычли.


Текущее время: 04:00. Часовой пояс GMT +3.

Powered by vBulletin® Version 3.8.7
Copyright ©2000 - 2024, vBulletin Solutions, Inc. Перевод: zCarot
PSPx Forum - Сообщество фанатов игровых консолей.