chore: CRLF to LF
This commit is contained in:
+92
-92
@@ -1,92 +1,92 @@
|
||||
#include "foot.h"
|
||||
|
||||
#include "rawinput/rawinput.h"
|
||||
#include "util/logging.h"
|
||||
|
||||
#include "../ddr.h"
|
||||
#include "../io.h"
|
||||
|
||||
bool games::ddr::DDRFOOTHandle::open(LPCWSTR lpFileName) {
|
||||
if (wcscmp(lpFileName, L"COM1") != 0) {
|
||||
return false;
|
||||
}
|
||||
log_info("ddr", "Opened COM1 (FOOT)");
|
||||
return true;
|
||||
}
|
||||
|
||||
int games::ddr::DDRFOOTHandle::read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) {
|
||||
|
||||
// check data trigger and buffer size
|
||||
if (data_trigger && nNumberOfBytesToRead >= 1) {
|
||||
data_trigger = false;
|
||||
memset(lpBuffer, 0x11, 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// no data
|
||||
return 0;
|
||||
}
|
||||
|
||||
int games::ddr::DDRFOOTHandle::write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) {
|
||||
|
||||
// check buffer size for lights
|
||||
if (nNumberOfBytesToWrite == 4) {
|
||||
|
||||
// mappings
|
||||
static const size_t mapping_bits[] = {
|
||||
4, 6, 3, 5, // P1 L, U, R, D,
|
||||
12, 14, 11, 13, // P2 L, U, R, D
|
||||
22 // NEON
|
||||
};
|
||||
|
||||
static const size_t mapping[] = {
|
||||
Lights::P1_FOOT_LEFT,
|
||||
Lights::P1_FOOT_UP,
|
||||
Lights::P1_FOOT_RIGHT,
|
||||
Lights::P1_FOOT_DOWN,
|
||||
Lights::P2_FOOT_LEFT,
|
||||
Lights::P2_FOOT_UP,
|
||||
Lights::P2_FOOT_RIGHT,
|
||||
Lights::P2_FOOT_DOWN,
|
||||
Lights::NEON
|
||||
};
|
||||
|
||||
// get light bits
|
||||
uint32_t light_bits = *((uint32_t*) lpBuffer);
|
||||
|
||||
// get lights
|
||||
auto &lights = get_lights();
|
||||
|
||||
// bit scan
|
||||
for (size_t i = 0; i < 8; i++) {
|
||||
float value = (light_bits & (1 << mapping_bits[i])) ? 1.f : 0.f;
|
||||
GameAPI::Lights::writeLight(RI_MGR, lights.at(mapping[i]), value);
|
||||
}
|
||||
|
||||
// only set the neon if in SD mode
|
||||
// p3io sets it for HD mode.
|
||||
if (games::ddr::SDMODE) {
|
||||
float value = (light_bits & (1 << mapping_bits[8])) ? 1.f : 0.f;
|
||||
GameAPI::Lights::writeLight(RI_MGR, lights.at(mapping[8]), value);
|
||||
}
|
||||
|
||||
// flush
|
||||
RI_MGR->devices_flush_output();
|
||||
}
|
||||
|
||||
// trigger out data
|
||||
data_trigger = true;
|
||||
|
||||
// return all data written
|
||||
return (int) nNumberOfBytesToWrite;
|
||||
}
|
||||
|
||||
int games::ddr::DDRFOOTHandle::device_io(DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer,
|
||||
DWORD nOutBufferSize) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool games::ddr::DDRFOOTHandle::close() {
|
||||
log_info("ddr", "Closed COM1 (FOOT).");
|
||||
return true;
|
||||
}
|
||||
#include "foot.h"
|
||||
|
||||
#include "rawinput/rawinput.h"
|
||||
#include "util/logging.h"
|
||||
|
||||
#include "../ddr.h"
|
||||
#include "../io.h"
|
||||
|
||||
bool games::ddr::DDRFOOTHandle::open(LPCWSTR lpFileName) {
|
||||
if (wcscmp(lpFileName, L"COM1") != 0) {
|
||||
return false;
|
||||
}
|
||||
log_info("ddr", "Opened COM1 (FOOT)");
|
||||
return true;
|
||||
}
|
||||
|
||||
int games::ddr::DDRFOOTHandle::read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) {
|
||||
|
||||
// check data trigger and buffer size
|
||||
if (data_trigger && nNumberOfBytesToRead >= 1) {
|
||||
data_trigger = false;
|
||||
memset(lpBuffer, 0x11, 1);
|
||||
return 1;
|
||||
}
|
||||
|
||||
// no data
|
||||
return 0;
|
||||
}
|
||||
|
||||
int games::ddr::DDRFOOTHandle::write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) {
|
||||
|
||||
// check buffer size for lights
|
||||
if (nNumberOfBytesToWrite == 4) {
|
||||
|
||||
// mappings
|
||||
static const size_t mapping_bits[] = {
|
||||
4, 6, 3, 5, // P1 L, U, R, D,
|
||||
12, 14, 11, 13, // P2 L, U, R, D
|
||||
22 // NEON
|
||||
};
|
||||
|
||||
static const size_t mapping[] = {
|
||||
Lights::P1_FOOT_LEFT,
|
||||
Lights::P1_FOOT_UP,
|
||||
Lights::P1_FOOT_RIGHT,
|
||||
Lights::P1_FOOT_DOWN,
|
||||
Lights::P2_FOOT_LEFT,
|
||||
Lights::P2_FOOT_UP,
|
||||
Lights::P2_FOOT_RIGHT,
|
||||
Lights::P2_FOOT_DOWN,
|
||||
Lights::NEON
|
||||
};
|
||||
|
||||
// get light bits
|
||||
uint32_t light_bits = *((uint32_t*) lpBuffer);
|
||||
|
||||
// get lights
|
||||
auto &lights = get_lights();
|
||||
|
||||
// bit scan
|
||||
for (size_t i = 0; i < 8; i++) {
|
||||
float value = (light_bits & (1 << mapping_bits[i])) ? 1.f : 0.f;
|
||||
GameAPI::Lights::writeLight(RI_MGR, lights.at(mapping[i]), value);
|
||||
}
|
||||
|
||||
// only set the neon if in SD mode
|
||||
// p3io sets it for HD mode.
|
||||
if (games::ddr::SDMODE) {
|
||||
float value = (light_bits & (1 << mapping_bits[8])) ? 1.f : 0.f;
|
||||
GameAPI::Lights::writeLight(RI_MGR, lights.at(mapping[8]), value);
|
||||
}
|
||||
|
||||
// flush
|
||||
RI_MGR->devices_flush_output();
|
||||
}
|
||||
|
||||
// trigger out data
|
||||
data_trigger = true;
|
||||
|
||||
// return all data written
|
||||
return (int) nNumberOfBytesToWrite;
|
||||
}
|
||||
|
||||
int games::ddr::DDRFOOTHandle::device_io(DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer,
|
||||
DWORD nOutBufferSize) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool games::ddr::DDRFOOTHandle::close() {
|
||||
log_info("ddr", "Closed COM1 (FOOT).");
|
||||
return true;
|
||||
}
|
||||
|
||||
+23
-23
@@ -1,23 +1,23 @@
|
||||
#pragma once
|
||||
|
||||
#include "hooks/devicehook.h"
|
||||
|
||||
namespace games::ddr {
|
||||
|
||||
class DDRFOOTHandle : public CustomHandle {
|
||||
private:
|
||||
bool data_trigger = false;
|
||||
|
||||
public:
|
||||
bool open(LPCWSTR lpFileName) override;
|
||||
|
||||
int read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) override;
|
||||
|
||||
int write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) override;
|
||||
|
||||
int device_io(DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer,
|
||||
DWORD nOutBufferSize) override;
|
||||
|
||||
bool close() override;
|
||||
};
|
||||
}
|
||||
#pragma once
|
||||
|
||||
#include "hooks/devicehook.h"
|
||||
|
||||
namespace games::ddr {
|
||||
|
||||
class DDRFOOTHandle : public CustomHandle {
|
||||
private:
|
||||
bool data_trigger = false;
|
||||
|
||||
public:
|
||||
bool open(LPCWSTR lpFileName) override;
|
||||
|
||||
int read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) override;
|
||||
|
||||
int write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) override;
|
||||
|
||||
int device_io(DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer,
|
||||
DWORD nOutBufferSize) override;
|
||||
|
||||
bool close() override;
|
||||
};
|
||||
}
|
||||
|
||||
+550
-550
File diff suppressed because it is too large
Load Diff
+37
-37
@@ -1,37 +1,37 @@
|
||||
#pragma once
|
||||
|
||||
#include "acioemu/acioemu.h"
|
||||
#include "hooks/devicehook.h"
|
||||
|
||||
namespace games::ddr {
|
||||
|
||||
class DDRP3IOHandle : public CustomHandle {
|
||||
private:
|
||||
acioemu::ACIOEmu *acio_emu;
|
||||
circular_buffer<uint8_t> read_buf = circular_buffer<uint8_t>(1024);
|
||||
|
||||
class HDXSDevice : public acioemu::ACIODeviceEmu {
|
||||
public:
|
||||
HDXSDevice();
|
||||
|
||||
bool parse_msg(
|
||||
acioemu::MessageData* msg_in,
|
||||
circular_buffer<uint8_t> *response_buffer
|
||||
) override;
|
||||
};
|
||||
|
||||
void write_msg(const uint8_t *data, size_t len);
|
||||
|
||||
public:
|
||||
bool open(LPCWSTR lpFileName) override;
|
||||
|
||||
int read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) override;
|
||||
|
||||
int write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) override;
|
||||
|
||||
int device_io(DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer,
|
||||
DWORD nOutBufferSize) override;
|
||||
|
||||
bool close() override;
|
||||
};
|
||||
}
|
||||
#pragma once
|
||||
|
||||
#include "acioemu/acioemu.h"
|
||||
#include "hooks/devicehook.h"
|
||||
|
||||
namespace games::ddr {
|
||||
|
||||
class DDRP3IOHandle : public CustomHandle {
|
||||
private:
|
||||
acioemu::ACIOEmu *acio_emu;
|
||||
circular_buffer<uint8_t> read_buf = circular_buffer<uint8_t>(1024);
|
||||
|
||||
class HDXSDevice : public acioemu::ACIODeviceEmu {
|
||||
public:
|
||||
HDXSDevice();
|
||||
|
||||
bool parse_msg(
|
||||
acioemu::MessageData* msg_in,
|
||||
circular_buffer<uint8_t> *response_buffer
|
||||
) override;
|
||||
};
|
||||
|
||||
void write_msg(const uint8_t *data, size_t len);
|
||||
|
||||
public:
|
||||
bool open(LPCWSTR lpFileName) override;
|
||||
|
||||
int read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) override;
|
||||
|
||||
int write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) override;
|
||||
|
||||
int device_io(DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer,
|
||||
DWORD nOutBufferSize) override;
|
||||
|
||||
bool close() override;
|
||||
};
|
||||
}
|
||||
|
||||
+102
-102
@@ -1,102 +1,102 @@
|
||||
#include "sate.h"
|
||||
#include "util/logging.h"
|
||||
|
||||
using namespace acioemu;
|
||||
|
||||
games::ddr::DDRSATEHandle::SATEDevice::SATEDevice() {
|
||||
this->node_count = 7;
|
||||
}
|
||||
|
||||
bool games::ddr::DDRSATEHandle::SATEDevice::parse_msg(
|
||||
acioemu::MessageData *msg_in,
|
||||
circular_buffer<uint8_t> *response_buffer
|
||||
) {
|
||||
|
||||
// check command
|
||||
switch (msg_in->cmd.code) {
|
||||
case ACIO_CMD_GET_VERSION: {
|
||||
|
||||
// send version data
|
||||
auto msg = this->create_msg(msg_in, MSG_VERSION_SIZE);
|
||||
this->set_version(msg, 0x105, 0, 1, 1, 0, "DDRS");
|
||||
write_msg(msg, response_buffer);
|
||||
delete msg;
|
||||
break;
|
||||
}
|
||||
case ACIO_CMD_CLEAR:
|
||||
case ACIO_CMD_STARTUP:
|
||||
case 0xFF: // BROADCAST
|
||||
{
|
||||
// send status 0
|
||||
auto msg = this->create_msg_status(msg_in, 0x00);
|
||||
write_msg(msg, response_buffer);
|
||||
delete msg;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
// mark as handled
|
||||
return true;
|
||||
}
|
||||
|
||||
bool games::ddr::DDRSATEHandle::open(LPCWSTR lpFileName) {
|
||||
if (wcscmp(lpFileName, L"COM2") != 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
log_info("ddr", "Opened COM2 (SATE)");
|
||||
|
||||
// ACIO device
|
||||
acio_emu.add_device(new SATEDevice());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int games::ddr::DDRSATEHandle::read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) {
|
||||
auto buffer = reinterpret_cast<uint8_t *>(lpBuffer);
|
||||
|
||||
// read from emu
|
||||
DWORD bytes_read = 0;
|
||||
while (bytes_read < nNumberOfBytesToRead) {
|
||||
auto cur_byte = acio_emu.read();
|
||||
|
||||
if (cur_byte.has_value()) {
|
||||
buffer[bytes_read++] = cur_byte.value();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// return amount of bytes read
|
||||
return (int) bytes_read;
|
||||
}
|
||||
|
||||
int games::ddr::DDRSATEHandle::write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) {
|
||||
auto buffer = reinterpret_cast<const uint8_t *>(lpBuffer);
|
||||
|
||||
// write to emu
|
||||
for (DWORD i = 0; i < nNumberOfBytesToWrite; i++) {
|
||||
acio_emu.write(buffer[i]);
|
||||
}
|
||||
|
||||
// return all data written
|
||||
return (int) nNumberOfBytesToWrite;
|
||||
}
|
||||
|
||||
int games::ddr::DDRSATEHandle::device_io(
|
||||
DWORD dwIoControlCode,
|
||||
LPVOID lpInBuffer,
|
||||
DWORD nInBufferSize,
|
||||
LPVOID lpOutBuffer,
|
||||
DWORD nOutBufferSize
|
||||
) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool games::ddr::DDRSATEHandle::close() {
|
||||
log_info("ddr", "Closed COM2 (SATE).");
|
||||
|
||||
return true;
|
||||
}
|
||||
#include "sate.h"
|
||||
#include "util/logging.h"
|
||||
|
||||
using namespace acioemu;
|
||||
|
||||
games::ddr::DDRSATEHandle::SATEDevice::SATEDevice() {
|
||||
this->node_count = 7;
|
||||
}
|
||||
|
||||
bool games::ddr::DDRSATEHandle::SATEDevice::parse_msg(
|
||||
acioemu::MessageData *msg_in,
|
||||
circular_buffer<uint8_t> *response_buffer
|
||||
) {
|
||||
|
||||
// check command
|
||||
switch (msg_in->cmd.code) {
|
||||
case ACIO_CMD_GET_VERSION: {
|
||||
|
||||
// send version data
|
||||
auto msg = this->create_msg(msg_in, MSG_VERSION_SIZE);
|
||||
this->set_version(msg, 0x105, 0, 1, 1, 0, "DDRS");
|
||||
write_msg(msg, response_buffer);
|
||||
delete msg;
|
||||
break;
|
||||
}
|
||||
case ACIO_CMD_CLEAR:
|
||||
case ACIO_CMD_STARTUP:
|
||||
case 0xFF: // BROADCAST
|
||||
{
|
||||
// send status 0
|
||||
auto msg = this->create_msg_status(msg_in, 0x00);
|
||||
write_msg(msg, response_buffer);
|
||||
delete msg;
|
||||
break;
|
||||
}
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
|
||||
// mark as handled
|
||||
return true;
|
||||
}
|
||||
|
||||
bool games::ddr::DDRSATEHandle::open(LPCWSTR lpFileName) {
|
||||
if (wcscmp(lpFileName, L"COM2") != 0) {
|
||||
return false;
|
||||
}
|
||||
|
||||
log_info("ddr", "Opened COM2 (SATE)");
|
||||
|
||||
// ACIO device
|
||||
acio_emu.add_device(new SATEDevice());
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
int games::ddr::DDRSATEHandle::read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) {
|
||||
auto buffer = reinterpret_cast<uint8_t *>(lpBuffer);
|
||||
|
||||
// read from emu
|
||||
DWORD bytes_read = 0;
|
||||
while (bytes_read < nNumberOfBytesToRead) {
|
||||
auto cur_byte = acio_emu.read();
|
||||
|
||||
if (cur_byte.has_value()) {
|
||||
buffer[bytes_read++] = cur_byte.value();
|
||||
} else {
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
// return amount of bytes read
|
||||
return (int) bytes_read;
|
||||
}
|
||||
|
||||
int games::ddr::DDRSATEHandle::write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) {
|
||||
auto buffer = reinterpret_cast<const uint8_t *>(lpBuffer);
|
||||
|
||||
// write to emu
|
||||
for (DWORD i = 0; i < nNumberOfBytesToWrite; i++) {
|
||||
acio_emu.write(buffer[i]);
|
||||
}
|
||||
|
||||
// return all data written
|
||||
return (int) nNumberOfBytesToWrite;
|
||||
}
|
||||
|
||||
int games::ddr::DDRSATEHandle::device_io(
|
||||
DWORD dwIoControlCode,
|
||||
LPVOID lpInBuffer,
|
||||
DWORD nInBufferSize,
|
||||
LPVOID lpOutBuffer,
|
||||
DWORD nOutBufferSize
|
||||
) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool games::ddr::DDRSATEHandle::close() {
|
||||
log_info("ddr", "Closed COM2 (SATE).");
|
||||
|
||||
return true;
|
||||
}
|
||||
|
||||
+31
-31
@@ -1,31 +1,31 @@
|
||||
#pragma once
|
||||
|
||||
#include "hooks/devicehook.h"
|
||||
#include "acioemu/acioemu.h"
|
||||
|
||||
namespace games::ddr {
|
||||
|
||||
class DDRSATEHandle : public CustomHandle {
|
||||
private:
|
||||
acioemu::ACIOEmu acio_emu;
|
||||
|
||||
class SATEDevice : public acioemu::ACIODeviceEmu {
|
||||
public:
|
||||
SATEDevice();
|
||||
|
||||
bool parse_msg(acioemu::MessageData *msg_in, circular_buffer<uint8_t> *response_buffer) override;
|
||||
};
|
||||
|
||||
public:
|
||||
bool open(LPCWSTR lpFileName) override;
|
||||
|
||||
int read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) override;
|
||||
|
||||
int write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) override;
|
||||
|
||||
int device_io(DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer,
|
||||
DWORD nOutBufferSize) override;
|
||||
|
||||
bool close() override;
|
||||
};
|
||||
}
|
||||
#pragma once
|
||||
|
||||
#include "hooks/devicehook.h"
|
||||
#include "acioemu/acioemu.h"
|
||||
|
||||
namespace games::ddr {
|
||||
|
||||
class DDRSATEHandle : public CustomHandle {
|
||||
private:
|
||||
acioemu::ACIOEmu acio_emu;
|
||||
|
||||
class SATEDevice : public acioemu::ACIODeviceEmu {
|
||||
public:
|
||||
SATEDevice();
|
||||
|
||||
bool parse_msg(acioemu::MessageData *msg_in, circular_buffer<uint8_t> *response_buffer) override;
|
||||
};
|
||||
|
||||
public:
|
||||
bool open(LPCWSTR lpFileName) override;
|
||||
|
||||
int read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) override;
|
||||
|
||||
int write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) override;
|
||||
|
||||
int device_io(DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer,
|
||||
DWORD nOutBufferSize) override;
|
||||
|
||||
bool close() override;
|
||||
};
|
||||
}
|
||||
|
||||
+60
-60
@@ -1,60 +1,60 @@
|
||||
#include "usbmem.h"
|
||||
#include "util/logging.h"
|
||||
|
||||
void games::ddr::DDRUSBMEMHandle::respond(const char *data) {
|
||||
size_t len = strlen(data) + 1;
|
||||
memcpy(response_data, data, len);
|
||||
memcpy(response_data + len, "\r>", 2);
|
||||
response_data_size = len + 2;
|
||||
}
|
||||
|
||||
bool games::ddr::DDRUSBMEMHandle::open(LPCWSTR lpFileName) {
|
||||
if (wcscmp(lpFileName, L"COM3") != 0) {
|
||||
return false;
|
||||
}
|
||||
log_info("ddr", "Opened COM3 (USBMEM)");
|
||||
return true;
|
||||
}
|
||||
|
||||
int games::ddr::DDRUSBMEMHandle::read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) {
|
||||
|
||||
// check for response
|
||||
if (response_data_size && nNumberOfBytesToRead >= response_data_size) {
|
||||
size_t bytes_read = response_data_size;
|
||||
memcpy(lpBuffer, response_data, response_data_size);
|
||||
response_data_size = 0;
|
||||
return (int) bytes_read;
|
||||
}
|
||||
|
||||
// no data
|
||||
return 0;
|
||||
}
|
||||
|
||||
int games::ddr::DDRUSBMEMHandle::write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) {
|
||||
|
||||
// check CMD
|
||||
if (!memcmp(lpBuffer, "sver", 4))
|
||||
respond("done GQHDXJAA SPICE");
|
||||
else if (!memcmp(lpBuffer, "on_a", 4) ||
|
||||
!memcmp(lpBuffer, "on_b", 4) ||
|
||||
!memcmp(lpBuffer, "offa", 4) ||
|
||||
!memcmp(lpBuffer, "offb", 4) ||
|
||||
!memcmp(lpBuffer, "lma ", 4) ||
|
||||
!memcmp(lpBuffer, "lmb ", 4))
|
||||
respond("done");
|
||||
else
|
||||
respond("not connected");
|
||||
|
||||
// return all data written
|
||||
return (int) nNumberOfBytesToWrite;
|
||||
}
|
||||
|
||||
int games::ddr::DDRUSBMEMHandle::device_io(DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize,
|
||||
LPVOID lpOutBuffer, DWORD nOutBufferSize) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool games::ddr::DDRUSBMEMHandle::close() {
|
||||
log_info("ddr", "Closed COM3 (USBMEM).");
|
||||
return true;
|
||||
}
|
||||
#include "usbmem.h"
|
||||
#include "util/logging.h"
|
||||
|
||||
void games::ddr::DDRUSBMEMHandle::respond(const char *data) {
|
||||
size_t len = strlen(data) + 1;
|
||||
memcpy(response_data, data, len);
|
||||
memcpy(response_data + len, "\r>", 2);
|
||||
response_data_size = len + 2;
|
||||
}
|
||||
|
||||
bool games::ddr::DDRUSBMEMHandle::open(LPCWSTR lpFileName) {
|
||||
if (wcscmp(lpFileName, L"COM3") != 0) {
|
||||
return false;
|
||||
}
|
||||
log_info("ddr", "Opened COM3 (USBMEM)");
|
||||
return true;
|
||||
}
|
||||
|
||||
int games::ddr::DDRUSBMEMHandle::read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) {
|
||||
|
||||
// check for response
|
||||
if (response_data_size && nNumberOfBytesToRead >= response_data_size) {
|
||||
size_t bytes_read = response_data_size;
|
||||
memcpy(lpBuffer, response_data, response_data_size);
|
||||
response_data_size = 0;
|
||||
return (int) bytes_read;
|
||||
}
|
||||
|
||||
// no data
|
||||
return 0;
|
||||
}
|
||||
|
||||
int games::ddr::DDRUSBMEMHandle::write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) {
|
||||
|
||||
// check CMD
|
||||
if (!memcmp(lpBuffer, "sver", 4))
|
||||
respond("done GQHDXJAA SPICE");
|
||||
else if (!memcmp(lpBuffer, "on_a", 4) ||
|
||||
!memcmp(lpBuffer, "on_b", 4) ||
|
||||
!memcmp(lpBuffer, "offa", 4) ||
|
||||
!memcmp(lpBuffer, "offb", 4) ||
|
||||
!memcmp(lpBuffer, "lma ", 4) ||
|
||||
!memcmp(lpBuffer, "lmb ", 4))
|
||||
respond("done");
|
||||
else
|
||||
respond("not connected");
|
||||
|
||||
// return all data written
|
||||
return (int) nNumberOfBytesToWrite;
|
||||
}
|
||||
|
||||
int games::ddr::DDRUSBMEMHandle::device_io(DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize,
|
||||
LPVOID lpOutBuffer, DWORD nOutBufferSize) {
|
||||
return -1;
|
||||
}
|
||||
|
||||
bool games::ddr::DDRUSBMEMHandle::close() {
|
||||
log_info("ddr", "Closed COM3 (USBMEM).");
|
||||
return true;
|
||||
}
|
||||
|
||||
+26
-26
@@ -1,26 +1,26 @@
|
||||
#pragma once
|
||||
|
||||
#include "hooks/devicehook.h"
|
||||
|
||||
namespace games::ddr {
|
||||
|
||||
class DDRUSBMEMHandle : public CustomHandle {
|
||||
private:
|
||||
char response_data[256]{};
|
||||
size_t response_data_size = 0;
|
||||
|
||||
void respond(const char *data);
|
||||
|
||||
public:
|
||||
bool open(LPCWSTR lpFileName) override;
|
||||
|
||||
int read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) override;
|
||||
|
||||
int write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) override;
|
||||
|
||||
int device_io(DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer,
|
||||
DWORD nOutBufferSize) override;
|
||||
|
||||
bool close() override;
|
||||
};
|
||||
}
|
||||
#pragma once
|
||||
|
||||
#include "hooks/devicehook.h"
|
||||
|
||||
namespace games::ddr {
|
||||
|
||||
class DDRUSBMEMHandle : public CustomHandle {
|
||||
private:
|
||||
char response_data[256]{};
|
||||
size_t response_data_size = 0;
|
||||
|
||||
void respond(const char *data);
|
||||
|
||||
public:
|
||||
bool open(LPCWSTR lpFileName) override;
|
||||
|
||||
int read(LPVOID lpBuffer, DWORD nNumberOfBytesToRead) override;
|
||||
|
||||
int write(LPCVOID lpBuffer, DWORD nNumberOfBytesToWrite) override;
|
||||
|
||||
int device_io(DWORD dwIoControlCode, LPVOID lpInBuffer, DWORD nInBufferSize, LPVOID lpOutBuffer,
|
||||
DWORD nOutBufferSize) override;
|
||||
|
||||
bool close() override;
|
||||
};
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user