diff --git a/scripts/tools/generate_esp32_chip_factory_bin.py b/scripts/tools/generate_esp32_chip_factory_bin.py index 37ef6beac3cfb3..a4ccce52c0ab77 100755 --- a/scripts/tools/generate_esp32_chip_factory_bin.py +++ b/scripts/tools/generate_esp32_chip_factory_bin.py @@ -32,6 +32,8 @@ CHIP_TOPDIR = os.path.dirname(os.path.realpath(__file__))[:-len(os.path.join('scripts', 'tools'))] sys.path.insert(0, os.path.join(CHIP_TOPDIR, 'scripts', 'tools', 'spake2p')) from spake2p import generate_verifier # noqa: E402 isort:skip +sys.path.insert(0, os.path.join(CHIP_TOPDIR, 'src', 'setup_payload', 'python')) +from generate_setup_payload import CommissioningFlow, SetupPayload # noqa: E402 isort:skip if os.getenv('IDF_PATH'): sys.path.insert(0, os.path.join(os.getenv('IDF_PATH'), @@ -48,11 +50,11 @@ TOOLS = {} - FACTORY_PARTITION_CSV = 'nvs_partition.csv' FACTORY_PARTITION_BIN = 'factory_partition.bin' NVS_KEY_PARTITION_BIN = 'nvs_key_partition.bin' ESP_SECURE_CERT_PARTITION_BIN = 'esp_secure_cert_partititon.bin' +ONBOARDING_DATA_FILE = 'onboarding_codes.csv' FACTORY_DATA = { # CommissionableDataProvider @@ -602,6 +604,12 @@ def any_base_int(s): return int(s, 0) help='Do not generate the factory partition binary') parser.add_argument('--output_dir', type=str, default='bin', help='Created image output file path') + parser.add_argument('-cf', '--commissioning-flow', type=any_base_int, default=0, + help='Device commissioning flow, 0:Standard, 1:User-Intent, 2:Custom. \ + Default is 0.', choices=[0, 1, 2]) + parser.add_argument('-dm', '--discovery-mode', type=any_base_int, default=1, + help='Commissionable device discovery networking technology. \ + 0:WiFi-SoftAP, 1:BLE, 2:On-network. Default is BLE.', choices=[0, 1, 2]) parser.set_defaults(generate_bin=True) return parser.parse_args() @@ -633,11 +641,33 @@ def set_up_out_dirs(args): os.makedirs(args.output_dir, exist_ok=True) +def generate_onboarding_data(args): + if (args.vendor_id and args.product_id): + payloads = SetupPayload(args.discriminator, args.passcode, args.discovery_mode, CommissioningFlow(args.commissioning_flow), + args.vendor_id, args.product_id) + else: + payloads = SetupPayload(args.discriminator, args.passcode, args.discovery_mode, CommissioningFlow(args.commissioning_flow)) + + chip_qrcode = payloads.generate_qrcode() + chip_manualcode = payloads.generate_manualcode() + + logging.info('Generated QR code: ' + chip_qrcode) + logging.info('Generated manual code: ' + chip_manualcode) + + csv_data = 'qrcode,manualcode\n' + csv_data += chip_qrcode + ',' + chip_manualcode + '\n' + + with open(os.path.join(args.output_dir, ONBOARDING_DATA_FILE), 'w') as f: + f.write(csv_data) + + def main(): args = get_args() set_up_out_dirs(args) set_up_factory_data(args) generate_factory_partiton_binary(args) + if (args.discriminator and args.passcode): + generate_onboarding_data(args) if __name__ == "__main__":