Bootloader Config¶
This example allows you to read/flash/clear bootloader on the device. You can specify
the .json
bootloader config file via cmd arguments, which will get flashed to the device.
Click on Bootloader for more information.
Note
We suggest using Device Manager, a GUI tool for interfacing with the bootloader and its configurations.
Demo¶
Example script output
~/depthai-python/examples$ python3 Bootloader/bootloader_config.py flash
Found device with name: 14442C10D1789ACD00-ma2480
Successfully flashed bootloader configuration
~/depthai-python/examples$ python3 Bootloader/bootloader_config.py read
Found device with name: 14442C10D1789ACD00-ma2480
Current flashed configuration
{'appMem': -1, 'network': {'ipv4': 0, 'ipv4Dns': 0, 'ipv4DnsAlt': 0, 'ipv4Gateway': 0, 'ipv4Mask': 0, 'ipv6': [0, 0, 0, 0], 'ipv6Dns': [0, 0, 0, 0], 'ipv6DnsAlt': [0, 0, 0, 0], 'ipv6Gateway': [0, 0, 0, 0], 'ipv6Prefix': 0, 'mac': [0, 0, 0, 0, 0, 0], 'staticIpv4': False, 'staticIpv6': False, 'timeoutMs': 30000}, 'usb': {'maxUsbSpeed': 3, 'pid': 63036, 'timeoutMs': 3000, 'vid': 999}}
Setup¶
Please run the install script to download all required dependencies. Please note that this script must be ran from git context, so you have to download the depthai-python repository first and then run the script
git clone https://github.com/luxonis/depthai-python.git
cd depthai-python/examples
python3 install_requirements.py
For additional information, please follow installation guide
Source code¶
Also available on GitHub
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | #!/usr/bin/env python3 import depthai as dai import sys import json usage = False read = True clear = False path = '' if len(sys.argv) >= 2: op = sys.argv[1] if op == 'read': read = True elif op == 'flash': read = False if len(sys.argv) >= 3: path = sys.argv[2] elif op == 'clear': clear = True read = False else: usage = True else: usage = True if usage: print(f'Usage: {sys.argv[0]} [read/flash/clear] [flash: path/to/config/json]') exit(-1) (res, info) = dai.DeviceBootloader.getFirstAvailableDevice() if res: print(f'Found device with name: {info.name}'); with dai.DeviceBootloader(info) as bl: try: if read: print('Current flashed configuration') print(json.dumps(bl.readConfigData())) else: success = None error = None if clear: (success, error) = bl.flashConfigClear() else: if path == '': (success, error) = bl.flashConfig(dai.DeviceBootloader.Config()) else: (success, error) = bl.flashConfigFile(path) if success: print('Successfully flashed bootloader configuration') else: print(f'Error flashing bootloader configuration: {error}') except Exception as ex: print(f'Error accessing config: {ex}') else: print('No devices found') |
Also available on GitHub
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 | #include "depthai/depthai.hpp" int main(int argc, char** argv) { // Options bool usage = false, read = true, clear = false; std::string path = ""; if(argc >= 2) { std::string op = argv[1]; if(op == "read") { read = true; } else if(op == "flash") { read = false; if(argc >= 3) { path = argv[2]; } } else if(op == "clear") { clear = true; read = false; } else if(op == "clear") { clear = true; read = false; } else { usage = true; } } else { usage = true; } if(usage) { std::cout << "Usage: " << argv[0] << " [read/flash/clear] [flash: path/to/config/json]" << std::endl; return -1; } // DeviceBootloader configuration bool res = false; dai::DeviceInfo info; std::tie(res, info) = dai::DeviceBootloader::getFirstAvailableDevice(); if(res) { std::cout << "Found device with name: " << info.name << std::endl; dai::DeviceBootloader bl(info); try { if(read) { std::cout << "Current flashed configuration\n" << bl.readConfigData().dump(4) << std::endl; } else { std::cout << "Warning! Flashing bootloader config can potentially soft brick your device and should be done with caution." << std::endl; std::cout << "Do not unplug your device while the bootloader config is flashing." << std::endl; std::cout << "Type 'y' and press enter to proceed, otherwise exits: "; std::cin.ignore(); if(std::cin.get() != 'y') { std::cout << "Prompt declined, exiting..." << std::endl; return -1; } bool success; std::string error; if(clear) { std::tie(success, error) = bl.flashConfigClear(); } else { if(path.empty()) { std::tie(success, error) = bl.flashConfig(dai::DeviceBootloader::Config{}); } else { std::tie(success, error) = bl.flashConfigFile(path); } } if(success) { std::cout << "Successfully flashed bootloader configuration\n"; } else { std::cout << "Error flashing bootloader configuration: " << error; } } } catch(const std::exception& ex) { std::cout << "Error accessing config: " << ex.what() << std::endl; } } else { std::cout << "No devices found" << std::endl; } return 0; } |