mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-11-17 14:54:38 +00:00
Merge fbe4b0f4d0 into 0fdf1cc386
This commit is contained in:
commit
ad142f2265
@ -11,6 +11,7 @@
|
||||
#include "Common/CommonTypes.h"
|
||||
#include "Common/Logging/Log.h"
|
||||
#include "Common/MsgHandler.h"
|
||||
#include "Common/Swap.h"
|
||||
#include "Core/HW/SI/SI_DeviceDanceMat.h"
|
||||
#include "Core/HW/SI/SI_DeviceGBA.h"
|
||||
#ifdef HAS_LIBMGBA
|
||||
@ -87,6 +88,15 @@ void ISIDevice::OnEvent(u64 userdata, s64 cycles_late)
|
||||
{
|
||||
}
|
||||
|
||||
int ISIDevice::CreateStatusResponse(u32 si_device_id, u8* buffer)
|
||||
{
|
||||
constexpr int RESPONSE_LENGTH = 3;
|
||||
|
||||
Common::BigEndianValue<u32> id(si_device_id);
|
||||
std::memcpy(buffer, &id, RESPONSE_LENGTH);
|
||||
return RESPONSE_LENGTH;
|
||||
}
|
||||
|
||||
int SIDevice_GetGBATransferTime(const SystemTimers::SystemTimersManager& timers,
|
||||
EBufferCommands cmd)
|
||||
{
|
||||
|
||||
@ -123,7 +123,12 @@ public:
|
||||
SIDevices GetDeviceType() const;
|
||||
|
||||
// Run the SI Buffer
|
||||
// Return value:
|
||||
// positive: The response length.
|
||||
// 0: Response not ready, we will try again `TransferInterval()` cycles later.
|
||||
// -1: No response.
|
||||
virtual int RunBuffer(u8* buffer, int request_length);
|
||||
|
||||
virtual int TransferInterval();
|
||||
|
||||
virtual DataResponse GetData(u32& hi, u32& low) = 0;
|
||||
@ -138,6 +143,9 @@ public:
|
||||
virtual void OnEvent(u64 userdata, s64 cycles_late);
|
||||
|
||||
protected:
|
||||
// Only the three high bytes of `si_device_id` are used.
|
||||
static int CreateStatusResponse(u32 si_device_id, u8* buffer);
|
||||
|
||||
Core::System& m_system;
|
||||
|
||||
int m_device_number;
|
||||
|
||||
@ -3,10 +3,7 @@
|
||||
|
||||
#include "Core/HW/SI/SI_DeviceDanceMat.h"
|
||||
|
||||
#include <cstring>
|
||||
|
||||
#include "Common/CommonTypes.h"
|
||||
#include "Common/Swap.h"
|
||||
#include "InputCommon/GCPadStatus.h"
|
||||
|
||||
namespace SerialInterface
|
||||
@ -22,11 +19,7 @@ int CSIDevice_DanceMat::RunBuffer(u8* buffer, int request_length)
|
||||
const auto command = static_cast<EBufferCommands>(buffer[0]);
|
||||
if (command == EBufferCommands::CMD_STATUS)
|
||||
{
|
||||
ISIDevice::RunBuffer(buffer, request_length);
|
||||
|
||||
const u32 id = Common::swap32(SI_DANCEMAT);
|
||||
std::memcpy(buffer, &id, sizeof(id));
|
||||
return sizeof(id);
|
||||
return CreateStatusResponse(SI_DANCEMAT, buffer);
|
||||
}
|
||||
return CSIDevice_GCController::RunBuffer(buffer, request_length);
|
||||
}
|
||||
|
||||
@ -10,7 +10,6 @@
|
||||
#include "Common/ChunkFile.h"
|
||||
#include "Common/CommonTypes.h"
|
||||
#include "Common/Logging/Log.h"
|
||||
#include "Common/Swap.h"
|
||||
#include "Core/Core.h"
|
||||
#include "Core/CoreTiming.h"
|
||||
#include "Core/HW/GBACore.h"
|
||||
|
||||
@ -57,9 +57,7 @@ int CSIDevice_GCController::RunBuffer(u8* buffer, int request_length)
|
||||
case EBufferCommands::CMD_STATUS:
|
||||
case EBufferCommands::CMD_RESET:
|
||||
{
|
||||
const u32 id = Common::swap32(SI_GC_CONTROLLER);
|
||||
std::memcpy(buffer, &id, sizeof(id));
|
||||
return sizeof(id);
|
||||
return CreateStatusResponse(SI_GC_CONTROLLER, buffer);
|
||||
}
|
||||
|
||||
case EBufferCommands::CMD_DIRECT:
|
||||
|
||||
@ -34,9 +34,7 @@ int CSIDevice_GCSteeringWheel::RunBuffer(u8* buffer, int request_length)
|
||||
case EBufferCommands::CMD_STATUS:
|
||||
case EBufferCommands::CMD_RESET:
|
||||
{
|
||||
const u32 id = Common::swap32(SI_GC_STEERING);
|
||||
std::memcpy(buffer, &id, sizeof(id));
|
||||
return sizeof(id);
|
||||
return CreateStatusResponse(SI_GC_STEERING, buffer);
|
||||
}
|
||||
default:
|
||||
return CSIDevice_GCController::RunBuffer(buffer, request_length);
|
||||
|
||||
@ -9,7 +9,6 @@
|
||||
#include "Common/ChunkFile.h"
|
||||
#include "Common/CommonTypes.h"
|
||||
#include "Common/Logging/Log.h"
|
||||
#include "Common/Swap.h"
|
||||
#include "Core/HW/GCKeyboard.h"
|
||||
#include "InputCommon/KeyboardStatus.h"
|
||||
|
||||
@ -35,9 +34,7 @@ int CSIDevice_Keyboard::RunBuffer(u8* buffer, int request_length)
|
||||
case EBufferCommands::CMD_STATUS:
|
||||
case EBufferCommands::CMD_RESET:
|
||||
{
|
||||
const u32 id = Common::swap32(SI_GC_KEYBOARD);
|
||||
std::memcpy(buffer, &id, sizeof(id));
|
||||
return sizeof(id);
|
||||
return CreateStatusResponse(SI_GC_KEYBOARD, buffer);
|
||||
}
|
||||
|
||||
case EBufferCommands::CMD_DIRECT_KB:
|
||||
|
||||
Loading…
Reference in New Issue
Block a user