From e74fd34bf1a1a0c0e0838d32f31ecc796eac3ecb Mon Sep 17 00:00:00 2001 From: laride <198868291+laride@users.noreply.github.com> Date: Thu, 29 May 2025 20:01:08 +0800 Subject: [PATCH] feat(Sparkbot): add camera flip control via MCP (#716) --- .../boards/esp-sparkbot/esp_sparkbot_board.cc | 20 +++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/main/boards/esp-sparkbot/esp_sparkbot_board.cc b/main/boards/esp-sparkbot/esp_sparkbot_board.cc index 0d773585..3fc54961 100644 --- a/main/boards/esp-sparkbot/esp_sparkbot_board.cc +++ b/main/boards/esp-sparkbot/esp_sparkbot_board.cc @@ -6,6 +6,7 @@ #include "button.h" #include "config.h" #include "mcp_server.h" +#include "settings.h" #include #include @@ -164,6 +165,12 @@ private: camera_config.grab_mode = CAMERA_GRAB_WHEN_EMPTY; camera_ = new Esp32Camera(camera_config); + + Settings settings("sparkbot", false); + // 考虑到部分复刻使用了不可动摄像头的设计,默认启用翻转 + bool camera_flipped = static_cast(settings.GetInt("camera-flipped", 1)); + camera_->SetHMirror(camera_flipped); + camera_->SetVFlip(camera_flipped); } /* @@ -246,6 +253,19 @@ private: } throw std::runtime_error("Invalid light mode"); }); + + mcp_server.AddTool("self.camera.set_camera_flipped", "翻转摄像头图像方向", PropertyList(), [this](const PropertyList& properties) -> ReturnValue { + Settings settings("sparkbot", true); + // 考虑到部分复刻使用了不可动摄像头的设计,默认启用翻转 + bool flipped = !static_cast(settings.GetInt("camera-flipped", 1)); + + camera_->SetHMirror(flipped); + camera_->SetVFlip(flipped); + + settings.SetInt("camera-flipped", flipped ? 1 : 0); + + return true; + }); } public: