Merge branch 'mfg_tool/generate_summary' into 'main'

mfg_tool: Generate a summary csv file for all the generated factory binaries

See merge request app-frameworks/esp-matter!271
This commit is contained in:
Shu Chen
2023-01-18 17:54:03 +08:00
2 changed files with 30 additions and 2 deletions
+24 -1
View File
@@ -31,6 +31,7 @@ import pyqrcode
from chip_nvs import *
from utils import *
from datetime import datetime
if not os.getenv('IDF_PATH'):
logging.error("IDF_PATH environment variable is not set")
@@ -344,7 +345,7 @@ def write_per_device_unique_data(args):
chip_factory_update('dac-pub-key', os.path.abspath(dacs[2]))
chip_factory_update('pai-cert', os.path.abspath(PAI['cert_der']))
chip_factory_update('cert-dclrn', os.path.abspath(args.cert_dclrn))
chip_factory_update('cert-dclrn', os.path.relpath(args.cert_dclrn))
# If serial number is not passed, then generate one
if (args.serial_num is None):
@@ -392,6 +393,27 @@ def organize_output_files(suffix, args):
if args.encrypt:
os.rmdir(os.sep.join([OUT_DIR['top'], 'keys']))
def generate_summary(args):
master_csv = os.sep.join([OUT_DIR['stage'], 'master.csv'])
summary_csv = os.sep.join([OUT_DIR['top'], 'summary-{}.csv'.format(datetime.now().strftime("%Y-%m-%d-%H:%M:%S"))])
summary_csv_data = ''
with open(master_csv, 'r') as mcsvf:
summary_lines = mcsvf.read().splitlines()
summary_csv_data += summary_lines[0] + ',pincode,qrcode,manualcode\n'
with open(OUT_FILE['pin_disc_csv'], 'r') as pdcsvf:
pin_disc_dict = csv.DictReader(pdcsvf)
for row in pin_disc_dict:
pincode = row['PIN Code']
discriminator = row['Discriminator']
qrcode = get_chip_qrcode(TOOLS['chip-tool'], args.vendor_id, args.product_id,
args.commissioning_flow, discriminator, pincode, args.discovery_mode)
manualcode = get_chip_manualcode(TOOLS['chip-tool'], args.vendor_id, args.product_id,
args.commissioning_flow, discriminator, pincode)
summary_csv_data += summary_lines[1 + int(row['Index'])] + ',' + pincode + ',' + qrcode + ',' + manualcode + '\n'
with open(summary_csv, 'w') as scsvf:
scsvf.write(summary_csv_data)
def generate_partitions(suffix, size, encrypt):
cmd = [
@@ -591,6 +613,7 @@ def main():
write_per_device_unique_data(args)
generate_partitions('matter_partition', args.size, args.encrypt)
organize_output_files('matter_partition', args)
generate_summary(args)
if __name__ == "__main__":
+6 -1
View File
@@ -328,4 +328,9 @@ def get_chip_manualcode(chip_tool, vid, pid, flow, discriminator, passcode):
# For standard commissioning flow it is 11 digits
# For User-intent and custom commissioning flow it is 21 digits
manual_code_len = LONG_MANUALCODE_LEN if flow else SHORT_MANUALCODE_LEN
return data.decode('utf-8').split('Manual Code: ')[1][:manual_code_len]
ret = data.decode('utf-8').split('Manual Code: ')[1][:manual_code_len]
# For 11-digits manual code, use the format 'XXXX-XXX-XXXX'
# TODO: change the format of 21-digits maunal code
if manual_code_len == SHORT_MANUALCODE_LEN:
ret = ret[:4] + '-' + ret[4:7] + '-' + ret[7:]
return ret