#pragma once
#include <functional>
#include <memory>
#include <vector>
#include "Wire.h"
#include "protocol/d2h.pb.h"
#include "protocol/h2d.pb.h"
namespace SimpleBLE {
namespace Dongl {
namespace Serial {
class Protocol {
public:
using ResponseCallback = std::function<void(const dongl_Response&)>;
using EventCallback = std::function<void(const dongl_Event&)>;
using ErrorCallback = std::function<void(Wire::Error)>;
Protocol(const std::string& device_path);
~Protocol();
void send_command(const dongl_Command& command);
void set_response_callback(ResponseCallback callback);
void set_event_callback(EventCallback callback);
void set_error_callback(ErrorCallback callback);
private:
std::unique_ptr<Wire> _wire;
ResponseCallback _response_callback;
EventCallback _event_callback;
ErrorCallback _error_callback;
};
} } }