mirror of
https://github.com/xoseperez/espurna.git
synced 2026-03-21 23:57:06 +01:00
Convert .ino -> .cpp (#2228)
- general conversion from .ino modules into a separate .cpp files - clean-up internal headers, place libraries into .h. guard .cpp with _SUPPORT flags - fix some instances of shared variables instead of public methods - tweak build system to still build a single source file via os environment variable ESPURNA_BUILD_SINGLE_SOURCE
This commit is contained in:
66
code/espurna/rpc.cpp
Normal file
66
code/espurna/rpc.cpp
Normal file
@@ -0,0 +1,66 @@
|
||||
/*
|
||||
|
||||
Part of MQTT and API modules
|
||||
|
||||
Copyright (C) 2020 by Maxim Prokhorov <prokhorov dot max at outlook dot com>
|
||||
|
||||
*/
|
||||
|
||||
#include <Schedule.h>
|
||||
#include <cstring>
|
||||
|
||||
#include "system.h"
|
||||
#include "utils.h"
|
||||
#include "rpc.h"
|
||||
|
||||
bool rpcHandleAction(const String& action) {
|
||||
bool result = false;
|
||||
if (action.equals("reboot")) {
|
||||
result = true;
|
||||
schedule_function([]() {
|
||||
deferredReset(100, CUSTOM_RESET_RPC);
|
||||
});
|
||||
} else if (action.equals("heartbeat")) {
|
||||
result = true;
|
||||
schedule_function(heartbeat);
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
PayloadStatus rpcParsePayload(const char* payload, const rpc_payload_check_t ext_check) {
|
||||
|
||||
// Don't parse empty strings
|
||||
const auto len = strlen(payload);
|
||||
if (!len) return PayloadStatus::Unknown;
|
||||
|
||||
// Check most commonly used payloads
|
||||
if (len == 1) {
|
||||
if (payload[0] == '0') return PayloadStatus::Off;
|
||||
if (payload[0] == '1') return PayloadStatus::On;
|
||||
if (payload[0] == '2') return PayloadStatus::Toggle;
|
||||
return PayloadStatus::Unknown;
|
||||
}
|
||||
|
||||
// If possible, use externally provided payload checker
|
||||
if (ext_check) {
|
||||
const PayloadStatus result = ext_check(payload);
|
||||
if (result != PayloadStatus::Unknown) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
|
||||
// Finally, check for "OFF", "ON", "TOGGLE" (both lower and upper cases)
|
||||
String temp(payload);
|
||||
temp.trim();
|
||||
|
||||
if (temp.equalsIgnoreCase("off")) {
|
||||
return PayloadStatus::Off;
|
||||
} else if (temp.equalsIgnoreCase("on")) {
|
||||
return PayloadStatus::On;
|
||||
} else if (temp.equalsIgnoreCase("toggle")) {
|
||||
return PayloadStatus::Toggle;
|
||||
}
|
||||
|
||||
return PayloadStatus::Unknown;
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user