PS3: WIP on keyboard support

This commit is contained in:
UnknownShadow200 2023-12-06 23:39:44 +11:00
parent b4c30b7122
commit fba5faa5ee
5 changed files with 61 additions and 13 deletions

View file

@ -6,6 +6,9 @@
ifeq ($(strip $(PS3DEV)),)
$(error "Please set PS3DEV in your environment. export PS3DEV=<path>")
endif
ifeq ($(strip $(PSL1GHT)),)
$(error "Please set PSL1GHT in your environment. export PSL1GHT=<path>")
endif
include $(PS3DEV)/ppu_rules

View file

@ -288,6 +288,7 @@ void Waitable_WaitFor(void* handle, cc_uint32 milliseconds) {
union SocketAddress {
struct sockaddr raw;
struct sockaddr_in v4;
struct sockaddr_storage total; // matches max size of addr returned by getaddrinfo
};
static int ParseHost(union SocketAddress* addr, const char* host) {

View file

@ -463,7 +463,7 @@ static void Networking_LoadIOPModules(void) {
union SocketAddress {
struct sockaddr raw;
struct sockaddr_in v4;
struct sockaddr_storage total; // matches size of addr returned by getaddrinfo
struct sockaddr_storage total; // matches max size of addr returned by getaddrinfo
};
static int ParseHost(union SocketAddress* addr, const char* host) {

View file

@ -393,8 +393,8 @@ static void InitNetworking(void) {
SceNetInitParam param;
param.memory = net_memory;
param.size = sizeof(net_memory);
param.flags = 0;
param.size = sizeof(net_memory);
param.flags = 0;
int ret = sceNetInit(&param);
if (ret < 0) Platform_Log1("Network init failed: %i", &ret);

View file

@ -17,10 +17,11 @@
#include <sysutil/video.h>
static cc_bool launcherMode;
static padInfo pad_info;
static padData pad_data;
static KbInfo kb_info;
static KbData kb_data;
static padInfo pad_info;
static padData pad_data;
static KbInfo kb_info;
static KbData kb_data;
static KbConfig kb_config;
struct _DisplayData DisplayInfo;
struct _WinData WindowInfo;
@ -62,7 +63,8 @@ void Window_Init(void) {
DisplayInfo.ContentOffsetY = 10;
ioPadInit(MAX_PORT_NUM);
//ioKbInit(MAX_KB_PORT_NUM);
ioKbInit(MAX_KB_PORT_NUM);
ioKbGetConfiguration(0, &kb_config);
}
void Window_Create2D(int width, int height) {
@ -91,6 +93,41 @@ void Window_Close(void) {
}
/*########################################################################################################################*
*--------------------------------------------------Keyboard processing----------------------------------------------------*
*#########################################################################################################################*/
static KbMkey old_mods;
#define ToggleMod(field, btn) if (diff._KbMkeyU._KbMkeyS. field) Input_Set(btn, mods->_KbMkeyU._KbMkeyS. field);
static void ProcessKBModifiers(KbMkey* mods) {
KbMkey diff;
diff._KbMkeyU.mkeys = mods->_KbMkeyU.mkeys ^ old_mods._KbMkeyU.mkeys;
ToggleMod(l_alt, CCKEY_LALT);
ToggleMod(r_alt, CCKEY_RALT);
ToggleMod(l_ctrl, CCKEY_LCTRL);
ToggleMod(r_ctrl, CCKEY_RCTRL);
ToggleMod(l_shift, CCKEY_LSHIFT);
ToggleMod(r_shift, CCKEY_RSHIFT);
ToggleMod(l_win, CCKEY_LWIN);
ToggleMod(r_win, CCKEY_RWIN);
old_mods = *mods;
}
// TODO ProcessKBButtons()
// TODO: Call at init ioKbSetCodeType(0, KB_CODETYPE_RAW); ioKbSetReadMode(0, KB_RMODE_INPUTCHAR);
static void ProcessKBTextInput(void) {
for (int i = 0; i < kb_data.nb_keycode; i++)
{
int rawcode = kb_data.keycode[i];
if (!rawcode) continue;
int unicode = ioKbCnvRawCode(kb_config.mapping, kb_data.mkey, kb_data.led, rawcode);
char C = unicode;
//Platform_Log4("%i --> %i / %h / %r", &rawcode, &unicode, &unicode, &C);
}
}
/*########################################################################################################################*
*----------------------------------------------------Input processing-----------------------------------------------------*
*#########################################################################################################################*/
@ -114,6 +151,7 @@ static void HandleButtons(padData* data) {
Input_SetNonRepeatable(CCPAD_ZL, data->BTN_L2);
Input_SetNonRepeatable(CCPAD_ZR, data->BTN_R2);
}
static void HandleJoystick_Left(int x, int y) {
if (Math_AbsI(x) <= 32) x = 0;
if (Math_AbsI(y) <= 32) y = 0;
@ -122,6 +160,7 @@ static void HandleJoystick_Left(int x, int y) {
Input.JoystickMovement = true;
Input.JoystickAngle = Math_Atan2(x, -y);
}
static void HandleJoystick_Right(int x, int y, double delta) {
float scale = (delta * 60.0) / 64.0f;
@ -137,6 +176,7 @@ static void ProcessPadInput(double delta, padData* pad) {
HandleJoystick_Right(pad->ANA_R_H - 0x80, pad->ANA_R_V - 0x80, delta);
}
void Window_ProcessEvents(double delta) {
Input.JoystickMovement = false;
@ -146,11 +186,15 @@ void Window_ProcessEvents(double delta) {
ProcessPadInput(delta, &pad_data);
}
//ioKbGetInfo(&kb_info);
//if (kb_info.status[0]) {
// int RES = ioKbRead(0, &kb_data);
// Platform_Log1("RES: %i", &RES);
//}
// TODO set InputSource keyboard
ioKbGetInfo(&kb_info);
if (kb_info.status[0]) {
int res = ioKbRead(0, &kb_data);
if (res == 0 && kb_data.nb_keycode > 0) {
ProcessKBModifiers(&kb_data.mkey);
ProcessKBTextInput();
}
}
}
void Cursor_SetPosition(int x, int y) { } // Makes no sense for PS Vita