Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/main' into HEAD
Browse files Browse the repository at this point in the history
  • Loading branch information
SzabolcsGergely committed Nov 22, 2021
2 parents abd1b6f + 28225f4 commit b199d07
Show file tree
Hide file tree
Showing 2 changed files with 98 additions and 0 deletions.
1 change: 1 addition & 0 deletions examples/CMakeLists.txt
Original file line number Diff line number Diff line change
Expand Up @@ -147,6 +147,7 @@ hunter_private_data(
dai_add_example(bootloader_version bootloader/bootloader_version.cpp ON)
dai_add_example(flash_bootloader bootloader/flash_bootloader.cpp OFF)
dai_add_example(bootloader_config bootloader/bootloader_config.cpp OFF)
dai_add_example(poe_set_ip bootloader/poe_set_ip.cpp OFF)

# calibration
dai_add_example(calibration_flash calibration/calibration_flash.cpp OFF)
Expand Down
97 changes: 97 additions & 0 deletions examples/bootloader/poe_set_ip.cpp
Original file line number Diff line number Diff line change
@@ -0,0 +1,97 @@
#include <chrono>
#include <string>
#include <iostream>

#include "depthai/depthai.hpp"
#include "depthai/xlink/XLinkConnection.hpp"

// for string delimiter
std::vector<int> split (std::string s, std::string delimiter) {
size_t pos_start = 0, pos_end, delim_len = delimiter.length();
std::string token;
std::vector<int> res;

while ((pos_end = s.find (delimiter, pos_start)) != std::string::npos) {
token = s.substr (pos_start, pos_end - pos_start);
pos_start = pos_end + delim_len;
res.push_back (stoi(token));
}
res.push_back(stoi(s.substr(pos_start)));
return res;
}

std::string checkStr(std::string str) {
std::vector<int> v = split (str, ".");
if(v.size() != 4) {
std::cout << "Entered value " << str << " doesn't contain 3 dots. Value has to be in the following format: '255.255.255.255'" << std::endl;
exit(0);
}
for (auto i : v) {
if(i < 0 || 255 < i) {
std::cout << "Entered values can't be above 255!" << std::endl;
exit(0);
}
}
return str;
}

int main(int argc, char** argv) {
bool found = false;
dai::DeviceInfo info;
std::tie(found, info) = dai::DeviceBootloader::getFirstAvailableDevice();
if(!found) {
std::cout << "No device found to flash. Exiting." << std::endl;
return -1;
}

std::cout << "Found device with name: " << info.getMxId() << std::endl;
std::cout << "-------------------------------------" << std::endl;
std::cout << "\"1\" to set a static IPv4 address" << std::endl;
std::cout << "\"2\" to set a dynamic IPv4 address" << std::endl;
std::cout << "\"3\" to clear the config" << std::endl;
auto key = std::cin.get();
std::cout << "-------------------------------------" << std::endl;

bool success = false;
std::string error;
dai::DeviceBootloader bl(info, true);
if(key == '1' || key == '2') {
std::string ip, mask, gateway, in;

std::cout << "Enter IPv4: ";
std::cin >> ip;
checkStr(ip);

std::cout << "Enter IPv4 Mask: ";
std::cin >> mask;
checkStr(mask);

std::cout << "Enter IPv4 Gateway: ";
std::cin >> gateway;
checkStr(gateway);

std::string mode = "static";
if(key == '2') mode = "dynamic";
std::cout << "Flashing " << mode << " IPv4 " << ip << ", mask " << mask << ", gateway " << gateway << " to the POE device. Enter 'y' to confirm. ";
std::cin >> in;
if(in != "y") {
std::cout << "Flashing aborted.";
return 0;
}
auto conf = dai::DeviceBootloader::Config();
if (key == '1') conf.setStaticIPv4(ip, mask, gateway);
else conf.setDynamicIPv4(ip, mask, gateway);

std::tie(success, error) = bl.flashConfig(conf);
}
else if(key == '3') {
std::tie(success, error) = bl.flashConfigClear();
}
else {
std::cout << "Entered value should either be '1', '2' or '3'!";
return 0;
}

if(success) std::cout << "Flashing successful." << std::endl;
else std::cout << "Flashing failed: " << error << std::endl;
}

0 comments on commit b199d07

Please sign in to comment.