shell: support setting help string for each entry in a dictionary command

Add support for setting the help description for each entry in a dictionary
command. Currently the syntax string alone may not provide sufficient
description of its entry. This commit also helps keep the help messages
consistent with existing style.

Signed-off-by: Xinyang Tan <xinyang.tan@delve.com>
diff --git a/drivers/adc/adc_shell.c b/drivers/adc/adc_shell.c
index ac28098..86fa759 100644
--- a/drivers/adc/adc_shell.c
+++ b/drivers/adc/adc_shell.c
@@ -357,30 +357,30 @@
 }
 
 SHELL_SUBCMD_DICT_SET_CREATE(sub_ref_cmds, cmd_adc_ref,
-	(VDD_1, ADC_REF_VDD_1),
-	(VDD_1_2, ADC_REF_VDD_1_2),
-	(VDD_1_3, ADC_REF_VDD_1_3),
-	(VDD_1_4, ADC_REF_VDD_1_4),
-	(INTERNAL, ADC_REF_INTERNAL),
-	(EXTERNAL_0, ADC_REF_EXTERNAL0),
-	(EXTERNAL_1, ADC_REF_EXTERNAL1)
+	(VDD_1, ADC_REF_VDD_1, "VDD"),
+	(VDD_1_2, ADC_REF_VDD_1_2, "VDD/2"),
+	(VDD_1_3, ADC_REF_VDD_1_3, "VDD/3"),
+	(VDD_1_4, ADC_REF_VDD_1_4, "VDD/4"),
+	(INTERNAL, ADC_REF_INTERNAL, "Internal"),
+	(EXTERNAL_0, ADC_REF_EXTERNAL0, "External, input 0"),
+	(EXTERNAL_1, ADC_REF_EXTERNAL1, "External, input 1")
 );
 
 SHELL_SUBCMD_DICT_SET_CREATE(sub_gain_cmds, cmd_adc_gain,
-	(GAIN_1_6, ADC_GAIN_1_6),
-	(GAIN_1_5, ADC_GAIN_1_5),
-	(GAIN_1_4, ADC_GAIN_1_4),
-	(GAIN_1_3, ADC_GAIN_1_3),
-	(GAIN_1_2, ADC_GAIN_1_2),
-	(GAIN_2_3, ADC_GAIN_2_3),
-	(GAIN_1, ADC_GAIN_1),
-	(GAIN_2, ADC_GAIN_2),
-	(GAIN_3, ADC_GAIN_3),
-	(GAIN_4, ADC_GAIN_4),
-	(GAIN_8, ADC_GAIN_8),
-	(GAIN_16, ADC_GAIN_16),
-	(GAIN_32, ADC_GAIN_32),
-	(GAIN_64, ADC_GAIN_64)
+	(GAIN_1_6, ADC_GAIN_1_6, "x 1/6"),
+	(GAIN_1_5, ADC_GAIN_1_5, "x 1/5"),
+	(GAIN_1_4, ADC_GAIN_1_4, "x 1/4"),
+	(GAIN_1_3, ADC_GAIN_1_3, "x 1/3"),
+	(GAIN_1_2, ADC_GAIN_1_2, "x 1/2"),
+	(GAIN_2_3, ADC_GAIN_2_3, "x 2/3"),
+	(GAIN_1, ADC_GAIN_1, "x 1"),
+	(GAIN_2, ADC_GAIN_2, "x 2"),
+	(GAIN_3, ADC_GAIN_3, "x 3"),
+	(GAIN_4, ADC_GAIN_4, "x 4"),
+	(GAIN_8, ADC_GAIN_8, "x 8"),
+	(GAIN_16, ADC_GAIN_16, "x 16"),
+	(GAIN_32, ADC_GAIN_32, "x 32"),
+	(GAIN_64, ADC_GAIN_64, "x 64")
 );
 
 SHELL_STATIC_SUBCMD_SET_CREATE(sub_channel_cmds,
diff --git a/include/zephyr/shell/shell.h b/include/zephyr/shell/shell.h
index ead6483..f82bfd8 100644
--- a/include/zephyr/shell/shell.h
+++ b/include/zephyr/shell/shell.h
@@ -510,7 +510,7 @@
 
 /* Internal macro used for creating dictionary commands. */
 #define SHELL_CMD_DICT_CREATE(_data, _handler)				\
-	SHELL_CMD_ARG(GET_ARG_N(1, __DEBRACKET _data), NULL, NULL,	\
+	SHELL_CMD_ARG(GET_ARG_N(1, __DEBRACKET _data), NULL, GET_ARG_N(3, __DEBRACKET _data),	\
 		UTIL_CAT(UTIL_CAT(cmd_dict_, UTIL_CAT(_handler, _)),	\
 			GET_ARG_N(1, __DEBRACKET _data)), 1, 0)
 
@@ -540,7 +540,8 @@
  *	}
  *
  *	SHELL_SUBCMD_DICT_SET_CREATE(sub_dict_cmds, my_handler,
- *		(value_0, 0), (value_1, 1), (value_2, 2), (value_3, 3)
+ *		(value_0, 0, "value 0"), (value_1, 1, "value 1"),
+ *		(value_2, 2, "value 2"), (value_3, 3, "value 3")
  *	);
  *	SHELL_CMD_REGISTER(dictionary, &sub_dict_cmds, NULL, NULL);
  */
diff --git a/samples/subsys/shell/shell_module/src/main.c b/samples/subsys/shell/shell_module/src/main.c
index b78490d..31a93a1 100644
--- a/samples/subsys/shell/shell_module/src/main.c
+++ b/samples/subsys/shell/shell_module/src/main.c
@@ -369,7 +369,8 @@
 }
 
 SHELL_SUBCMD_DICT_SET_CREATE(sub_dict_cmds, cmd_dict,
-	(value_0, 0), (value_1, 1), (value_2, 2), (value_3, 3)
+	(value_0, 0, "value 0"), (value_1, 1, "value 1"),
+	(value_2, 2, "value 2"), (value_3, 3, "value 3")
 );
 
 SHELL_STATIC_SUBCMD_SET_CREATE(sub_demo,
diff --git a/tests/subsys/shell/shell/src/main.c b/tests/subsys/shell/shell/src/main.c
index 335b4bf..9077182 100644
--- a/tests/subsys/shell/shell/src/main.c
+++ b/tests/subsys/shell/shell/src/main.c
@@ -445,8 +445,8 @@
 	return n + n;
 }
 
-SHELL_SUBCMD_DICT_SET_CREATE(dict1, cmd_handler_dict_1, (one, 1), (two, 2));
-SHELL_SUBCMD_DICT_SET_CREATE(dict2, cmd_handler_dict_2, (one, 1), (two, 2));
+SHELL_SUBCMD_DICT_SET_CREATE(dict1, cmd_handler_dict_1, (one, 1, "one"), (two, 2, "two"));
+SHELL_SUBCMD_DICT_SET_CREATE(dict2, cmd_handler_dict_2, (one, 1, "one"), (two, 2, "two"));
 
 SHELL_CMD_REGISTER(dict1, &dict1, NULL, NULL);
 SHELL_CMD_REGISTER(dict2, &dict2, NULL, NULL);