/*
|
|
|
|
LightFox module
|
|
|
|
Copyright (C) 2019 by Andrey F. Kupreychik <foxle@quickfox.ru>
|
|
|
|
*/
|
|
|
|
#ifdef FOXEL_LIGHTFOX_DUAL
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// DEFINITIONS
|
|
// -----------------------------------------------------------------------------
|
|
|
|
#define LIGHTFOX_CODE_START 0xA0
|
|
#define LIGHTFOX_CODE_LEARN 0xF1
|
|
#define LIGHTFOX_CODE_CLEAR 0xF2
|
|
#define LIGHTFOX_CODE_STOP 0xA1
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// PUBLIC
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void lightfoxLearn() {
|
|
Serial.write(LIGHTFOX_CODE_START);
|
|
Serial.write(LIGHTFOX_CODE_LEARN);
|
|
Serial.write(0x00);
|
|
Serial.write(LIGHTFOX_CODE_STOP);
|
|
Serial.println();
|
|
Serial.flush();
|
|
DEBUG_MSG_P(PSTR("[LIGHTFOX] Learn comman sent\n"));
|
|
}
|
|
|
|
void lightfoxClear() {
|
|
Serial.write(LIGHTFOX_CODE_START);
|
|
Serial.write(LIGHTFOX_CODE_CLEAR);
|
|
Serial.write(0x00);
|
|
Serial.write(LIGHTFOX_CODE_STOP);
|
|
Serial.println();
|
|
Serial.flush();
|
|
DEBUG_MSG_P(PSTR("[LIGHTFOX] Clear comman sent\n"));
|
|
}
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// WEB
|
|
// -----------------------------------------------------------------------------
|
|
|
|
#if WEB_SUPPORT
|
|
|
|
void _lightfoxWebSocketOnConnected(JsonObject& root) {
|
|
root["lightfoxVisible"] = 1;
|
|
uint8_t buttonsCount = _buttons.size();
|
|
root["lightfoxRelayCount"] = relayCount();
|
|
JsonArray& rfb = root.createNestedArray("lightfoxButtons");
|
|
for (byte id=0; id<buttonsCount; id++) {
|
|
JsonObject& node = rfb.createNestedObject();
|
|
node["id"] = id;
|
|
node["relay"] = getSetting({"btnRelay", id}, 0);
|
|
}
|
|
}
|
|
|
|
void _lightfoxWebSocketOnAction(uint32_t client_id, const char * action, JsonObject& data) {
|
|
if (strcmp(action, "lightfoxLearn") == 0) lightfoxLearn();
|
|
if (strcmp(action, "lightfoxClear") == 0) lightfoxClear();
|
|
}
|
|
|
|
#endif
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// TERMINAL
|
|
// -----------------------------------------------------------------------------
|
|
|
|
#if TERMINAL_SUPPORT
|
|
|
|
void _lightfoxInitCommands() {
|
|
|
|
terminalRegisterCommand(F("LIGHTFOX.LEARN"), [](Embedis* e) {
|
|
lightfoxLearn();
|
|
DEBUG_MSG_P(PSTR("+OK\n"));
|
|
});
|
|
|
|
terminalRegisterCommand(F("LIGHTFOX.CLEAR"), [](Embedis* e) {
|
|
lightfoxClear();
|
|
DEBUG_MSG_P(PSTR("+OK\n"));
|
|
});
|
|
}
|
|
|
|
#endif
|
|
|
|
// -----------------------------------------------------------------------------
|
|
// SETUP & LOOP
|
|
// -----------------------------------------------------------------------------
|
|
|
|
void lightfoxSetup() {
|
|
|
|
#if WEB_SUPPORT
|
|
wsRegister()
|
|
.onConnected(_lightfoxWebSocketOnConnected)
|
|
.onAction(_lightfoxWebSocketOnAction);
|
|
#endif
|
|
|
|
#if TERMINAL_SUPPORT
|
|
_lightfoxInitCommands();
|
|
#endif
|
|
|
|
}
|
|
|
|
#endif
|