Skip to content

Commit 3b299bf

Browse files
committed
Added command line arguments input support for cmake script
1 parent d65e74c commit 3b299bf

File tree

3 files changed

+68
-16
lines changed

3 files changed

+68
-16
lines changed

config/esp32/components/chip/Kconfig

+1-1
Original file line numberDiff line numberDiff line change
@@ -882,7 +882,7 @@ menu "CHIP Device Layer"
882882
default n
883883
help
884884
This option enables the system statistics to be sent to the insights cloud.
885-
885+
886886
config ENABLE_BUILD_TIME_PARTITION_SCRIPT
887887
bool "Enable script to build fctry and esp_secure_cert partition in during build time."
888888
default n

config/esp32/components/chip/factory.cmake

+41-13
Original file line numberDiff line numberDiff line change
@@ -34,25 +34,52 @@ function(generate_build_time_partition fctry_partition esp_secure_cert_partition
3434
message(STATUS "secure_cert_partition_offset : ${secure_cert_partition_offset}")
3535

3636
if("${fctry_partition_size}" AND "${fctry_partition_offset}")
37-
set(MY_BULB_NAME "My bulb")
38-
set(VENDOR_NAME "Test-vendor")
39-
set(HARDWARE_VERSION 1)
40-
set(HARDWARE_VERSION_STR "Devkit")
41-
set(VENDOR_ID 0xFFF2)
42-
set(PRODUCT_ID 0x8001)
43-
set(DAC_CERT "${chip_root_abs_path}/credentials/test/attestation/Chip-Test-DAC-FFF2-8001-0008-Cert.der")
44-
set(DAC_KEY "${chip_root_abs_path}/credentials/test/attestation/Chip-Test-DAC-FFF2-8001-0008-Key.der")
45-
set(PAI_CERT "${chip_root_abs_path}/credentials/test/attestation/Chip-Test-PAI-FFF2-8001-Cert.der")
46-
set(CERT_DCLRN "${chip_root_abs_path}/credentials/test/certification-declaration/Chip-Test-CD-FFF2-8001.der")
47-
set(PASSCODE 20202020)
48-
set(DISCRIMINATOR 3841)
37+
set(DEFAULT_DEVICE_NAME "My bulb")
38+
set(DEFAULT_VENDOR_NAME "Test-vendor")
39+
set(DEFAULT_HARDWARE_VERSION 1)
40+
set(DEFAULT_HARDWARE_VERSION_STR "Devkit")
41+
set(DEFAULT_VENDOR_ID 0xFFF2)
42+
set(DEFAULT_PRODUCT_ID 0x8001)
43+
set(DEFAULT_DAC_CERT "${chip_root_abs_path}/credentials/test/attestation/Chip-Test-DAC-FFF2-8001-0008-Cert.der")
44+
set(DEFAULT_DAC_KEY "${chip_root_abs_path}/credentials/test/attestation/Chip-Test-DAC-FFF2-8001-0008-Key.der")
45+
set(DEFAULT_PAI_CERT "${chip_root_abs_path}/credentials/test/attestation/Chip-Test-PAI-FFF2-8001-Cert.der")
46+
set(DEFAULT_CERT_DCLRN "${chip_root_abs_path}/credentials/test/certification-declaration/Chip-Test-CD-FFF2-8001.der")
47+
set(DEFAULT_PASSCODE 20202020)
48+
set(DEFAULT_DISCRIMINATOR 3841)
49+
50+
set(DEVICE_NAME ${DEFAULT_DEVICE_NAME} CACHE STRING "My bulb")
51+
set(VENDOR_NAME ${DEFAULT_VENDOR_NAME} CACHE STRING "Test-vendor")
52+
set(HARDWARE_VERSION ${DEFAULT_HARDWARE_VERSION} CACHE STRING 1)
53+
set(HARDWARE_VERSION_STR ${DEFAULT_HARDWARE_VERSION_STR} CACHE STRING "Devkit")
54+
set(VENDOR_ID ${DEFAULT_VENDOR_ID} CACHE STRING 0xFFF2)
55+
set(PRODUCT_ID ${DEFAULT_PRODUCT_ID} CACHE STRING 0x8001)
56+
set(DAC_CERT ${DEFAULT_DAC_CERT} CACHE STRING "${chip_root_abs_path}/credentials/test/attestation/Chip-Test-DAC-FFF2-8001-0008-Cert.der")
57+
set(DAC_KEY ${DEFAULT_DAC_KEY} CACHE STRING "${chip_root_abs_path}/credentials/test/attestation/Chip-Test-DAC-FFF2-8001-0008-Key.der")
58+
set(PAI_CERT ${DEFAULT_PAI_CERT} CACHE STRING "${chip_root_abs_path}/credentials/test/attestation/Chip-Test-PAI-FFF2-8001-Cert.der")
59+
set(CERT_DCLRN ${DEFAULT_CERT_DCLRN} CACHE STRING "${chip_root_abs_path}/credentials/test/certification-declaration/Chip-Test-CD-FFF2-8001.der")
60+
set(PASSCODE ${DEFAULT_PASSCODE} CACHE STRING 20202020)
61+
set(DISCRIMINATOR ${DEFAULT_DISCRIMINATOR} CACHE STRING 3841)
62+
63+
message(STATUS "Bulb Name: ${DEVICE_NAME}")
64+
message(STATUS "Vendor Name: ${VENDOR_NAME}")
65+
message(STATUS "Hardware Version: ${HARDWARE_VERSION}")
66+
message(STATUS "Hardware Version String: ${HARDWARE_VERSION_STR}")
67+
message(STATUS "Vendor ID: ${VENDOR_ID}")
68+
message(STATUS "Product ID: ${PRODUCT_ID}")
69+
message(STATUS "DAC Cert: ${DAC_CERT}")
70+
message(STATUS "DAC Key: ${DAC_KEY}")
71+
message(STATUS "PAI Cert: ${PAI_CERT}")
72+
message(STATUS "Certification Declaration: ${CERT_DCLRN}")
73+
message(STATUS "Passcode: ${PASSCODE}")
74+
message(STATUS "Discriminator: ${DISCRIMINATOR}")
75+
4976

5077
# Execute Factory partition image generation; this always executes as there is no way to specify for CMake to watch for
5178
# contents of the base dir changing.
5279
add_custom_target(build_time_partition ALL
5380
COMMAND ${generate_esp32_chip_factory_bin.py} -d ${DISCRIMINATOR}
5481
-p ${PASSCODE}
55-
--product-name "${MY_BULB_NAME}"
82+
--product-name "${DEVICE_NAME}"
5683
--vendor-name "${VENDOR_NAME}"
5784
--vendor-id ${VENDOR_ID}
5885
--product-id ${PRODUCT_ID}
@@ -66,6 +93,7 @@ function(generate_build_time_partition fctry_partition esp_secure_cert_partition
6693
WORKING_DIRECTORY ${CMAKE_BINARY_DIR}
6794
)
6895

96+
6997
set(factory_partition_bin ${CMAKE_BINARY_DIR}/bin/factory_partition.bin)
7098
set(esp_secure_cert_partition_bin ${CMAKE_BINARY_DIR}/bin/esp_secure_cert_partititon.bin)
7199
idf_component_get_property(main_args esptool_py FLASH_ARGS)

scripts/tools/generate_esp32_chip_factory_bin.py

+26-2
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,9 @@
3232
CHIP_TOPDIR = os.path.dirname(os.path.realpath(__file__))[:-len(os.path.join('scripts', 'tools'))]
3333
sys.path.insert(0, os.path.join(CHIP_TOPDIR, 'scripts', 'tools', 'spake2p'))
3434
from spake2p import generate_verifier # noqa: E402 isort:skip
35+
sys.path.insert(0,os.path.join(CHIP_TOPDIR, 'src', 'setup_payload','python'))
36+
from generate_setup_payload import SetupPayload, CommissioningFlow
37+
3538

3639
if os.getenv('IDF_PATH'):
3740
sys.path.insert(0, os.path.join(os.getenv('IDF_PATH'),
@@ -601,7 +604,13 @@ def any_base_int(s): return int(s, 0)
601604
parser.add_argument('--no-bin', action='store_false', dest='generate_bin',
602605
help='Do not generate the factory partition binary')
603606
parser.add_argument('--output_dir', type=str, default='bin', help='Created image output file path')
604-
607+
608+
parser.add_argument('-cf', '--commissioning-flow', type=any_base_int, default=0,
609+
help='Device commissioning flow, 0:Standard, 1:User-Intent, 2:Custom. \
610+
Default is 0.', choices=[0, 1, 2])
611+
parser.add_argument('-dm', '--discovery-mode', type=any_base_int, default=1,
612+
help='Commissionable device discovery networking technology. \
613+
0:WiFi-SoftAP, 1:BLE, 2:On-network. Default is BLE.', choices=[0, 1, 2])
605614
parser.set_defaults(generate_bin=True)
606615

607616
return parser.parse_args()
@@ -632,13 +641,28 @@ def generate_factory_partiton_binary(args):
632641
def set_up_out_dirs(args):
633642
os.makedirs(args.output_dir, exist_ok=True)
634643

644+
def generate_onboarding_data(args):
645+
payloads = SetupPayload(args.discriminator, args.passcode, args.discovery_mode, CommissioningFlow(args.commissioning_flow),
646+
args.vendor_id, args.product_id)
647+
logging.info('Discovery mode' + str(args.discovery_mode))
648+
chip_qrcode = payloads.generate_qrcode()
649+
chip_manualcode = payloads.generate_manualcode()
650+
# ToDo: remove this if qrcode tool can handle the standard manual code format
651+
if args.commissioning_flow == CommissioningFlow.Standard:
652+
chip_manualcode = chip_manualcode[:4] + '-' + chip_manualcode[4:7] + '-' + chip_manualcode[7:]
653+
else:
654+
chip_manualcode = '"' + chip_manualcode[:4] + '-' + chip_manualcode[4:7] + '-' + chip_manualcode[7:11] + '\n' + chip_manualcode[11:15] + '-' + chip_manualcode[15:18] + '-' + chip_manualcode[18:20] + '-' + chip_manualcode[20:21] + '"'
655+
656+
logging.info('Generated QR code: ' + chip_qrcode)
657+
logging.info('Generated manual code: ' + chip_manualcode)
658+
635659

636660
def main():
637661
args = get_args()
638662
set_up_out_dirs(args)
639663
set_up_factory_data(args)
640664
generate_factory_partiton_binary(args)
641-
665+
generate_onboarding_data(args)
642666

643667
if __name__ == "__main__":
644668
logging.basicConfig(format='[%(asctime)s] [%(levelname)7s] - %(message)s', level=logging.INFO)

0 commit comments

Comments
 (0)