mirror of
https://github.com/esphome/esphome.git
synced 2024-12-02 11:44:13 +01:00
97681d142e
Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
50 lines
1.2 KiB
C++
50 lines
1.2 KiB
C++
#pragma once
|
|
|
|
#ifdef USE_ESP32
|
|
|
|
#include <freertos/FreeRTOS.h>
|
|
#include <freertos/semphr.h>
|
|
|
|
#include "esphome/components/esp32_camera/esp32_camera.h"
|
|
#include "esphome/core/component.h"
|
|
#include "esphome/core/helpers.h"
|
|
#include "esphome/core/preferences.h"
|
|
|
|
struct httpd_req;
|
|
|
|
namespace esphome {
|
|
namespace esp32_camera_web_server {
|
|
|
|
enum Mode { STREAM, SNAPSHOT };
|
|
|
|
class CameraWebServer : public Component {
|
|
public:
|
|
CameraWebServer();
|
|
~CameraWebServer();
|
|
|
|
void setup() override;
|
|
void on_shutdown() override;
|
|
void dump_config() override;
|
|
float get_setup_priority() const override;
|
|
void set_port(uint16_t port) { this->port_ = port; }
|
|
void set_mode(Mode mode) { this->mode_ = mode; }
|
|
void loop() override;
|
|
|
|
protected:
|
|
std::shared_ptr<esphome::esp32_camera::CameraImage> wait_for_image_();
|
|
esp_err_t handler_(struct httpd_req *req);
|
|
esp_err_t streaming_handler_(struct httpd_req *req);
|
|
esp_err_t snapshot_handler_(struct httpd_req *req);
|
|
|
|
uint16_t port_{0};
|
|
void *httpd_{nullptr};
|
|
SemaphoreHandle_t semaphore_;
|
|
std::shared_ptr<esphome::esp32_camera::CameraImage> image_;
|
|
bool running_{false};
|
|
Mode mode_{STREAM};
|
|
};
|
|
|
|
} // namespace esp32_camera_web_server
|
|
} // namespace esphome
|
|
|
|
#endif // USE_ESP32
|