Skip to content

Commit d67dbfa

Browse files
committed
[Ardrivo] Pack camera pins as framebuffer key
Signed-off-by: AeroStun <24841307+AeroStun@users.noreply.github.com>
1 parent 4c1ffe6 commit d67dbfa

File tree

3 files changed

+28
-4
lines changed

3 files changed

+28
-4
lines changed

include/Ardrivo/OV767X.h

+13
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,19 @@
2222
#include <cstddef>
2323
#include "SMCE_dll.hpp"
2424

25+
#define OV7670_VSYNC 8
26+
#define OV7670_HREF 1 // A1
27+
#define OV7670_PLK 0 // A0
28+
#define OV7670_XCLK 9
29+
#define OV7670_D0 10
30+
#define OV7670_D1 1
31+
#define OV7670_D2 0
32+
#define OV7670_D3 2
33+
#define OV7670_D4 3
34+
#define OV7670_D5 5
35+
#define OV7670_D6 6
36+
#define OV7670_D7 4
37+
2538
// clang-format off
2639
enum SMCE_OV767_Format {
2740
RGB888, // RRRRRRRRGGGGGGGGBBBBBBBB // SMCE extension

src/Ardrivo/OV767X.cpp

+11-2
Original file line numberDiff line numberDiff line change
@@ -30,11 +30,20 @@ extern void maybe_init();
3030

3131
SMCE__DLL_API OV767X Camera;
3232

33-
OV767X::OV767X() noexcept = default;
33+
OV767X::OV767X() noexcept : m_format{RGB888} {
34+
constexpr static int default_pins[8]{OV7670_D0, OV7670_D1, OV7670_D2, OV7670_D3,
35+
OV7670_D4, OV7670_D5, OV7670_D6, OV7670_D7};
36+
setPins(OV7670_VSYNC, OV7670_HREF, OV7670_PLK, OV7670_XCLK, default_pins);
37+
}
3438
OV767X::~OV767X() = default;
3539

3640
void OV767X::setPins([[maybe_unused]] int vsync, [[maybe_unused]] int href, [[maybe_unused]] int pclk,
37-
[[maybe_unused]] int xclk, [[maybe_unused]] const int dpins[8]) {}
41+
[[maybe_unused]] int xclk, [[maybe_unused]] const int dpins[8]) {
42+
static_assert(sizeof(m_key) == 8);
43+
m_key = 0;
44+
for (std::size_t i = 0; i < sizeof(m_key); ++i)
45+
m_key |= static_cast<std::size_t>(dpins[i] & 0xFF) << (i * CHAR_BIT);
46+
}
3847

3948
/*
4049
* VGA = 0, // 640x480

test/BoardView.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -193,14 +193,16 @@ TEST_CASE("BoardView RGB444 cvt", "[BoardView]") {
193193
std::cerr << tc.build_log().second;
194194
REQUIRE_FALSE(ec);
195195
smce::Board br{};
196-
REQUIRE(br.configure({.frame_buffers = {{}}}));
196+
REQUIRE(br.configure(
197+
{.frame_buffers = {smce::BoardConfig::FrameBuffer{
198+
.key = 0x04'06'05'03'02'00'01'0A, .direction = smce::BoardConfig::FrameBuffer::Direction::in}}}));
197199
REQUIRE(br.attach_sketch(sk));
198200
REQUIRE(br.prepare());
199201
auto bv = br.view();
200202
REQUIRE(bv.valid());
201203
REQUIRE(br.start());
202204
REQUIRE(br.suspend());
203-
auto fb = bv.frame_buffers[0];
205+
auto fb = bv.frame_buffers[0x04'06'05'03'02'00'01'0A];
204206
REQUIRE(fb.exists());
205207

206208
{

0 commit comments

Comments
 (0)