mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-04-20 03:25:16 +00:00
mem_class_t eliminated
It didn't work for some reasons anyway,
This commit is contained in:
parent
f6bb62a76c
commit
b37f3e1b93
14 changed files with 207 additions and 163 deletions
|
@ -18,8 +18,8 @@ public:
|
|||
std::vector<Keyboard>& GetKeyboards() { return m_keyboard_handler->GetKeyboards(); }
|
||||
KbInfo& GetInfo() { return m_keyboard_handler->GetInfo(); }
|
||||
std::vector<KbButton>& GetButtons(const u32 keyboard) { return m_keyboard_handler->GetButtons(keyboard); }
|
||||
CellKbData& GetData(const u32 keyboard) { return m_keyboard_handler->GetData(keyboard); }
|
||||
CellKbConfig& GetConfig(const u32 keyboard) { return m_keyboard_handler->GetConfig(keyboard); }
|
||||
KbData& GetData(const u32 keyboard) { return m_keyboard_handler->GetData(keyboard); }
|
||||
KbConfig& GetConfig(const u32 keyboard) { return m_keyboard_handler->GetConfig(keyboard); }
|
||||
|
||||
bool IsInited() const { return m_inited; }
|
||||
};
|
||||
|
|
|
@ -191,26 +191,25 @@ enum CellKbMappingType
|
|||
CELL_KB_MAPPING_PORTUGUESE_BRAZIL,
|
||||
};
|
||||
|
||||
static const u32 CELL_KB_MAX_KEYBOARDS = 127;
|
||||
static const u32 CELL_KB_MAX_PORT_NUM = 7;
|
||||
static const u32 CELL_KB_MAX_KEYCODES = 62;
|
||||
static const u32 KB_MAX_KEYBOARDS = 127;
|
||||
static const u32 KB_MAX_KEYCODES = 62;
|
||||
|
||||
struct KbInfo
|
||||
{
|
||||
u32 max_connect;
|
||||
u32 now_connect;
|
||||
u32 info;
|
||||
u8 status[CELL_KB_MAX_KEYBOARDS];
|
||||
u8 status[KB_MAX_KEYBOARDS];
|
||||
};
|
||||
|
||||
struct CellKbData
|
||||
struct KbData
|
||||
{
|
||||
u32 led;
|
||||
u32 mkey;
|
||||
s32 len;
|
||||
u16 keycode[CELL_KB_MAX_KEYCODES];
|
||||
u16 keycode[KB_MAX_KEYCODES];
|
||||
|
||||
CellKbData()
|
||||
KbData()
|
||||
: led(0)
|
||||
, mkey(0)
|
||||
, len(0)
|
||||
|
@ -218,13 +217,13 @@ struct CellKbData
|
|||
}
|
||||
};
|
||||
|
||||
struct CellKbConfig
|
||||
struct KbConfig
|
||||
{
|
||||
u32 arrange;
|
||||
u32 read_mode;
|
||||
u32 code_type;
|
||||
|
||||
CellKbConfig()
|
||||
KbConfig()
|
||||
: arrange(CELL_KB_MAPPING_106)
|
||||
, read_mode(CELL_KB_RMODE_INPUTCHAR)
|
||||
, code_type(CELL_KB_CODETYPE_ASCII)
|
||||
|
@ -248,8 +247,8 @@ struct KbButton
|
|||
|
||||
struct Keyboard
|
||||
{
|
||||
CellKbData m_data;
|
||||
CellKbConfig m_config;
|
||||
KbData m_data;
|
||||
KbConfig m_config;
|
||||
std::vector<KbButton> m_buttons;
|
||||
|
||||
Keyboard()
|
||||
|
@ -278,8 +277,8 @@ public:
|
|||
if(button.m_keyCode != code)
|
||||
continue;
|
||||
|
||||
CellKbData& data = keyboard.m_data;
|
||||
CellKbConfig& config = keyboard.m_config;
|
||||
KbData& data = keyboard.m_data;
|
||||
KbConfig& config = keyboard.m_config;
|
||||
|
||||
if (pressed)
|
||||
{
|
||||
|
@ -305,7 +304,7 @@ public:
|
|||
{
|
||||
kcode = cellKbCnvRawCode(config.arrange, data.mkey, data.led, button.m_outKeyCode);
|
||||
}
|
||||
data.keycode[data.len % CELL_KB_MAX_KEYCODES] = kcode;
|
||||
data.keycode[data.len % KB_MAX_KEYCODES] = kcode;
|
||||
data.len++;
|
||||
}
|
||||
}
|
||||
|
@ -327,6 +326,6 @@ public:
|
|||
KbInfo& GetInfo() { return m_info; }
|
||||
std::vector<Keyboard>& GetKeyboards() { return m_keyboards; }
|
||||
std::vector<KbButton>& GetButtons(const u32 keyboard) { return m_keyboards[keyboard].m_buttons; }
|
||||
CellKbData& GetData(const u32 keyboard) { return m_keyboards[keyboard].m_data; }
|
||||
CellKbConfig& GetConfig(const u32 keyboard) { return m_keyboards[keyboard].m_config; }
|
||||
KbData& GetData(const u32 keyboard) { return m_keyboards[keyboard].m_data; }
|
||||
KbConfig& GetConfig(const u32 keyboard) { return m_keyboards[keyboard].m_config; }
|
||||
};
|
|
@ -17,8 +17,8 @@ public:
|
|||
|
||||
std::vector<Mouse>& GetMice() { return m_mouse_handler->GetMice(); }
|
||||
MouseInfo& GetInfo() { return m_mouse_handler->GetInfo(); }
|
||||
CellMouseData& GetData(const u32 mouse) { return m_mouse_handler->GetData(mouse); }
|
||||
CellMouseRawData& GetRawData(const u32 mouse) { return m_mouse_handler->GetRawData(mouse); }
|
||||
MouseData& GetData(const u32 mouse) { return m_mouse_handler->GetData(mouse); }
|
||||
MouseRawData& GetRawData(const u32 mouse) { return m_mouse_handler->GetRawData(mouse); }
|
||||
|
||||
bool IsInited() const { return m_inited; }
|
||||
};
|
||||
|
|
|
@ -26,32 +26,32 @@ enum MouseButtonCodes
|
|||
CELL_MOUSE_BUTTON_8 = 0x00000080,
|
||||
};
|
||||
|
||||
static const u32 CELL_MAX_MICE = 127;
|
||||
static const u32 CELL_MOUSE_MAX_DATA_LIST_NUM = 8;
|
||||
static const u32 CELL_MOUSE_MAX_CODES = 64;
|
||||
static const u32 MAX_MICE = 127;
|
||||
static const u32 MOUSE_MAX_DATA_LIST_NUM = 8;
|
||||
static const u32 MOUSE_MAX_CODES = 64;
|
||||
|
||||
struct MouseInfo
|
||||
{
|
||||
u32 max_connect;
|
||||
u32 now_connect;
|
||||
u32 info;
|
||||
u16 vendor_id[CELL_MAX_MICE];
|
||||
u16 product_id[CELL_MAX_MICE];
|
||||
u8 status[CELL_MAX_MICE];
|
||||
u16 vendor_id[MAX_MICE];
|
||||
u16 product_id[MAX_MICE];
|
||||
u8 status[MAX_MICE];
|
||||
};
|
||||
|
||||
struct CellMouseRawData
|
||||
struct MouseRawData
|
||||
{
|
||||
s32 len;
|
||||
u8 data[CELL_MOUSE_MAX_CODES];
|
||||
u8 data[MOUSE_MAX_CODES];
|
||||
|
||||
CellMouseRawData()
|
||||
MouseRawData()
|
||||
: len(0)
|
||||
{
|
||||
}
|
||||
};
|
||||
|
||||
struct CellMouseData
|
||||
struct MouseData
|
||||
{
|
||||
u8 update;
|
||||
u8 buttons;
|
||||
|
@ -60,7 +60,7 @@ struct CellMouseData
|
|||
s8 wheel;
|
||||
s8 tilt; // (TODO)
|
||||
|
||||
CellMouseData()
|
||||
MouseData()
|
||||
: update(0)
|
||||
, buttons(0)
|
||||
, x_axis(0)
|
||||
|
@ -71,12 +71,12 @@ struct CellMouseData
|
|||
}
|
||||
};
|
||||
|
||||
struct CellMouseDataList
|
||||
struct MouseDataList
|
||||
{
|
||||
u32 list_num;
|
||||
CellMouseData list[CELL_MOUSE_MAX_DATA_LIST_NUM];
|
||||
MouseData list[MOUSE_MAX_DATA_LIST_NUM];
|
||||
|
||||
CellMouseDataList()
|
||||
MouseDataList()
|
||||
: list_num(0)
|
||||
{
|
||||
}
|
||||
|
@ -87,8 +87,8 @@ struct Mouse
|
|||
s16 x_pos;
|
||||
s16 y_pos;
|
||||
|
||||
CellMouseData m_data;
|
||||
CellMouseRawData m_rawdata;
|
||||
MouseData m_data;
|
||||
MouseRawData m_rawdata;
|
||||
|
||||
Mouse()
|
||||
: m_data()
|
||||
|
@ -113,7 +113,7 @@ public:
|
|||
{
|
||||
if (m_info.status[p] == CELL_MOUSE_STATUS_CONNECTED)
|
||||
{
|
||||
CellMouseData& data = GetData(p);
|
||||
MouseData& data = GetData(p);
|
||||
data.update = CELL_MOUSE_DATA_UPDATE;
|
||||
if (pressed) data.buttons |= button;
|
||||
else data.buttons &= ~button;
|
||||
|
@ -127,7 +127,7 @@ public:
|
|||
{
|
||||
if (m_info.status[p] == CELL_MOUSE_STATUS_CONNECTED)
|
||||
{
|
||||
CellMouseData& data = GetData(p);
|
||||
MouseData& data = GetData(p);
|
||||
data.update = CELL_MOUSE_DATA_UPDATE;
|
||||
data.wheel = rotation/120; //120=event.GetWheelDelta()
|
||||
}
|
||||
|
@ -140,7 +140,7 @@ public:
|
|||
{
|
||||
if (m_info.status[p] == CELL_MOUSE_STATUS_CONNECTED)
|
||||
{
|
||||
CellMouseData& data = GetData(p);
|
||||
MouseData& data = GetData(p);
|
||||
data.update = CELL_MOUSE_DATA_UPDATE;
|
||||
data.x_axis += x_pos_new - m_mice[p].x_pos;
|
||||
data.y_axis += y_pos_new - m_mice[p].y_pos;
|
||||
|
@ -157,6 +157,6 @@ public:
|
|||
|
||||
MouseInfo& GetInfo() { return m_info; }
|
||||
std::vector<Mouse>& GetMice() { return m_mice; }
|
||||
CellMouseData& GetData(const u32 mouse) { return m_mice[mouse].m_data; }
|
||||
CellMouseRawData& GetRawData(const u32 mouse) { return m_mice[mouse].m_rawdata; }
|
||||
MouseData& GetData(const u32 mouse) { return m_mice[mouse].m_data; }
|
||||
MouseRawData& GetRawData(const u32 mouse) { return m_mice[mouse].m_rawdata; }
|
||||
};
|
|
@ -745,39 +745,6 @@ public:
|
|||
}
|
||||
};
|
||||
|
||||
class mem_class_t
|
||||
{
|
||||
u32 m_addr;
|
||||
|
||||
public:
|
||||
mem_class_t(u32 addr) : m_addr(addr)
|
||||
{
|
||||
}
|
||||
|
||||
mem_class_t() : m_addr(0)
|
||||
{
|
||||
}
|
||||
|
||||
template<typename T> u32 operator += (T right)
|
||||
{
|
||||
mem_t<T>& m((mem_t<T>&)*this);
|
||||
m = right;
|
||||
m_addr += sizeof(T);
|
||||
return m_addr;
|
||||
}
|
||||
|
||||
template<typename T> operator T()
|
||||
{
|
||||
mem_t<T>& m((mem_t<T>&)*this);
|
||||
const T ret = m;
|
||||
m_addr += sizeof(T);
|
||||
return ret;
|
||||
}
|
||||
|
||||
u64 GetAddr() const { return m_addr; }
|
||||
void SetAddr(const u64 addr) { m_addr = addr; }
|
||||
};
|
||||
|
||||
template<typename T>
|
||||
struct _func_arg
|
||||
{
|
||||
|
|
|
@ -4,21 +4,10 @@
|
|||
#include "Emu/SysCalls/Modules.h"
|
||||
|
||||
#include "Emu/Io/Keyboard.h"
|
||||
#include "SC_Keyboard.h"
|
||||
|
||||
extern Module *sys_io;
|
||||
|
||||
enum CELL_KB_ERROR_CODE
|
||||
{
|
||||
CELL_KB_ERROR_FATAL = 0x80121001,
|
||||
CELL_KB_ERROR_INVALID_PARAMETER = 0x80121002,
|
||||
CELL_KB_ERROR_ALREADY_INITIALIZED = 0x80121003,
|
||||
CELL_KB_ERROR_UNINITIALIZED = 0x80121004,
|
||||
CELL_KB_ERROR_RESOURCE_ALLOCATION_FAILED = 0x80121005,
|
||||
CELL_KB_ERROR_READ_FAILED = 0x80121006,
|
||||
CELL_KB_ERROR_NO_DEVICE = 0x80121007,
|
||||
CELL_KB_ERROR_SYS_SETTING_FAILED = 0x80121008,
|
||||
};
|
||||
|
||||
int cellKbInit(u32 max_connect)
|
||||
{
|
||||
sys_io->Warning("cellKbInit(max_connect=%d)", max_connect);
|
||||
|
@ -96,24 +85,24 @@ u16 cellKbCnvRawCode(u32 arrange, u32 mkey, u32 led, u16 rawcode)
|
|||
return 0x0000;
|
||||
}
|
||||
|
||||
int cellKbGetInfo(mem_class_t info)
|
||||
int cellKbGetInfo(mem_ptr_t<CellKbInfo> info)
|
||||
{
|
||||
sys_io->Log("cellKbGetInfo(info_addr=0x%x)", info.GetAddr());
|
||||
if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED;
|
||||
|
||||
const KbInfo& current_info = Emu.GetKeyboardManager().GetInfo();
|
||||
info += current_info.max_connect;
|
||||
info += current_info.now_connect;
|
||||
info += current_info.info;
|
||||
info->max_connect = current_info.max_connect;
|
||||
info->now_connect = current_info.now_connect;
|
||||
info->info = current_info.info;
|
||||
for(u32 i=0; i<CELL_KB_MAX_KEYBOARDS; i++)
|
||||
{
|
||||
info += current_info.status[i];
|
||||
info->status[i] = current_info.status[i];
|
||||
}
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
int cellKbRead(u32 port_no, mem_class_t data)
|
||||
int cellKbRead(u32 port_no, mem_ptr_t<CellKbData> data)
|
||||
{
|
||||
sys_io->Log("cellKbRead(port_no=%d,info_addr=0x%x)", port_no, data.GetAddr());
|
||||
|
||||
|
@ -121,13 +110,13 @@ int cellKbRead(u32 port_no, mem_class_t data)
|
|||
if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED;
|
||||
if(port_no >= keyboards.size()) return CELL_KB_ERROR_INVALID_PARAMETER;
|
||||
|
||||
CellKbData& current_data = Emu.GetKeyboardManager().GetData(port_no);
|
||||
data += current_data.led;
|
||||
data += current_data.mkey;
|
||||
data += std::min((u32)current_data.len, CELL_KB_MAX_KEYCODES);
|
||||
KbData& current_data = Emu.GetKeyboardManager().GetData(port_no);
|
||||
data->led = current_data.led;
|
||||
data->mkey = current_data.mkey;
|
||||
data->len = std::min((u32)current_data.len, CELL_KB_MAX_KEYCODES);
|
||||
for(s32 i=0; i<current_data.len; i++)
|
||||
{
|
||||
data += current_data.keycode[i];
|
||||
data->keycode[i] = current_data.keycode[i];
|
||||
}
|
||||
|
||||
current_data.len = 0;
|
||||
|
@ -140,7 +129,7 @@ int cellKbSetCodeType(u32 port_no, u32 type)
|
|||
sys_io->Log("cellKbSetCodeType(port_no=%d,type=%d)", port_no, type);
|
||||
if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED;
|
||||
|
||||
CellKbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no);
|
||||
KbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no);
|
||||
current_config.code_type = type;
|
||||
return CELL_OK;
|
||||
}
|
||||
|
@ -156,21 +145,21 @@ int cellKbSetReadMode(u32 port_no, u32 rmode)
|
|||
sys_io->Log("cellKbSetReadMode(port_no=%d,rmode=%d)", port_no, rmode);
|
||||
if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED;
|
||||
|
||||
CellKbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no);
|
||||
KbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no);
|
||||
current_config.read_mode = rmode;
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
int cellKbGetConfiguration(u32 port_no, mem_class_t config)
|
||||
int cellKbGetConfiguration(u32 port_no, mem_ptr_t<CellKbConfig> config)
|
||||
{
|
||||
sys_io->Log("cellKbGetConfiguration(port_no=%d,config_addr=0x%x)", port_no, config.GetAddr());
|
||||
if(!Emu.GetKeyboardManager().IsInited()) return CELL_KB_ERROR_UNINITIALIZED;
|
||||
|
||||
const CellKbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no);
|
||||
config += current_config.arrange;
|
||||
config += current_config.read_mode;
|
||||
config += current_config.code_type;
|
||||
const KbConfig& current_config = Emu.GetKeyboardManager().GetConfig(port_no);
|
||||
config->arrange = current_config.arrange;
|
||||
config->read_mode = current_config.read_mode;
|
||||
config->code_type = current_config.code_type;
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
|
|
51
rpcs3/Emu/SysCalls/Modules/SC_Keyboard.h
Normal file
51
rpcs3/Emu/SysCalls/Modules/SC_Keyboard.h
Normal file
|
@ -0,0 +1,51 @@
|
|||
#pragma once
|
||||
|
||||
enum CELL_KB_ERROR_CODE
|
||||
{
|
||||
CELL_KB_ERROR_FATAL = 0x80121001,
|
||||
CELL_KB_ERROR_INVALID_PARAMETER = 0x80121002,
|
||||
CELL_KB_ERROR_ALREADY_INITIALIZED = 0x80121003,
|
||||
CELL_KB_ERROR_UNINITIALIZED = 0x80121004,
|
||||
CELL_KB_ERROR_RESOURCE_ALLOCATION_FAILED = 0x80121005,
|
||||
CELL_KB_ERROR_READ_FAILED = 0x80121006,
|
||||
CELL_KB_ERROR_NO_DEVICE = 0x80121007,
|
||||
CELL_KB_ERROR_SYS_SETTING_FAILED = 0x80121008,
|
||||
};
|
||||
|
||||
static const u32 CELL_KB_MAX_KEYBOARDS = 127;
|
||||
|
||||
struct CellKbInfo
|
||||
{
|
||||
be_t<u32> max_connect;
|
||||
be_t<u32> now_connect;
|
||||
be_t<u32> info;
|
||||
u8 status[CELL_KB_MAX_KEYBOARDS];
|
||||
};
|
||||
|
||||
static const u32 CELL_KB_MAX_KEYCODES = 62;
|
||||
|
||||
struct CellKbData
|
||||
{
|
||||
be_t<u32> led;
|
||||
be_t<u32> mkey;
|
||||
be_t<s32> len;
|
||||
be_t<u16> keycode[CELL_KB_MAX_KEYCODES];
|
||||
};
|
||||
|
||||
struct CellKbConfig
|
||||
{
|
||||
be_t<u32> arrange;
|
||||
be_t<u32> read_mode;
|
||||
be_t<u32> code_type;
|
||||
};
|
||||
|
||||
int cellKbInit(u32 max_connect);
|
||||
int cellKbEnd();
|
||||
int cellKbClearBuf(u32 port_no);
|
||||
u16 cellKbCnvRawCode(u32 arrange, u32 mkey, u32 led, u16 rawcode);
|
||||
int cellKbGetInfo(mem_ptr_t<CellKbInfo> info);
|
||||
int cellKbRead(u32 port_no, mem_ptr_t<CellKbData> data);
|
||||
int cellKbSetCodeType(u32 port_no, u32 type);
|
||||
int cellKbSetLEDStatus(u32 port_no, u8 led);
|
||||
int cellKbSetReadMode(u32 port_no, u32 rmode);
|
||||
int cellKbGetConfiguration(u32 port_no, mem_ptr_t<CellKbConfig> config);
|
|
@ -4,21 +4,10 @@
|
|||
#include "Emu/SysCalls/Modules.h"
|
||||
|
||||
#include "Emu/Io/Mouse.h"
|
||||
#include "SC_Mouse.h"
|
||||
|
||||
extern Module *sys_io;
|
||||
|
||||
enum CELL_MOUSE_ERROR_CODE
|
||||
{
|
||||
CELL_MOUSE_ERROR_FATAL = 0x80121201,
|
||||
CELL_MOUSE_ERROR_INVALID_PARAMETER = 0x80121202,
|
||||
CELL_MOUSE_ERROR_ALREADY_INITIALIZED = 0x80121203,
|
||||
CELL_MOUSE_ERROR_UNINITIALIZED = 0x80121204,
|
||||
CELL_MOUSE_ERROR_RESOURCE_ALLOCATION_FAILED = 0x80121205,
|
||||
CELL_MOUSE_ERROR_DATA_READ_FAILED = 0x80121206,
|
||||
CELL_MOUSE_ERROR_NO_DEVICE = 0x80121207,
|
||||
CELL_MOUSE_ERROR_SYS_SETTING_FAILED = 0x80121208,
|
||||
};
|
||||
|
||||
int cellMouseInit(u32 max_connect)
|
||||
{
|
||||
sys_io->Warning("cellMouseInit(max_connect=%d)", max_connect);
|
||||
|
@ -49,47 +38,47 @@ int cellMouseEnd()
|
|||
return CELL_OK;
|
||||
}
|
||||
|
||||
int cellMouseGetInfo(mem_class_t info)
|
||||
int cellMouseGetInfo(mem_ptr_t<CellMouseInfo> info)
|
||||
{
|
||||
sys_io->Log("cellMouseGetInfo(info_addr=0x%x)", info.GetAddr());
|
||||
if(!Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_UNINITIALIZED;
|
||||
|
||||
const MouseInfo& current_info = Emu.GetMouseManager().GetInfo();
|
||||
info += current_info.max_connect;
|
||||
info += current_info.now_connect;
|
||||
info += current_info.info;
|
||||
for(u32 i=0; i<CELL_MAX_MICE; i++) info += current_info.vendor_id[i];
|
||||
for(u32 i=0; i<CELL_MAX_MICE; i++) info += current_info.product_id[i];
|
||||
for(u32 i=0; i<CELL_MAX_MICE; i++) info += current_info.status[i];
|
||||
info->max_connect = current_info.max_connect;
|
||||
info->now_connect = current_info.now_connect;
|
||||
info->info = current_info.info;
|
||||
for(u32 i=0; i<CELL_MAX_MICE; i++) info->vendor_id[i] = current_info.vendor_id[i];
|
||||
for(u32 i=0; i<CELL_MAX_MICE; i++) info->product_id[i] = current_info.product_id[i];
|
||||
for(u32 i=0; i<CELL_MAX_MICE; i++) info->status[i] = current_info.status[i];
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
int cellMouseInfoTabletMode(u32 port_no, mem_class_t info)
|
||||
int cellMouseInfoTabletMode(u32 port_no, mem_ptr_t<CellMouseInfoTablet> info)
|
||||
{
|
||||
sys_io->Log("cellMouseInfoTabletMode(port_no=%d,info_addr=0x%x)", port_no, info.GetAddr());
|
||||
if(!Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_UNINITIALIZED;
|
||||
if(port_no >= Emu.GetMouseManager().GetMice().size()) return CELL_MOUSE_ERROR_INVALID_PARAMETER;
|
||||
|
||||
info += 0; // Unimplemented: (0=Tablet mode is not supported)
|
||||
info += 1; // Unimplemented: (1=Mouse mode)
|
||||
info->is_supported = 0; // Unimplemented: (0=Tablet mode is not supported)
|
||||
info->mode = 1; // Unimplemented: (1=Mouse mode)
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
int cellMouseGetData(u32 port_no, mem_class_t data)
|
||||
int cellMouseGetData(u32 port_no, mem_ptr_t<CellMouseData> data)
|
||||
{
|
||||
sys_io->Log("cellMouseGetData(port_no=%d,data_addr=0x%x)", port_no, data.GetAddr());
|
||||
if(!Emu.GetMouseManager().IsInited()) return CELL_MOUSE_ERROR_UNINITIALIZED;
|
||||
if(port_no >= Emu.GetMouseManager().GetMice().size()) return CELL_MOUSE_ERROR_NO_DEVICE;
|
||||
|
||||
CellMouseData& current_data = Emu.GetMouseManager().GetData(port_no);
|
||||
data += current_data.update;
|
||||
data += current_data.buttons;
|
||||
data += current_data.x_axis;
|
||||
data += current_data.y_axis;
|
||||
data += current_data.wheel;
|
||||
data += current_data.tilt;
|
||||
MouseData& current_data = Emu.GetMouseManager().GetData(port_no);
|
||||
data->update = current_data.update;
|
||||
data->buttons = current_data.buttons;
|
||||
data->x_axis = current_data.x_axis;
|
||||
data->y_axis = current_data.y_axis;
|
||||
data->wheel = current_data.wheel;
|
||||
data->tilt = current_data.tilt;
|
||||
|
||||
current_data.update = CELL_MOUSE_DATA_NON;
|
||||
current_data.x_axis = 0;
|
||||
|
@ -99,7 +88,7 @@ int cellMouseGetData(u32 port_no, mem_class_t data)
|
|||
return CELL_OK;
|
||||
}
|
||||
|
||||
int cellMouseGetDataList(u32 port_no, mem_class_t data)
|
||||
int cellMouseGetDataList(u32 port_no, mem_ptr_t<CellMouseDataList> data)
|
||||
{
|
||||
UNIMPLEMENTED_FUNC(sys_io);
|
||||
|
||||
|
@ -113,14 +102,14 @@ int cellMouseSetTabletMode(u32 port_no, u32 mode)
|
|||
return CELL_OK;
|
||||
}
|
||||
|
||||
int cellMouseGetTabletDataList(u32 port_no, mem_class_t data)
|
||||
int cellMouseGetTabletDataList(u32 port_no, u32 data_addr)
|
||||
{
|
||||
UNIMPLEMENTED_FUNC(sys_io);
|
||||
|
||||
return CELL_OK;
|
||||
}
|
||||
|
||||
int cellMouseGetRawData(u32 port_no, mem_class_t data)
|
||||
int cellMouseGetRawData(u32 port_no, u32 data_addr)
|
||||
{
|
||||
UNIMPLEMENTED_FUNC(sys_io);
|
||||
|
||||
|
|
62
rpcs3/Emu/SysCalls/Modules/SC_Mouse.h
Normal file
62
rpcs3/Emu/SysCalls/Modules/SC_Mouse.h
Normal file
|
@ -0,0 +1,62 @@
|
|||
#pragma once
|
||||
|
||||
enum CELL_MOUSE_ERROR_CODE
|
||||
{
|
||||
CELL_MOUSE_ERROR_FATAL = 0x80121201,
|
||||
CELL_MOUSE_ERROR_INVALID_PARAMETER = 0x80121202,
|
||||
CELL_MOUSE_ERROR_ALREADY_INITIALIZED = 0x80121203,
|
||||
CELL_MOUSE_ERROR_UNINITIALIZED = 0x80121204,
|
||||
CELL_MOUSE_ERROR_RESOURCE_ALLOCATION_FAILED = 0x80121205,
|
||||
CELL_MOUSE_ERROR_DATA_READ_FAILED = 0x80121206,
|
||||
CELL_MOUSE_ERROR_NO_DEVICE = 0x80121207,
|
||||
CELL_MOUSE_ERROR_SYS_SETTING_FAILED = 0x80121208,
|
||||
};
|
||||
|
||||
static const u32 CELL_MAX_MICE = 127;
|
||||
|
||||
struct CellMouseInfo
|
||||
{
|
||||
be_t<u32> max_connect;
|
||||
be_t<u32> now_connect;
|
||||
be_t<u32> info;
|
||||
be_t<u16> vendor_id[CELL_MAX_MICE];
|
||||
be_t<u16> product_id[CELL_MAX_MICE];
|
||||
u8 status[CELL_MAX_MICE];
|
||||
};
|
||||
|
||||
struct CellMouseInfoTablet
|
||||
{
|
||||
be_t<u32> is_supported;
|
||||
be_t<u32> mode;
|
||||
};
|
||||
|
||||
struct CellMouseData
|
||||
{
|
||||
u8 update;
|
||||
u8 buttons;
|
||||
s8 x_axis;
|
||||
s8 y_axis;
|
||||
s8 wheel;
|
||||
s8 tilt;
|
||||
};
|
||||
|
||||
static const u32 CELL_MOUSE_MAX_DATA_LIST_NUM = 8;
|
||||
|
||||
struct CellMouseDataList
|
||||
{
|
||||
be_t<u32> list_num;
|
||||
CellMouseData list[CELL_MOUSE_MAX_DATA_LIST_NUM];
|
||||
};
|
||||
|
||||
static const u32 CELL_MOUSE_MAX_CODES = 64;
|
||||
|
||||
int cellMouseInit(u32 max_connect);
|
||||
int cellMouseClearBuf(u32 port_no);
|
||||
int cellMouseEnd();
|
||||
int cellMouseGetInfo(mem_ptr_t<CellMouseInfo> info);
|
||||
int cellMouseInfoTabletMode(u32 port_no, mem_ptr_t<CellMouseInfoTablet> info);
|
||||
int cellMouseGetData(u32 port_no, mem_ptr_t<CellMouseData> data);
|
||||
int cellMouseGetDataList(u32 port_no, mem_ptr_t<CellMouseDataList> data);
|
||||
int cellMouseSetTabletMode(u32 port_no, u32 mode);
|
||||
int cellMouseGetTabletDataList(u32 port_no, u32 data_addr);
|
||||
int cellMouseGetRawData(u32 port_no, u32 data_addr);
|
|
@ -29,7 +29,7 @@ int cellNetCtlGetState(mem32_t state)
|
|||
return CELL_OK;
|
||||
}
|
||||
|
||||
int cellNetCtlAddHandler(mem_ptr_t<cellNetCtlHandler> handler, mem32_t arg, s32 hid)
|
||||
int cellNetCtlAddHandler(mem_func_ptr_t<cellNetCtlHandler> handler, mem32_t arg, s32 hid)
|
||||
{
|
||||
cellNetCtl->Todo("cellNetCtlAddHandler(handler_addr=0x%x, arg_addr=0x%x, hid=%x)", handler.GetAddr(), arg.GetAddr(), hid);
|
||||
|
||||
|
|
|
@ -257,4 +257,4 @@ struct CellNetCtlNatInfo
|
|||
be_t<u32> mapped_addr;
|
||||
};
|
||||
|
||||
typedef void(cellNetCtlHandler)(s32 prev_state, s32 new_state, s32 event, s32 error_code, mem32_t arg);
|
||||
typedef void(*cellNetCtlHandler)(s32 prev_state, s32 new_state, s32 event, s32 error_code, mem32_t arg);
|
|
@ -2,6 +2,9 @@
|
|||
#include "Emu/Memory/Memory.h"
|
||||
#include "Emu/SysCalls/Modules.h"
|
||||
|
||||
#include "SC_Keyboard.h"
|
||||
#include "SC_Mouse.h"
|
||||
|
||||
//void sys_io_init();
|
||||
//Module sys_io(0x0017, sys_io_init);
|
||||
Module *sys_io = nullptr;
|
||||
|
@ -22,30 +25,6 @@ extern int cellPadSetPressMode(u32 port_no, u32 mode);
|
|||
extern int cellPadSetSensorMode(u32 port_no, u32 mode);
|
||||
extern int cellPadGetCapabilityInfo(u32 port_no, mem32_t info_addr);
|
||||
|
||||
//cellKb
|
||||
extern int cellKbInit(u32 max_connect);
|
||||
extern int cellKbEnd();
|
||||
extern int cellKbClearBuf(u32 port_no);
|
||||
extern u16 cellKbCnvRawCode(u32 arrange, u32 mkey, u32 led, u16 rawcode);
|
||||
extern int cellKbGetInfo(mem_class_t info);
|
||||
extern int cellKbRead(u32 port_no, mem_class_t data);
|
||||
extern int cellKbSetCodeType(u32 port_no, u32 type);
|
||||
extern int cellKbSetLEDStatus(u32 port_no, u8 led);
|
||||
extern int cellKbSetReadMode(u32 port_no, u32 rmode);
|
||||
extern int cellKbGetConfiguration(u32 port_no, mem_class_t config);
|
||||
|
||||
//cellMouse
|
||||
extern int cellMouseInit(u32 max_connect);
|
||||
extern int cellMouseClearBuf(u32 port_no);
|
||||
extern int cellMouseEnd();
|
||||
extern int cellMouseGetInfo(mem_class_t info);
|
||||
extern int cellMouseInfoTabletMode(u32 port_no, mem_class_t info);
|
||||
extern int cellMouseGetData(u32 port_no, mem_class_t data);
|
||||
extern int cellMouseGetDataList(u32 port_no, mem_class_t data);
|
||||
extern int cellMouseSetTabletMode(u32 port_no, u32 mode);
|
||||
extern int cellMouseGetTabletDataList(u32 port_no, mem_class_t data);
|
||||
extern int cellMouseGetRawData(u32 port_no, mem_class_t data);
|
||||
|
||||
void sys_io_init()
|
||||
{
|
||||
sys_io->AddFunc(0x1cf98800, cellPadInit);
|
||||
|
|
|
@ -389,6 +389,8 @@
|
|||
<ClInclude Include="Emu\SysCalls\Modules\sceNpSns.h" />
|
||||
<ClInclude Include="Emu\SysCalls\Modules\sceNpTrophy.h" />
|
||||
<ClInclude Include="Emu\SysCalls\Modules\sceNpTus.h" />
|
||||
<ClInclude Include="Emu\SysCalls\Modules\SC_Keyboard.h" />
|
||||
<ClInclude Include="Emu\SysCalls\Modules\SC_Mouse.h" />
|
||||
<ClInclude Include="Emu\SysCalls\Modules\sysPrxForUser.h" />
|
||||
<ClInclude Include="Emu\SysCalls\Modules\sys_net.h" />
|
||||
<ClInclude Include="Emu\SysCalls\SC_FUNC.h" />
|
||||
|
|
|
@ -1171,5 +1171,11 @@
|
|||
<ClInclude Include="Emu\SysCalls\Modules\cellFiber.h">
|
||||
<Filter>Emu\SysCalls\Modules</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Emu\SysCalls\Modules\SC_Keyboard.h">
|
||||
<Filter>Emu\SysCalls\Modules</Filter>
|
||||
</ClInclude>
|
||||
<ClInclude Include="Emu\SysCalls\Modules\SC_Mouse.h">
|
||||
<Filter>Emu\SysCalls\Modules</Filter>
|
||||
</ClInclude>
|
||||
</ItemGroup>
|
||||
</Project>
|
Loading…
Add table
Reference in a new issue