mirror of
https://github.com/wheremyfoodat/Panda3DS.git
synced 2025-04-20 12:39:13 +12:00
Stub some more cam:u functions (#263)
* Stub some cam:u functions * Update cam.cpp
This commit is contained in:
parent
35fa6783c6
commit
5255fac387
2 changed files with 44 additions and 1 deletions
|
@ -25,6 +25,9 @@ class CAMService {
|
||||||
void driverInitialize(u32 messagePointer);
|
void driverInitialize(u32 messagePointer);
|
||||||
void getMaxLines(u32 messagePointer);
|
void getMaxLines(u32 messagePointer);
|
||||||
void getBufferErrorInterruptEvent(u32 messagePointer);
|
void getBufferErrorInterruptEvent(u32 messagePointer);
|
||||||
|
void setContrast(u32 messagePointer);
|
||||||
|
void setFrameRate(u32 messagePointer);
|
||||||
|
void setTransferLines(u32 messagePointer);
|
||||||
|
|
||||||
public:
|
public:
|
||||||
CAMService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {}
|
CAMService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {}
|
||||||
|
|
|
@ -6,7 +6,10 @@ namespace CAMCommands {
|
||||||
enum : u32 {
|
enum : u32 {
|
||||||
GetBufferErrorInterruptEvent = 0x00060040,
|
GetBufferErrorInterruptEvent = 0x00060040,
|
||||||
DriverInitialize = 0x00390000,
|
DriverInitialize = 0x00390000,
|
||||||
|
SetTransferLines = 0x00090100,
|
||||||
GetMaxLines = 0x000A0080,
|
GetMaxLines = 0x000A0080,
|
||||||
|
SetFrameRate = 0x00200080,
|
||||||
|
SetContrast = 0x00230080,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -18,7 +21,12 @@ void CAMService::handleSyncRequest(u32 messagePointer) {
|
||||||
case CAMCommands::DriverInitialize: driverInitialize(messagePointer); break;
|
case CAMCommands::DriverInitialize: driverInitialize(messagePointer); break;
|
||||||
case CAMCommands::GetBufferErrorInterruptEvent: getBufferErrorInterruptEvent(messagePointer); break;
|
case CAMCommands::GetBufferErrorInterruptEvent: getBufferErrorInterruptEvent(messagePointer); break;
|
||||||
case CAMCommands::GetMaxLines: getMaxLines(messagePointer); break;
|
case CAMCommands::GetMaxLines: getMaxLines(messagePointer); break;
|
||||||
default: Helpers::panic("CAM service requested. Command: %08X\n", command);
|
case CAMCommands::SetContrast: setContrast(messagePointer); break;
|
||||||
|
case CAMCommands::SetFrameRate: setFrameRate(messagePointer); break;
|
||||||
|
case CAMCommands::SetTransferLines: setTransferLines(messagePointer); break;
|
||||||
|
default:
|
||||||
|
Helpers::panic("Unimplemented CAM service requested. Command: %08X\n", command);
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -28,6 +36,38 @@ void CAMService::driverInitialize(u32 messagePointer) {
|
||||||
mem.write32(messagePointer + 4, Result::Success);
|
mem.write32(messagePointer + 4, Result::Success);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void CAMService::setContrast(u32 messagePointer) {
|
||||||
|
const u32 cameraSelect = mem.read32(messagePointer + 4);
|
||||||
|
const u32 contrast = mem.read32(messagePointer + 8);
|
||||||
|
|
||||||
|
log("CAM::SetPhotoMode (camera select = %d, contrast = %d)\n", cameraSelect, contrast);
|
||||||
|
|
||||||
|
mem.write32(messagePointer, IPC::responseHeader(0x23, 1, 0));
|
||||||
|
mem.write32(messagePointer + 4, Result::Success);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CAMService::setTransferLines(u32 messagePointer) {
|
||||||
|
const u32 port = mem.read32(messagePointer + 4);
|
||||||
|
const s16 lines = mem.read16(messagePointer + 8);
|
||||||
|
const s16 width = mem.read16(messagePointer + 12);
|
||||||
|
const s16 height = mem.read16(messagePointer + 16);
|
||||||
|
|
||||||
|
log("CAM::SetTransferLines (port = %d, lines = %d, width = %d, height = %d)\n", port, lines, width, height);
|
||||||
|
|
||||||
|
mem.write32(messagePointer, IPC::responseHeader(0x9, 1, 0));
|
||||||
|
mem.write32(messagePointer + 4, Result::Success);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CAMService::setFrameRate(u32 messagePointer) {
|
||||||
|
const u32 cameraSelect = mem.read32(messagePointer + 4);
|
||||||
|
const u32 framerate = mem.read32(messagePointer + 8);
|
||||||
|
|
||||||
|
log("CAM::SetPhotoMode (camera select = %d, framerate = %d)\n", cameraSelect, framerate);
|
||||||
|
|
||||||
|
mem.write32(messagePointer, IPC::responseHeader(0x20, 1, 0));
|
||||||
|
mem.write32(messagePointer + 4, Result::Success);
|
||||||
|
}
|
||||||
|
|
||||||
// Algorithm taken from Citra
|
// Algorithm taken from Citra
|
||||||
// https://github.com/citra-emu/citra/blob/master/src/core/hle/service/cam/cam.cpp#L465
|
// https://github.com/citra-emu/citra/blob/master/src/core/hle/service/cam/cam.cpp#L465
|
||||||
void CAMService::getMaxLines(u32 messagePointer) {
|
void CAMService::getMaxLines(u32 messagePointer) {
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue