diff --git a/packages/xod-arduino/platform/runtime.cpp b/packages/xod-arduino/platform/runtime.cpp index a9052bc9..c32b63dd 100644 --- a/packages/xod-arduino/platform/runtime.cpp +++ b/packages/xod-arduino/platform/runtime.cpp @@ -40,6 +40,8 @@ namespace _program { // and uint32_t if there are more than 65535 typedef uint16_t NodeId; + typedef NodeId Context; + /* * PinKey is an address value used to find input’s or output’s data within * node’s Storage. diff --git a/packages/xod-arduino/test/fixtures/impl.input.cpp b/packages/xod-arduino/test/fixtures/impl.input.cpp index 5a0ac593..c0df92ac 100644 --- a/packages/xod-arduino/test/fixtures/impl.input.cpp +++ b/packages/xod-arduino/test/fixtures/impl.input.cpp @@ -3,6 +3,6 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { +void evaluate(Context ctx) { /* Native implementation goes here */ } diff --git a/packages/xod-arduino/test/fixtures/implList.cpp b/packages/xod-arduino/test/fixtures/implList.cpp index 8e2e3cbd..027ea0ca 100644 --- a/packages/xod-arduino/test/fixtures/implList.cpp +++ b/packages/xod-arduino/test/fixtures/implList.cpp @@ -32,7 +32,7 @@ using input_IN2 = InputDescriptor; using output_OUT = OutputDescriptor; -void evaluate(NodeId nid) { +void evaluate(Context ctx) { /* Native implementation goes here */ } diff --git a/workspace/blink/__fixtures__/arduino.cpp b/workspace/blink/__fixtures__/arduino.cpp index 412a4112..af7c6bd0 100644 --- a/workspace/blink/__fixtures__/arduino.cpp +++ b/workspace/blink/__fixtures__/arduino.cpp @@ -679,6 +679,8 @@ namespace _program { // and uint32_t if there are more than 65535 typedef uint16_t NodeId; + typedef NodeId Context; + /* * PinKey is an address value used to find input’s or output’s data within * node’s Storage. @@ -937,25 +939,25 @@ using input_RST = InputDescriptor; using output_TICK = OutputDescriptor; -void evaluate(NodeId nid) { - State* state = getState(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); TimeMs tNow = transactionTime(); - TimeMs dt = getValue(nid) * 1000; + TimeMs dt = getValue(ctx) * 1000; TimeMs tNext = tNow + dt; - if (isInputDirty(nid)) { + if (isInputDirty(ctx)) { if (dt == 0) { state->nextTrig = 0; - clearTimeout(nid); + clearTimeout(ctx); } else if (state->nextTrig < tNow || state->nextTrig > tNext) { state->nextTrig = tNext; - setTimeout(nid, dt); + setTimeout(ctx, dt); } } else { // It was a scheduled tick - emitValue(nid, 1); + emitValue(ctx, 1); state->nextTrig = tNext; - setTimeout(nid, dt); + setTimeout(ctx, dt); } } @@ -983,9 +985,9 @@ State* getState(NodeId nid) { using input_PORT = InputDescriptor; using input_SIG = InputDescriptor; -void evaluate(NodeId nid) { - State* state = getState(nid); - const int port = (int)getValue(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); + const int port = (int)getValue(ctx); if (port != state->configuredPort) { ::pinMode(port, OUTPUT); // Store configured port so to avoid repeating `pinMode` call if just @@ -993,7 +995,7 @@ void evaluate(NodeId nid) { state->configuredPort = port; } - const bool val = getValue(nid); + const bool val = getValue(ctx); ::digitalWrite(port, val); } @@ -1026,12 +1028,12 @@ using input_RST = InputDescriptor; using output_MEM = OutputDescriptor; -void evaluate(NodeId nid) { - State* state = getState(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); bool newState = state->state; - if (isInputDirty(nid)) { + if (isInputDirty(ctx)) { newState = !state->state; - } else if (isInputDirty(nid)) { + } else if (isInputDirty(ctx)) { newState = true; } else { newState = false; @@ -1041,7 +1043,7 @@ void evaluate(NodeId nid) { return; state->state = newState; - emitValue(nid, newState); + emitValue(ctx, newState); } } // namespace xod__core__flip_flop @@ -1064,8 +1066,8 @@ State* getState(NodeId nid) { using output_VAL = OutputDescriptor; -void evaluate(NodeId nid) { - reemitValue(nid); +void evaluate(Context ctx) { + reemitValue(ctx); } } // namespace xod__core__constant_number diff --git a/workspace/lcd-time/__fixtures__/arduino.cpp b/workspace/lcd-time/__fixtures__/arduino.cpp index fe344071..f1cffb9c 100644 --- a/workspace/lcd-time/__fixtures__/arduino.cpp +++ b/workspace/lcd-time/__fixtures__/arduino.cpp @@ -679,6 +679,8 @@ namespace _program { // and uint32_t if there are more than 65535 typedef uint16_t NodeId; + typedef NodeId Context; + /* * PinKey is an address value used to find input’s or output’s data within * node’s Storage. @@ -934,8 +936,8 @@ using input_UPD = InputDescriptor; using output_TIME = OutputDescriptor; -void evaluate(NodeId nid) { - emitValue(nid, millis() / 1000.f); +void evaluate(Context ctx) { + emitValue(ctx, millis() / 1000.f); } } // namespace xod__core__system_time @@ -990,23 +992,23 @@ void printLine(LiquidCrystal* lcd, uint8_t lineIndex, XString str) { lcd->write(*it); } -void evaluate(NodeId nid) { - State* state = getState(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); auto lcd = state->lcd; if (!state->lcd) { state->lcd = lcd = new LiquidCrystal( - (int)getValue(nid), - (int)getValue(nid), - (int)getValue(nid), - (int)getValue(nid), - (int)getValue(nid), - (int)getValue(nid)); + (int)getValue(ctx), + (int)getValue(ctx), + (int)getValue(ctx), + (int)getValue(ctx), + (int)getValue(ctx), + (int)getValue(ctx)); lcd->begin(16, 2); } - printLine(lcd, 0, getValue(nid)); - printLine(lcd, 1, getValue(nid)); + printLine(lcd, 0, getValue(ctx)); + printLine(lcd, 1, getValue(ctx)); } } // namespace xod__common_hardware__text_lcd_16x2 @@ -1033,12 +1035,12 @@ using input_IN = InputDescriptor; using output_OUT = OutputDescriptor; -void evaluate(NodeId nid) { +void evaluate(Context ctx) { char str[16]; - auto num = getValue(nid); + auto num = getValue(ctx); dtostrf(num, 0, 2, str); auto xstr = ::xod::List::fromPlainArray(str, strlen(str)); - emitValue(nid, xstr); + emitValue(ctx, xstr); } } // namespace xod__core__cast_number_to_string @@ -1062,9 +1064,9 @@ State* getState(NodeId nid) { using output_TICK = OutputDescriptor; -void evaluate(NodeId nid) { - emitValue(nid, 1); - setTimeout(nid, 0); +void evaluate(Context ctx) { + emitValue(ctx, 1); + setTimeout(ctx, 0); } } // namespace xod__core__continuously @@ -1087,8 +1089,8 @@ State* getState(NodeId nid) { using output_VAL = OutputDescriptor; -void evaluate(NodeId nid) { - reemitValue(nid); +void evaluate(Context ctx) { + reemitValue(ctx); } } // namespace xod__core__constant_number @@ -1111,8 +1113,8 @@ State* getState(NodeId nid) { using output_VAL = OutputDescriptor; -void evaluate(NodeId nid) { - reemitValue(nid); +void evaluate(Context ctx) { + reemitValue(ctx); } } // namespace xod__core__constant_string diff --git a/workspace/lib/xod/common-hardware/servo/arduino.cpp b/workspace/lib/xod/common-hardware/servo/arduino.cpp index e0c11f05..146329c3 100644 --- a/workspace/lib/xod/common-hardware/servo/arduino.cpp +++ b/workspace/lib/xod/common-hardware/servo/arduino.cpp @@ -10,13 +10,13 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - State* state = getState(nid); - auto port = (int)getValue(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); + auto port = (int)getValue(ctx); if (port != state->configuredPort) { state->servo.attach(port); state->configuredPort = port; } - state->servo.write(getValue(nid) * 180); + state->servo.write(getValue(ctx) * 180); } diff --git a/workspace/lib/xod/common-hardware/text-lcd-16x2/arduino.cpp b/workspace/lib/xod/common-hardware/text-lcd-16x2/arduino.cpp index e5ca5a52..6971950d 100644 --- a/workspace/lib/xod/common-hardware/text-lcd-16x2/arduino.cpp +++ b/workspace/lib/xod/common-hardware/text-lcd-16x2/arduino.cpp @@ -18,21 +18,21 @@ void printLine(LiquidCrystal* lcd, uint8_t lineIndex, XString str) { lcd->write(*it); } -void evaluate(NodeId nid) { - State* state = getState(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); auto lcd = state->lcd; if (!state->lcd) { state->lcd = lcd = new LiquidCrystal( - (int)getValue(nid), - (int)getValue(nid), - (int)getValue(nid), - (int)getValue(nid), - (int)getValue(nid), - (int)getValue(nid)); + (int)getValue(ctx), + (int)getValue(ctx), + (int)getValue(ctx), + (int)getValue(ctx), + (int)getValue(ctx), + (int)getValue(ctx)); lcd->begin(16, 2); } - printLine(lcd, 0, getValue(nid)); - printLine(lcd, 1, getValue(nid)); + printLine(lcd, 0, getValue(ctx)); + printLine(lcd, 1, getValue(ctx)); } diff --git a/workspace/lib/xod/core/absolute/any.cpp b/workspace/lib/xod/core/absolute/any.cpp index 568eabff..6f0ca297 100644 --- a/workspace/lib/xod/core/absolute/any.cpp +++ b/workspace/lib/xod/core/absolute/any.cpp @@ -3,7 +3,7 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto x = getValue(nid); - emitValue(nid, abs(x)); +void evaluate(Context ctx) { + auto x = getValue(ctx); + emitValue(ctx, abs(x)); } diff --git a/workspace/lib/xod/core/add/any.cpp b/workspace/lib/xod/core/add/any.cpp index d4d1244c..d3786af6 100644 --- a/workspace/lib/xod/core/add/any.cpp +++ b/workspace/lib/xod/core/add/any.cpp @@ -3,8 +3,8 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto x = getValue(nid); - auto y = getValue(nid); - emitValue(nid, x + y); +void evaluate(Context ctx) { + auto x = getValue(ctx); + auto y = getValue(ctx); + emitValue(ctx, x + y); } diff --git a/workspace/lib/xod/core/analog-input/arduino.cpp b/workspace/lib/xod/core/analog-input/arduino.cpp index 52099cbc..68570ccb 100644 --- a/workspace/lib/xod/core/analog-input/arduino.cpp +++ b/workspace/lib/xod/core/analog-input/arduino.cpp @@ -4,12 +4,12 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - if (!isInputDirty(nid)) +void evaluate(Context ctx) { + if (!isInputDirty(ctx)) return; - State* state = getState(nid); - const int port = (int)getValue(nid); + State* state = getState(ctx); + const int port = (int)getValue(ctx); if (port != state->configuredPort) { ::pinMode(port, INPUT); // Store configured port so to avoid repeating `pinMode` on @@ -17,5 +17,5 @@ void evaluate(NodeId nid) { state->configuredPort = port; } - emitValue(nid, ::analogRead(port) / 1023.); + emitValue(ctx, ::analogRead(port) / 1023.); } diff --git a/workspace/lib/xod/core/and/any.cpp b/workspace/lib/xod/core/and/any.cpp index c9b1b36a..aba81eff 100644 --- a/workspace/lib/xod/core/and/any.cpp +++ b/workspace/lib/xod/core/and/any.cpp @@ -3,8 +3,8 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto a = getValue(nid); - auto b = getValue(nid); - emitValue(nid, a && b); +void evaluate(Context ctx) { + auto a = getValue(ctx); + auto b = getValue(ctx); + emitValue(ctx, a && b); } diff --git a/workspace/lib/xod/core/any/any.cpp b/workspace/lib/xod/core/any/any.cpp index 6338e5d7..99cb6986 100644 --- a/workspace/lib/xod/core/any/any.cpp +++ b/workspace/lib/xod/core/any/any.cpp @@ -3,9 +3,9 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - bool p1 = isInputDirty(nid); - bool p2 = isInputDirty(nid); +void evaluate(Context ctx) { + bool p1 = isInputDirty(ctx); + bool p2 = isInputDirty(ctx); if (p1 || p2) - emitValue(nid, true); + emitValue(ctx, true); } diff --git a/workspace/lib/xod/core/boot/any.cpp b/workspace/lib/xod/core/boot/any.cpp index b913d890..d334fff6 100644 --- a/workspace/lib/xod/core/boot/any.cpp +++ b/workspace/lib/xod/core/boot/any.cpp @@ -3,6 +3,6 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - emitValue(nid, 1); +void evaluate(Context ctx) { + emitValue(ctx, 1); } diff --git a/workspace/lib/xod/core/buffer/any.cpp b/workspace/lib/xod/core/buffer/any.cpp index cb149a6e..2332e2b4 100644 --- a/workspace/lib/xod/core/buffer/any.cpp +++ b/workspace/lib/xod/core/buffer/any.cpp @@ -4,15 +4,15 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - if (!isInputDirty(nid)) +void evaluate(Context ctx) { + if (!isInputDirty(ctx)) return; - State* state = getState(nid); - auto newValue = getValue(nid); + State* state = getState(ctx); + auto newValue = getValue(ctx); if (newValue == state->value) return; state->value = newValue; - emitValue(nid, newValue); + emitValue(ctx, newValue); } diff --git a/workspace/lib/xod/core/cast-boolean-to-number/any.cpp b/workspace/lib/xod/core/cast-boolean-to-number/any.cpp index 5aca7f85..5ac79020 100644 --- a/workspace/lib/xod/core/cast-boolean-to-number/any.cpp +++ b/workspace/lib/xod/core/cast-boolean-to-number/any.cpp @@ -3,6 +3,6 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - emitValue(nid, getValue(nid) ? 1.0 : 0.0); +void evaluate(Context ctx) { + emitValue(ctx, getValue(nid) ? 1.0 : 0.0); } diff --git a/workspace/lib/xod/core/cast-boolean-to-pulse/any.cpp b/workspace/lib/xod/core/cast-boolean-to-pulse/any.cpp index cb3ae86f..a527111b 100644 --- a/workspace/lib/xod/core/cast-boolean-to-pulse/any.cpp +++ b/workspace/lib/xod/core/cast-boolean-to-pulse/any.cpp @@ -4,12 +4,12 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - State* state = getState(nid); - auto newValue = getValue(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); + auto newValue = getValue(ctx); if (newValue == true && state->state == false) - emitValue(nid, 1); + emitValue(ctx, 1); state->state = newValue; } diff --git a/workspace/lib/xod/core/cast-boolean-to-string/any.cpp b/workspace/lib/xod/core/cast-boolean-to-string/any.cpp index 28f36e96..b705b54a 100644 --- a/workspace/lib/xod/core/cast-boolean-to-string/any.cpp +++ b/workspace/lib/xod/core/cast-boolean-to-string/any.cpp @@ -3,10 +3,10 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto x = getValue(nid); +void evaluate(Context ctx) { + auto x = getValue(ctx); auto xstr = x ? ::xod::List::fromPlainArray("true", 4) : ::xod::List::fromPlainArray("false", 5); - emitValue(nid, xstr); + emitValue(ctx, xstr); } diff --git a/workspace/lib/xod/core/cast-number-to-boolean/any.cpp b/workspace/lib/xod/core/cast-number-to-boolean/any.cpp index 9b5b3aed..0d401688 100644 --- a/workspace/lib/xod/core/cast-number-to-boolean/any.cpp +++ b/workspace/lib/xod/core/cast-number-to-boolean/any.cpp @@ -3,6 +3,6 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - emitValue(nid, getValue(nid) != 0.0); +void evaluate(Context ctx) { + emitValue(ctx, getValue(nid) != 0.0); } diff --git a/workspace/lib/xod/core/cast-number-to-string/any.cpp b/workspace/lib/xod/core/cast-number-to-string/any.cpp index 19316e83..71bed130 100644 --- a/workspace/lib/xod/core/cast-number-to-string/any.cpp +++ b/workspace/lib/xod/core/cast-number-to-string/any.cpp @@ -3,10 +3,10 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { +void evaluate(Context ctx) { char str[16]; - auto num = getValue(nid); + auto num = getValue(ctx); dtostrf(num, 0, 2, str); auto xstr = ::xod::List::fromPlainArray(str, strlen(str)); - emitValue(nid, xstr); + emitValue(ctx, xstr); } diff --git a/workspace/lib/xod/core/ceil/any.cpp b/workspace/lib/xod/core/ceil/any.cpp index ca9a5427..d0f5a5bb 100644 --- a/workspace/lib/xod/core/ceil/any.cpp +++ b/workspace/lib/xod/core/ceil/any.cpp @@ -3,7 +3,7 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto x = getValue(nid); - emitValue(nid, ceil(x)); +void evaluate(Context ctx) { + auto x = getValue(ctx); + emitValue(ctx, ceil(x)); } diff --git a/workspace/lib/xod/core/clock/any.cpp b/workspace/lib/xod/core/clock/any.cpp index d390ec5c..e89f8f9a 100644 --- a/workspace/lib/xod/core/clock/any.cpp +++ b/workspace/lib/xod/core/clock/any.cpp @@ -4,24 +4,24 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - State* state = getState(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); TimeMs tNow = transactionTime(); - TimeMs dt = getValue(nid) * 1000; + TimeMs dt = getValue(ctx) * 1000; TimeMs tNext = tNow + dt; - if (isInputDirty(nid)) { + if (isInputDirty(ctx)) { if (dt == 0) { state->nextTrig = 0; - clearTimeout(nid); + clearTimeout(ctx); } else if (state->nextTrig < tNow || state->nextTrig > tNext) { state->nextTrig = tNext; - setTimeout(nid, dt); + setTimeout(ctx, dt); } } else { // It was a scheduled tick - emitValue(nid, 1); + emitValue(ctx, 1); state->nextTrig = tNext; - setTimeout(nid, dt); + setTimeout(ctx, dt); } } diff --git a/workspace/lib/xod/core/concat/any.cpp b/workspace/lib/xod/core/concat/any.cpp index 7e57cdee..ce128cdd 100644 --- a/workspace/lib/xod/core/concat/any.cpp +++ b/workspace/lib/xod/core/concat/any.cpp @@ -3,8 +3,8 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto head = getValue(nid); - auto tail = getValue(nid); - emitValue(nid, head->concat(tail)); +void evaluate(Context ctx) { + auto head = getValue(ctx); + auto tail = getValue(ctx); + emitValue(ctx, head->concat(tail)); } diff --git a/workspace/lib/xod/core/console-log/arduino.cpp b/workspace/lib/xod/core/console-log/arduino.cpp index 41ec678e..297023c7 100644 --- a/workspace/lib/xod/core/console-log/arduino.cpp +++ b/workspace/lib/xod/core/console-log/arduino.cpp @@ -4,16 +4,16 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - if (!isInputDirty(nid)) +void evaluate(Context ctx) { + if (!isInputDirty(ctx)) return; - State* state = getState(nid); + State* state = getState(ctx); if (!state->begun) { Serial.begin(9600); } - auto line = getValue(nid); + auto line = getValue(ctx); if (line) { for (auto it = line->iterate(); it; ++it) Serial.write((char)*it); diff --git a/workspace/lib/xod/core/constant-boolean/any.cpp b/workspace/lib/xod/core/constant-boolean/any.cpp index 4c4ed6c3..d7013e0e 100644 --- a/workspace/lib/xod/core/constant-boolean/any.cpp +++ b/workspace/lib/xod/core/constant-boolean/any.cpp @@ -3,6 +3,6 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - reemitValue(nid); +void evaluate(Context ctx) { + reemitValue(ctx); } diff --git a/workspace/lib/xod/core/constant-number/any.cpp b/workspace/lib/xod/core/constant-number/any.cpp index cfe47d96..b42b7586 100644 --- a/workspace/lib/xod/core/constant-number/any.cpp +++ b/workspace/lib/xod/core/constant-number/any.cpp @@ -2,6 +2,6 @@ struct State {}; {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - reemitValue(nid); +void evaluate(Context ctx) { + reemitValue(ctx); } diff --git a/workspace/lib/xod/core/constant-string/any.cpp b/workspace/lib/xod/core/constant-string/any.cpp index cfe47d96..b42b7586 100644 --- a/workspace/lib/xod/core/constant-string/any.cpp +++ b/workspace/lib/xod/core/constant-string/any.cpp @@ -2,6 +2,6 @@ struct State {}; {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - reemitValue(nid); +void evaluate(Context ctx) { + reemitValue(ctx); } diff --git a/workspace/lib/xod/core/constrain/any.cpp b/workspace/lib/xod/core/constrain/any.cpp index dfc4f996..2721ef03 100644 --- a/workspace/lib/xod/core/constrain/any.cpp +++ b/workspace/lib/xod/core/constrain/any.cpp @@ -3,9 +3,9 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto x = getValue(nid); - auto minX = getValue(nid); - auto maxX = getValue(nid); - emitValue(nid, x < minX ? minX : (x > maxX ? maxX : x)); +void evaluate(Context ctx) { + auto x = getValue(ctx); + auto minX = getValue(ctx); + auto maxX = getValue(ctx); + emitValue(ctx, x < minX ? minX : (x > maxX ? maxX : x)); } diff --git a/workspace/lib/xod/core/continuously/any.cpp b/workspace/lib/xod/core/continuously/any.cpp index d2db0ec1..a5896cc4 100644 --- a/workspace/lib/xod/core/continuously/any.cpp +++ b/workspace/lib/xod/core/continuously/any.cpp @@ -3,7 +3,7 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - emitValue(nid, 1); - setTimeout(nid, 0); +void evaluate(Context ctx) { + emitValue(ctx, 1); + setTimeout(ctx, 0); } diff --git a/workspace/lib/xod/core/delay/any.cpp b/workspace/lib/xod/core/delay/any.cpp index 73e39d72..8b37e9b1 100644 --- a/workspace/lib/xod/core/delay/any.cpp +++ b/workspace/lib/xod/core/delay/any.cpp @@ -3,15 +3,15 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - TimeMs dt = getValue(nid) * 1000; +void evaluate(Context ctx) { + TimeMs dt = getValue(ctx) * 1000; - if (isInputDirty(nid)) { - clearTimeout(nid); - } else if (isInputDirty(nid)) { - setTimeout(nid, dt); + if (isInputDirty(ctx)) { + clearTimeout(ctx); + } else if (isInputDirty(ctx)) { + setTimeout(ctx, dt); } else { // It was a scheduled evaluation - emitValue(nid, true); + emitValue(ctx, true); } } diff --git a/workspace/lib/xod/core/digital-input/arduino.cpp b/workspace/lib/xod/core/digital-input/arduino.cpp index 8b82d7b7..5638416a 100644 --- a/workspace/lib/xod/core/digital-input/arduino.cpp +++ b/workspace/lib/xod/core/digital-input/arduino.cpp @@ -4,12 +4,12 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - if (!isInputDirty(nid)) +void evaluate(Context ctx) { + if (!isInputDirty(ctx)) return; - State* state = getState(nid); - const int port = (int)getValue(nid); + State* state = getState(ctx); + const int port = (int)getValue(ctx); if (port != state->configuredPort) { ::pinMode(port, INPUT); // Store configured port so to avoid repeating `pinMode` on @@ -17,5 +17,5 @@ void evaluate(NodeId nid) { state->configuredPort = port; } - emitValue(nid, ::digitalRead(port)); + emitValue(ctx, ::digitalRead(port)); } diff --git a/workspace/lib/xod/core/digital-output/arduino.cpp b/workspace/lib/xod/core/digital-output/arduino.cpp index 08bd12a6..2d018792 100644 --- a/workspace/lib/xod/core/digital-output/arduino.cpp +++ b/workspace/lib/xod/core/digital-output/arduino.cpp @@ -4,9 +4,9 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - State* state = getState(nid); - const int port = (int)getValue(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); + const int port = (int)getValue(ctx); if (port != state->configuredPort) { ::pinMode(port, OUTPUT); // Store configured port so to avoid repeating `pinMode` call if just @@ -14,6 +14,6 @@ void evaluate(NodeId nid) { state->configuredPort = port; } - const bool val = getValue(nid); + const bool val = getValue(ctx); ::digitalWrite(port, val); } diff --git a/workspace/lib/xod/core/divide/any.cpp b/workspace/lib/xod/core/divide/any.cpp index 3db6bc15..c3429161 100644 --- a/workspace/lib/xod/core/divide/any.cpp +++ b/workspace/lib/xod/core/divide/any.cpp @@ -3,8 +3,8 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto x = getValue(nid); - auto y = getValue(nid); - emitValue(nid, x / y); +void evaluate(Context ctx) { + auto x = getValue(ctx); + auto y = getValue(ctx); + emitValue(ctx, x / y); } diff --git a/workspace/lib/xod/core/equal/any.cpp b/workspace/lib/xod/core/equal/any.cpp index b19ac579..03864c4c 100644 --- a/workspace/lib/xod/core/equal/any.cpp +++ b/workspace/lib/xod/core/equal/any.cpp @@ -3,8 +3,8 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto lhs = getValue(nid); - auto rhs = getValue(nid); - emitValue(nid, lhs == rhs); +void evaluate(Context ctx) { + auto lhs = getValue(ctx); + auto rhs = getValue(ctx); + emitValue(ctx, lhs == rhs); } diff --git a/workspace/lib/xod/core/flip-flop/any.cpp b/workspace/lib/xod/core/flip-flop/any.cpp index 71d98e64..299e8ec2 100644 --- a/workspace/lib/xod/core/flip-flop/any.cpp +++ b/workspace/lib/xod/core/flip-flop/any.cpp @@ -4,12 +4,12 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - State* state = getState(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); bool newState = state->state; - if (isInputDirty(nid)) { + if (isInputDirty(ctx)) { newState = !state->state; - } else if (isInputDirty(nid)) { + } else if (isInputDirty(ctx)) { newState = true; } else { newState = false; @@ -19,5 +19,5 @@ void evaluate(NodeId nid) { return; state->state = newState; - emitValue(nid, newState); + emitValue(ctx, newState); } diff --git a/workspace/lib/xod/core/floor/any.cpp b/workspace/lib/xod/core/floor/any.cpp index dc275a1a..ebb8ac77 100644 --- a/workspace/lib/xod/core/floor/any.cpp +++ b/workspace/lib/xod/core/floor/any.cpp @@ -3,7 +3,7 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto x = getValue(nid); - emitValue(nid, floor(x)); +void evaluate(Context ctx) { + auto x = getValue(ctx); + emitValue(ctx, floor(x)); } diff --git a/workspace/lib/xod/core/format-number/any.cpp b/workspace/lib/xod/core/format-number/any.cpp index 0f42c805..51cf1950 100644 --- a/workspace/lib/xod/core/format-number/any.cpp +++ b/workspace/lib/xod/core/format-number/any.cpp @@ -3,11 +3,11 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { +void evaluate(Context ctx) { char str[16]; - auto num = getValue(nid); - auto dig = getValue(nid); + auto num = getValue(ctx); + auto dig = getValue(ctx); dtostrf(num, 0, dig, str); auto xstr = ::xod::List::fromPlainArray(str, strlen(str)); - emitValue(nid, xstr); + emitValue(ctx, xstr); } diff --git a/workspace/lib/xod/core/gate/any.cpp b/workspace/lib/xod/core/gate/any.cpp index 90a7bd5a..35d227b2 100644 --- a/workspace/lib/xod/core/gate/any.cpp +++ b/workspace/lib/xod/core/gate/any.cpp @@ -3,13 +3,13 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - if (!isInputDirty(nid)) +void evaluate(Context ctx) { + if (!isInputDirty(ctx)) return; - if (getValue(nid)) { - emitValue(nid, 1); + if (getValue(ctx)) { + emitValue(ctx, 1); } else { - emitValue(nid, 1); + emitValue(ctx, 1); } } diff --git a/workspace/lib/xod/core/greater/any.cpp b/workspace/lib/xod/core/greater/any.cpp index ccc194ba..39246eae 100644 --- a/workspace/lib/xod/core/greater/any.cpp +++ b/workspace/lib/xod/core/greater/any.cpp @@ -3,8 +3,8 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto lhs = getValue(nid); - auto rhs = getValue(nid); - emitValue(nid, lhs > rhs); +void evaluate(Context ctx) { + auto lhs = getValue(ctx); + auto rhs = getValue(ctx); + emitValue(ctx, lhs > rhs); } diff --git a/workspace/lib/xod/core/if-else/any.cpp b/workspace/lib/xod/core/if-else/any.cpp index 9f1d5d28..d422b1a5 100644 --- a/workspace/lib/xod/core/if-else/any.cpp +++ b/workspace/lib/xod/core/if-else/any.cpp @@ -3,9 +3,9 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto cond = getValue(nid); - auto trueVal = getValue(nid); - auto falseVal = getValue(nid); - emitValue(nid, cond ? trueVal : falseVal); +void evaluate(Context ctx) { + auto cond = getValue(ctx); + auto trueVal = getValue(ctx); + auto falseVal = getValue(ctx); + emitValue(ctx, cond ? trueVal : falseVal); } diff --git a/workspace/lib/xod/core/less/any.cpp b/workspace/lib/xod/core/less/any.cpp index 730ae95e..90089e67 100644 --- a/workspace/lib/xod/core/less/any.cpp +++ b/workspace/lib/xod/core/less/any.cpp @@ -2,8 +2,8 @@ struct State {}; {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto lhs = getValue(nid); - auto rhs = getValue(nid); - emitValue(nid, lhs < rhs); +void evaluate(Context ctx) { + auto lhs = getValue(ctx); + auto rhs = getValue(ctx); + emitValue(ctx, lhs < rhs); } diff --git a/workspace/lib/xod/core/map-range/any.cpp b/workspace/lib/xod/core/map-range/any.cpp index 75a448d4..2f7f8184 100644 --- a/workspace/lib/xod/core/map-range/any.cpp +++ b/workspace/lib/xod/core/map-range/any.cpp @@ -3,13 +3,13 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto x = getValue(nid); - auto sMin = getValue(nid); - auto sMax = getValue(nid); - auto tMin = getValue(nid); - auto tMax = getValue(nid); +void evaluate(Context ctx) { + auto x = getValue(ctx); + auto sMin = getValue(ctx); + auto sMax = getValue(ctx); + auto tMin = getValue(ctx); + auto tMax = getValue(ctx); auto k = (x - sMin) / (sMax - sMin); auto xm = tMin + k * (tMax - tMin); - emitValue(nid, xm); + emitValue(ctx, xm); } diff --git a/workspace/lib/xod/core/multiply/any.cpp b/workspace/lib/xod/core/multiply/any.cpp index f0368c7c..d4c2d9bd 100644 --- a/workspace/lib/xod/core/multiply/any.cpp +++ b/workspace/lib/xod/core/multiply/any.cpp @@ -3,8 +3,8 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto x = getValue(nid); - auto y = getValue(nid); - emitValue(nid, x * y); +void evaluate(Context ctx) { + auto x = getValue(ctx); + auto y = getValue(ctx); + emitValue(ctx, x * y); } diff --git a/workspace/lib/xod/core/nand/any.cpp b/workspace/lib/xod/core/nand/any.cpp index 2462e780..99a332dd 100644 --- a/workspace/lib/xod/core/nand/any.cpp +++ b/workspace/lib/xod/core/nand/any.cpp @@ -3,8 +3,8 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto a = getValue(nid); - auto b = getValue(nid); - emitValue(nid, !(a && b)); +void evaluate(Context ctx) { + auto a = getValue(ctx); + auto b = getValue(ctx); + emitValue(ctx, !(a && b)); } diff --git a/workspace/lib/xod/core/nor/any.cpp b/workspace/lib/xod/core/nor/any.cpp index 2d55dac1..5c50fb02 100644 --- a/workspace/lib/xod/core/nor/any.cpp +++ b/workspace/lib/xod/core/nor/any.cpp @@ -3,8 +3,8 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto a = getValue(nid); - auto b = getValue(nid); - emitValue(nid, !(a || b)); +void evaluate(Context ctx) { + auto a = getValue(ctx); + auto b = getValue(ctx); + emitValue(ctx, !(a || b)); } diff --git a/workspace/lib/xod/core/not/any.cpp b/workspace/lib/xod/core/not/any.cpp index 75dbd983..621e70e5 100644 --- a/workspace/lib/xod/core/not/any.cpp +++ b/workspace/lib/xod/core/not/any.cpp @@ -3,7 +3,7 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto x = getValue(nid); - emitValue(nid, !x); +void evaluate(Context ctx) { + auto x = getValue(ctx); + emitValue(ctx, !x); } diff --git a/workspace/lib/xod/core/or/any.cpp b/workspace/lib/xod/core/or/any.cpp index 1de710b7..2ffbd822 100644 --- a/workspace/lib/xod/core/or/any.cpp +++ b/workspace/lib/xod/core/or/any.cpp @@ -3,8 +3,8 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto a = getValue(nid); - auto b = getValue(nid); - emitValue(nid, a || b); +void evaluate(Context ctx) { + auto a = getValue(ctx); + auto b = getValue(ctx); + emitValue(ctx, a || b); } diff --git a/workspace/lib/xod/core/pwm-output/arduino.cpp b/workspace/lib/xod/core/pwm-output/arduino.cpp index 07686cfe..1f0edb00 100644 --- a/workspace/lib/xod/core/pwm-output/arduino.cpp +++ b/workspace/lib/xod/core/pwm-output/arduino.cpp @@ -4,9 +4,9 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - State* state = getState(nid); - const int port = (int)getValue(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); + const int port = (int)getValue(ctx); if (port != state->configuredPort) { ::pinMode(port, OUTPUT); // Store configured port so to avoid repeating `pinMode` call if just @@ -14,7 +14,7 @@ void evaluate(NodeId nid) { state->configuredPort = port; } - auto duty = getValue(nid); + auto duty = getValue(ctx); duty = duty > 1 ? 1 : (duty < 0 ? 0 : duty); uint8_t val = (uint8_t)(duty * 255.0); diff --git a/workspace/lib/xod/core/round/any.cpp b/workspace/lib/xod/core/round/any.cpp index a6ee908f..0055521e 100644 --- a/workspace/lib/xod/core/round/any.cpp +++ b/workspace/lib/xod/core/round/any.cpp @@ -3,7 +3,7 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto x = getValue(nid); - emitValue(nid, round(x)); +void evaluate(Context ctx) { + auto x = getValue(ctx); + emitValue(ctx, round(x)); } diff --git a/workspace/lib/xod/core/subtract/any.cpp b/workspace/lib/xod/core/subtract/any.cpp index 11ec75b4..18912b69 100644 --- a/workspace/lib/xod/core/subtract/any.cpp +++ b/workspace/lib/xod/core/subtract/any.cpp @@ -3,8 +3,8 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto x = getValue(nid); - auto y = getValue(nid); - emitValue(nid, x - y); +void evaluate(Context ctx) { + auto x = getValue(ctx); + auto y = getValue(ctx); + emitValue(ctx, x - y); } diff --git a/workspace/lib/xod/core/system-time/arduino.cpp b/workspace/lib/xod/core/system-time/arduino.cpp index 9da00cec..583f0638 100644 --- a/workspace/lib/xod/core/system-time/arduino.cpp +++ b/workspace/lib/xod/core/system-time/arduino.cpp @@ -3,6 +3,6 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - emitValue(nid, millis() / 1000.f); +void evaluate(Context ctx) { + emitValue(ctx, millis() / 1000.f); } diff --git a/workspace/lib/xod/core/xor/any.cpp b/workspace/lib/xod/core/xor/any.cpp index 3d84ad0c..ee06a7cc 100644 --- a/workspace/lib/xod/core/xor/any.cpp +++ b/workspace/lib/xod/core/xor/any.cpp @@ -3,8 +3,8 @@ struct State { {{ GENERATED_CODE }} -void evaluate(NodeId nid) { - auto a = getValue(nid); - auto b = getValue(nid); - emitValue(nid, a != b); +void evaluate(Context ctx) { + auto a = getValue(ctx); + auto b = getValue(ctx); + emitValue(ctx, a != b); } diff --git a/workspace/two-button-switch/__fixtures__/arduino.cpp b/workspace/two-button-switch/__fixtures__/arduino.cpp index 6b7e61ad..9d042581 100644 --- a/workspace/two-button-switch/__fixtures__/arduino.cpp +++ b/workspace/two-button-switch/__fixtures__/arduino.cpp @@ -679,6 +679,8 @@ namespace _program { // and uint32_t if there are more than 65535 typedef uint16_t NodeId; + typedef NodeId Context; + /* * PinKey is an address value used to find input’s or output’s data within * node’s Storage. @@ -938,14 +940,14 @@ using input_TRIG = InputDescriptor; using output_T = OutputDescriptor; using output_F = OutputDescriptor; -void evaluate(NodeId nid) { - if (!isInputDirty(nid)) +void evaluate(Context ctx) { + if (!isInputDirty(ctx)) return; - if (getValue(nid)) { - emitValue(nid, 1); + if (getValue(ctx)) { + emitValue(ctx, 1); } else { - emitValue(nid, 1); + emitValue(ctx, 1); } } @@ -976,12 +978,12 @@ using input_UPD = InputDescriptor; using output_SIG = OutputDescriptor; -void evaluate(NodeId nid) { - if (!isInputDirty(nid)) +void evaluate(Context ctx) { + if (!isInputDirty(ctx)) return; - State* state = getState(nid); - const int port = (int)getValue(nid); + State* state = getState(ctx); + const int port = (int)getValue(ctx); if (port != state->configuredPort) { ::pinMode(port, INPUT); // Store configured port so to avoid repeating `pinMode` on @@ -989,7 +991,7 @@ void evaluate(NodeId nid) { state->configuredPort = port; } - emitValue(nid, ::digitalRead(port)); + emitValue(ctx, ::digitalRead(port)); } } // namespace xod__core__digital_input @@ -1021,12 +1023,12 @@ using input_RST = InputDescriptor; using output_MEM = OutputDescriptor; -void evaluate(NodeId nid) { - State* state = getState(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); bool newState = state->state; - if (isInputDirty(nid)) { + if (isInputDirty(ctx)) { newState = !state->state; - } else if (isInputDirty(nid)) { + } else if (isInputDirty(ctx)) { newState = true; } else { newState = false; @@ -1036,7 +1038,7 @@ void evaluate(NodeId nid) { return; state->state = newState; - emitValue(nid, newState); + emitValue(ctx, newState); } } // namespace xod__core__flip_flop @@ -1063,9 +1065,9 @@ State* getState(NodeId nid) { using input_PORT = InputDescriptor; using input_SIG = InputDescriptor; -void evaluate(NodeId nid) { - State* state = getState(nid); - const int port = (int)getValue(nid); +void evaluate(Context ctx) { + State* state = getState(ctx); + const int port = (int)getValue(ctx); if (port != state->configuredPort) { ::pinMode(port, OUTPUT); // Store configured port so to avoid repeating `pinMode` call if just @@ -1073,7 +1075,7 @@ void evaluate(NodeId nid) { state->configuredPort = port; } - const bool val = getValue(nid); + const bool val = getValue(ctx); ::digitalWrite(port, val); } @@ -1098,9 +1100,9 @@ State* getState(NodeId nid) { using output_TICK = OutputDescriptor; -void evaluate(NodeId nid) { - emitValue(nid, 1); - setTimeout(nid, 0); +void evaluate(Context ctx) { + emitValue(ctx, 1); + setTimeout(ctx, 0); } } // namespace xod__core__continuously @@ -1123,8 +1125,8 @@ State* getState(NodeId nid) { using output_VAL = OutputDescriptor; -void evaluate(NodeId nid) { - reemitValue(nid); +void evaluate(Context ctx) { + reemitValue(ctx); } } // namespace xod__core__constant_number