Skip to content

Commit d492c0d

Browse files
de-nordiccarlescufi
authored andcommitted
scripts/utils/migrate_mcumgr_kconfigs.py: Script for migrating MCUmgr
Script that provides aid with converting project files to new Kconfig option names. Signed-off-by: Dominik Ermel <[email protected]>
1 parent a5488d6 commit d492c0d

File tree

2 files changed

+158
-0
lines changed

2 files changed

+158
-0
lines changed

CODEOWNERS

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -735,6 +735,7 @@ scripts/build/gen_image_info.py @tejlmand
735735
/scripts/twister @nashif
736736
/scripts/series-push-hook.sh @erwango
737737
/scripts/utils/pinctrl_nrf_migrate.py @gmarull
738+
/scripts/utils/migrate_mcumgr_kconfigs.py @de-nordic
738739
/scripts/west_commands/ @mbolivar-nordic
739740
/scripts/west_commands/blobs.py @carlescufi
740741
/scripts/west_commands/fetchers/ @carlescufi
Lines changed: 157 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,157 @@
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

Comments
 (0)