mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-07-05 06:42:57 +12:00
IR: More fixes
This commit is contained in:
parent
1aa6b571e8
commit
5a912aaf2f
2 changed files with 7 additions and 5 deletions
|
@ -20,12 +20,11 @@ u8 IRUserService::crc8(std::span<const u8> data) {
|
||||||
};
|
};
|
||||||
|
|
||||||
u8 crc = 0;
|
u8 crc = 0;
|
||||||
crc = ~crc;
|
|
||||||
|
|
||||||
for (usize i = 0; i < data.size(); i++) {
|
for (usize i = 0; i < data.size(); i++) {
|
||||||
const u8 byte = data[i];
|
const u8 byte = data[i];
|
||||||
crc = crcTable[crc ^ byte];
|
crc = crcTable[crc ^ byte];
|
||||||
}
|
}
|
||||||
|
|
||||||
return ~crc;
|
return crc;
|
||||||
}
|
}
|
|
@ -69,7 +69,7 @@ void IRUserService::initializeIrnopShared(u32 messagePointer) {
|
||||||
const u32 descriptor = mem.read32(messagePointer + 28);
|
const u32 descriptor = mem.read32(messagePointer + 28);
|
||||||
const u32 sharedMemHandle = mem.read32(messagePointer + 32);
|
const u32 sharedMemHandle = mem.read32(messagePointer + 32);
|
||||||
|
|
||||||
log("IR:USER: InitializeIrnopShared (shared mem size = %08X, sharedMemHandle = %X) (stubbed)\n", sharedMemSize, sharedMemHandle);
|
log("IR:USER: InitializeIrnopShared (shared mem size = %08X, sharedMemHandle = %X)\n", sharedMemSize, sharedMemHandle);
|
||||||
Helpers::warn("Game is initializing IR:USER. If it explodes, this is probably why");
|
Helpers::warn("Game is initializing IR:USER. If it explodes, this is probably why");
|
||||||
|
|
||||||
KernelObject* object = kernel.getObject(sharedMemHandle, KernelObjectType::MemoryBlock);
|
KernelObject* object = kernel.getObject(sharedMemHandle, KernelObjectType::MemoryBlock);
|
||||||
|
@ -100,6 +100,7 @@ void IRUserService::finalizeIrnop(u32 messagePointer) {
|
||||||
}
|
}
|
||||||
|
|
||||||
sharedMemory = std::nullopt;
|
sharedMemory = std::nullopt;
|
||||||
|
receiveBuffer = nullptr;
|
||||||
|
|
||||||
// This should disconnect any connected device de-initialize the shared memory
|
// This should disconnect any connected device de-initialize the shared memory
|
||||||
mem.write32(messagePointer, IPC::responseHeader(0x2, 1, 0));
|
mem.write32(messagePointer, IPC::responseHeader(0x2, 1, 0));
|
||||||
|
@ -160,7 +161,7 @@ void IRUserService::requireConnection(u32 messagePointer) {
|
||||||
|
|
||||||
// Note: We temporarily pretend we don't have a CirclePad Pro. This code must change when we emulate it or N3DS C-stick
|
// Note: We temporarily pretend we don't have a CirclePad Pro. This code must change when we emulate it or N3DS C-stick
|
||||||
const u8 status = (enableCirclePadPro) ? 2 : 1; // Any value other than 2 is considered not connected.
|
const u8 status = (enableCirclePadPro) ? 2 : 1; // Any value other than 2 is considered not connected.
|
||||||
const u8 role = 0;
|
const u8 role = (enableCirclePadPro) ? 2 : 0;
|
||||||
const u8 connected = (enableCirclePadPro) ? 1 : 0;
|
const u8 connected = (enableCirclePadPro) ? 1 : 0;
|
||||||
|
|
||||||
if (enableCirclePadPro) {
|
if (enableCirclePadPro) {
|
||||||
|
@ -216,7 +217,7 @@ void IRUserService::disconnect(u32 messagePointer) {
|
||||||
log("IR:USER: Disconnect\n");
|
log("IR:USER: Disconnect\n");
|
||||||
|
|
||||||
if (sharedMemory.has_value()) {
|
if (sharedMemory.has_value()) {
|
||||||
u32 sharedMemAddress = sharedMemory.value().addr;
|
u32 sharedMemAddress = sharedMemory->addr;
|
||||||
|
|
||||||
mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, connectionStatus), 0);
|
mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, connectionStatus), 0);
|
||||||
mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, isConnected), 0);
|
mem.write8(sharedMemAddress + offsetof(SharedMemoryStatus, isConnected), 0);
|
||||||
|
@ -225,6 +226,8 @@ void IRUserService::disconnect(u32 messagePointer) {
|
||||||
// If there's a connected device, disconnect it and trigger the status event
|
// If there's a connected device, disconnect it and trigger the status event
|
||||||
if (connectedDevice) {
|
if (connectedDevice) {
|
||||||
connectedDevice = false;
|
connectedDevice = false;
|
||||||
|
cpp.disconnect();
|
||||||
|
|
||||||
if (connectionStatusEvent.has_value()) {
|
if (connectionStatusEvent.has_value()) {
|
||||||
kernel.signalEvent(connectionStatusEvent.value());
|
kernel.signalEvent(connectionStatusEvent.value());
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue