|
| 1 | +""" |
| 2 | +Utility script to migrate Zephyr-based projects to new MCUmgr Kconfig options |
| 3 | +
|
| 4 | +Usage:: |
| 5 | +
|
| 6 | + python $ZEPHYR_BASE/scripts/utils/migrate_mcumgr_kconfigs.py -r root_path |
| 7 | +
|
| 8 | +The utility will process c, cpp, h, hpp, rst, conf, CMakeLists.txt, |
| 9 | +yml, yaml and Kconfig files. |
| 10 | +
|
| 11 | +
|
| 12 | +Copyright (c) 2022 Nordic Semiconductor ASA |
| 13 | +SPDX-License-Identifier: Apache-2.0 |
| 14 | +""" |
| 15 | + |
| 16 | +import argparse |
| 17 | +from pathlib import Path |
| 18 | +import re |
| 19 | +import sys |
| 20 | + |
| 21 | + |
| 22 | +ZEPHYR_BASE = Path(__file__).parents[2] |
| 23 | + |
| 24 | +FILE_PATTERNS = ( |
| 25 | + r".+\.c", r".+\.cpp", r".+\.hpp", r".+\.h", r".+\.rst", r".+\.conf", |
| 26 | + r".+\.yml", r".+\.yaml", r"CMakeLists.txt", r"Kconfig(\..+)?" |
| 27 | +) |
| 28 | + |
| 29 | +REPLACEMENTS = { |
| 30 | + "MCUMGR_SMP_WORKQUEUE_STACK_SIZE" : "MCUMGR_TRANSPORT_WORKQUEUE_STACK_SIZE", |
| 31 | + "MCUMGR_SMP_WORKQUEUE_THREAD_PRIO" : "MCUMGR_TRANSPORT_WORKQUEUE_THREAD_PRIO", |
| 32 | + "MGMT_MAX_MAIN_MAP_ENTRIES" : "MCUMGR_SMP_CBOR_MAX_MAIN_MAP_ENTRIES", |
| 33 | + "MGMT_MIN_DECODING_LEVELS" : "MCUMGR_SMP_CBOR_MIN_DECODING_LEVELS", |
| 34 | + "MGMT_MIN_DECODING_LEVEL_1" : "MCUMGR_SMP_CBOR_MIN_DECODING_LEVEL_1", |
| 35 | + "MGMT_MIN_DECODING_LEVEL_2" : "MCUMGR_SMP_CBOR_MIN_DECODING_LEVEL_2", |
| 36 | + "MGMT_MIN_DECODING_LEVEL_3" : "MCUMGR_SMP_CBOR_MIN_DECODING_LEVEL_3", |
| 37 | + "MGMT_MIN_DECODING_LEVEL_4" : "MCUMGR_SMP_CBOR_MIN_DECODING_LEVEL_4", |
| 38 | + "MGMT_MIN_DECODING_LEVEL_5" : "MCUMGR_SMP_CBOR_MIN_DECODING_LEVEL_5", |
| 39 | + "MGMT_MAX_DECODING_LEVELS" : "MCUMGR_SMP_CBOR_MAX_DECODING_LEVELS", |
| 40 | + "MCUMGR_CMD_FS_MGMT" : "MCUMGR_GRP_FS", |
| 41 | + "FS_MGMT_MAX_FILE_SIZE_64KB" : "MCUMGR_GRP_FS_MAX_FILE_SIZE_64KB", |
| 42 | + "FS_MGMT_MAX_FILE_SIZE_4GB" : "MCUMGR_GRP_FS_MAX_FILE_SIZE_4GB", |
| 43 | + "FS_MGMT_MAX_OFFSET_LEN" : "MCUMGR_GRP_FS_MAX_OFFSET_LEN", |
| 44 | + "FS_MGMT_DL_CHUNK_SIZE_LIMIT" : "MCUMGR_GRP_FS_DL_CHUNK_SIZE_LIMIT", |
| 45 | + "FS_MGMT_DL_CHUNK_SIZE" : "MCUMGR_GRP_FS_DL_CHUNK_SIZE", |
| 46 | + "FS_MGMT_FILE_STATUS" : "MCUMGR_GRP_FS_FILE_STATUS", |
| 47 | + "FS_MGMT_CHECKSUM_HASH" : "MCUMGR_GRP_FS_CHECKSUM_HASH", |
| 48 | + "FS_MGMT_CHECKSUM_HASH_CHUNK_SIZE" : "MCUMGR_GRP_FS_CHECKSUM_HASH_CHUNK_SIZE", |
| 49 | + "FS_MGMT_CHECKSUM_IEEE_CRC32" : "MCUMGR_GRP_FS_CHECKSUM_IEEE_CRC32", |
| 50 | + "FS_MGMT_HASH_SHA256" : "MCUMGR_GRP_FS_HASH_SHA256", |
| 51 | + "FS_MGMT_PATH_SIZE" : "MCUMGR_GRP_FS_PATH_LEN", |
| 52 | + "MCUMGR_CMD_IMG_MGMT" : "MCUMGR_GRP_IMG", |
| 53 | + "IMG_MGMT_USE_HEAP_FOR_FLASH_IMG_CONTEXT" : "MCUMGR_GRP_IMG_USE_HEAP_FOR_FLASH_IMG_CONTEXT", |
| 54 | + "IMG_MGMT_UPDATABLE_IMAGE_NUMBER" : "MCUMGR_GRP_IMG_UPDATABLE_IMAGE_NUMBER", |
| 55 | + "IMG_MGMT_VERBOSE_ERR" : "MCUMGR_GRP_IMG_VERBOSE_ERR", |
| 56 | + "IMG_MGMT_DUMMY_HDR" : "MCUMGR_GRP_IMG_DUMMY_HDR", |
| 57 | + "IMG_MGMT_DIRECT_IMAGE_UPLOAD" : "MCUMGR_GRP_IMG_DIRECT_UPLOAD", |
| 58 | + "IMG_MGMT_REJECT_DIRECT_XIP_MISMATCHED_SLOT" : "MCUMGR_GRP_IMG_REJECT_DIRECT_XIP_MISMATCHED_SLOT", |
| 59 | + "IMG_MGMT_FRUGAL_LIST" : "MCUMGR_GRP_IMG_FRUGAL_LIST", |
| 60 | + "MCUMGR_CMD_OS_MGMT" : "MCUMGR_GRP_OS", |
| 61 | + "OS_MGMT_RESET_MS" : "MCUMGR_GRP_OS_RESET_MS", |
| 62 | + "OS_MGMT_TASKSTAT" : "MCUMGR_GRP_OS_TASKSTAT", |
| 63 | + "OS_MGMT_TASKSTAT_ONLY_SUPPORTED_STATS" : "MCUMGR_GRP_OS_TASKSTAT_ONLY_SUPPORTED_STATS", |
| 64 | + "OS_MGMT_TASKSTAT_MAX_NUM_THREADS" : "MCUMGR_GRP_OS_TASKSTAT_MAX_NUM_THREADS", |
| 65 | + "OS_MGMT_TASKSTAT_THREAD_NAME_LEN" : "MCUMGR_GRP_OS_TASKSTAT_THREAD_NAME_LEN", |
| 66 | + "OS_MGMT_TASKSTAT_SIGNED_PRIORITY" : "MCUMGR_GRP_OS_TASKSTAT_SIGNED_PRIORITY", |
| 67 | + "OS_MGMT_TASKSTAT_STACK_INFO" : "MCUMGR_GRP_OS_TASKSTAT_STACK_INFO", |
| 68 | + "OS_MGMT_ECHO" : "MCUMGR_GRP_OS_ECHO", |
| 69 | + "OS_MGMT_MCUMGR_PARAMS" : "MCUMGR_GRP_OS_MCUMGR_PARAMS", |
| 70 | + "MCUMGR_CMD_SHELL_MGMT" : "MCUMGR_GRP_SHELL", |
| 71 | + "MCUMGR_CMD_SHELL_MGMT_LEGACY_RC_RETURN_CODE" : "MCUMGR_GRP_SHELL_LEGACY_RC_RETURN_CODE", |
| 72 | + "MCUMGR_CMD_STAT_MGMT" : "MCUMGR_GRP_STAT", |
| 73 | + "STAT_MGMT_MAX_NAME_LEN" : "MCUMGR_GRP_STAT_MAX_NAME_LEN", |
| 74 | + "MCUMGR_GRP_ZEPHYR_BASIC" : "MCUMGR_GRP_ZBASIC", |
| 75 | + "MCUMGR_GRP_BASIC_CMD_STORAGE_ERASE" : "MCUMGR_GRP_ZBASIC_STORAGE_ERASE", |
| 76 | + "MGMT_VERBOSE_ERR_RESPONSE" : "MCUMGR_SMP_VERBOSE_ERR_RESPONSE", |
| 77 | + "MCUMGR_SMP_REASSEMBLY_BT" : "MCUMGR_TRANSPORT_BT_REASSEMBLY", |
| 78 | + "MCUMGR_SMP_REASSEMBLY" : "MCUMGR_TRANSPORT_REASSEMBLY", |
| 79 | + "MCUMGR_BUF_COUNT" : "MCUMGR_TRANSPORT_NETBUF_COUNT", |
| 80 | + "MCUMGR_BUF_SIZE" : "MCUMGR_TRANSPORT_NETBUF_SIZE", |
| 81 | + "MCUMGR_BUF_USER_DATA_SIZE" : "MCUMGR_TRANSPORT_NETBUF_USER_DATA_SIZE", |
| 82 | + "MCUMGR_SMP_BT" : "MCUMGR_TRANSPORT_BT", |
| 83 | + "MCUMGR_SMP_BT_AUTHEN" : "MCUMGR_TRANSPORT_BT_AUTHEN", |
| 84 | + "MCUMGR_SMP_BT_CONN_PARAM_CONTROL" : "MCUMGR_TRANSPORT_BT_CONN_PARAM_CONTROL", |
| 85 | + "MCUMGR_SMP_BT_CONN_PARAM_CONTROL_MIN_INT" : "MCUMGR_TRANSPORT_BT_CONN_PARAM_CONTROL_MIN_INT", |
| 86 | + "MCUMGR_SMP_BT_CONN_PARAM_CONTROL_MAX_INT" : "MCUMGR_TRANSPORT_BT_CONN_PARAM_CONTROL_MAX_INT", |
| 87 | + "MCUMGR_SMP_BT_CONN_PARAM_CONTROL_LATENCY" : "MCUMGR_TRANSPORT_BT_CONN_PARAM_CONTROL_LATENCY", |
| 88 | + "MCUMGR_SMP_BT_CONN_PARAM_CONTROL_TIMEOUT" : "MCUMGR_TRANSPORT_BT_CONN_PARAM_CONTROL_TIMEOUT", |
| 89 | + "MCUMGR_SMP_BT_CONN_PARAM_CONTROL_RESTORE_TIME" : "MCUMGR_TRANSPORT_BT_CONN_PARAM_CONTROL_RESTORE_TIME", |
| 90 | + "MCUMGR_SMP_BT_CONN_PARAM_CONTROL_RETRY_TIME" : "MCUMGR_TRANSPORT_BT_CONN_PARAM_CONTROL_RETRY_TIME", |
| 91 | + "MCUMGR_SMP_DUMMY" : "MCUMGR_TRANSPORT_DUMMY", |
| 92 | + "MCUMGR_SMP_DUMMY_RX_BUF_SIZE" : "MCUMGR_TRANSPORT_DUMMY_RX_BUF_SIZE", |
| 93 | + "MCUMGR_SMP_SHELL" : "MCUMGR_TRANSPORT_SHELL", |
| 94 | + "MCUMGR_SMP_SHELL_MTU" : "MCUMGR_TRANSPORT_SHELL_MTU", |
| 95 | + "MCUMGR_SMP_SHELL_RX_BUF_COUNT" : "MCUMGR_TRANSPORT_SHELL_RX_BUF_COUNT", |
| 96 | + "MCUMGR_SMP_UART" : "MCUMGR_TRANSPORT_UART", |
| 97 | + "MCUMGR_SMP_UART_ASYNC" : "MCUMGR_TRANSPORT_UART_ASYNC", |
| 98 | + "MCUMGR_SMP_UART_ASYNC_BUFS" : "MCUMGR_TRANSPORT_UART_ASYNC_BUFS", |
| 99 | + "MCUMGR_SMP_UART_ASYNC_BUF_SIZE" : "MCUMGR_TRANSPORT_UART_ASYNC_BUF_SIZE", |
| 100 | + "MCUMGR_SMP_UART_MTU" : "MCUMGR_TRANSPORT_UART_MTU", |
| 101 | + "MCUMGR_SMP_UDP" : "MCUMGR_TRANSPORT_UDP", |
| 102 | + "MCUMGR_SMP_UDP_IPV4" : "MCUMGR_TRANSPORT_UDP_IPV4", |
| 103 | + "MCUMGR_SMP_UDP_IPV6" : "MCUMGR_TRANSPORT_UDP_IPV6", |
| 104 | + "MCUMGR_SMP_UDP_PORT" : "MCUMGR_TRANSPORT_UDP_PORT", |
| 105 | + "MCUMGR_SMP_UDP_STACK_SIZE" : "MCUMGR_TRANSPORT_UDP_STACK_SIZE", |
| 106 | + "MCUMGR_SMP_UDP_THREAD_PRIO" : "MCUMGR_TRANSPORT_UDP_THREAD_PRIO", |
| 107 | + "MCUMGR_SMP_UDP_MTU" : "MCUMGR_TRANSPORT_UDP_MTU", |
| 108 | +} |
| 109 | + |
| 110 | +def process_file(path): |
| 111 | + modified = False |
| 112 | + output = [] |
| 113 | + |
| 114 | + try: |
| 115 | + with open(path) as f: |
| 116 | + lines = f.readlines() |
| 117 | + |
| 118 | + for line in lines: |
| 119 | + longest = "" |
| 120 | + length = 0 |
| 121 | + for m in REPLACEMENTS: |
| 122 | + if re.match(".*" + m + ".*", line) and len(m) > length: |
| 123 | + length = len(m) |
| 124 | + longest = m |
| 125 | + |
| 126 | + if length != 0: |
| 127 | + modified = True |
| 128 | + line = line.replace(longest, REPLACEMENTS[longest]) |
| 129 | + |
| 130 | + output.append(line) |
| 131 | + |
| 132 | + if modified is False: |
| 133 | + return |
| 134 | + |
| 135 | + with open(path, "w") as f: |
| 136 | + f.writelines(output) |
| 137 | + |
| 138 | + except UnicodeDecodeError: |
| 139 | + print(f"Unable to read lines from {path}", file=sys.stderr) |
| 140 | + except Exception as e: |
| 141 | + print(f"Failed with exception {e}", e) |
| 142 | + |
| 143 | +def process_tree(project): |
| 144 | + for p in project.glob("**/*"): |
| 145 | + for fp in FILE_PATTERNS: |
| 146 | + cfp = re.compile(".+/" + fp + "$") |
| 147 | + if re.match(cfp, str(p)) is not None: |
| 148 | + process_file(p) |
| 149 | + |
| 150 | +if __name__ == "__main__": |
| 151 | + parser = argparse.ArgumentParser() |
| 152 | + parser.add_argument( |
| 153 | + "-r", "--root", type=Path, required=True, help="Zephyr-based project path" |
| 154 | + ) |
| 155 | + args = parser.parse_args() |
| 156 | + |
| 157 | + process_tree(args.root) |
0 commit comments