Bind
C++ UI toolkit for Arduino
 
Loading...
Searching...
No Matches
Bind.hpp
1#ifndef __BIND_H
2#define __BIND_H
3#include <stdint.h>
4#include "Stream.h"
5#include "SLPacker.hpp"
6#include "DataProtocol.h"
7#include "BindUtils.hpp"
8#include "BindWidgets.hpp"
9
11#define MAX_HANDLERS 16
12
14#define BIND_ADD_OR_REFRESH_CMD 0
15
17#define BIND_DATA_ONLY_CMD 6
18
20#define BIND_REMOVE_CMD 1
21
23#define BIND_DISABLE_CMD 2
24
26#define BIND_ENABLE_CMD 3
27
29#define BIND_HIDE_CMD 4
30
32#define BIND_VISIBLE_CMD 5
33
57class Bind
58{
59public:
60 // Constructors and setup functions...
61
62 Bind()
63 {
64 setupCallback = NULL;
65 buttons = new ButtonHandler[MAX_HANDLERS];
66 dialKnobHandlers = new DialKnobHandler[MAX_HANDLERS];
67 switchHandlers = new SwitchHandler[MAX_HANDLERS];
68 seekBarHandlers = new SeekBarHandler[MAX_HANDLERS];
69 joystickHandlers = new JoystickHandler[MAX_HANDLERS];
70 colorPickerHandlers = new ColorPickerHandler[MAX_HANDLERS];
71 }
72
83 Bind(void (*_setupCallback)(int16_t, int16_t)) : Bind()
84 {
85 setupCallback = _setupCallback;
86 }
87
96 bool isReady()
97 {
98 return isInitialized;
99 }
100
109 void sync(BindView *obj);
110
115 void sync(BindView &obj);
116
129 void sync();
130
131 // Binding functions for UI elements...
132
155 bool init(Stream *stream, void (*setupCallback)(int16_t, int16_t));
156
179 bool init(Stream &stream, void (&setupCallback)(int16_t, int16_t));
180
191 void join(BindButton *screenButton, void (*clickCallback)(void));
192
203 void join(BindButton &screenButton, void (&clickCallback)(void));
204
217 void join(BindKnob *screenKnob, void (*changeCallback)(int16_t));
218
231 void join(BindKnob &screenKnob, void (&changeCallback)(int16_t));
232
244 void join(BindSwitch *screenSwitch, void (*clickCallback)(bool));
245
257 void join(BindSwitch &screenSwitch, void (&clickCallback)(bool));
258
272 void join(BindSeekBar *screenSeekBar, void (*changeCallback)(int16_t));
273
287 void join(BindSeekBar &screenSeekBar, void (&changeCallback)(int16_t));
288
301 void join(BindJoystick *screenJoystick, void (*changeCallback)(int16_t, int16_t));
302
315 void join(BindJoystick &screenJoystick, void (&changeCallback)(int16_t, int16_t));
316
329 void join(BindColorPicker *screenColorPicker, void (*clickCallback)(uint8_t, uint8_t, uint8_t));
330
343 void join(BindColorPicker &screenColorPicker, void (&clickCallback)(uint8_t, uint8_t, uint8_t));
344
356 void sync(float chartData, BindChart &obj);
357
372 void sync(const char *str, int32_t textColor, bool autoScroll, bool newLine, bool bold, bool italic, BindTerminal &obj);
373
386 void sync(const char *str, BindTerminal &obj);
387
388private:
389 // Private member variables and functions...
390 uint8_t bufFrame[MAX_DATA_LENGHT];
391 uint8_t frameTXBuffer[MAX_DATA_LENGHT + 6];
392 int16_t valTmp1 = 0;
393 int16_t valTmp2 = 0;
394 int16_t valTmp3 = 0;
395 int dataLen = 0;
396 uint32_t lastMs = 0;
397 uint32_t deltaMs = 0;
398 DataParser dataParser;
399 ButtonHandler *buttons;
400 DialKnobHandler *dialKnobHandlers;
401 SwitchHandler *switchHandlers;
402 SeekBarHandler *seekBarHandlers;
403 JoystickHandler *joystickHandlers;
404 ColorPickerHandler *colorPickerHandlers;
405 uint8_t buttonIndex = 1;
406 uint8_t dialKnobIndex = 1;
407 uint8_t switchIndex = 1;
408 uint8_t seekBarIndex = 1;
409 uint8_t joystickHandlerIndex = 1;
410 uint8_t colorPickerHandlerIndex = 1;
411 bool isInitialized = false;
412 void (*setupCallback)(int16_t, int16_t);
413 void screenInit(int16_t w, int16_t h);
414 Stream *bindStream = NULL;
415 int updateScreen(uint8_t inp);
416 void updateScreen(Stream *stream);
417 int updateScreenInternal(uint8_t *dataFrame);
418 void updateJoystick(uint8_t tag, int16_t valX, int16_t valY);
419 void updateColorPicker(uint8_t tag, uint8_t r, uint8_t g, uint8_t b);
420 void updateSeekBar(uint8_t tag, int16_t val);
421 void knobChanged(int8_t tag, int val);
422 void clickButton(uint8_t tag);
423 void updateSwitch(uint8_t tag, bool val);
424};
425
426#endif /* __BIND_H */
The BindButton class represents a button UI element for use with BindCanvas.
Definition BindButton.hpp:26
Represents a customizable chart element for BindCanvas.
Definition BindChart.hpp:31
BindColorPicker Class.
Definition BindColorPicker.hpp:53
The Bind class provides a framework for creating interactive applications with BindCanvas.
Definition Bind.hpp:58
bool isReady()
Checks if the bind object is in a ready state.
Definition Bind.hpp:96
void sync()
Synchronizes the bind with the current state.
Definition Bind.cpp:60
bool init(Stream *stream, void(*setupCallback)(int16_t, int16_t))
Initializes the Bind framework with communication and screen setup.
Definition Bind.cpp:9
Bind(void(*_setupCallback)(int16_t, int16_t))
Constructs a Bind object with a setup callback function.
Definition Bind.hpp:83
void join(BindButton *screenButton, void(*clickCallback)(void))
Binds a Button object to a click callback function.
Definition Bind.cpp:103
BindJoystick Class.
Definition BindJoystick.hpp:56
The BindKnob class represents a knob UI element for use with BindCanvas.
Definition BindKnob.hpp:29
Represents a SeekBar object in the Bind framework.
Definition BindSeekBar.hpp:23
Represents a toggle switch UI element in the Bind framework.
Definition BindSwitch.hpp:32
Represents a terminal display for BindCanvas.
Definition BindTerminal.hpp:25
Definition BindView.hpp:22
Definition BindButtonHandler.hpp:6
Definition BindColorPickerHandler.hpp:7
Definition DataProtocol.h:19
Definition BindDialKnobHandler.hpp:6
Definition BindJoystickHandler.hpp:7
Definition BindSeekBarHandler.hpp:7
Definition BindSwitchHandler.hpp:7