From b796b36ddbec332c7e6a6a16694370404946a29b Mon Sep 17 00:00:00 2001 From: Vyacheslav Pedash Date: Wed, 18 Nov 2020 23:42:37 +0200 Subject: Add "ethSwitch" node --- include/Device/Device.h | 2 ++ src/Device/Device.cpp | 41 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/include/Device/Device.h b/include/Device/Device.h index 3bea375..198cc67 100644 --- a/include/Device/Device.h +++ b/include/Device/Device.h @@ -10,6 +10,7 @@ class Device { bool verbose ; bool isRoot; rapidjson::Document capabilities; + rapidjson::Document ethSwitch; rapidjson::Document deviceInfo; static const std::vector apIdentifiers; rapidjson::Document accessoryCards; @@ -17,6 +18,7 @@ class Device { rapidjson::Document::AllocatorType& alloc = deviceInfo.GetAllocator(); rapidjson::Document::AllocatorType& accessoryCardsAlloc = accessoryCards.GetAllocator(); static std::map capabilityList; + static std::map ethSwitchList; static std::map deviceInfoList; static const std::regex apFilters; diff --git a/src/Device/Device.cpp b/src/Device/Device.cpp index 129cb14..558f947 100644 --- a/src/Device/Device.cpp +++ b/src/Device/Device.cpp @@ -34,6 +34,8 @@ std::map Device::capabilityList = {{"adc", false},{"battery", {"nodeRed", false},{"rs232", false},{"rs422", false},{"rs485", false},{"serial", false}, {"supercap", false},{"wifi", false}}; +std::map Device::ethSwitchList; + std::map Device::deviceInfoList = {{"deviceId", ""},{"hardwareVersion", ""}, {"imei", ""},{"macAddress", "00:00:00:00:00:00"},{"macBluetooth", "00:00:00:00:00:00"}, {"macWifi", "00:00:00:00:00:00"},{"productId", ""},{"uuid", ""},{"vendorId", ""}}; @@ -106,6 +108,8 @@ void Device::getSystemTreeJson(const char * dir_name) { accessoryCard.AddMember(rapidjson::Value().SetString(toCamelCase(d_name).c_str(), accessoryCardsAlloc), rapidjson::Value().SetString(fileData.c_str(), accessoryCardsAlloc), accessoryCardsAlloc); } else if (strcmp (dir_name, "capability") == 0 && fileData == "1") { capabilityList[toCamelCase(d_name)] = true; + } else if (strcmp (dir_name, "eth-switch") == 0) { + ethSwitchList[toCamelCase(d_name)] = fileData; } } else if ((entry->d_type != DT_LNK)){ if (deviceInfoList.count(toCamelCase(d_name)) > 0) { @@ -152,6 +156,7 @@ void Device::json() { void Device::load() { deviceInfo.SetObject(); capabilities.SetObject(); + ethSwitch.SetObject(); accessoryCards.SetArray(); getSystemTreeJson(""); if (!accessoryCard.IsNull()) { @@ -168,6 +173,41 @@ void Device::load() { capabilities.AddMember(rapidjson::Value().SetString(capability.first.c_str(), capability.first.length(), accessoryCardsAlloc), capability.second, accessoryCardsAlloc); } + + if (ethSwitchList.count("chip") && ethSwitchList.count("numPorts")) { + auto& ethSwitchAlloc = ethSwitch.GetAllocator(); + const std::string& chip = ethSwitchList.at("chip"); + ethSwitch.AddMember("chip", + rapidjson::Value().SetString(chip.c_str(), chip.length(), ethSwitchAlloc), + ethSwitchAlloc); + rapidjson::Value ports; + ports.SetObject(); + for (int i=0; i < std::stoi(ethSwitchList.at("numPorts")); ++i) { + const std::string num = std::to_string(i); + const std::string keyLabel = "port" + num + "Label"; + const std::string keyId = "port" + num + "Id"; + const std::string keyMac = "port" + num + "Mac";; + if (ethSwitchList.count(keyLabel) && + ethSwitchList.count(keyId) && + ethSwitchList.count(keyMac)) { + rapidjson::Value port; + port.SetObject(); + port.AddMember("id", rapidjson::Value().SetInt(std::stoi(ethSwitchList.at(keyId))), ethSwitchAlloc); + port.AddMember("mac", + rapidjson::Value().SetString(ethSwitchList.at(keyMac).c_str(), + ethSwitchList.at(keyMac).length(), + ethSwitchAlloc), + ethSwitchAlloc); + ports.AddMember(rapidjson::Value().SetString(ethSwitchList.at(keyLabel).c_str(), + ethSwitchList.at(keyLabel).length(), + ethSwitchAlloc), + std::move(port), + ethSwitchAlloc); + } + } + ethSwitch.AddMember("ports", std::move(ports), ethSwitchAlloc); + } + for (const auto device : deviceInfoList) { deviceInfo.AddMember(rapidjson::Value().SetString(device.first.c_str(), device.first.length(), alloc), rapidjson::Value().SetString(device.second.c_str(), @@ -175,6 +215,7 @@ void Device::load() { } deviceInfo.AddMember("capabilities", capabilities, alloc); + deviceInfo.AddMember("ethSwitch", ethSwitch, alloc); deviceInfo.AddMember("accessoryCards", accessoryCards, alloc); } -- cgit v1.2.3