aboutsummaryrefslogtreecommitdiff
path: root/src/DSi_Camera.h
diff options
context:
space:
mode:
authorArisotura <thetotalworm@gmail.com>2023-11-04 19:42:36 +0100
committerArisotura <thetotalworm@gmail.com>2023-11-04 19:42:36 +0100
commit54ebf1b1b2bc3e23e24e55ce163d2071780ab562 (patch)
tree6cf45413faf015f8eeb1d70558b7ddc360117d60 /src/DSi_Camera.h
parent7837c169a15db672451a3f80ac17e3e7291d95c5 (diff)
convert DSi I2C and camera
Diffstat (limited to 'src/DSi_Camera.h')
-rw-r--r--src/DSi_Camera.h82
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