Bela
Real-time, ultra-low-latency audio and sensor processing system for BeagleBone Black
Loading...
Searching...
No Matches
Gui.h
1#pragma once
2
3#include <vector>
4#include <string>
5#include <functional>
6#include <JSON.h>
7#include <typeinfo> // for types in templates
8#include <memory>
9#include <DataBuffer.h>
10
11// forward declarations
12class WSServer;
13
14class Gui
15{
16 private:
17
18 std::vector<DataBuffer> _buffers;
19 std::unique_ptr<WSServer> ws_server;
20
21 bool wsIsConnected = false;
22
23 void ws_connect();
24 void ws_disconnect();
25 void ws_onControlData(const char* data, unsigned int size);
26 void ws_onData(const char* data, unsigned int size);
27 int doSendBuffer(const char* type, unsigned int bufferId, const void* data, size_t size);
28
29 unsigned int _port;
30 std::string _addressControl;
31 std::string _addressData;
32 std::wstring _projectName;
33
34 // User defined functions
35 std::function<bool(JSONObject&, void*)> customOnControlData;
36 std::function<bool(const char*, unsigned int, void*)> customOnData;
37
38 void* controlCallbackArg = nullptr;
39 void* binaryCallbackArg = nullptr;
40
41 public:
42 Gui();
43 Gui(unsigned int port, std::string address);
44 ~Gui();
45
46 int setup(unsigned int port = 5555, std::string address = "gui");
55 int setup(std::string projectName, unsigned int port = 5555, std::string address = "gui");
56 void cleanup();
57
58 bool isConnected(){ return wsIsConnected; };
59
60 // BUFFERS
68 unsigned int setBuffer(char bufferType, unsigned int size);
73 DataBuffer& getDataBuffer(unsigned int bufferId);
74
90 void setControlDataCallback(std::function<bool(JSONObject&, void*)> callback, void* callbackArg=nullptr){
91 customOnControlData = callback;
92 controlCallbackArg = callbackArg;
93 };
94
110 void setBinaryDataCallback(std::function<bool(const char*, unsigned int, void*)> callback, void* callbackArg=nullptr){
111 customOnData = callback;
112 binaryCallbackArg = callbackArg;
113 };
114
117 int sendControl(JSONValue* root);
118
124 template<typename T, typename A>
125 int sendBuffer(unsigned int bufferId, std::vector<T,A> & buffer);
131 template <typename T, size_t N>
132 int sendBuffer(unsigned int bufferId, T (&buffer)[N]);
140 template <typename T>
141 int sendBuffer(unsigned int bufferId, T* ptr, size_t count);
147 template <typename T>
148 int sendBuffer(unsigned int bufferId, T value);
149};
150
151template<typename T, typename A>
152int Gui::sendBuffer(unsigned int bufferId, std::vector<T,A> & buffer)
153{
154 const char* type = typeid(T).name();
155 return doSendBuffer(type, bufferId, (const void*)buffer.data(), (buffer.size()*sizeof(T)));
156}
157
158template <typename T, size_t N>
159int Gui::sendBuffer(unsigned int bufferId, T (&buffer)[N])
160{
161 const char* type = typeid(T).name();
162 return doSendBuffer(type, bufferId, (const void*)buffer, N*sizeof(T));
163}
164
165template <typename T>
166int Gui::sendBuffer(unsigned int bufferId, T* ptr, size_t count){
167 const char* type = typeid(T).name();
168 return doSendBuffer(type, bufferId, ptr, count * sizeof(T));
169}
170
171template <typename T>
172int Gui::sendBuffer(unsigned int bufferId, T value)
173{
174 const char* type = typeid(T).name();
175 return doSendBuffer(type, bufferId, (const void*)&value, sizeof(T));
176}
Definition DataBuffer.h:12
void setControlDataCallback(std::function< bool(JSONObject &, void *)> callback, void *callbackArg=nullptr)
Definition Gui.h:90
DataBuffer & getDataBuffer(unsigned int bufferId)
Definition Gui.cpp:162
unsigned int setBuffer(char bufferType, unsigned int size)
Definition Gui.cpp:155
void setBinaryDataCallback(std::function< bool(const char *, unsigned int, void *)> callback, void *callbackArg=nullptr)
Definition Gui.h:110
int sendControl(JSONValue *root)
Definition Gui.cpp:178
int sendBuffer(unsigned int bufferId, std::vector< T, A > &buffer)
Definition Gui.h:152
Definition JSONValue.h:38
Definition WSServer.h:17