flash_user_bootloader.cpp
Go to the documentation of this file.
1 #include <chrono>
2 #include <string>
3 
4 #include "XLink/XLink.h"
5 #include "depthai/depthai.hpp"
7 
8 static const char* ProtocolToStr(XLinkProtocol_t val) {
9  switch(val) {
10  case X_LINK_USB_VSC:
11  return "X_LINK_USB_VSC";
12  case X_LINK_USB_CDC:
13  return "X_LINK_USB_CDC";
14  case X_LINK_PCIE:
15  return "X_LINK_PCIE";
16  case X_LINK_IPC:
17  return "X_LINK_IPC";
18  case X_LINK_TCP_IP:
19  return "X_LINK_TCP_IP";
20  case X_LINK_NMB_OF_PROTOCOLS:
21  return "X_LINK_NMB_OF_PROTOCOLS";
22  case X_LINK_ANY_PROTOCOL:
23  return "X_LINK_ANY_PROTOCOL";
24  default:
25  return "INVALID_ENUM_VALUE";
26  break;
27  }
28 }
29 
30 int main(int argc, char** argv) try {
31  using namespace std::chrono;
32 
35  if(deviceInfos.empty()) {
36  std::cout << "No device found to flash. Exiting." << std::endl;
37  return -1;
38  } else {
39  for(int i = 0; i < deviceInfos.size(); i++) {
40  const auto& devInfo = deviceInfos[i];
41  std::cout << "[" << i << "] " << devInfo.getMxId() << "[" << ProtocolToStr(devInfo.protocol) << "]";
42  if(devInfo.state == X_LINK_BOOTLOADER) {
43  dai::DeviceBootloader bl(devInfo);
44  std::cout << " current bootloader: " << bl.getVersion();
45  }
46  std::cout << std::endl;
47  }
48  int selected = 0;
49  std::cout << "Which DepthAI device to flash bootloader for (Note: Only NETWORK supported) [0.." << deviceInfos.size() - 1 << "]\n";
50  std::cin >> selected;
51  info = deviceInfos[selected];
52  }
53 
55 
56  // Create a progress callback lambda
57  auto progress = [](float p) { std::cout << "Flashing Progress..." << p * 100 << "%" << std::endl; };
58 
59  std::cout << "Flashing User Bootloader..." << std::endl;
60  auto t1 = steady_clock::now();
61  bool success = false;
62  std::string message;
63  std::tie(success, message) = bl.flashUserBootloader(progress);
64  if(success) {
65  std::cout << "Flashing successful. Took " << duration_cast<milliseconds>(steady_clock::now() - t1).count() << "ms" << std::endl;
66  } else {
67  std::cout << "Flashing failed: " << message << std::endl;
68  }
69  return 0;
70 } catch(const std::exception& ex) {
71  std::cout << "Exception: " << ex.what() << std::endl;
72 }
dai::DeviceBootloader
Definition: DeviceBootloader.hpp:29
dai::DeviceInfo
Definition: XLinkConnection.hpp:27
dai::logger::info
void info(const FormatString &fmt, Args &&...args)
Definition: Logging.hpp:78
dai::DeviceBootloader::flashUserBootloader
std::tuple< bool, std::string > flashUserBootloader(std::function< void(float)> progressCallback, const dai::Path &path={})
Definition: DeviceBootloader.cpp:940
depthai.hpp
dai::DeviceBootloader::getVersion
Version getVersion() const
Definition: DeviceBootloader.cpp:599
XLinkConnection.hpp
main
int main(int argc, char **argv)
Definition: flash_user_bootloader.cpp:30
ProtocolToStr
static const char * ProtocolToStr(XLinkProtocol_t val)
Definition: flash_user_bootloader.cpp:8
dai::DeviceBootloader::getAllAvailableDevices
static std::vector< DeviceInfo > getAllAvailableDevices()
Definition: DeviceBootloader.cpp:63


depthai
Author(s): Martin Peterlin
autogenerated on Sat Mar 22 2025 02:58:19