diff options
author | Arisotura <thetotalworm@gmail.com> | 2023-11-04 19:42:36 +0100 |
---|---|---|
committer | Arisotura <thetotalworm@gmail.com> | 2023-11-04 19:42:36 +0100 |
commit | 54ebf1b1b2bc3e23e24e55ce163d2071780ab562 (patch) | |
tree | 6cf45413faf015f8eeb1d70558b7ddc360117d60 /src/DSi_Camera.h | |
parent | 7837c169a15db672451a3f80ac17e3e7291d95c5 (diff) |
convert DSi I2C and camera
Diffstat (limited to 'src/DSi_Camera.h')
-rw-r--r-- | src/DSi_Camera.h | 82 |
1 files changed, 50 insertions, 32 deletions
diff --git a/src/DSi_Camera.h b/src/DSi_Camera.h index dce30a4..c3165b3 100644 --- a/src/DSi_Camera.h +++ b/src/DSi_Camera.h @@ -21,38 +21,15 @@ #include "types.h" #include "Savestate.h" +#include "DSi_I2C.h" -namespace DSi_CamModule -{ - -class Camera; - -extern Camera* Camera0; -extern Camera* Camera1; - -bool Init(); -void DeInit(); -void Reset(); -void Stop(); - -void DoSavestate(Savestate* file); - -void IRQ(u32 param); - -void TransferScanline(u32 line); +class DSi_CamModule; -u8 Read8(u32 addr); -u16 Read16(u32 addr); -u32 Read32(u32 addr); -void Write8(u32 addr, u8 val); -void Write16(u32 addr, u16 val); -void Write32(u32 addr, u32 val); - -class Camera +class DSi_Camera : public DSi_I2CDevice { public: - Camera(u32 num); - ~Camera(); + DSi_Camera(DSi_I2CHost* host, u32 num); + ~DSi_Camera(); void DoSavestate(Savestate* file); @@ -66,9 +43,9 @@ public: // lengths in words int TransferScanline(u32* buffer, int maxlen); - void I2C_Start(); - u8 I2C_Read(bool last); - void I2C_Write(u8 val, bool last); + void Acquire(); + u8 Read(bool last); + void Write(u8 val, bool last); void InputFrame(u32* data, int width, int height, bool rgb); @@ -101,6 +78,47 @@ private: u32 FrameBuffer[640*480/2]; // YUYV framebuffer, two pixels per word }; -} + +class DSi_CamModule +{ +public: + DSi_CamModule(); + ~DSi_CamModule(); + void Reset(); + void Stop(); + void DoSavestate(Savestate* file); + + DSi_Camera* GetOuterCamera() { return Camera0; } + DSi_Camera* GetInnerCamera() { return Camera1; } + + void IRQ(u32 param); + + void TransferScanline(u32 line); + + u8 Read8(u32 addr); + u16 Read16(u32 addr); + u32 Read32(u32 addr); + void Write8(u32 addr, u8 val); + void Write16(u32 addr, u16 val); + void Write32(u32 addr, u32 val); + +private: + DSi_Camera* Camera0; // 78 / facing outside + DSi_Camera* Camera1; // 7A / selfie cam + + u16 ModuleCnt; + u16 Cnt; + + u32 CropStart, CropEnd; + + // pixel data buffer holds a maximum of 512 words, regardless of how long scanlines are + u32 DataBuffer[512]; + u32 BufferReadPos, BufferWritePos; + u32 BufferNumLines; + DSi_Camera* CurCamera; + + static const u32 kIRQInterval; + static const u32 kTransferStart; +}; #endif // DSI_CAMERA_H |