#pragma once
#include <functional>
#include <memory>
#include <optional>
#include <vector>
#include <chrono>
#include <condition_variable>
#include <mutex>
#include "Wire.h"
#include "protocol/d2h.pb.h"
#include "protocol/h2d.pb.h"
namespace SimpleBLE {
namespace Dongl {
namespace Serial {
class ProtocolBase {
public:
ProtocolBase(const std::string& device_path);
~ProtocolBase();
dongl_Response exchange(const dongl_Command& command);
void set_event_callback(std::function<void(const dongl_Event&)> callback);
private:
std::unique_ptr<Wire> _wire;
std::function<void(const dongl_Event&)> _event_callback;
std::optional<dongl_Response> _pending_response;
std::condition_variable _response_cv;
std::mutex _pending_mutex;
};
} } }