mirror of
https://github.com/espressif/esp-protocols.git
synced 2025-07-20 22:12:27 +02:00
added scope lock
This commit is contained in:
@ -39,7 +39,7 @@ enum class cmux_state {
|
||||
HEADER,
|
||||
PAYLOAD,
|
||||
FOOTER,
|
||||
|
||||
RECOVER,
|
||||
};
|
||||
|
||||
class CMUXedTerminal: public Terminal {
|
||||
@ -67,7 +67,6 @@ private:
|
||||
size_t consumed;
|
||||
std::unique_ptr<uint8_t[]> buffer;
|
||||
bool on_cmux(size_t len);
|
||||
static bool s_on_cmux(size_t len);
|
||||
|
||||
};
|
||||
|
||||
@ -96,26 +95,6 @@ struct CMUXHelper {
|
||||
|
||||
typedef std::function<command_result(uint8_t *data, size_t len)> got_line_cb;
|
||||
|
||||
//class CMUX {
|
||||
//public:
|
||||
// void setup_cmux();
|
||||
// void send_sabm(size_t dlci);
|
||||
//
|
||||
// bool on_cmux(size_t len);
|
||||
// static bool s_on_cmux(size_t len);
|
||||
// cmux_state state;
|
||||
// uint8_t dlci;
|
||||
// uint8_t type;
|
||||
// size_t payload_len;
|
||||
// uint8_t frame_header[6];
|
||||
// size_t frame_header_offset;
|
||||
// size_t buffer_size;
|
||||
// size_t consumed;
|
||||
//// std::shared_ptr<std::vector<uint8_t>> buffer;
|
||||
// std::unique_ptr<uint8_t[]> buffer;
|
||||
//
|
||||
//};
|
||||
|
||||
class DTE {
|
||||
public:
|
||||
explicit DTE(std::unique_ptr<Terminal> t);
|
||||
@ -154,6 +133,7 @@ public:
|
||||
|
||||
void send_cmux_command(uint8_t i, const std::string& command);
|
||||
private:
|
||||
Lock lock;
|
||||
// std::unique_ptr<CMUXedTerminal> cmux;
|
||||
void setup_cmux();
|
||||
// void send_sabm(size_t dlci);
|
||||
|
@ -6,6 +6,8 @@
|
||||
#define SIMPLE_CXX_CLIENT_TERMINAL_OBJECTS_HPP
|
||||
#include "freertos/FreeRTOS.h"
|
||||
#include "freertos/event_groups.h"
|
||||
#include "freertos/semphr.h"
|
||||
|
||||
|
||||
|
||||
class esp_err_exception: virtual public std::exception {
|
||||
@ -44,6 +46,29 @@ static inline void throw_if_esp_fail(esp_err_t err)
|
||||
}
|
||||
}
|
||||
|
||||
struct Lock {
|
||||
explicit Lock(): lock(nullptr)
|
||||
{
|
||||
lock = xSemaphoreCreateMutex();
|
||||
throw_if_false(lock != nullptr, "create signal event group failed");
|
||||
}
|
||||
~Lock() { vSemaphoreDelete(lock); }
|
||||
void take() { xSemaphoreTake(lock, portMAX_DELAY); }
|
||||
|
||||
void give() { xSemaphoreGive(lock); }
|
||||
xSemaphoreHandle lock;
|
||||
};
|
||||
|
||||
template<class T>
|
||||
class Scoped {
|
||||
public:
|
||||
explicit Scoped(T &l):lock(l) { lock.take(); }
|
||||
~Scoped() { lock.give(); }
|
||||
|
||||
private:
|
||||
T& lock;
|
||||
};
|
||||
|
||||
struct signal_group {
|
||||
explicit signal_group(): event_group(nullptr)
|
||||
{
|
||||
|
Reference in New Issue
Block a user