diff --git a/batch/eeprom/DM2088_R0M0E0_oak_d_poe_af.json b/batch/eeprom/DM2088_R0M0E0_oak_d_poe_af.json new file mode 100644 index 000000000..6d043f7a1 --- /dev/null +++ b/batch/eeprom/DM2088_R0M0E0_oak_d_poe_af.json @@ -0,0 +1,12 @@ +{ + "batchName": "Maxwell", + "batchTime": 0, + "boardConf": "nIR-C00M00-00", + "boardName": "DM2088", + "boardRev": "R0M0E0", + "productName": "OAK-D PoE AF", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC000", + "boardOptions": 1, + "version": 7 +} diff --git a/batch/Maxwell/DM9095_R3M2E4_oak_d_lite.json b/batch/eeprom/DM9095_R3M2E4_oak_d_lite.json similarity index 100% rename from batch/Maxwell/DM9095_R3M2E4_oak_d_lite.json rename to batch/eeprom/DM9095_R3M2E4_oak_d_lite.json diff --git a/batch/Maxwell/DM9098_R3M2E3_oak_d_s2_af.json b/batch/eeprom/DM9098_R3M2E3_oak_d_s2_af.json similarity index 100% rename from batch/Maxwell/DM9098_R3M2E3_oak_d_s2_af.json rename to batch/eeprom/DM9098_R3M2E3_oak_d_s2_af.json diff --git a/batch/Maxwell/DM9098_R3M2E3_oak_d_s2_ff.json b/batch/eeprom/DM9098_R3M2E3_oak_d_s2_ff.json similarity index 100% rename from batch/Maxwell/DM9098_R3M2E3_oak_d_s2_ff.json rename to batch/eeprom/DM9098_R3M2E3_oak_d_s2_ff.json diff --git a/batch/Maxwell/DM9098_R3M2E3_oak_d_w.json b/batch/eeprom/DM9098_R3M2E3_oak_d_w.json similarity index 100% rename from batch/Maxwell/DM9098_R3M2E3_oak_d_w.json rename to batch/eeprom/DM9098_R3M2E3_oak_d_w.json diff --git a/batch/Maxwell/DM9098_R6M2E6_oak_d_pro_af.json b/batch/eeprom/DM9098_R6M2E6_oak_d_pro_af.json similarity index 100% rename from batch/Maxwell/DM9098_R6M2E6_oak_d_pro_af.json rename to batch/eeprom/DM9098_R6M2E6_oak_d_pro_af.json diff --git a/batch/Maxwell/DM9098_R6M2E6_oak_d_pro_af_pb.json b/batch/eeprom/DM9098_R6M2E6_oak_d_pro_af_pb.json similarity index 100% rename from batch/Maxwell/DM9098_R6M2E6_oak_d_pro_af_pb.json rename to batch/eeprom/DM9098_R6M2E6_oak_d_pro_af_pb.json diff --git a/batch/Maxwell/DM9098_R6M2E6_oak_d_pro_ff.json b/batch/eeprom/DM9098_R6M2E6_oak_d_pro_ff.json similarity index 100% rename from batch/Maxwell/DM9098_R6M2E6_oak_d_pro_ff.json rename to batch/eeprom/DM9098_R6M2E6_oak_d_pro_ff.json diff --git a/batch/Maxwell/DM9098_R6M2E6_oak_d_pro_ff_pb_ff#1.json b/batch/eeprom/DM9098_R6M2E6_oak_d_pro_ff_pb_ff#1.json similarity index 100% rename from batch/Maxwell/DM9098_R6M2E6_oak_d_pro_ff_pb_ff#1.json rename to batch/eeprom/DM9098_R6M2E6_oak_d_pro_ff_pb_ff#1.json diff --git a/batch/Maxwell/DM9098_R6M2E6_oak_d_pro_ff_pb_ff#2.json b/batch/eeprom/DM9098_R6M2E6_oak_d_pro_ff_pb_ff#2.json similarity index 100% rename from batch/Maxwell/DM9098_R6M2E6_oak_d_pro_ff_pb_ff#2.json rename to batch/eeprom/DM9098_R6M2E6_oak_d_pro_ff_pb_ff#2.json diff --git a/batch/Maxwell/DM9098_R6M2E6_oak_d_pro_w.json b/batch/eeprom/DM9098_R6M2E6_oak_d_pro_w.json similarity index 100% rename from batch/Maxwell/DM9098_R6M2E6_oak_d_pro_w.json rename to batch/eeprom/DM9098_R6M2E6_oak_d_pro_w.json diff --git a/batch/Maxwell/DM9098_R6M2E6_oak_d_pro_w_ov9782.json b/batch/eeprom/DM9098_R6M2E6_oak_d_pro_w_ov9782.json similarity index 100% rename from batch/Maxwell/DM9098_R6M2E6_oak_d_pro_w_ov9782.json rename to batch/eeprom/DM9098_R6M2E6_oak_d_pro_w_ov9782.json diff --git a/batch/Maxwell/DM9098_R6M2E6_oak_d_s2_af.json b/batch/eeprom/DM9098_R6M2E6_oak_d_s2_af.json similarity index 100% rename from batch/Maxwell/DM9098_R6M2E6_oak_d_s2_af.json rename to batch/eeprom/DM9098_R6M2E6_oak_d_s2_af.json diff --git a/batch/Maxwell/NG2094_R0M0E0_oak_d_pro_w_dev b/batch/eeprom/NG2094_R0M0E0_oak_d_pro_w_dev.json similarity index 100% rename from batch/Maxwell/NG2094_R0M0E0_oak_d_pro_w_dev rename to batch/eeprom/NG2094_R0M0E0_oak_d_pro_w_dev.json diff --git a/batch/eeprom/NG9093_R2M0E3_oak_1_af.json b/batch/eeprom/NG9093_R2M0E3_oak_1_af.json new file mode 100644 index 000000000..98b69f64b --- /dev/null +++ b/batch/eeprom/NG9093_R2M0E3_oak_1_af.json @@ -0,0 +1,12 @@ +{ + "batchName": "Maxwell", + "batchTime": 0, + "boardConf": "nIR-C00M00-00", + "boardName": "NG9093", + "boardRev": "R2M0E3", + "productName": "OAK-1 AF", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC000", + "boardOptions": 0, + "version": 7 +} diff --git a/batch/eeprom/NG9093_R2M0E3_oak_1_ff.json b/batch/eeprom/NG9093_R2M0E3_oak_1_ff.json new file mode 100644 index 000000000..16e9d8c5e --- /dev/null +++ b/batch/eeprom/NG9093_R2M0E3_oak_1_ff.json @@ -0,0 +1,12 @@ +{ + "batchName": "Maxwell", + "batchTime": 0, + "boardConf": "nIR-C01M00-00", + "boardName": "NG9093", + "boardRev": "R2M0E3", + "productName": "OAK-1 Lite FF", + "boardCustom": "", + "hardwareConf": "F1-FV00-BC000", + "boardOptions": 0, + "version": 7 +} diff --git a/batch/eeprom/NG9093_R2M0E3_oak_1_ff_c09.json b/batch/eeprom/NG9093_R2M0E3_oak_1_ff_c09.json new file mode 100644 index 000000000..a8b994951 --- /dev/null +++ b/batch/eeprom/NG9093_R2M0E3_oak_1_ff_c09.json @@ -0,0 +1,12 @@ +{ + "batchName": "Maxwell", + "batchTime": 0, + "boardConf": "nIR-C03M00-00", + "boardName": "NG9093", + "boardRev": "R2M0E3", + "productName": "OAK-1 FF-C09", + "boardCustom": "", + "hardwareConf": "F1-FV00-BC000", + "boardOptions": 0, + "version": 7 +} diff --git a/batch/eeprom/NG9093_R2M0E3_oak_1_lite_c05.json b/batch/eeprom/NG9093_R2M0E3_oak_1_lite_c05.json new file mode 100644 index 000000000..478f4a4ba --- /dev/null +++ b/batch/eeprom/NG9093_R2M0E3_oak_1_lite_c05.json @@ -0,0 +1,12 @@ +{ + "batchName": "Maxwell", + "batchTime": 0, + "boardConf": "nIR-C03M00-00", + "boardName": "NG9093", + "boardRev": "R2M0E3", + "productName": "OAK-1 Lite C05", + "boardCustom": "", + "hardwareConf": "F1-FV01-BC001", + "boardOptions": 0, + "version": 7 +} diff --git a/batch/eeprom/NG9093_R2M0E3_oak_1_lite_ff.json b/batch/eeprom/NG9093_R2M0E3_oak_1_lite_ff.json new file mode 100644 index 000000000..16e9d8c5e --- /dev/null +++ b/batch/eeprom/NG9093_R2M0E3_oak_1_lite_ff.json @@ -0,0 +1,12 @@ +{ + "batchName": "Maxwell", + "batchTime": 0, + "boardConf": "nIR-C01M00-00", + "boardName": "NG9093", + "boardRev": "R2M0E3", + "productName": "OAK-1 Lite FF", + "boardCustom": "", + "hardwareConf": "F1-FV00-BC000", + "boardOptions": 0, + "version": 7 +} diff --git a/batch/eeprom/NG9093_R2M0E3_oak_1_lite_w.json b/batch/eeprom/NG9093_R2M0E3_oak_1_lite_w.json new file mode 100644 index 000000000..c4ee13030 --- /dev/null +++ b/batch/eeprom/NG9093_R2M0E3_oak_1_lite_w.json @@ -0,0 +1,12 @@ +{ + "batchName": "Maxwell", + "batchTime": 0, + "boardConf": "nIR-C01M00-00", + "boardName": "NG9093", + "boardRev": "R2M0E3", + "productName": "OAK-1 Lite W", + "boardCustom": "", + "hardwareConf": "F1-FV01-BC000", + "boardOptions": 0, + "version": 7 +} diff --git a/batch/eeprom/NG9093_R2M0E3_oak_1_max.json b/batch/eeprom/NG9093_R2M0E3_oak_1_max.json new file mode 100644 index 000000000..47e7ff6c9 --- /dev/null +++ b/batch/eeprom/NG9093_R2M0E3_oak_1_max.json @@ -0,0 +1,12 @@ +{ + "batchName": "Maxwell", + "batchTime": 0, + "boardConf": "nIR-C02M00-00", + "boardName": "NG9093", + "boardRev": "R2M0E3", + "productName": "OAK-1 MAX", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC000", + "boardOptions": 0, + "version": 7 +} diff --git a/batch/eeprom/NG9093_R2M0E3_oak_1_w.json b/batch/eeprom/NG9093_R2M0E3_oak_1_w.json new file mode 100644 index 000000000..aaf94f2e3 --- /dev/null +++ b/batch/eeprom/NG9093_R2M0E3_oak_1_w.json @@ -0,0 +1,12 @@ +{ + "batchName": "Maxwell", + "batchTime": 0, + "boardConf": "nIR-C00M00-00", + "boardName": "NG9093", + "boardRev": "R2M0E3", + "productName": "OAK-1 W", + "boardCustom": "", + "hardwareConf": "F1-FV01-BC000", + "boardOptions": 0, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R3M2E2_oak_d_pro_poe_af.json b/batch/eeprom/NG9097_R3M2E2_oak_d_pro_poe_af.json new file mode 100644 index 000000000..b448cc791 --- /dev/null +++ b/batch/eeprom/NG9097_R3M2E2_oak_d_pro_poe_af.json @@ -0,0 +1,12 @@ +{ + "batchName": "Leonardo", + "batchTime": 0, + "boardConf": "IR-C00M00-00", + "boardName": "NG9097", + "boardRev": "R3M2E2", + "productName": "OAK-D Pro PoE AF", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC000", + "boardOptions": 3, + "version": 7 +} \ No newline at end of file diff --git a/batch/eeprom/NG9097_R3M2E2_oak_d_pro_poe_custom.json b/batch/eeprom/NG9097_R3M2E2_oak_d_pro_poe_custom.json new file mode 100644 index 000000000..e05f9fc4b --- /dev/null +++ b/batch/eeprom/NG9097_R3M2E2_oak_d_pro_poe_custom.json @@ -0,0 +1,12 @@ +{ + "batchName": "Leonardo", + "batchTime": 0, + "boardConf": "IR-C01M00-00", + "boardName": "NG9097", + "boardRev": "R3M2E2", + "productName": "OAK-D Pro PoE Custom", + "boardCustom": "", + "hardwareConf": "F1-FV00-BC001", + "boardOptions": 3, + "version": 7 +} \ No newline at end of file diff --git a/batch/eeprom/NG9097_R3M2E2_oak_d_pro_poe_ff.json b/batch/eeprom/NG9097_R3M2E2_oak_d_pro_poe_ff.json new file mode 100644 index 000000000..d9716b615 --- /dev/null +++ b/batch/eeprom/NG9097_R3M2E2_oak_d_pro_poe_ff.json @@ -0,0 +1,12 @@ +{ + "batchName": "Leonardo", + "batchTime": 0, + "boardConf": "IR-C00M00-00", + "boardName": "NG9097", + "boardRev": "R3M2E2", + "productName": "OAK-D Pro PoE FF", + "boardCustom": "", + "hardwareConf": "F1-FV00-BC000", + "boardOptions": 3, + "version": 7 +} \ No newline at end of file diff --git a/batch/eeprom/NG9097_R3M2E2_oak_d_pro_w_poe.json b/batch/eeprom/NG9097_R3M2E2_oak_d_pro_w_poe.json new file mode 100644 index 000000000..685e3b03e --- /dev/null +++ b/batch/eeprom/NG9097_R3M2E2_oak_d_pro_w_poe.json @@ -0,0 +1,12 @@ +{ + "batchName": "Leonardo", + "batchTime": 0, + "boardConf": "IR-C00M00-00", + "boardName": "NG9097", + "boardRev": "R3M2E2", + "productName": "OAK-D Pro-W PoE", + "boardCustom": "", + "hardwareConf": "F1-FV01-BC000", + "boardOptions": 3, + "version": 7 +} \ No newline at end of file diff --git a/batch/eeprom/NG9097_R3M2E2_oak_d_pro_w_poe_custom.json b/batch/eeprom/NG9097_R3M2E2_oak_d_pro_w_poe_custom.json new file mode 100644 index 000000000..c35669219 --- /dev/null +++ b/batch/eeprom/NG9097_R3M2E2_oak_d_pro_w_poe_custom.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "IR-C02M00-00", + "boardName": "NG9097", + "boardRev": "R3M2E2", + "productName": "OAK-D Pro-W PoE Custom", + "boardCustom": "", + "hardwareConf": "F1-FV01-BC001", + "boardOptions": 3, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_poe_af.json b/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_poe_af.json new file mode 100644 index 000000000..e8a44e546 --- /dev/null +++ b/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_poe_af.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "IR-C00M01-00", + "boardName": "NG9097", + "boardRev": "R4M2E3", + "productName": "OAK-D Pro PoE AF", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC001", + "boardOptions": 7, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_poe_ff.json b/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_poe_ff.json new file mode 100644 index 000000000..b40a5d4bf --- /dev/null +++ b/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_poe_ff.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "IR-C00M01-00", + "boardName": "NG9097", + "boardRev": "R4M2E3", + "productName": "OAK-D Pro PoE FF", + "boardCustom": "", + "hardwareConf": "F1-FV00-BC001", + "boardOptions": 7, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_w_poe.json b/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_w_poe.json new file mode 100644 index 000000000..c7cd8cf03 --- /dev/null +++ b/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_pro_w_poe.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "IR-C00M01-00", + "boardName": "NG9097", + "boardRev": "R4M2E3", + "productName": "OAK-D Pro W PoE", + "boardCustom": "", + "hardwareConf": "F1-FV01-BC001", + "boardOptions": 7, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_s2_poe_af.json b/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_s2_poe_af.json new file mode 100644 index 000000000..e4bad528d --- /dev/null +++ b/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_s2_poe_af.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "nIR-C00M00-00", + "boardName": "NG9097", + "boardRev": "R4M2E3", + "productName": "OAK-D S2 PoE AF", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC001", + "boardOptions": 7, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_s2_poe_ff.json b/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_s2_poe_ff.json new file mode 100644 index 000000000..960ba8386 --- /dev/null +++ b/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_s2_poe_ff.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "nIR-C00M00-00", + "boardName": "NG9097", + "boardRev": "R4M2E3", + "productName": "OAK-D S2 PoE FF", + "boardCustom": "", + "hardwareConf": "F1-FV00-BC001", + "boardOptions": 7, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_w_poe.json b/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_w_poe.json new file mode 100644 index 000000000..5a3f32c46 --- /dev/null +++ b/batch/eeprom/NG9097_R4M2E3_BMI270_oak_d_w_poe.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "nIR-C00M00-00", + "boardName": "NG9097", + "boardRev": "R4M2E3", + "productName": "OAK-D W PoE", + "boardCustom": "", + "hardwareConf": "F1-FV01-BC001", + "boardOptions": 7, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_poe_af.json b/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_poe_af.json new file mode 100644 index 000000000..f845c749f --- /dev/null +++ b/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_poe_af.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "IR-C00M00-00", + "boardName": "NG9097", + "boardRev": "R4M2E3", + "productName": "OAK-D Pro PoE AF", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC001", + "boardOptions": 3, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_poe_ff.json b/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_poe_ff.json new file mode 100644 index 000000000..5debdc14b --- /dev/null +++ b/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_poe_ff.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "IR-C00M00-00", + "boardName": "NG9097", + "boardRev": "R4M2E3", + "productName": "OAK-D Pro PoE FF", + "boardCustom": "", + "hardwareConf": "F1-FV00-BC001", + "boardOptions": 3, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_w_poe.json b/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_w_poe.json new file mode 100644 index 000000000..490212549 --- /dev/null +++ b/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_pro_w_poe.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "IR-C00M00-00", + "boardName": "NG9097", + "boardRev": "R4M2E3", + "productName": "OAK-D Pro W PoE", + "boardCustom": "", + "hardwareConf": "F1-FV01-BC001", + "boardOptions": 3, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_s2_poe_af.json b/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_s2_poe_af.json new file mode 100644 index 000000000..1d9a95579 --- /dev/null +++ b/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_s2_poe_af.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "nIR-C00M00-00", + "boardName": "NG9097", + "boardRev": "R4M2E3", + "productName": "OAK-D S2 PoE AF", + "boardCustom": "", + "hardwareConf": "F0-FV00-BC001", + "boardOptions": 3, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_s2_poe_ff.json b/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_s2_poe_ff.json new file mode 100644 index 000000000..063861626 --- /dev/null +++ b/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_s2_poe_ff.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "nIR-C00M00-00", + "boardName": "NG9097", + "boardRev": "R4M2E3", + "productName": "OAK-D S2 PoE FF", + "boardCustom": "", + "hardwareConf": "F1-FV00-BC001", + "boardOptions": 3, + "version": 7 +} diff --git a/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_w_poe.json b/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_w_poe.json new file mode 100644 index 000000000..475565758 --- /dev/null +++ b/batch/eeprom/NG9097_R4M2E3_BNO086_oak_d_w_poe.json @@ -0,0 +1,12 @@ +{ + "batchName": "", + "batchTime": 0, + "boardConf": "nIR-C00M00-00", + "boardName": "NG9097", + "boardRev": "R4M2E3", + "productName": "OAK-D W PoE", + "boardCustom": "", + "hardwareConf": "F1-FV01-BC001", + "boardOptions": 3, + "version": 7 +} \ No newline at end of file diff --git a/batch/oak_1.json b/batch/oak_1.json new file mode 100644 index 000000000..103a38d09 --- /dev/null +++ b/batch/oak_1.json @@ -0,0 +1,33 @@ +{ + "title": "OAK-1", + "description": "OAK-1", + "image": "images/oak_1.jpg", + "test_type": "OAK-1", + "variants": [ + { + "title":"OAK-1 AF (NG9093 R2M0E3)", + "description": "OAK-1 with Auto Focus", + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_af.json" + }, + { + "title":"OAK-1 FF C09 (NG9093 R2M0E3)", + "description": "OAK-1 with Fixed Focus C09", + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_af.json" + }, + { + "title":"OAK-1 FF (NG9093 R2M0E3)", + "description": "OAK-1 with Fixed Focus", + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_ff.json" + }, + { + "title":"OAK-1 Max (NG9093 R2M0E3)", + "description": "OAK-1 Max", + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_max.json" + }, + { + "title":"OAK-1 W (NG9093 R2M0E3)", + "description": "OAK-1 Wide Lens", + "eeprom":"eeprom/NG9093_R2M0E3_oak_1_w.json" + } + ] +} \ No newline at end of file diff --git a/batch/oak_d_lite.json b/batch/oak_d_lite.json new file mode 100644 index 000000000..39e82a48d --- /dev/null +++ b/batch/oak_d_lite.json @@ -0,0 +1,31 @@ +{ + "title": "OAK-D Lite", + "description": "OAK-D Lite", + "image": "images/oak_d_lite.jpg", + "test_type": "OAK-D-LITE", + "variants": [ + { + "title":"OAK-D Lite (DM9095 R3M2E4)", + "description": "OAK-D Lite, based on DM9095 R3M2E4 board", + "eeprom":"eeprom/DM9095_R3M2E4_oak_d_lite.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" + } + ] +} diff --git a/batch/oak_d_poe.json b/batch/oak_d_poe.json new file mode 100644 index 000000000..f9cd66e94 --- /dev/null +++ b/batch/oak_d_poe.json @@ -0,0 +1,13 @@ +{ + "title": "OAK-D PoE", + "description": "OAK-D PoE", + "image": "images/oak_d_poe.jpg", + "test_type": "OAK-D-POE", + "variants": [ + { + "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" + } + ] +} \ No newline at end of file diff --git a/batch/oak_d_pro.json b/batch/oak_d_pro.json new file mode 100644 index 000000000..2798b77da --- /dev/null +++ b/batch/oak_d_pro.json @@ -0,0 +1,48 @@ +{ + "title": "OAK-D Pro", + "description": "OAK-D Pro (Series 2)", + "image": "images/oak_d_pro.jpg", + "test_type": "OAK-D-PRO", + "variants": [ + { + "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" + }, + { + "title":"OAK-D Pro AF (DM9098 R6M2E6)", + "description": "OAK-D Pro AutoFocus", + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_af.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" + }, + { + "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" + }, + { + "title":"OAK-D Pro FF (DM9098 R6M2E6)", + "description": "OAK-D Pro, Fixed Focus", + "eeprom":"eeprom/DM9098_R6M2E6_oak_d_pro_ff.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" + }, + { + "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" + }, + { + "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" + } + ] +} \ No newline at end of file diff --git a/batch/oak_d_pro_poe.json b/batch/oak_d_pro_poe.json new file mode 100644 index 000000000..c3cf393e7 --- /dev/null +++ b/batch/oak_d_pro_poe.json @@ -0,0 +1,58 @@ +{ + "title": "OAK-D Pro PoE", + "description": "OAK-D Pro PoE", + "image": "images/oak_d_pro.jpg", + "test_type": "OAK-D-PRO-POE", + "variants": [ + { + "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" + }, + { + "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" + }, + { + "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" + }, + { + "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" + }, + { + "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" + }, + { + "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" + }, + { + "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" + }, + { + "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" + }, + { + "title":"OAK-D Pro PoE FF (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" + }, + { + "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" + } + ] +} \ No newline at end of file diff --git a/batch/oak_d_s2.json b/batch/oak_d_s2.json new file mode 100644 index 000000000..612e16aca --- /dev/null +++ b/batch/oak_d_s2.json @@ -0,0 +1,24 @@ +{ + "title": "OAK-D S2", + "description": "OAK-D Series 2", + "image": "images/oak_d_s2.jpg", + "test_type": "OAK-D", + "variants": [ + { + "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" + }, + { + "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" + }, + { + "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" + } + ] +} \ No newline at end of file diff --git a/batch/oak_d_s2_poe.json b/batch/oak_d_s2_poe.json new file mode 100644 index 000000000..21a9e7d33 --- /dev/null +++ b/batch/oak_d_s2_poe.json @@ -0,0 +1,28 @@ + { + "title": "OAK-D S2 PoE", + "description": "OAK-D Series 2 PoE", + "image": "images/oak_d_s2_poe.jpg", + "test_type": "OAK-D-POE", + "variants": [ + { + "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" + }, + { + "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" + }, + { + "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" + }, + { + "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" + } + ] +} \ No newline at end of file diff --git a/batch/oak_d_w_poe.json b/batch/oak_d_w_poe.json new file mode 100644 index 000000000..164169944 --- /dev/null +++ b/batch/oak_d_w_poe.json @@ -0,0 +1,18 @@ + { + "title": "OAK-D W PoE", + "description": "OAK-D W PoE", + "image": "images/oak_d_w_poe.jpg", + "test_type": "OAK-D-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" + } + ] +} \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index 4eb12234c..fda6341f7 100644 --- a/requirements.txt +++ b/requirements.txt @@ -12,4 +12,4 @@ opencv-contrib-python==4.4.0.46 ; platform_machine == "armv6l" or platform_machi --extra-index-url https://artifacts.luxonis.com/artifactory/luxonis-depthai-data-local/wheels/ pyqt5>5,<5.15.6 ; platform_machine != "armv6l" and platform_machine != "armv7l" and platform_machine != "aarch64" --extra-index-url https://artifacts.luxonis.com/artifactory/luxonis-python-snapshot-local/ -depthai==2.16.0.0.dev+9d15b2a23834a09c3f07e4439d40ff3ae77bad2a +depthai==2.16.0.0.dev+e3e6a1f9040d7591e47e05a81f3632df7f09f4f2 diff --git a/test_ui.py b/test_ui.py index ecc4c69e1..ce379729a 100755 --- a/test_ui.py +++ b/test_ui.py @@ -16,6 +16,7 @@ import json, time from pathlib import Path import cv2 +import glob # Try setting native cv2 image format, otherwise RGB888 colorMode = QtGui.QImage.Format_RGB888 @@ -26,10 +27,14 @@ FPS = 10 -BATCH_DIR = Path(__file__).resolve().parent / 'batch' +DEVICE_DIR = Path(__file__).resolve().parent / 'batch' test_result = { 'usb3_res': '', + 'nor_flash_res': '', + 'bootloader_flash_res': '', + 'imu_upgrade_res': '', + 'imu_test_res': '', 'eeprom_res': '', 'rgb_cam_res': '', 'jpeg_enc_res': '', @@ -41,6 +46,7 @@ 'eeprom_data': '', 'nor_flash_res': '', } + OAK_KEYS = { 'OAK-1': ['usb3_res', 'rgb_cam_res', 'jpeg_enc_res', 'prew_out_rgb_res'], 'OAK-D': ['usb3_res', 'rgb_cam_res', 'jpeg_enc_res', 'prew_out_rgb_res', 'left_cam_res', 'right_cam_res','left_strm_res', 'right_strm_res'], @@ -61,25 +67,29 @@ 'OAK-D-PRO-POE': ['jpeg_enc', 'prew_out_rgb', 'left_strm', 'right_strm', 'ir_light'], } - -OAK_D_LABELS = '

\ - USB3
\ - EEPROM write test
\ - RGB Camera connected
\ - JPEG Encoding Stream
\ - preview-out-rgb Stream
\ - left camera connected
\ - right camera connected
\ - left Stream
\ - right Stream

' - - -OAK_ONE_LABELS = '

\ - USB3
\ - EEPROM write test
\ - RGB Camera connected
\ - JPEG Encoding Stream
\ - preview-out-rgb Stream

' +br_command = '
' +OAK_D_LABELS = f'

\ + USB3 {br_command} \ + EEPROM write test {br_command} \ + NOR Flash {br_command} \ + Bootloader Flash {br_command} \ + IMU Upgrade {br_command} \ + IMU test {br_command} \ + RGB Camera connected {br_command} \ + JPEG Encoding Stream {br_command} \ + preview-out-rgb Stream {br_command} \ + left camera connected {br_command} \ + right camera connected {br_command} \ + left Stream {br_command} \ + right Stream {br_command}

' + + +OAK_ONE_LABELS = f'

\ + USB3 {br_command} \ + EEPROM write test {br_command} \ + RGB Camera connected {br_command} \ + JPEG Encoding Stream {br_command} \ + preview-out-rgb Stream {br_command} \

' CSV_HEADER = { 'OAK-1': '"Device ID","Device Type","Timestamp","USB3","RGB camera connect","JPEG Encoding","RGB Stream","JPEG Encoding Operator","RGB Encoding Operator"', @@ -110,7 +120,7 @@ def clear_test_results(): update_res = True imu_upgrade = True -class DepthAICamera(): +class DepthAICamera: def __init__(self): global update_res self.pipeline = dai.Pipeline() @@ -125,6 +135,10 @@ def __init__(self): self.camRgb.setResolution(dai.ColorCameraProperties.SensorResolution.THE_1080_P) self.camRgb.preview.link(self.xoutRgb.input) self.camRgb.setFps(FPS) + if 'max' in variant_desc_label.lower(): + print('On a MAX board (IMX582), setting 4K res') + self.camRgb.setResolution(dai.ColorCameraProperties.SensorResolution.THE_4_K) + self.camRgb.setIspScale(1, 2) # # TMP TMP TMP - IMU update simulation # script = self.pipeline.create(dai.node.Script) @@ -152,15 +166,12 @@ def __init__(self): self.imu = self.pipeline.create(dai.node.IMU) self.xoutIMU = self.pipeline.create(dai.node.XLinkOut) self.xoutIMU.setStreamName("IMU") - if 'lite' in test_type: - self.imu.enableFirmwareUpdate(True) - self.imu.enableIMUSensor(dai.IMUSensor.ACCELEROMETER_RAW, 500) + self.imu.enableFirmwareUpdate(True) + self.imu.enableIMUSensor([dai.IMUSensor.ACCELEROMETER_RAW, dai.IMUSensor.GYROSCOPE_RAW], 500) self.imu.setBatchReportThreshold(1) self.imu.setMaxBatchReports(10) self.imu.out.link(self.xoutIMU.input) - - self.videoEnc = self.pipeline.create(dai.node.VideoEncoder) self.camRgb.video.link(self.videoEnc.input) self.xoutJpeg = self.pipeline.create(dai.node.XLinkOut) @@ -168,7 +179,7 @@ def __init__(self): self.videoEnc.setDefaultProfilePreset(self.camRgb.getFps(), dai.VideoEncoderProperties.Profile.MJPEG) self.xoutJpeg.setStreamName("jpeg") - if test_type != 'OAK-1': + if 'OAK-1' not in test_type: self.camLeft = self.pipeline.create(dai.node.MonoCamera) self.xoutLeft = self.pipeline.create(dai.node.XLinkOut) self.xoutLeft.setStreamName("left") @@ -186,8 +197,7 @@ def __init__(self): self.camRight.setFps(10) usb_speed = dai.UsbSpeed.SUPER - # if test_type == 'OAK-D-PRO-POE': - if 'poe' in eepromDataJson['productName'].lower(): + if 'POE' in test_type: usb_speed = dai.UsbSpeed.HIGH self.device = dai.Device(dai.OpenVINO.VERSION_2021_4, usb_speed) @@ -253,8 +263,7 @@ def __init__(self): except RuntimeError: test_result['usb3_res'] = 'FAIL' - # if test_type == 'OAK-D-PRO-POE': - if 'poe' in eepromDataJson['productName'].lower(): + if 'POE' in test_type: test_result['usb3_res'] = 'SKIP' self.start_queue() @@ -293,8 +302,22 @@ def start_queue(self): self.qJpeg = self.device.getOutputQueue(name="jpeg", maxSize=1, blocking=False) except RuntimeError: test_result['jpeg_enc_res'] = 'FAIL' + try: + self.qImu = self.device.getOutputQueue(name='IMU', maxSize=1, blocking=False) + except RuntimeError: + test_result['imu'] = 'FAIL' update_res = True + def get_imu(self): + in_imu = self.qImu.tryGet() + if in_imu is None: + print('empty packet') + return None + imu_packet = in_imu.packets[0] + accel = imu_packet.acceleroMeter + gyro = imu_packet.gyroscope + return accel, gyro + def get_image(self, cam_type): global update_res image = None @@ -403,80 +426,133 @@ def flash_eeprom(self): eepromDataJson = None calib_path = None +selectedDeviceInfo = "" class Ui_CalibrateSelect(QtWidgets.QDialog): def __init__(self): global eepromDataJson global calib_path super().__init__() - x = os.walk(BATCH_DIR) - print(x) - self.batches = [] - self.jsons = {} - for x in os.walk(BATCH_DIR): - self.batches = sorted(x[1]) - break - for batch in self.batches: - for js in os.walk(BATCH_DIR/batch): - self.jsons[batch] = sorted(js[2]) - print(js) - - self.batch_combo = QtWidgets.QComboBox(self) - self.batch_combo.setGeometry(QtCore.QRect(100, 20, 141, 32)) - self.batch_combo.addItems(self.batches) - self.batch_combo.currentTextChanged.connect(self.batches_changed) + + # Create list of devices data + self.device_jsons = [] + # Create "representational (title)" data + self.device_titles = [] + + # Get all devices + devices = glob.glob(f'{DEVICE_DIR}/*.json') + # Retrieve all information + for dev in devices: + with open(dev, 'r') as f: + j = json.load(f) + self.device_jsons.append(j) + self.device_titles.append(j["title"]) + + self.device_dropdown = QtWidgets.QComboBox(self) + self.device_dropdown.addItems(self.device_titles) + self.device_dropdown.currentTextChanged.connect(self.device_changed) self.json_combo = QtWidgets.QComboBox(self) - self.json_combo.setGeometry(QtCore.QRect(100, 70, 261, 32)) - self.json_combo.addItems(self.jsons[self.batches[0]]) - self.json_combo.currentTextChanged.connect(self.json_changed) + self.json_combo.currentTextChanged.connect(self.variant_changed) self.setObjectName("CalibrateSelect") - self.resize(386, 192) self.buttonBox = QtWidgets.QDialogButtonBox(self) - self.buttonBox.setGeometry(QtCore.QRect(70, 130, 191, 32)) self.buttonBox.setOrientation(QtCore.Qt.Horizontal) self.buttonBox.setStandardButtons(QtWidgets.QDialogButtonBox.Cancel|QtWidgets.QDialogButtonBox.Ok) - self.buttonBox.setObjectName("buttonBox") + self.buttonBox.accepted.connect(self.accept) + self.buttonBox.rejected.connect(self.reject) + self.batch_label = QtWidgets.QLabel(self) - self.batch_label.setGeometry(QtCore.QRect(10, 20, 51, 27)) font = QtGui.QFont() font.setPointSize(12) self.batch_label.setFont(font) - self.batch_label.setObjectName("batch_label") + self.batch_label.setObjectName("device_label") + + self.device_desc_label = QtWidgets.QLabel(self) + self.device_desc_label.setObjectName("device_desc_label") + self.json_label = QtWidgets.QLabel(self) - self.json_label.setGeometry(QtCore.QRect(10, 70, 77, 27)) + self.json_label.setGeometry(QtCore.QRect(10, 150, 77, 27)) font = QtGui.QFont() font.setPointSize(12) self.json_label.setFont(font) self.json_label.setObjectName("json_label") - self.buttonBox.accepted.connect(self.accept) - self.buttonBox.rejected.connect(self.reject) + + self.variant_desc_label = QtWidgets.QLabel(self) + QtCore.QMetaObject.connectSlotsByName(self) _translate = QtCore.QCoreApplication.translate - self.batch_label.setText(_translate("CalibrateSelect", "Batch")) - self.json_label.setText(_translate("CalibrateSelect", "JSON file")) + self.batch_label.setText(_translate("CalibrateSelect", "Device")) + self.json_label.setText(_translate("CalibrateSelect", "Variant")) self.setWindowTitle(_translate("CalibrateSelect", "Dialog")) - calib_path = BATCH_DIR / self.batch_combo.currentText() / self.json_combo.currentText() - with open(calib_path) as jfile: - eepromDataJson = json.load(jfile) - def batches_changed(self): + # Set layout + layout = QtWidgets.QFormLayout() + layout.addRow(self.batch_label, self.device_dropdown) + layout.addRow(QtWidgets.QLabel("Description"), self.device_desc_label) + layout.addRow(self.json_label, self.json_combo) + layout.addRow(QtWidgets.QLabel("Description"), self.variant_desc_label) + layout.addRow(QtWidgets.QLabel("Description"), self.variant_desc_label) + layout.addRow(self.buttonBox) + layout.setRowWrapPolicy(layout.RowWrapPolicy.WrapLongRows) + self.setLayout(layout) + + # Refresh devices + self.device_changed() + + def device_changed(self): global calib_path global eepromDataJson - print("Batches changed!") + print("Devices changed!") + + curDevice = self.device_jsons[self.device_dropdown.currentIndex()] + variantIndex = self.json_combo.currentIndex() + + # Create "representational (title)" data for variants + variant_titles = [] + for variant in curDevice["variants"]: + variant_titles.append(variant["title"]) + + # Update variants combobox self.json_combo.clear() - self.json_combo.addItems(self.jsons[self.batch_combo.currentText()]) - calib_path = BATCH_DIR / self.batch_combo.currentText() / self.json_combo.currentText() - with open(calib_path) as jfile: - eepromDataJson = json.load(jfile) + self.json_combo.addItems(variant_titles) + # Update desc + self.device_desc_label.setText(curDevice["description"]) + if variantIndex >= 0 and variantIndex < len(curDevice["variants"]): + self.variant_desc_label.setText(curDevice["variants"][variantIndex]["description"]) - def json_changed(self): + # Refresh variants + self.variant_changed() + + + def variant_changed(self): global eepromDataJson global calib_path - calib_path = BATCH_DIR / self.batch_combo.currentText() / self.json_combo.currentText() - with open(calib_path) as jfile: - eepromDataJson = json.load(jfile) + global selectedDeviceInfo + + curDevice = self.device_jsons[self.device_dropdown.currentIndex()] + variantIndex = self.json_combo.currentIndex() + global variant_desc_label + variant_desc_label = "" + # Update desc + if variantIndex >= 0 and variantIndex < len(curDevice["variants"]): + self.variant_desc_label.setText(curDevice["variants"][variantIndex]["description"]) + variant_desc_label = curDevice["variants"][variantIndex]["description"] + + # Load test_type, first from "device" + global test_type + test_type = curDevice['test_type'] + + # Load eeprom data if available + if len(curDevice['variants']) > variantIndex: + # Load test_type, if variant also has it selected, override + if 'test_type' in curDevice['variants'][variantIndex]: + test_type = curDevice['variants'][variantIndex]["test_type"] + calib_path = DEVICE_DIR / curDevice['variants'][variantIndex]["eeprom"] + with open(calib_path) as jfile: + eepromDataJson = json.load(jfile) + + selectedDeviceInfo = curDevice['variants'][variantIndex]['title'] class Camera(QtWidgets.QWidget): def __init__(self, get_image, camera_format, title='Camera', location=(0, 0)): @@ -514,7 +590,7 @@ def update_image(self): WIDTH = 766 -HEIGHT = 717 +HEIGHT = 980 def test_connexion(): @@ -595,12 +671,12 @@ def __init__(self): self.MB_END = "

" self.all_logs = "" - x = os.walk(BATCH_DIR) + x = os.walk(DEVICE_DIR) print(x) self.batches = [] self.jsons = {} i = 0 - for x in os.walk(BATCH_DIR): + for x in os.walk(DEVICE_DIR): if i == 0: self.batches = x[1] else: @@ -628,92 +704,121 @@ def setupUi(self): self.centralwidget = QtWidgets.QWidget(UI_tests) self.centralwidget.setObjectName("centralwidget") self.title = QtWidgets.QLabel(self.centralwidget) - self.title.setGeometry(QtCore.QRect(10, 10, 751, 51)) + self.title.setGeometry(QtCore.QRect(10, 10, 751, 71)) font = QtGui.QFont() font.setPointSize(16) self.title.setFont(font) self.title.setObjectName("title") self.connect_but = QtWidgets.QPushButton(self.centralwidget) - self.connect_but.setGeometry(QtCore.QRect(460, 390, 86, 25)) + self.connect_but.setGeometry(QtCore.QRect(440, 410, 86, 25)) self.connect_but.setObjectName("connect_but") self.connect_but.clicked.connect(self.show_cameras) - # self.save_but = QtWidgets.QPushButton(self.centralwidget) - # self.save_but.setGeometry(QtCore.QRect(550, 390, 86, 25)) - # self.save_but.setObjectName("connect_but") - # self.save_but.clicked.connect(save_csv) self.automated_tests = QtWidgets.QGroupBox(self.centralwidget) - if test_type == 'OAK-1': - self.automated_tests.setGeometry(QtCore.QRect(20, 70, 311, 241)) + if 'OAK-1' in test_type: + self.automated_tests.setGeometry(QtCore.QRect(20, 90, 311, 590)) else: - self.automated_tests.setGeometry(QtCore.QRect(20, 70, 311, 395)) + self.automated_tests.setGeometry(QtCore.QRect(20, 90, 311, 590)) self.automated_tests.setObjectName("automated_tests") self.automated_tests_labels = QtWidgets.QLabel(self.automated_tests) - self.automated_tests_labels.setGeometry(QtCore.QRect(10, 20, 221, 351)) + self.automated_tests_labels.setGeometry(QtCore.QRect(10, 20, 225, 540)) self.automated_tests_labels.setObjectName("automated_tests_labels") self.automated_tests_labels.setContentsMargins(0,9,9,5) self.automated_tests_labels.setAlignment(QtCore.Qt.AlignRight) # self.automated_tests_labels.setGeometry(QtCore.QRect(10, 30, 221, 150)) - px, py, x, y = 240, 37, 51, 21 - dy = 39 + px, py, x, y = 240, 43, 51, 21 + dy = 41 self.usb3_res = QtWidgets.QLabel(self.automated_tests) self.usb3_res.setGeometry(QtCore.QRect(px, py, x, y)) self.usb3_res.setObjectName("usb3_res") + self.usb3_res.setText("SKIP") py += dy self.eeprom_res = QtWidgets.QLabel(self.automated_tests) self.eeprom_res.setGeometry(QtCore.QRect(px, py, x, y)) self.eeprom_res.setObjectName("eeprom_res") + self.eeprom_res.setText("SKIP") + + py += dy + self.nor_flash_res = QtWidgets.QLabel(self.automated_tests) + self.nor_flash_res.setGeometry(QtCore.QRect(px, py, x, y)) + self.nor_flash_res.setObjectName("NOR Flash") + self.nor_flash_res.setText("SKIP") + + py += dy + self.bootloader_flash_res = QtWidgets.QLabel(self.automated_tests) + self.bootloader_flash_res.setGeometry(QtCore.QRect(px, py, x, y)) + self.bootloader_flash_res.setObjectName("NOR Flash") + self.bootloader_flash_res.setText("SKIP") + + py += dy + self.imu_upgrade_res = QtWidgets.QLabel(self.automated_tests) + self.imu_upgrade_res.setGeometry(QtCore.QRect(px, py, x, y)) + self.imu_upgrade_res.setObjectName("NOR Flash") + self.imu_upgrade_res.setText("SKIP") + + py += dy + self.imu_test_res = QtWidgets.QLabel(self.automated_tests) + self.imu_test_res.setGeometry(QtCore.QRect(px, py, x, y)) + self.imu_test_res.setObjectName("NOR Flash") + self.imu_test_res.setText("SKIP") py += dy self.rgb_cam_res = QtWidgets.QLabel(self.automated_tests) self.rgb_cam_res.setGeometry(QtCore.QRect(px, py, x, y)) self.rgb_cam_res.setObjectName("rgb_cam_res") + self.rgb_cam_res.setText("SKIP") py += dy self.jpeg_enc_res = QtWidgets.QLabel(self.automated_tests) self.jpeg_enc_res.setGeometry(QtCore.QRect(px, py, x, y)) self.jpeg_enc_res.setObjectName("jpeg_enc_res") + self.jpeg_enc_res.setText("SKIP") py += dy self.prew_out_rgb_res = QtWidgets.QLabel(self.automated_tests) self.prew_out_rgb_res.setGeometry(QtCore.QRect(px, py, x, y)) self.prew_out_rgb_res.setObjectName("prew_out_rgb_res") + self.prew_out_rgb_res.setText("SKIP") py += dy self.left_cam_res = QtWidgets.QLabel(self.automated_tests) self.left_cam_res.setGeometry(QtCore.QRect(px, py, x, y)) self.left_cam_res.setObjectName("left_cam_res") + self.left_cam_res.setText("SKIP") py += dy self.right_cam_res = QtWidgets.QLabel(self.automated_tests) self.right_cam_res.setGeometry(QtCore.QRect(px, py, x, y)) self.right_cam_res.setObjectName("right_cam_res") + self.right_cam_res.setText("SKIP") py += dy self.left_strm_res = QtWidgets.QLabel(self.automated_tests) self.left_strm_res.setGeometry(QtCore.QRect(px, py, x, y)) self.left_strm_res.setObjectName("left_strm_res") + self.left_strm_res.setText("SKIP") py += dy self.right_strm_res = QtWidgets.QLabel(self.automated_tests) self.right_strm_res.setGeometry(QtCore.QRect(px, py, x, y)) self.right_strm_res.setObjectName("right_strm_res") + self.right_strm_res.setText("SKIP") - py += dy - self.ir_project_res = QtWidgets.QLabel(self.automated_tests) - self.ir_project_res.setGeometry(QtCore.QRect(px, py, x, y)) - self.ir_project_res.setObjectName("ir_project_res") + # py += dy + # self.ir_project_res = QtWidgets.QLabel(self.automated_tests) + # self.ir_project_res.setGeometry(QtCore.QRect(px, py, x, y)) + # self.ir_project_res.setObjectName("ir_project_res") + # self.ir_project_res.setText("LAST") self.operator_tests = QtWidgets.QGroupBox(self.centralwidget) # self.operator_tests.setGeometry(QtCore.QRect(360, 70, 321, 321)) - # if test_type == 'OAK-D-PRO' or test_type == 'OAK-D-PRO-POE': - if 'oak-d pro' in eepromDataJson['productName'].lower(): - self.operator_tests.setGeometry(QtCore.QRect(360, 70, 321, 311)) - elif test_type == 'OAK-1': - self.operator_tests.setGeometry(QtCore.QRect(360, 70, 321, 190)) + if 'PRO' in test_type: + self.operator_tests.setGeometry(QtCore.QRect(360, 90, 321, 321)) + elif 'OAK-1' in test_type: + self.operator_tests.setGeometry(QtCore.QRect(360, 90, 321, 200)) else: - self.operator_tests.setGeometry(QtCore.QRect(360, 70, 321, 281)) + self.operator_tests.setGeometry(QtCore.QRect(360, 90, 321, 291)) self.operator_tests.setObjectName("operator_tests") self.operator_tests_label = QtWidgets.QLabel(self.operator_tests) self.operator_tests_label.setGeometry(QtCore.QRect(10, 100, 131, 201)) @@ -800,7 +905,7 @@ def setupUi(self): self.rgb_fail_but.name = 'prew_out_rgb' self.rgb_fail_but.toggled.connect(lambda: set_operator_test(self.rgb_fail_but)) - if test_type != 'OAK-1': + if 'OAK-1' not in test_type: self.op_left_frame = QtWidgets.QFrame(self.operator_tests) self.op_left_frame.setGeometry(QtCore.QRect(160, 180, 131, 41)) self.op_left_frame.setFrameShape(QtWidgets.QFrame.StyledPanel) @@ -871,8 +976,7 @@ def setupUi(self): self.right_fail_but.name = 'right_strm' self.right_fail_but.toggled.connect(lambda: set_operator_test(self.right_fail_but)) - # if test_type == 'OAK-D-PRO' or test_type == 'OAK-D-PRO-POE': - if 'oak-d pro' in eepromDataJson['productName'].lower(): + if 'PRO' in test_type: self.op_ir_frame = QtWidgets.QFrame(self.operator_tests) self.op_ir_frame.setGeometry(QtCore.QRect(160, 270, 131, 41)) self.op_ir_frame.setFrameShape(QtWidgets.QFrame.StyledPanel) @@ -909,7 +1013,7 @@ def setupUi(self): self.ir_fail_but.toggled.connect(lambda: set_operator_test(self.ir_fail_but)) self.logs = QtWidgets.QGroupBox(self.centralwidget) - self.logs.setGeometry(QtCore.QRect(10, 460, 741, 221)) + self.logs.setGeometry(QtCore.QRect(10, HEIGHT-260, 741, 221)) self.logs.setObjectName("logs") self.logs_title_label = QtWidgets.QLabel(self.logs) self.logs_title_label.setGeometry(QtCore.QRect(10, 20, 281, 21)) @@ -922,15 +1026,18 @@ def setupUi(self): self.test_type_label.setGeometry(QtCore.QRect(10, 60, 281, 21)) self.test_type_label.setObjectName("test_type_label") self.prog_bar = QtWidgets.QProgressBar(self.logs) - self.prog_bar.setGeometry(QtCore.QRect(540, 40, 118, 23)) + self.prog_bar.setGeometry(QtCore.QRect(540, 56, 118, 23)) self.prog_bar.setProperty("value", 24) self.prog_bar.setObjectName("IMU_prog_bar") self.prog_bar.setMinimum(0) self.prog_bar.setMaximum(100) self.prog_bar.setValue(0) self.prog_label = QtWidgets.QLabel(self.logs) - self.prog_label.setGeometry(QtCore.QRect(450, 40, 81, 17)) + self.prog_label.setGeometry(QtCore.QRect(430, 60, 90, 17)) self.prog_label.setObjectName("prog_label") + self.imu_label = QtWidgets.QLabel(self.logs) + self.imu_label.setGeometry(QtCore.QRect(430, 40, 280, 20)) + # self.imu_label.setText('') self.logs_txt_browser = QtWidgets.QTextBrowser(self.logs) self.logs_txt_browser.setGeometry(QtCore.QRect(10, 90, 721, 121)) self.logs_txt_browser.setObjectName("logs_txt_browser") @@ -957,7 +1064,7 @@ def setupUi(self): self.update_imu = True self.timer = QtCore.QTimer() self.timer.timeout.connect(self.set_result) - self.timer.start(1000//FPS) + self.timer.start(100) # self.connect_timer = QtCore.QTimer() # self.connect_timer.connect(test_connexion) @@ -965,22 +1072,29 @@ def setupUi(self): self.threadpool = QThreadPool() self.scanning = False + self.last_progress_val = 0.0 + self.cycle = 0 def retranslateUi(self, UI_tests): _translate = QtCore.QCoreApplication.translate UI_tests.setWindowTitle(_translate("UI_tests", "DepthAI UI Tests")) - self.title.setText(_translate("UI_tests", f"

Batch: {calib_path.parent.name}
Device: {calib_path.name}

")) + self.title.setText(_translate("UI_tests", f"

Device: {selectedDeviceInfo}
EEPROM: {calib_path.name}

")) self.connect_but.setText("CONNECT") self.connect_but.adjustSize() self.automated_tests.setTitle(_translate("UI_tests", "Automated Tests")) - if test_type == 'OAK-1': + if 'OAK-1' in test_type: self.automated_tests_labels.setText(_translate("UI_tests", OAK_ONE_LABELS)) else: self.automated_tests_labels.setText(_translate("UI_tests", OAK_D_LABELS)) self.operator_tests.setTitle(_translate("UI_tests", "Operator Tests")) self.NOT_TESTED_LABEL.setText(_translate("UI_tests", "

Not
Tested

")) self.FAIL_LABEL.setText(_translate("UI_tests", "

FAIL

")) + if 'oak-d pro' in eepromDataJson['productName'].lower(): + ir_light = 'IR Light' + else: + ir_light = '' + self.operator_tests_label.setText(_translate("UI_tests", "\n" "