diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..ed8ebf5 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +__pycache__ \ No newline at end of file diff --git a/README.md b/README.md index 513605c..ab37d6b 100644 --- a/README.md +++ b/README.md @@ -2,6 +2,58 @@ This repository contains the hardware specifications for the DepthAI boards. +## Directory structure + +The `batch` folder contains a file for each device type, which looks like this: +```json +{ + "title": "", + "description": "", + "options": { + "bootloader": "", + "environment": "", + ... + }, + "variants": [ + { + "title": "", + "description": "", + "options": { + "bootloader": "", + "environment": "", + ... + }, + "eeprom": "", + "board_config_file": "", + }, ... + ] +} +``` +> Fields that are not specified here should be considered deprecated. + +`options` field is used to specify the device properties such as bootloader type, required python environment, settings used for calibration, tests that should be run, etc. They can be specified at device level or at variant level. If they are specified at variant level, they will override the device level settings. + +> If a specific device needs a special treatment during calibration, flashing, etc. it should be specified in the `options` field. Code such as `if "POE" in device_name:` should be __avoided at all costs__! + +`eeprom` field specifies the path to the EEPROM configuration file. EEPROM configuration files are located in the `batch/eeprom` folder and they look like this: + +```json +{ + "batchName": , + "batchTime": , + "boardConf": "nIR-C30M00-00", + "boardName": "BC2087", + "boardRev": "R0M0E0", + "productName": "OAK-D-LR", + "boardCustom": "", + "hardwareConf": "F1-FV00-BC000", + "boardOptions": 1025, + "version": 7 +} +``` + +`board_config_file` field specifies the path to the baord config file. They are located in the `boards` folder. Board config file is used to specifiy camera extrinsics and other board specific settings. + ### Instructions Add this repository with diff --git a/__init__.py b/__init__.py new file mode 100644 index 0000000..b0d1a5d --- /dev/null +++ b/__init__.py @@ -0,0 +1 @@ +# this file exists only to mark this directory as a python package \ No newline at end of file diff --git a/batch/eeprom/DM1097_R2M0E2_oak_d_cm4.json b/batch/eeprom/DM1097_R2M0E2_oak_d_cm4.json new file mode 100644 index 0000000..6a79c57 --- /dev/null +++ b/batch/eeprom/DM1097_R2M0E2_oak_d_cm4.json @@ -0,0 +1,12 @@ +{ + "batchName": "Maxwell", + "batchTime": 0, + "boardConf": "nIR-C00M00-00", + "boardName": "DM1097", + "boardRev": "R2M0E2", + "productName": "OAK-D-CM4", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC000", + "boardOptions": 0, + "version": 7 +} \ No newline at end of file diff --git a/batch/eeprom/DM2080_R0M0E0_oak_d_sr.json b/batch/eeprom/DM2080_R0M0E0_oak_d_sr.json index 49bf3fa..e656115 100644 --- a/batch/eeprom/DM2080_R0M0E0_oak_d_sr.json +++ b/batch/eeprom/DM2080_R0M0E0_oak_d_sr.json @@ -4,7 +4,7 @@ "boardConf": "nIR-C00M00-00", "boardName": "DM2080", "boardRev": "R0M0E0", - "productName": "OAK-D SR", + "productName": "OAK-D-SR", "boardCustom": "", "hardwareConf": "F1-FV00-BC000", "boardOptions": 8, diff --git a/batch/eeprom/DM2097_R1M1E1_oak_d_cm4_poe.json b/batch/eeprom/DM2097_R1M1E1_oak_d_cm4_poe.json new file mode 100644 index 0000000..bf16c4d --- /dev/null +++ b/batch/eeprom/DM2097_R1M1E1_oak_d_cm4_poe.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "nIR-C00M00-00", + "boardName": "DM2097", + "boardRev": "R1M1E1", + "productName": "OAK-D-CM4-POE", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC000", + "boardOptions": 0, + "version": 7 +} \ No newline at end of file diff --git a/batch/eeprom/DM2097_R3M1E4_oak_d_cm4_poe.json b/batch/eeprom/DM2097_R3M1E4_oak_d_cm4_poe.json new file mode 100644 index 0000000..6c1094f --- /dev/null +++ b/batch/eeprom/DM2097_R3M1E4_oak_d_cm4_poe.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "nIR-C00M00-00", + "boardName": "DM2097", + "boardRev": "R3M1E4", + "productName": "OAK-D-CM4-POE", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC000", + "boardOptions": 0, + "version": 7 +} \ No newline at end of file diff --git a/batch/eeprom/DM2097_R3M1E4_oak_d_cm4_poe_c11.json b/batch/eeprom/DM2097_R3M1E4_oak_d_cm4_poe_c11.json new file mode 100644 index 0000000..0270e7d --- /dev/null +++ b/batch/eeprom/DM2097_R3M1E4_oak_d_cm4_poe_c11.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "nIR-C11M00-00", + "boardName": "DM2097", + "boardRev": "R3M1E4", + "productName": "OAK-D-CM4-POE-C11", + "boardCustom": "", + "hardwareConf": "F1-FV00-BC000", + "boardOptions": 0, + "version": 7 +} \ No newline at end of file diff --git a/batch/eeprom/NG9093_R3M0E4_oak_1_af_c20.json b/batch/eeprom/NG9093_R3M0E4_oak_1_af_c20.json new file mode 100644 index 0000000..8f8a809 --- /dev/null +++ b/batch/eeprom/NG9093_R3M0E4_oak_1_af_c20.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "nIR-C20M99-00", + "boardName": "NG9093", + "boardRev": "R3M0E4", + "productName": "OAK-1-AF-C20", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC010", + "boardOptions": 0, + "version": 7 +} \ No newline at end of file diff --git a/batch/eeprom/NG9093_R3M0E4_oak_1_lite_af_c21.json b/batch/eeprom/NG9093_R3M0E4_oak_1_lite_af_c21.json new file mode 100644 index 0000000..e538e9b --- /dev/null +++ b/batch/eeprom/NG9093_R3M0E4_oak_1_lite_af_c21.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "nIR-C61M99-00", + "boardName": "NG9093", + "boardRev": "R3M0E4", + "productName": "OAK-1-AF-LITE-C21", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC010", + "boardOptions": 0, + "version": 7 +} \ No newline at end of file diff --git a/batch/oak_1.json b/batch/oak_1.json index 7d782c8..bbc73f4 100644 --- a/batch/oak_1.json +++ b/batch/oak_1.json @@ -8,52 +8,68 @@ { "title":"OAK-1 AF (NG9093 R2M0E3)", "description": "OAK-1 with Auto Focus", - "eeprom":"eeprom/NG9093_R2M0E3_oak_1_af.json" + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_af.json", + "board_config_file": "OAK-1.json" + }, + { + "title":"OAK-1 AF C20 (NG9093 R3M0E4)", + "description": "OAK-1 with Auto Focus, without enclosure", + "eeprom":"eeprom/NG9093_R3M0E4_oak_1_af_c20.json", + "board_config_file": "OAK-1.json" }, { "title":"OAK-1 FF C09 (NG9093 R2M0E3)", "description": "OAK-1 with Fixed Focus C09", - "eeprom":"eeprom/NG9093_R2M0E3_oak_1_ff_c09.json" + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_ff_c09.json", + "board_config_file": "OAK-1-C09.json" }, { "title":"OAK-1 FF (NG9093 R2M0E3)", "description": "OAK-1 with Fixed Focus", - "eeprom":"eeprom/NG9093_R2M0E3_oak_1_ff.json" + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_ff.json", + "board_config_file": "OAK-1.json" }, { "title":"OAK-1 Max (NG9093 R2M0E3)", "description": "OAK-1 Max", - "eeprom":"eeprom/NG9093_R2M0E3_oak_1_max.json" + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_max.json", + "board_config_file": "OAK-1-MAX.json" }, { "title":"OAK-1 W (NG9093 R2M0E3)", "description": "OAK-1 Wide Lens", - "eeprom":"eeprom/NG9093_R2M0E3_oak_1_w.json" + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_w.json", + "board_config_file": "OAK-1-W.json" }, { "title":"OAK-1 AF (NG9093 R3M0E4)", "description": "OAK-1 with Auto Focus", - "eeprom":"eeprom/NG9093_R3M0E4_oak_1_af.json" + "eeprom":"eeprom/NG9093_R3M0E4_oak_1_af.json", + "board_config_file": "OAK-1.json" }, { "title":"OAK-1 FF C09 (NG9093 R3M0E4)", "description": "OAK-1 with Fixed Focus C09", - "eeprom":"eeprom/NG9093_R3M0E4_oak_1_ff_c09.json" + "eeprom":"eeprom/NG9093_R3M0E4_oak_1_ff_c09.json", + "board_config_file": "OAK-1-C09.json" }, { "title":"OAK-1 FF (NG9093 R3M0E4)", "description": "OAK-1 with Fixed Focus", - "eeprom":"eeprom/NG9093_R3M0E4_oak_1_ff.json" + "eeprom":"eeprom/NG9093_R3M0E4_oak_1_ff.json", + "board_config_file": "OAK-1.json" }, { "title":"OAK-1 Max (NG9093 R3M0E4)", "description": "OAK-1 Max", - "eeprom":"eeprom/NG9093_R3M0E4_oak_1_max.json" + "eeprom":"eeprom/NG9093_R3M0E4_oak_1_max.json", + "board_config_file": "OAK-1-MAX.json" }, { "title":"OAK-1 W (NG9093 R3M0E4)", "description": "OAK-1 Wide Lens", - "eeprom":"eeprom/NG9093_R3M0E4_oak_1_w.json" + "eeprom":"eeprom/NG9093_R3M0E4_oak_1_w.json", + "board_config_file": "OAK-1-W.json" } ] } diff --git a/batch/oak_1_lite.json b/batch/oak_1_lite.json new file mode 100644 index 0000000..80fc64d --- /dev/null +++ b/batch/oak_1_lite.json @@ -0,0 +1,51 @@ +{ + "title": "OAK-1-LITE", + "description": "OAK-1-LITE", + "image": "images/oak_1_lite.jpg", + "test_type": "OAK-1-LITE", + "options": {"bootloader": "none"}, + "variants": [ + { + "title":"OAK-1 Lite C05 (NG9093 R2M0E3)", + "description": "OAK-1 Lite C05 based on NG9093 R2M0E3 board", + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_lite_c05.json", + "board_config_file": "OAK-1-LITE-C05.json" + }, + { + "title":"OAK-1 Lite AF C21 (NG9093 R3M0E4)", + "description": "OAK-1 Lite C21 based on NG9093 R3M0E4 board, without enclosure", + "eeprom":"eeprom/NG9093_R3M0E4_oak_1_lite_af_c21.json", + "board_config_file": "OAK-1-LITE.json" + }, + { + "title":"OAK-1 Lite W (NG9093 R2M0E3)", + "description": "OAK-1 Lite Wide Lens based on NG9093 R2M0E3 board", + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_lite_w.json", + "board_config_file": "OAK-1-LITE-W.json" + }, + { + "title":"OAK-1 Lite FF (NG9093 R2M0E3)", + "description": "OAK-1 Lite Fixed Focus based on NG9093 R2M0E3 board", + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_lite_ff.json", + "board_config_file": "OAK-1-LITE.json" + }, + { + "title":"OAK-1 Lite C05 (NG9093 R3M0E4)", + "description": "OAK-1 Lite C05 based on NG9093 R3M0E4 board", + "eeprom":"eeprom/NG9093_R3M0E4_oak_1_lite_c05.json", + "board_config_file": "OAK-1-LITE-C05.json" + }, + { + "title":"OAK-1 Lite W (NG9093 R3M0E4)", + "description": "OAK-1 Lite Wide Lens based on NG9093 R3M0E4 board", + "eeprom":"eeprom/NG9093_R3M0E4_oak_1_lite_w.json", + "board_config_file": "OAK-1-LITE-W.json" + }, + { + "title":"OAK-1 Lite FF (NG9093 R3M0E4)", + "description": "OAK-1 Lite Fixed Focus based on NG9093 R3M0E4 board", + "eeprom":"eeprom/NG9093_R3M0E4_oak_1_lite_ff.json", + "board_config_file": "OAK-1-LITE.json" + } + ] +} diff --git a/batch/oak_1_poe.json b/batch/oak_1_poe.json index ac3177f..34737b5 100644 --- a/batch/oak_1_poe.json +++ b/batch/oak_1_poe.json @@ -8,27 +8,32 @@ { "title":"OAK-1 PoE FF (SJ2096 R2M1E2)", "description": "OAK-1 PoE with Fixed Focus, based on SJ2096 R2M1E2 board", - "eeprom":"eeprom/SJ2096_R2M1E2_oak_1_poe_ff.json" + "eeprom":"eeprom/SJ2096_R2M1E2_oak_1_poe_ff.json", + "board_config_file": "OAK-1-POE.json" }, { "title":"OAK-1 PoE AF (SJ2096 R2M1E2)", "description": "OAK-1 PoE with Auto Focus, based on SJ2096 R2M1E2 board", - "eeprom":"eeprom/SJ2096_R2M1E2_oak_1_poe_af.json" + "eeprom":"eeprom/SJ2096_R2M1E2_oak_1_poe_af.json", + "board_config_file": "OAK-1-POE.json" }, { "title":"OAK-1 PoE FF (PA2096 R0M0E0)", "description": "OAK-1 PoE with Fixed Focus, based on PA2096 R0M0E0 board", - "eeprom":"eeprom/PA2096_R0M0E0_oak_1_poe_ff.json" + "eeprom":"eeprom/PA2096_R0M0E0_oak_1_poe_ff.json", + "board_config_file": "OAK-1-POE.json" }, { "title":"OAK-1 W PoE (PA2096 R0M0E0)", "description": "OAK-1 WideLens PoE, based on PA2096 R0M0E0 board", - "eeprom":"eeprom/PA2096_R0M0E0_oak_1_w_poe.json" + "eeprom":"eeprom/PA2096_R0M0E0_oak_1_w_poe.json", + "board_config_file": "OAK-1-W-POE.json" }, { "title":"OAK-1 W PoE OV9782 (PA2096 R0M0E0)", "description": "OAK-1 WideLens angle PoE, with OV9782", - "eeprom":"eeprom/PA2096_R0M0E0_oak_1_w_poe_9782.json" + "eeprom":"eeprom/PA2096_R0M0E0_oak_1_w_poe_9782.json", + "board_config_file": "OAK-1-W-POE-97.json" } ] } diff --git a/batch/oak_d.json b/batch/oak_d.json index 7ac6280..ff66941 100644 --- a/batch/oak_d.json +++ b/batch/oak_d.json @@ -8,12 +8,20 @@ { "title":"OAK-D (BW1098 R1M0E1)", "description": "OAK-D based on BW1098 R1M0E1 board", - "eeprom":"eeprom/BW1098_R1M0E1_oak_d.json" + "eeprom":"eeprom/BW1098_R1M0E1_oak_d.json", + "board_config_file": "OAK-D.json" }, { "title":"OAK-D W C15 (DM9098 R6M2E6)", "description": "OAK-D W C15 based on DM9098 R6M2E6 board, with wide lens (OV9782 center camera)", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_w_c15.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_w_c15.json", + "board_config_file": "OAK-D-W-97.json" + }, + { + "title":"OAK-D W (DM9098 R6M2E6)", + "description": "OAK-D Wide Lens, based on DM9098 R6M2E6 board", + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_w.json", + "board_config_file": "OAK-D-W.json" } ] } diff --git a/batch/oak_d_cm4.json b/batch/oak_d_cm4.json new file mode 100644 index 0000000..836c665 --- /dev/null +++ b/batch/oak_d_cm4.json @@ -0,0 +1,14 @@ +{ + "title": "OAK-D CM4", + "description": "OAK-D CM4", + "test_type": "OAK-D-CM4", + "options": {"bootloader": "none", "websocket_capture": true}, + "variants": [ + { + "title": "OAK-D CM4 (DM1097 R2M0E2)", + "description": "OAK-D CM4, based on DM1097 R2M0E2 board", + "eeprom": "eeprom/DM1097_R2M0E2_oak_d_cm4.json", + "board_config_file": "OAK-D-CM4.json" + } + ] +} \ No newline at end of file diff --git a/batch/oak_d_cm4_poe.json b/batch/oak_d_cm4_poe.json new file mode 100644 index 0000000..ff796a8 --- /dev/null +++ b/batch/oak_d_cm4_poe.json @@ -0,0 +1,26 @@ +{ + "title": "OAK-D CM4 PoE", + "description": "OAK-D CM4 PoE", + "test_type": "OAK-D-CM4-POE", + "options": {"bootloader": "none", "websocket_capture": true}, + "variants": [ + { + "title": "OAK-D CM4 PoE (DM2097 R3M1E4)", + "description": "OAK-D CM4 PoE, based on DM2097 R1M1E1 board", + "eeprom": "eeprom/DM2097_R1M1E1_oak_d_cm4_poe.json", + "board_config_file": "OAK-D-CM4-POE.json" + }, + { + "title": "OAK-D CM4 PoE C11 (DM2097 R3M1E4)", + "description": "OAK-D CM4 PoE, based on DM2097 R3M1E4 board", + "eeprom": "eeprom/DM2097_R3M1E4_oak_d_cm4_poe_c11.json", + "board_config_file": "OAK-D-CM4-POE-C11.json" + }, + { + "title": "OAK-D CM4 PoE (DM2097 R1M1E1)", + "description": "OAK-D CM4 PoE, based on DM2097 R1M1E1 board", + "eeprom": "eeprom/DM2097_R1M1E1_oak_d_cm4_poe.json", + "board_config_file": "OAK-D-CM4-POE.json" + } + ] +} \ No newline at end of file diff --git a/batch/oak_d_lite.json b/batch/oak_d_lite.json index 9eeb953..d5747e3 100644 --- a/batch/oak_d_lite.json +++ b/batch/oak_d_lite.json @@ -8,53 +8,20 @@ { "title":"OAK-D Lite (DM9095 R3M2E4)", "description": "OAK-D Lite, based on DM9095 R3M2E4 board", - "eeprom":"eeprom/DM9095_R3M2E4_oak_d_lite.json" + "eeprom":"eeprom/DM9095_R3M2E4_oak_d_lite.json", + "board_config_file": "OAK-D-LITE.json" }, { "title":"OAK-D Lite AF (DM9095 R2M1E4)", "description": "OAK-D Lite Auto Focus, based on DM9095 R2M1E4 board", - "eeprom":"eeprom/DM9095_R2M1E4_oak_d_lite_af.json" + "eeprom":"eeprom/DM9095_R2M1E4_oak_d_lite_af.json", + "board_config_file": "OAK-D-LITE.json" }, { "title":"OAK-D Lite FF (DM9095 R2M1E4)", "description": "OAK-D Lite Fixed Focus, based on DM9095 R2M1E4 board", - "eeprom":"eeprom/DM9095_R2M1E4_oak_d_lite_ff.json" - }, - { - "title":"OAK-1 Lite C05 (NG9093 R2M0E3)", - "description": "OAK-1 Lite C05 based on NG9093 R2M0E3 board", - "eeprom":"eeprom/NG9093_R2M0E3_oak_1_lite_c05.json", - "test_type": "OAK-1-LITE" - }, - { - "title":"OAK-1 Lite W (NG9093 R2M0E3)", - "description": "OAK-1 Lite Wide Lens based on NG9093 R2M0E3 board", - "eeprom":"eeprom/NG9093_R2M0E3_oak_1_lite_w.json", - "test_type": "OAK-1-LITE" - }, - { - "title":"OAK-1 Lite FF (NG9093 R2M0E3)", - "description": "OAK-1 Lite Fixed Focus based on NG9093 R2M0E3 board", - "eeprom":"eeprom/NG9093_R2M0E3_oak_1_lite_ff.json", - "test_type": "OAK-1-LITE" - }, - { - "title":"OAK-1 Lite C05 (NG9093 R3M0E4)", - "description": "OAK-1 Lite C05 based on NG9093 R3M0E4 board", - "eeprom":"eeprom/NG9093_R3M0E4_oak_1_lite_c05.json", - "test_type": "OAK-1-LITE" - }, - { - "title":"OAK-1 Lite W (NG9093 R3M0E4)", - "description": "OAK-1 Lite Wide Lens based on NG9093 R3M0E4 board", - "eeprom":"eeprom/NG9093_R3M0E4_oak_1_lite_w.json", - "test_type": "OAK-1-LITE" - }, - { - "title":"OAK-1 Lite FF (NG9093 R3M0E4)", - "description": "OAK-1 Lite Fixed Focus based on NG9093 R3M0E4 board", - "eeprom":"eeprom/NG9093_R3M0E4_oak_1_lite_ff.json", - "test_type": "OAK-1-LITE" + "eeprom":"eeprom/DM9095_R2M1E4_oak_d_lite_ff.json", + "board_config_file": "OAK-D-LITE.json" } ] } diff --git a/batch/oak_d_lr.json b/batch/oak_d_lr.json index 081c6d9..77d25e5 100644 --- a/batch/oak_d_lr.json +++ b/batch/oak_d_lr.json @@ -8,7 +8,8 @@ { "title":"OAK-D LR (BC2087 R0M0E0)", "description": "OAK-D LR, based on BC2087 R0M0E0 board", - "eeprom":"eeprom/BC2087_R0M0E0_oak_d_lr.json" + "eeprom":"eeprom/BC2087_R0M0E0_oak_d_lr.json", + "board_config_file": "OAK-D-LR.json" } ] } diff --git a/batch/oak_d_poe.json b/batch/oak_d_poe.json index c97fc3c..769e51c 100644 --- a/batch/oak_d_poe.json +++ b/batch/oak_d_poe.json @@ -8,12 +8,44 @@ { "title":"OAK-D PoE AF (DM2088 R0M0E0)", "description": "OAK-D PoE with AutoFocus, based on DM2088 R0M0E0", - "eeprom":"eeprom/DM2088_R0M0E0_oak_d_poe_af.json" + "eeprom":"eeprom/DM2088_R0M0E0_oak_d_poe_af.json", + "board_config_file": "OAK-D-POE.json" }, { "title":"OAK-D PoE AF - 256Mbit NOR (DM2088 R0M0E0)", "description": "OAK-D PoE with AutoFocus and 256Mbit NOR, based on DM2088 R0M0E0", - "eeprom":"eeprom/DM2088_R0M0E0_oak_d_poe_af_256mbit.json" + "eeprom":"eeprom/DM2088_R0M0E0_oak_d_poe_af_256mbit.json", + "board_config_file": "OAK-D-POE.json" + }, + { + "title":"OAK-D W PoE (NG9097 R4M2E3 BMI270)", + "description": "OAK-D WideLens PoE, based on NG9097 R4M2E3 board with BMI270 IMU", + "eeprom":"eeprom/NG9097_R4M2E3_BMI270_oak_d_w_poe.json", + "board_config_file": "OAK-D-POE-W.json" + }, + { + "title":"OAK-D W PoE (NG9097 R4M2E3 BNO086)", + "description": "OAK-D WideLens PoE, based on NG9097 R4M2E3 board with BNO086 IMU", + "eeprom":"eeprom/NG9097_R4M2E3_BNO086_oak_d_w_poe.json", + "board_config_file": "OAK-D-POE-W.json" + }, + { + "title":"OAK-D W PoE (NG9097 R4M2E4 BMI270)", + "description": "OAK-D WideLens PoE, based on NG9097 R4M2E4 board with BMI270 IMU", + "eeprom":"eeprom/NG9097_R4M2E4_BMI270_oak_d_w_poe.json", + "board_config_file": "OAK-D-POE-W.json" + }, + { + "title":"OAK-D W PoE (NG9097 R4M2E4 BNO086)", + "description": "OAK-D WideLens PoE, based on NG9097 R4M2E4 board with BNO086 IMU", + "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_w_poe.json", + "board_config_file": "OAK-D-POE-W.json" + }, + { + "title":"OAK-D W PoE C12 (NG9097 R4M2E4 BMI270)", + "description": "OAK-D WideLens PoE C12, based on NG9097 R4M2E4 board with BMI270 IMU", + "eeprom":"eeprom/NG9097_R4M2E4_oak_d_w_poe_c12.json", + "board_config_file": "OAK-D-POE-W-C12.json" } ] } diff --git a/batch/oak_d_pro.json b/batch/oak_d_pro.json index 555fd95..21ef617 100644 --- a/batch/oak_d_pro.json +++ b/batch/oak_d_pro.json @@ -8,62 +8,74 @@ { "title":"OAK-D Pro AF PB (DM9098 R6M2E6)", "description": "OAK-D Pro, AutoFocus, with picoblade connector", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_af_pb.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_af_pb.json", + "board_config_file": "OAK-D-PRO.json" }, { "title":"OAK-D Pro AF (DM9098 R6M2E6)", "description": "OAK-D Pro AutoFocus", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_af.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_af.json", + "board_config_file": "OAK-D-PRO.json" }, { "title":"OAK-D Pro FF PB #1 (DM9098 R6M2E6)", "description": "OAK-D Pro, Fixed Focus, with picoblade connector", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_ff_pb_ff#1.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_ff_pb_ff#1.json", + "board_config_file": "OAK-D-PRO.json" }, { "title":"OAK-D Pro FF PB #2 (DM9098 R6M2E6)", "description": "OAK-D Pro, Fixed Focus, with picoblade connector", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_ff_pb_ff#2.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_ff_pb_ff#2.json", + "board_config_file": "OAK-D-PRO.json" }, { "title":"OAK-D Pro FF (DM9098 R6M2E6)", "description": "OAK-D Pro, Fixed Focus", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_ff.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_ff.json", + "board_config_file": "OAK-D-PRO.json" }, { "title":"OAK-D Pro FF C13 (DM9098 R6M2E6)", "description": "OAK-D Pro-PB C13, Fixed Focus with center camera IMX378, IR bandpass", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_ff_c13.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_ff_c13.json", + "board_config_file": "OAK-D-PRO.json" }, { "title":"OAK-D Pro FF C17 (DM9098 R6M2E6)", "description": "OAK-D Pro C17, Fixed Focus with center camera IMX378, IR bandpass", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_ff_c17.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_ff_c17.json", + "board_config_file": "OAK-D-PRO.json" }, { "title":"OAK-D Pro W-OV9782 (DM9098 R6M2E6)", "description": "OAK-D Pro Wide with center OV9782 camera", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_w_ov9782.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_w_ov9782.json", + "board_config_file": "OAK-D-PRO-W-97.json" }, { "title":"OAK-D Pro W (DM9098 R6M2E6)", "description": "OAK-D Pro Wide with center IMX378 camera", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_w.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_w.json", + "board_config_file": "OAK-D-PRO-W.json" }, { "title":"OAK-D Pro W C06 (DM9098 R6M2E6)", "description": "OAK-D Pro Wide C06 with center OV9782 camera", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_w_c06.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_w_c06.json", + "board_config_file": "OAK-D-PRO-W-97.json" }, { "title":"OAK-D Pro W C16 (DM9098 R6M2E6)", "description": "OAK-D Pro Wide C16 with center OV9782 camera, IR bandpass", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_w_c16.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_w_c16.json", + "board_config_file": "OAK-D-PRO-W-97.json" }, { "title":"OAK-D Pro W Dev (NG2094 R0M0E0)", "description": "OAK-D Pro Wide dev, based on NG2094 R0M0E0", - "eeprom":"eeprom/NG2094_R0M0E0_oak_d_pro_w_dev.json" + "eeprom":"eeprom/NG2094_R0M0E0_oak_d_pro_w_dev.json", + "board_config_file": "OAK-D-PRO-W.json" } ] } diff --git a/batch/oak_d_pro_poe.json b/batch/oak_d_pro_poe.json index d4470f0..8b413f1 100644 --- a/batch/oak_d_pro_poe.json +++ b/batch/oak_d_pro_poe.json @@ -8,97 +8,116 @@ { "title":"OAK-D Pro PoE AF (NG9097 R3M2E2)", "description": "OAK-D Pro PoE AutoFocus based on NG9097 R3M2E2", - "eeprom":"eeprom/NG9097_R3M2E2_oak_d_pro_poe_af.json" + "eeprom":"eeprom/NG9097_R3M2E2_oak_d_pro_poe_af.json", + "board_config_file": "OAK-D-PRO-POE.json" }, { "title":"OAK-D Pro PoE AF (NG9097 R4M2E3 BMI270)", "description": "OAK-D Pro PoE AutoFocus based on NG9097 R4M2E3 and BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_poe_af.json" + "eeprom":"eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_poe_af.json", + "board_config_file": "OAK-D-PRO-POE.json" }, { "title":"OAK-D Pro PoE AF (NG9097 R4M2E3 BNO086)", "description": "OAK-D Pro PoE AutoFocus based on NG9097 R4M2E3 and BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_poe_af.json" + "eeprom":"eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_poe_af.json", + "board_config_file": "OAK-D-PRO-POE.json" }, { "title":"OAK-D Pro PoE AF (NG9097 R4M2E4 BMI270)", "description": "OAK-D Pro PoE AutoFocus based on NG9097 R4M2E4 and BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BMI270_oak_d_pro_poe_af.json" + "eeprom":"eeprom/NG9097_R4M2E4_BMI270_oak_d_pro_poe_af.json", + "board_config_file": "OAK-D-PRO-POE.json" }, { "title":"OAK-D Pro PoE AF (NG9097 R4M2E4 BNO086)", "description": "OAK-D Pro PoE AutoFocus based on NG9097 R4M2E4 and BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_pro_poe_af.json" + "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_pro_poe_af.json", + "board_config_file": "OAK-D-PRO-POE.json" }, { "title":"OAK-D Pro PoE AF C18 (NG9097 R4M2E4 BNO086)", - "description": "OAK-D Pro PoE C18 AutoFocus based on NG9097 R4M2E4 and BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_pro_poe_af_c18.json" + "description": "OAK-D Pro PoE C18 AutoFocus based on NG9097 R4M2E4 and BNO086 IMU, no enclosure, cables and packaging", + "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_pro_poe_af_c18.json", + "board_config_file": "OAK-D-PRO-POE.json" }, { "title":"OAK-D Pro PoE FF (NG9097 R3M2E2)", "description": "OAK-D Pro PoE FixedFocus based on NG9097 R3M2E2", - "eeprom":"eeprom/NG9097_R3M2E2_oak_d_pro_poe_ff.json" + "eeprom":"eeprom/NG9097_R3M2E2_oak_d_pro_poe_ff.json", + "board_config_file": "OAK-D-PRO-POE.json" }, { "title":"OAK-D Pro PoE FF (NG9097 R4M2E3 BMI270)", "description": "OAK-D Pro PoE FixedFocus based on NG9097 R4M2E3 and BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_poe_ff.json" + "eeprom":"eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_poe_ff.json", + "board_config_file": "OAK-D-PRO-POE.json" }, { "title":"OAK-D Pro PoE FF (NG9097 R4M2E3 BNO086)", "description": "OAK-D Pro PoE FixedFocus based on NG9097 R4M2E3 and BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_poe_ff.json" + "eeprom":"eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_poe_ff.json", + "board_config_file": "OAK-D-PRO-POE.json" }, { "title":"OAK-D Pro PoE FF (NG9097 R4M2E4 BMI270)", "description": "OAK-D Pro PoE FixedFocus based on NG9097 R4M2E4 and BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BMI270_oak_d_pro_poe_ff.json" + "eeprom":"eeprom/NG9097_R4M2E4_BMI270_oak_d_pro_poe_ff.json", + "board_config_file": "OAK-D-PRO-POE.json" }, { "title":"OAK-D Pro PoE FF (NG9097 R4M2E4 BNO086)", "description": "OAK-D Pro PoE FixedFocus based on NG9097 R4M2E4 and BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_pro_poe_ff.json" + "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_pro_poe_ff.json", + "board_config_file": "OAK-D-PRO-POE.json" }, { "title":"OAK-D Pro W PoE (NG9097 R3M2E2)", "description": "OAK-D Pro PoE WideLens based on NG9097 R3M2E2", - "eeprom":"eeprom/NG9097_R3M2E2_oak_d_pro_w_poe.json" + "eeprom":"eeprom/NG9097_R3M2E2_oak_d_pro_w_poe.json", + "board_config_file": "OAK-D-PRO-W-POE.json" }, { "title":"OAK-D Pro W PoE (NG9097 R4M2E3 BMI270)", "description": "OAK-D Pro PoE WideLens based on NG9097 R4M2E3 and BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_w_poe.json" + "eeprom":"eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_w_poe.json", + "board_config_file": "OAK-D-PRO-W-POE.json" }, { "title":"OAK-D Pro W PoE (NG9097 R4M2E3 BNO086)", "description": "OAK-D Pro PoE WideLens based on NG9097 R4M2E3 and BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_w_poe.json" + "eeprom":"eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_w_poe.json", + "board_config_file": "OAK-D-PRO-W-POE.json" }, { "title":"OAK-D Pro W PoE (NG9097 R4M2E4 BMI270)", "description": "OAK-D Pro PoE WideLens based on NG9097 R4M2E4 and BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BMI270_oak_d_pro_w_poe.json" + "eeprom":"eeprom/NG9097_R4M2E4_BMI270_oak_d_pro_w_poe.json", + "board_config_file": "OAK-D-PRO-W-POE.json" }, { "title":"OAK-D Pro W PoE (NG9097 R4M2E4 BNO086)", "description": "OAK-D Pro PoE WideLens based on NG9097 R4M2E4 and BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_pro_w_poe.json" + "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_pro_w_poe.json", + "board_config_file": "OAK-D-PRO-W-POE.json" }, { "title":"OAK-D Pro W PoE Custom (NG9097 R3M2E2)", "description": "OAK-D Pro PoE Custom based on NG9097 R3M2E2", - "eeprom":"eeprom/NG9097_R3M2E2_oak_d_pro_w_poe_custom.json" + "eeprom":"eeprom/NG9097_R3M2E2_oak_d_pro_w_poe_custom.json", + "board_config_file": "OAK-D-PRO-W-POE-CUSTOM.json" }, { "title":"OAK-D Pro W PoE C01 (NG9097 R4M2E3)", "description": "OAK-D Pro PoE C01 based on NG9097 R3M2E2", - "eeprom":"eeprom/NG9097_R4M2E3_oak_d_pro_w_poe_c01.json" + "eeprom":"eeprom/NG9097_R4M2E3_oak_d_pro_w_poe_c01.json", + "board_config_file": "OAK-D-PRO-W-POE-C01.json" }, { "title":"OAK-D Pro W PoE C01 (NG9097 R4M2E4)", "description": "OAK-D Pro W PoE C01 based on NG9097 R4M2E4", - "eeprom":"eeprom/NG9097_R4M2E4_oak_d_pro_w_poe_c01.json" + "eeprom":"eeprom/NG9097_R4M2E4_oak_d_pro_w_poe_c01.json", + "board_config_file": "OAK-D-PRO-W-POE-C01.json" } ] } diff --git a/batch/oak_d_s2.json b/batch/oak_d_s2.json index 32727c6..56c60da 100644 --- a/batch/oak_d_s2.json +++ b/batch/oak_d_s2.json @@ -8,30 +8,26 @@ { "title":"OAK-D S2 AF (DM9098 R3M2E3)", "description": "OAK-D Series 2, AutoFocus, based on DM9098 R3M2E3 board", - "eeprom":"eeprom/DM9098_R3M2E3_oak_d_s2_af.json" + "eeprom":"eeprom/DM9098_R3M2E3_oak_d_s2_af.json", + "board_config_file": "OAK-D-S2.json" }, { "title":"OAK-D S2 AF (DM9098 R6M2E6)", "description": "OAK-D Series 2, AutoFocus, based on DM9098 R6M2E6 board, with PMIC IC", - "test_type": "OAK-D", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_s2_af.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_s2_af.json", + "board_config_file": "OAK-D-S2.json" }, { "title":"OAK-D S2 FF (DM9098 R3M2E3)", "description": "OAK-D Series 2, Fixed Focus, based on DM9098 R3M2E3 board", - "eeprom":"eeprom/DM9098_R3M2E3_oak_d_s2_ff.json" + "eeprom":"eeprom/DM9098_R3M2E3_oak_d_s2_ff.json", + "board_config_file": "OAK-D-S2.json" }, { "title":"OAK-D S2 FF (DM9098 R6M2E6)", "description": "OAK-D Series 2, FixedFocus, based on DM9098 R6M2E6 board, with PMIC IC", - "test_type": "OAK-D", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_s2_ff.json" - }, - { - "title":"OAK-D W (DM9098 R6M2E6)", - "description": "OAK-D Wide Lens, based on DM9098 R6M2E6 board", - "test_type": "OAK-D", - "eeprom":"eeprom/DM9098_R6M2E6_oak_d_w.json" + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_s2_ff.json", + "board_config_file": "OAK-D-S2.json" } ] } diff --git a/batch/oak_d_s2_poe.json b/batch/oak_d_s2_poe.json index 970c00d..ea96151 100644 --- a/batch/oak_d_s2_poe.json +++ b/batch/oak_d_s2_poe.json @@ -8,42 +8,50 @@ { "title":"OAK-D S2 AF PoE (NG9097 R4M2E3 BMI270)", "description": "OAK-D Series 2, AutoFocus, based on NG9097 R4M2E3 board with BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E3_BMI270_oak_d_s2_poe_af.json" + "eeprom":"eeprom/NG9097_R4M2E3_BMI270_oak_d_s2_poe_af.json", + "board_config_file": "OAK-D-S2-POE.json" }, { "title":"OAK-D S2 AF PoE (NG9097 R4M2E3 BNO086)", "description": "OAK-D Series 2, AutoFocus, based on NG9097 R4M2E3 board with BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E3_BNO086_oak_d_s2_poe_af.json" + "eeprom":"eeprom/NG9097_R4M2E3_BNO086_oak_d_s2_poe_af.json", + "board_config_file": "OAK-D-S2-POE.json" }, { "title":"OAK-D S2 FF PoE (NG9097 R4M2E3 BMI270)", "description": "OAK-D Series 2, FixedFocus, based on NG9097 R4M2E3 board with BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E3_BMI270_oak_d_s2_poe_ff.json" + "eeprom":"eeprom/NG9097_R4M2E3_BMI270_oak_d_s2_poe_ff.json", + "board_config_file": "OAK-D-S2-POE.json" }, { "title":"OAK-D S2 FF PoE (NG9097 R4M2E3 BNO086)", "description": "OAK-D Series 2, FixedFocus, based on NG9097 R4M2E3 board with BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E3_BNO086_oak_d_s2_poe_ff.json" + "eeprom":"eeprom/NG9097_R4M2E3_BNO086_oak_d_s2_poe_ff.json", + "board_config_file": "OAK-D-S2-POE.json" }, { "title":"OAK-D S2 AF PoE (NG9097 R4M2E4 BMI270)", "description": "OAK-D Series 2, AutoFocus, based on NG9097 R4M2E4 board with BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BMI270_oak_d_s2_poe_af.json" + "eeprom":"eeprom/NG9097_R4M2E4_BMI270_oak_d_s2_poe_af.json", + "board_config_file": "OAK-D-S2-POE.json" }, { "title":"OAK-D S2 AF PoE (NG9097 R4M2E4 BNO086)", "description": "OAK-D Series 2, AutoFocus, based on NG9097 R4M2E4 board with BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_s2_poe_af.json" + "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_s2_poe_af.json", + "board_config_file": "OAK-D-S2-POE.json" }, { "title":"OAK-D S2 FF PoE (NG9097 R4M2E4 BMI270)", "description": "OAK-D Series 2, FixedFocus, based on NG9097 R4M2E4 board with BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BMI270_oak_d_s2_poe_ff.json" + "eeprom":"eeprom/NG9097_R4M2E4_BMI270_oak_d_s2_poe_ff.json", + "board_config_file": "OAK-D-S2-POE.json" }, { "title":"OAK-D S2 FF PoE (NG9097 R4M2E4 BNO086)", "description": "OAK-D Series 2, FixedFocus, based on NG9097 R4M2E4 board with BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_s2_poe_ff.json" + "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_s2_poe_ff.json", + "board_config_file": "OAK-D-S2-POE.json" } ] } diff --git a/batch/oak_d_sr.json b/batch/oak_d_sr.json index 1e44cd8..5dca47b 100644 --- a/batch/oak_d_sr.json +++ b/batch/oak_d_sr.json @@ -8,12 +8,14 @@ { "title":"OAK-D SR (DM2080 R1M1E1) (2x OV9782)", "description": "OAK-D SR, based on DM2080 R1M1E1 board", - "eeprom":"eeprom/DM2080_R1M1E1_oak_d_sr.json" + "eeprom":"eeprom/DM2080_R1M1E1_oak_d_sr.json", + "board_config_file": "OAK-D-SR.json" }, { "title":"OAK-D SR (DM2080 R0M0E0) (2x OV9782)", "description": "OAK-D SR, based on DM2080 R0M0E0 board", - "eeprom":"eeprom/DM2080_R0M0E0_oak_d_sr.json" + "eeprom":"eeprom/DM2080_R0M0E0_oak_d_sr.json", + "board_config_file": "OAK-D-SR.json" } ] } diff --git a/batch/oak_d_w_poe.json b/batch/oak_d_w_poe.json deleted file mode 100644 index ecfc4a4..0000000 --- a/batch/oak_d_w_poe.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "title": "OAK-D W PoE", - "description": "OAK-D W PoE", - "image": "images/oak_d_w_poe.jpg", - "test_type": "OAK-D-POE", - "options": {"bootloader": "poe"}, - "variants": [ - { - "title":"OAK-D W PoE (NG9097 R4M2E3 BMI270)", - "description": "OAK-D WideLens PoE, based on NG9097 R4M2E3 board with BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E3_BMI270_oak_d_w_poe.json" - }, - { - "title":"OAK-D W PoE (NG9097 R4M2E3 BNO086)", - "description": "OAK-D WideLens PoE, based on NG9097 R4M2E3 board with BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E3_BNO086_oak_d_w_poe.json" - }, - { - "title":"OAK-D W PoE (NG9097 R4M2E4 BMI270)", - "description": "OAK-D WideLens PoE, based on NG9097 R4M2E4 board with BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BMI270_oak_d_w_poe.json" - }, - { - "title":"OAK-D W PoE (NG9097 R4M2E4 BNO086)", - "description": "OAK-D WideLens PoE, based on NG9097 R4M2E4 board with BNO086 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_BNO086_oak_d_w_poe.json" - }, - { - "title":"OAK-D W PoE C12 (NG9097 R4M2E4 BMI270)", - "description": "OAK-D WideLens PoE C12, based on NG9097 R4M2E4 board with BMI270 IMU", - "eeprom":"eeprom/NG9097_R4M2E4_oak_d_w_poe_c12.json" - } - ] -} diff --git a/boards/OAK-1-POE.json b/boards/OAK-1-POE.json index c682b0c..bfcd03c 100644 --- a/boards/OAK-1-POE.json +++ b/boards/OAK-1-POE.json @@ -10,7 +10,6 @@ "type": "color" } } - } } diff --git a/boards/OAK-1-W-POE-97.json b/boards/OAK-1-W-POE-97.json new file mode 100644 index 0000000..ff53721 --- /dev/null +++ b/boards/OAK-1-W-POE-97.json @@ -0,0 +1,15 @@ +{ + "board_config": + { + "name": "OAK-1-W-POE-97", + "cameras":{ + "CAM_A": { + "name": "rgb", + "hfov": 127, + "type": "color" + } + } + + } +} + diff --git a/boards/OAK-1-W-POE.json b/boards/OAK-1-W-POE.json new file mode 100644 index 0000000..1a6ffbd --- /dev/null +++ b/boards/OAK-1-W-POE.json @@ -0,0 +1,15 @@ +{ + "board_config": + { + "name": "OAK-1-W-POE", + "cameras":{ + "CAM_A": { + "name": "rgb", + "hfov": 108.0, + "type": "color" + } + } + + } +} + diff --git a/boards/OAK-D-CM4-POE-C11.json b/boards/OAK-D-CM4-POE-C11.json new file mode 100644 index 0000000..37d2b95 --- /dev/null +++ b/boards/OAK-D-CM4-POE-C11.json @@ -0,0 +1,52 @@ +{ + "board_config": + { + "cameras":{ + "CAM_A": { + "name": "rgb", + "hfov": 71.86, + "type": "color" + }, + "CAM_B": { + "name": "left", + "hfov": 71.86, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_C", + "specTranslation": { + "x": -9.0, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + }, + "CAM_C": { + "name": "right", + "hfov": 71.86, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_A", + "specTranslation": { + "x": 1.3, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + } + }, + "stereo_config":{ + "left_cam": "CAM_B", + "right_cam": "CAM_C" + } + } +} diff --git a/boards/OAK-D-CM4-POE.json b/boards/OAK-D-CM4-POE.json new file mode 100644 index 0000000..7d30acd --- /dev/null +++ b/boards/OAK-D-CM4-POE.json @@ -0,0 +1,52 @@ +{ + "board_config": + { + "cameras":{ + "CAM_A": { + "name": "rgb", + "hfov": 68.7938, + "type": "color" + }, + "CAM_B": { + "name": "left", + "hfov": 71.86, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_C", + "specTranslation": { + "x": -9.0, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + }, + "CAM_C": { + "name": "right", + "hfov": 71.86, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_A", + "specTranslation": { + "x": 1.3, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + } + }, + "stereo_config":{ + "left_cam": "CAM_B", + "right_cam": "CAM_C" + } + } +} diff --git a/boards/OAK-D-CM4.json b/boards/OAK-D-CM4.json new file mode 100644 index 0000000..ce6b64c --- /dev/null +++ b/boards/OAK-D-CM4.json @@ -0,0 +1,52 @@ +{ + "board_config": + { + "cameras":{ + "CAM_A": { + "name": "rgb", + "hfov": 68.7938, + "type": "color" + }, + "CAM_B": { + "name": "left", + "hfov": 71.86, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_C", + "specTranslation": { + "x": -9.0, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + }, + "CAM_C": { + "name": "right", + "hfov": 71.86, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_A", + "specTranslation": { + "x": 7, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + } + }, + "stereo_config":{ + "left_cam": "CAM_B", + "right_cam": "CAM_C" + } + } +} diff --git a/boards/OAK-D-POE-W-C12.json b/boards/OAK-D-POE-W-C12.json new file mode 100644 index 0000000..e8da5de --- /dev/null +++ b/boards/OAK-D-POE-W-C12.json @@ -0,0 +1,55 @@ +{ + "board_config": + { + "name": "OAK-D POE-W", + "revision": "R3M2E2", + "cameras":{ + "CAM_A": { + "name": "rgb", + "hfov": 127.0, + "type": "color" + }, + "CAM_B": { + "name": "left", + "hfov": 127.0, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_C", + "specTranslation": { + "x": -7.5, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + }, + "CAM_C": { + "name": "right", + "hfov": 127.0, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_A", + "specTranslation": { + "x": 3.75, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + } + }, + "stereo_config":{ + "left_cam": "CAM_B", + "right_cam": "CAM_C" + } + } +} + diff --git a/boards/OAK-D-PRO-W-97.json b/boards/OAK-D-PRO-W-97.json new file mode 100644 index 0000000..b8ba24e --- /dev/null +++ b/boards/OAK-D-PRO-W-97.json @@ -0,0 +1,53 @@ +{ + "board_config": + { + "cameras":{ + "CAM_A": { + "name": "rgb", + "hfov": 127.0, + "type": "color" + }, + "CAM_B": { + "name": "left", + "hfov": 127.0, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_C", + "specTranslation": { + "x": -7.5, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + }, + "CAM_C": { + "name": "right", + "hfov": 127.0, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_A", + "specTranslation": { + "x": 3.75, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + } + }, + "stereo_config":{ + "left_cam": "CAM_B", + "right_cam": "CAM_C" + } + } +} + diff --git a/boards/OAK-D-W-97.json b/boards/OAK-D-W-97.json new file mode 100644 index 0000000..2109c9c --- /dev/null +++ b/boards/OAK-D-W-97.json @@ -0,0 +1,55 @@ +{ + "board_config": + { + "name": "OAK-D-W", + "revision": "R3M2E2", + "cameras":{ + "CAM_A": { + "name": "rgb", + "hfov": 127.0, + "type": "color" + }, + "CAM_B": { + "name": "left", + "hfov": 127.0, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_C", + "specTranslation": { + "x": -7.5, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + }, + "CAM_C": { + "name": "right", + "hfov": 127.0, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_A", + "specTranslation": { + "x": 3.75, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + } + }, + "stereo_config":{ + "left_cam": "CAM_B", + "right_cam": "CAM_C" + } + } +} + diff --git a/boards/OAK-D.json b/boards/OAK-D.json new file mode 100644 index 0000000..1509a49 --- /dev/null +++ b/boards/OAK-D.json @@ -0,0 +1,53 @@ +{ + "board_config": + { + "cameras":{ + "CAM_A": { + "name": "rgb", + "hfov": 68.7938, + "type": "color" + }, + "CAM_B": { + "name": "left", + "hfov": 71.86, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_C", + "specTranslation": { + "x": -7.5, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + }, + "CAM_C": { + "name": "right", + "hfov": 71.86, + "type": "mono", + "extrinsics": { + "to_cam": "CAM_A", + "specTranslation": { + "x": 3.75, + "y": 0, + "z": 0 + }, + "rotation":{ + "r": 0, + "p": 0, + "y": 0 + } + } + } + }, + "stereo_config":{ + "left_cam": "CAM_B", + "right_cam": "CAM_C" + } + } +} + diff --git a/boards_reader.py b/boards_reader.py new file mode 100644 index 0000000..c665932 --- /dev/null +++ b/boards_reader.py @@ -0,0 +1,222 @@ +from pathlib import Path +import json +from enum import Enum +from pydantic import BaseModel, ValidationError +from typing import Optional, Union, Dict, List +import copy + +DEPTHAI_BOARDS_PATH = Path(__file__).parent +DEPTHAI_BOARDS_PRIVATE_PATH = Path(__file__).parent / "../depthai_boards_private" # (optional) private/custom boards should be placed in a sibling directory to this one + + +# Bootloader options +class BootloaderType(str, Enum): + POE = 'poe' # Specifies POE bootloader + USB = 'usb' # Specifies USB bootloader + HEADER_USB = 'header_usb' # Specifies NOR Header Bootloader USB + NONE = 'none' # Specifies that bootloader does not need to be flashed + + @staticmethod + def get_default_bootloader(test_type: str): + if 'POE' in test_type: + return BootloaderType.POE + elif 'FFC' in test_type: + return BootloaderType.USB + elif not ('LITE' in test_type or '1' in test_type): + return BootloaderType.HEADER_USB + else: + return BootloaderType.NONE + +class Options(BaseModel): + bootloader: BootloaderType + + environment: Union[str, dict] = "standard" + """ if dict, each key represents a stage (flashing, testing, calibration) and the value + is the environment to use for that stage """ + + websocket_capture: bool = False + """ This should be set to 'True' for cameras (e.g. OAK-D-CM4) that don't work with depthai + library directly and need a websocket server to stream the images to the + calibration node. """ + +class EepromData(BaseModel): + boardConf: str + boardName: str + boardRev: str + productName: str + boardCustom: str + hardwareConf: str + boardOptions: int + version: int + batchTime: int = 0 + """ seconds since epoch """ + +class RotationType(BaseModel): + r: float # roll + p: float # pitch + y: float # yaw + +class TranslationType(BaseModel): + x: float + y: float + z: float + +class Extrinsics(BaseModel): + to_cam: str + rotation: RotationType + specTranslation: TranslationType + +class CameraInfo(BaseModel): + name: str + hfov: float + type: str + extrinsics: Optional[Extrinsics] = None + sensor_name: str = "" + has_autofocus: bool = False + lens_position: int = -1 + +class StereoConfig(BaseModel): + left_cam: str + right_cam: str + +class BoardConfig(BaseModel): + cameras: Dict[str, CameraInfo] + stereo_config: Optional[StereoConfig] = None + +class VariantConfig(BaseModel): + id: str + """ equivalent to the eeprom file name (inside the eeprom folder) without the extension """ + + title: str + + description: str + + eeprom: str + """ path to eeprom file """ + + eeprom_data: EepromData + + board_config: BoardConfig + + options: Options + +class DeviceConfig(BaseModel): + id: str + """ equivalent to the device file name (inside the batch folder) without the extension """ + + title: str + + description: str + + variants: list[VariantConfig] + + +def update(d: Dict, u: Dict): + for k, v in u.items(): + if isinstance(v, dict): + d[k] = update(d.get(k, {}), v) + else: + d[k] = v + return d + + +# construct a devices dict +# devices are represented by JSON files in depthai-boards/batch +# each device contains a list of variants which are represented by JSON files in depthai-boards/batch/eeeprom +DEVICES = [] +DEVICES_TYPED: List[DeviceConfig] = [] +for device_file in [*(DEPTHAI_BOARDS_PATH / "batch" ).glob("*.json"), *(DEPTHAI_BOARDS_PRIVATE_PATH / "batch" ).glob("*.json")]: + try: + with open(device_file, "r") as f: + device = json.load(f) + except json.decoder.JSONDecodeError as e: + raise Exception(f"Couldn't parse device file at {device_file.resolve()}. Make sure the file is valid JSON. \n{e}") + except Exception as e: + raise Exception(f"Couldn't load device file at {device_file.resolve()}. Make sure the file exists.") + + device["id"] = device_file.stem + variants = device["variants"] + + # If no options are specified, use defaults + options = { + "bootloader": BootloaderType.get_default_bootloader(device.get("test_type", "")), + "environment": "standard" + } + options.update(device.get("options", {})) + device["options"] = options + + # Load the variants + variants_combined = [] + for variant in variants: + variant_combined = copy.deepcopy(device) # the variant inherits the device's properties first + variant_combined.pop("variants") # remove the variants field from the variant + update(variant_combined, variant) # then the variant's properties are applied on top + + # Load the eeprom data + try: + eeprom_data_path = device_file.parent / variant_combined["eeprom"] + with open(eeprom_data_path, "r") as f: + variant_combined["eeprom_data"] = json.load(f) + variant_combined["eeprom_file_name"] = eeprom_data_path.name + variant_combined["id"] = eeprom_data_path.stem + except json.decoder.JSONDecodeError as e: + raise Exception(f"Couldn't parse eeprom file for device '{device_file.resolve()}' variant '{variant_combined.get('id', '')}'. Make sure the eeprom file is valid JSON. \n{e}") + except Exception as e: + raise Exception(f"Couldn't load eeprom file for device '{device_file.resolve()}' variant '{variant_combined.get('id', '')}'. Make sure the eeprom field is set correctly in the device file.") + + # Load the board config + if "board_config_file" in variant_combined: + board_config_path = device_file.parent / "../boards" / variant_combined["board_config_file"] + try: + with open(board_config_path, "r") as f: + variant_combined["board_config"] = json.load(f).get("board_config", {}) + except json.decoder.JSONDecodeError as e: + raise Exception(f"Couldn't parse board config file at {board_config_path.resolve()} for device '{device_file.resolve()}'. Make sure the board config file is valid JSON. \n{e}") + except Exception as e: + raise Exception(f"Couldn't load board config file at {board_config_path.resolve()} for device '{device_file.resolve()}'. Make sure the board_config_file field is set correctly in the device file.") + else: + variant_combined["board_config"] = {"cameras": {}} # if no board config is specified, use an empty one (used for FCC cameras) + + # Convert the bootloader string to an enum + variant_combined["options"]["bootloader"] = BootloaderType(options["bootloader"]) # convert string to enum + + variants_combined.append(variant_combined) + + device["variants"] = variants_combined + + DEVICES.append(device) + + # Convert the dict to a list of DeviceConfig objects and validate it + try: + device_typed: DeviceConfig = DeviceConfig(**device) # type: ignore + DEVICES_TYPED.append(device_typed) + except ValidationError as err: + raise Exception(f"Validation error in file or in file referenced by '{device_file}':\n {err}\n") + + + +def get_device_by_id(device_id: str): + for device in DEVICES: + if device["id"] == device_id: + return device + raise KeyError(f"Device with id '{device_id}' not found") + +def get_variant_by_id(variant_id: str): + for device in DEVICES: + for variant in device["variants"]: + if variant["id"] == variant_id: + return variant + raise KeyError(f"Variant with id '{variant_id}' not found") + +def get_device_by_id_typed(device_id: str): + for device in DEVICES_TYPED: + if device.id == device_id: + return device + raise KeyError(f"Device with id '{device_id}' not found") + +def get_variant_by_id_typed(variant_id: str): + for device in DEVICES_TYPED: + for variant in device.variants: + if variant.id == variant_id: + return variant + raise KeyError(f"Variant with id '{variant_id}' not found") \ No newline at end of file diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..a24929c --- /dev/null +++ b/requirements.txt @@ -0,0 +1 @@ +pydantic==1.10.5 \ No newline at end of file