mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-07-04 14:26:20 +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;
|
||||
crc = ~crc;
|
||||
|
||||
for (usize i = 0; i < data.size(); i++) {
|
||||
const u8 byte = data[i];
|
||||
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 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");
|
||||
|
||||
KernelObject* object = kernel.getObject(sharedMemHandle, KernelObjectType::MemoryBlock);
|
||||
|
@ -100,6 +100,7 @@ void IRUserService::finalizeIrnop(u32 messagePointer) {
|
|||
}
|
||||
|
||||
sharedMemory = std::nullopt;
|
||||
receiveBuffer = nullptr;
|
||||
|
||||
// This should disconnect any connected device de-initialize the shared memory
|
||||
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
|
||||
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;
|
||||
|
||||
if (enableCirclePadPro) {
|
||||
|
@ -216,7 +217,7 @@ void IRUserService::disconnect(u32 messagePointer) {
|
|||
log("IR:USER: Disconnect\n");
|
||||
|
||||
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, 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 (connectedDevice) {
|
||||
connectedDevice = false;
|
||||
cpp.disconnect();
|
||||
|
||||
if (connectionStatusEvent.has_value()) {
|
||||
kernel.signalEvent(connectionStatusEvent.value());
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue