Panda3DS/include/services/y2r.hpp
2023-04-24 01:37:49 +03:00

57 lines
No EOL
1.2 KiB
C++

#pragma once
#include <optional>
#include "helpers.hpp"
#include "kernel_types.hpp"
#include "logger.hpp"
#include "memory.hpp"
// Circular dependencies go br
class Kernel;
class Y2RService {
Handle handle = KernelHandles::Y2R;
Memory& mem;
Kernel& kernel;
MAKE_LOG_FUNCTION(log, y2rLogger)
std::optional<Handle> transferEndEvent;
bool transferEndInterruptEnabled;
enum class BusyStatus : u32 {
NotBusy = 0,
Busy = 1
};
enum class InputFormat : u32 {
YUV422_Individual8 = 0,
YUV420_Individual8 = 1,
YUV422_Individual16 = 2,
YUV420_Individual16 = 3,
YUV422_Batch = 4,
};
enum class OutputFormat : u32 {
RGB32 = 0,
RGB24 = 1,
RGB15 = 2,
RGB565 = 3
};
InputFormat inputFmt;
OutputFormat outputFmt;
// Service commands
void driverInitialize(u32 messagePointer);
void isBusyConversion(u32 messagePointer);
void pingProcess(u32 messagePointer);
void setTransferEndInterrupt(u32 messagePointer);
void getTransferEndEvent(u32 messagePointer);
void setInputFormat(u32 messagePointer);
void setOutputFormat(u32 messagePointer);
void stopConversion(u32 messagePointer);
public:
Y2RService(Memory& mem, Kernel& kernel) : mem(mem), kernel(kernel) {}
void reset();
void handleSyncRequest(u32 messagePointer);
};