Skip to content

Commit

Permalink
auto clear on streaming layer, sendFeedback option serial+osc
Browse files Browse the repository at this point in the history
  • Loading branch information
benkuper committed Oct 11, 2023
1 parent 7661552 commit 4319a7b
Show file tree
Hide file tree
Showing 11 changed files with 112 additions and 60 deletions.
2 changes: 1 addition & 1 deletion Firmware/Bentuino/src/Common/Helpers.h
Original file line number Diff line number Diff line change
Expand Up @@ -175,7 +175,7 @@
virtual bool handleSetParamInternal(const String &paramName, var *data, int numData) override \
{

#define HandleSetParamMotherClass(Class) \
#define HandleSetParamInternalMotherClass(Class) \
if (Class::handleSetParamInternal(paramName, data, numData)) \
return true;

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -75,31 +75,35 @@ void CommunicationComponent::sendParamFeedback(Component *c, void *param, const
break;

default:
break;
break;
}

#ifdef USE_SERIAL
serial.sendMessage(c->name, pName, data, numData);
if (serial.sendFeedback)
serial.sendMessage(c->name, pName, data, numData);
#endif

#ifdef USE_OSC
osc.sendMessage("/" + c->name, pName, data, numData);
if (osc.sendFeedback)
osc.sendMessage("/" + c->name, pName, data, numData);
#endif

#ifdef USE_SERVER
// maybe should find away so calls are not crossed with websocket ?
WebServerComponent::instance->sendParamFeedback(c, pName, data, numData);
WebServerComponent::instance->sendParamFeedback(c, pName, data, numData);
#endif
}

void CommunicationComponent::sendEventFeedback(const ComponentEvent &e)
{
#ifdef USE_SERIAL
serial.sendMessage(e.component->name, e.getName(), e.data, e.numData);
if (serial.sendFeedback)
serial.sendMessage(e.component->name, e.getName(), e.data, e.numData);
#endif

#ifdef USE_OSC
osc.sendMessage(e.component->name, e.getName(), e.data, e.numData);
if (osc.sendFeedback)
osc.sendMessage(e.component->name, e.getName(), e.data, e.numData);
#endif
}

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,8 +13,7 @@ bool initInternal(JsonObject o) override;

void onChildComponentEvent(const ComponentEvent &e) override;

// void sendParameterFeedback(Component *c, Parameter *param);
void sendParamFeedback(Component *c, void* param, const String& pName, Component::ParamType pType);
void sendParamFeedback(Component *c, void *param, const String &pName, Component::ParamType pType);
void sendMessage(Component *c, const String &mName, const String &val);
void sendEventFeedback(const ComponentEvent &e);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@ ImplementSingleton(OSCComponent)

AddStringParam(remoteHost);
AddBoolParam(isAlive);
AddBoolParam(sendFeedback);

return true;
}
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -43,6 +43,7 @@ DeclareComponentEventNames("MessageReceived");

HandleSetParamInternalStart
CheckAndSetParam(remoteHost);
CheckAndSetParam(sendFeedback);
HandleSetParamInternalEnd;

FillSettingsInternalStart
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,9 @@ bool SerialComponent::initInternal(JsonObject o)
bufferIndex = 0;
memset(buffer, 0, 512);
Serial.begin(115200);
// AddAndSetParameter(sendFeedback);

AddBoolParam(sendFeedback);

return true;
}

Expand Down Expand Up @@ -49,9 +51,6 @@ void SerialComponent::processMessage(String buffer)

void SerialComponent::sendMessage(String source, String command, var *data, int numData)
{

// if (!sendFeedback.boolValue())
// return;

String msg = source + "." + command;
for (int i = 0; i < numData; i++)
Expand Down
Original file line number Diff line number Diff line change
@@ -1,23 +1,33 @@
#pragma once

DeclareComponentSingleton(Serial, "serial",)
DeclareComponentSingleton(Serial, "serial", )

char buffer[512];
byte bufferIndex;
byte bufferIndex;
DeclareBoolParam(sendFeedback, false);

// Parameter sendFeedback{"sendFeedback", false, var(), var(), true};
bool initInternal(JsonObject o) override;
void updateInternal() override;
void clearInternal() override;

bool initInternal(JsonObject o) override;
void updateInternal() override;
void clearInternal() override;
void processMessage(String buffer);
void sendMessage(String source, String command, var *data, int numData);


void processMessage(String buffer);
void sendMessage(String source, String command, var * data, int numData);
void send(const String &message);

void send(const String &message);
DeclareComponentEventTypes(MessageReceived);
DeclareComponentEventNames("MessageReceived");

DeclareComponentEventTypes(MessageReceived);
DeclareComponentEventNames("MessageReceived");
HandleSetParamInternalStart
CheckAndSetParam(sendFeedback);
HandleSetParamInternalEnd;

EndDeclareComponent
FillSettingsInternalStart
FillSettingsParam(sendFeedback);
FillSettingsInternalEnd;

FillOSCQueryInternalStart
FillOSCQueryBoolParam(sendFeedback);
FillOSCQueryInternalEnd

EndDeclareComponent
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ class ButtonComponent : public IOComponent
// #endif

// HandleSetParamInternalStart
// HandleSetParamMotherClass(IOComponent)
// HandleSetParamInternalMotherClass(IOComponent)
// HandleSetParamInternalEnd;

// FillSettingsInternalStart
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,22 @@ bool LedStripStreamLayer::initInternal(JsonObject o)
{
LedStripLayer::initInternal(o);

// delay(100);
AddIntParam(universe);
AddBoolParam(clearOnNoReception);
AddFloatParam(noReceptionTime);

LedStreamReceiverComponent::instance->registerLayer(this);

return true;
}

void LedStripStreamLayer::updateInternal()
{
if (!hasCleared && clearOnNoReception && millis() / 1000.0f - lastReceiveTime > noReceptionTime)
{
clearColors();
hasCleared = true;
}
}

void LedStripStreamLayer::clearInternal()
Expand All @@ -37,7 +45,8 @@ bool LedStreamReceiverComponent::initInternal(JsonObject o)

void LedStreamReceiverComponent::updateInternal()
{
if(!serverIsInit) return;
if (!serverIsInit)
return;

if (useArtnet)
{
Expand All @@ -49,9 +58,9 @@ void LedStreamReceiverComponent::updateInternal()
// DBG("UDP Read");
long curTime = millis();

if (curTime > lastReceiveTime + (1000 / receiveRate))
if (curTime > lastUDPReceiveTime + (1000 / receiveRate))
{
lastReceiveTime = curTime;
lastUDPReceiveTime = curTime;
receiveUDP();
}
}
Expand All @@ -65,7 +74,8 @@ void LedStreamReceiverComponent::clearInternal()

void LedStreamReceiverComponent::receiveUDP()
{
if(!udp.available()) return;
if (!udp.available())
return;

while (udp.parsePacket())
{
Expand Down Expand Up @@ -140,7 +150,7 @@ void LedStreamReceiverComponent::setupConnection()
}
}

void LedStreamReceiverComponent::paramValueChangedInternal(void* param)
void LedStreamReceiverComponent::paramValueChangedInternal(void *param)
{
if (param == &useArtnet)
{
Expand Down Expand Up @@ -184,18 +194,16 @@ void LedStreamReceiverComponent::unregisterLayer(LedStripStreamLayer *layer)
void LedStreamReceiverComponent::onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t *data)
{
// DBG("Received Artnet "+String(universe));
int stripIndex = universe - 1;

if (stripIndex < instance->layers.size())
for (auto &layer : instance->layers)
{
LedStripStreamLayer *layer = instance->layers[stripIndex];

if (universe != layer->universe)
continue;
// DBG("Received Artnet " + String(universe) + " " + String(length) + " " + String(sequence) + " " + String(stripIndex) + " " + String(layer->strip->count));
for (int i = 0; i < layer->strip->count && i < length; i++) layer->colors[i] = Color(data[i * 3], data[i * 3 + 1], data[i * 3 + 2]);
for (int i = 0; i < layer->strip->count && i < length; i++)
layer->colors[i] = Color(data[i * 3], data[i * 3 + 1], data[i * 3 + 2]);

layer->lastReceiveTime = millis() / 1000.0f;
layer->hasCleared = false;
// memcpy((uint8_t *)layer->colors, streamBuffer + 1, byteIndex - 2);
}
else
{
DBG("Strip " + String(stripIndex) + " does not exist");
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -12,15 +12,47 @@ class LedStripStreamLayer : public LedStripLayer
LedStripStreamLayer(LedStripComponent *strip) : LedStripLayer("streamLayer", LedStripLayer::Stream, strip) {}
~LedStripStreamLayer() {}

DeclareIntParam(universe, 0);
DeclareBoolParam(clearOnNoReception, false);
DeclareFloatParam(noReceptionTime, 1.0f);

bool hasCleared = false;
float lastReceiveTime = 0;

bool initInternal(JsonObject o) override;
void updateInternal() override;
void clearInternal() override;

HandleSetParamInternalStart
HandleSetParamInternalMotherClass(LedStripLayer)
CheckAndSetParam(universe);
CheckAndSetParam(clearOnNoReception);
CheckAndSetParam(noReceptionTime);
HandleSetParamInternalEnd;

FillSettingsInternalStart
FillSettingsInternalMotherClass(LedStripLayer)
FillSettingsParam(universe);
FillSettingsParam(clearOnNoReception);
FillSettingsParam(noReceptionTime);
FillSettingsInternalEnd;

FillOSCQueryInternalStart
FillOSCQueryInternalMotherClass(LedStripLayer)
FillOSCQueryIntParam(universe);
FillOSCQueryBoolParam(clearOnNoReception);
FillOSCQueryFloatParam(noReceptionTime);
FillOSCQueryInternalEnd;
};

// Stream receiver

DeclareComponentSingleton(LedStreamReceiver, "streamReceiver", )

WiFiUDP udp;
bool serverIsInit;
float lastUDPReceiveTime = 0;

DeclareIntParam(receiveRate, 50);
DeclareBoolParam(useArtnet, true);

Expand All @@ -35,9 +67,8 @@ void onEnabledChanged() override;

void setupConnection();

void paramValueChangedInternal(void* param) override;
void paramValueChangedInternal(void *param) override;

long lastReceiveTime;
uint8_t streamBuffer[LEDSTREAM_MAX_PACKET_SIZE];
int byteIndex;

Expand All @@ -47,20 +78,19 @@ void registerLayer(LedStripStreamLayer *layer);
void unregisterLayer(LedStripStreamLayer *layer);
static void onDmxFrame(uint16_t universe, uint16_t length, uint8_t sequence, uint8_t *data);

HandleSetParamInternalStart
CheckAndSetParam(receiveRate);
CheckAndSetParam(useArtnet);
HandleSetParamInternalEnd;

HandleSetParamInternalStart
CheckAndSetParam(receiveRate);
CheckAndSetParam(useArtnet);
HandleSetParamInternalEnd;
FillSettingsInternalStart
FillSettingsParam(receiveRate);
FillSettingsParam(useArtnet);
FillSettingsInternalEnd;

FillSettingsInternalStart
FillSettingsParam(receiveRate);
FillSettingsParam(useArtnet);
FillSettingsInternalEnd;

FillOSCQueryInternalStart
FillOSCQueryIntParam(receiveRate);
FillOSCQueryBoolParam(useArtnet);
FillOSCQueryInternalEnd
FillOSCQueryInternalStart
FillOSCQueryIntParam(receiveRate);
FillOSCQueryBoolParam(useArtnet);
FillOSCQueryInternalEnd

EndDeclareComponent
EndDeclareComponent
Original file line number Diff line number Diff line change
Expand Up @@ -31,7 +31,7 @@ class LedStripComponent : public Component
#endif
#if USE_SCRIPTLAYER
,
scriptLayer("script", LedStripLayer::Type::ScriptType, this)
scriptLayer("scriptLayer", LedStripLayer::Type::ScriptType, this)
#endif
#if USE_SYSTEMLAYER
,
Expand Down

0 comments on commit 4319a7b

Please sign in to comment.