Skip to content

Commit f9a96f3

Browse files
Rex-Chen-NXPkartben
authored andcommitted
net: wifi: shell: enhance twt parse parameters code
Enhance the parse parameters code for twt. Signed-off-by: Rex Chen <[email protected]>
1 parent 5d7df3a commit f9a96f3

File tree

1 file changed

+129
-57
lines changed

1 file changed

+129
-57
lines changed

subsys/net/l2/wifi/wifi_shell.c

Lines changed: 129 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -1572,74 +1572,139 @@ static int cmd_wifi_twt_setup_quick(const struct shell *sh, size_t argc,
15721572
return 0;
15731573
}
15741574

1575-
static int cmd_wifi_twt_setup(const struct shell *sh, size_t argc,
1576-
char *argv[])
1575+
static int twt_args_to_params(const struct shell *sh, size_t argc, char *argv[],
1576+
struct wifi_twt_params *params)
15771577
{
1578-
struct net_if *iface = net_if_get_wifi_sta();
1579-
struct wifi_twt_params params = { 0 };
1580-
int idx = 1;
1578+
int opt;
1579+
int opt_index = 0;
1580+
struct getopt_state *state;
15811581
long value;
1582+
static const struct option long_options[] = {
1583+
{"negotiation-type", required_argument, 0, 'n'},
1584+
{"setup-cmd", required_argument, 0, 'c'},
1585+
{"dialog-token", required_argument, 0, 't'},
1586+
{"flow-id", required_argument, 0, 'f'},
1587+
{"responder", required_argument, 0, 'r'},
1588+
{"trigger", required_argument, 0, 'T'},
1589+
{"implicit", required_argument, 0, 'I'},
1590+
{"announce", required_argument, 0, 'a'},
1591+
{"wake-interval", required_argument, 0, 'w'},
1592+
{"interval", required_argument, 0, 'i'},
1593+
{"wake-ahead-duration", required_argument, 0, 'D'},
1594+
{"help", no_argument, 0, 'h'},
1595+
{0, 0, 0, 0}};
15821596

1583-
context.sh = sh;
1597+
params->operation = WIFI_TWT_SETUP;
15841598

1585-
params.operation = WIFI_TWT_SETUP;
1599+
while ((opt = getopt_long(argc, argv, "n:c:t:f:r:T:I:a:t:w:i:D:d:e:h",
1600+
long_options, &opt_index)) != -1) {
1601+
state = getopt_state_get();
1602+
switch (opt) {
1603+
case 'n':
1604+
if (!parse_number(sh, &value, state->optarg, NULL,
1605+
WIFI_TWT_INDIVIDUAL,
1606+
WIFI_TWT_WAKE_TBTT)) {
1607+
return -EINVAL;
1608+
}
1609+
params->negotiation_type = (enum wifi_twt_negotiation_type)value;
1610+
break;
15861611

1587-
if (!parse_number(sh, &value, argv[idx++], NULL, WIFI_TWT_INDIVIDUAL,
1588-
WIFI_TWT_WAKE_TBTT)) {
1589-
return -EINVAL;
1590-
}
1591-
params.negotiation_type = (enum wifi_twt_negotiation_type)value;
1612+
case 'c':
1613+
if (!parse_number(sh, &value, state->optarg, NULL,
1614+
WIFI_TWT_SETUP_CMD_REQUEST,
1615+
WIFI_TWT_SETUP_CMD_DEMAND)) {
1616+
return -EINVAL;
1617+
}
1618+
params->setup_cmd = (enum wifi_twt_setup_cmd)value;
1619+
break;
15921620

1593-
if (!parse_number(sh, &value, argv[idx++], NULL, WIFI_TWT_SETUP_CMD_REQUEST,
1594-
WIFI_TWT_SETUP_CMD_DEMAND)) {
1595-
return -EINVAL;
1596-
}
1597-
params.setup_cmd = (enum wifi_twt_setup_cmd)value;
1621+
case 't':
1622+
if (!parse_number(sh, &value, state->optarg, NULL, 1, 255)) {
1623+
return -EINVAL;
1624+
}
1625+
params->dialog_token = (uint8_t)value;
1626+
break;
15981627

1599-
if (!parse_number(sh, &value, argv[idx++], NULL, 1, 255)) {
1600-
return -EINVAL;
1601-
}
1602-
params.dialog_token = (uint8_t)value;
1628+
case 'f':
1629+
if (!parse_number(sh, &value, state->optarg, NULL, 0,
1630+
(WIFI_MAX_TWT_FLOWS - 1))) {
1631+
return -EINVAL;
1632+
}
1633+
params->flow_id = (uint8_t)value;
1634+
break;
16031635

1604-
if (!parse_number(sh, &value, argv[idx++], NULL, 0, (WIFI_MAX_TWT_FLOWS - 1))) {
1605-
return -EINVAL;
1606-
}
1607-
params.flow_id = (uint8_t)value;
1636+
case 'r':
1637+
if (!parse_number(sh, &value, state->optarg, NULL, 0, 1)) {
1638+
return -EINVAL;
1639+
}
1640+
params->setup.responder = (bool)value;
1641+
break;
16081642

1609-
if (!parse_number(sh, &value, argv[idx++], NULL, 0, 1)) {
1610-
return -EINVAL;
1611-
}
1612-
params.setup.responder = (bool)value;
1643+
case 'T':
1644+
if (!parse_number(sh, &value, state->optarg, NULL, 0, 1)) {
1645+
return -EINVAL;
1646+
}
1647+
params->setup.trigger = (bool)value;
1648+
break;
16131649

1614-
if (!parse_number(sh, &value, argv[idx++], NULL, 0, 1)) {
1615-
return -EINVAL;
1616-
}
1617-
params.setup.trigger = (bool)value;
1650+
case 'I':
1651+
if (!parse_number(sh, &value, state->optarg, NULL, 0, 1)) {
1652+
return -EINVAL;
1653+
}
1654+
params->setup.implicit = (bool)value;
1655+
break;
16181656

1619-
if (!parse_number(sh, &value, argv[idx++], NULL, 0, 1)) {
1620-
return -EINVAL;
1621-
}
1622-
params.setup.implicit = (bool)value;
1657+
case 'a':
1658+
if (!parse_number(sh, &value, state->optarg, NULL, 0, 1)) {
1659+
return -EINVAL;
1660+
}
1661+
params->setup.announce = (bool)value;
1662+
break;
16231663

1624-
if (!parse_number(sh, &value, argv[idx++], NULL, 0, 1)) {
1625-
return -EINVAL;
1626-
}
1627-
params.setup.announce = (bool)value;
1664+
case 'w':
1665+
if (!parse_number(sh, &value, state->optarg, NULL, 1,
1666+
WIFI_MAX_TWT_WAKE_INTERVAL_US)) {
1667+
return -EINVAL;
1668+
}
1669+
params->setup.twt_wake_interval = (uint32_t)value;
1670+
break;
16281671

1629-
if (!parse_number(sh, &value, argv[idx++], NULL, 1, WIFI_MAX_TWT_WAKE_INTERVAL_US)) {
1630-
return -EINVAL;
1631-
}
1632-
params.setup.twt_wake_interval = (uint32_t)value;
1672+
case 'i':
1673+
if (!parse_number(sh, &value, state->optarg, NULL, 1,
1674+
WIFI_MAX_TWT_INTERVAL_US)) {
1675+
return -EINVAL;
1676+
}
1677+
params->setup.twt_interval = (uint64_t)value;
1678+
break;
16331679

1634-
if (!parse_number(sh, &value, argv[idx++], NULL, 1, WIFI_MAX_TWT_INTERVAL_US)) {
1635-
return -EINVAL;
1680+
case 'D':
1681+
if (!parse_number(sh, &value, state->optarg, NULL, 0,
1682+
WIFI_MAX_TWT_WAKE_AHEAD_DURATION_US)) {
1683+
return -EINVAL;
1684+
}
1685+
params->setup.twt_wake_ahead_duration = (uint32_t)value;
1686+
break;
1687+
1688+
case 'h':
1689+
return -ENOEXEC;
1690+
}
16361691
}
1637-
params.setup.twt_interval = (uint64_t)value;
16381692

1639-
if (!parse_number(sh, &value, argv[idx++], NULL, 0, WIFI_MAX_TWT_WAKE_AHEAD_DURATION_US)) {
1640-
return -EINVAL;
1693+
return 0;
1694+
}
1695+
1696+
static int cmd_wifi_twt_setup(const struct shell *sh, size_t argc,
1697+
char *argv[])
1698+
{
1699+
struct net_if *iface = net_if_get_wifi_sta();
1700+
struct wifi_twt_params params = { 0 };
1701+
1702+
context.sh = sh;
1703+
1704+
if (twt_args_to_params(sh, argc, argv, &params)) {
1705+
shell_help(sh);
1706+
return -ENOEXEC;
16411707
}
1642-
params.setup.twt_wake_ahead_duration = (uint32_t)value;
16431708

16441709
if (net_mgmt(NET_REQUEST_WIFI_TWT, iface, &params, sizeof(params))) {
16451710
PR_WARNING("%s with %s failed. reason : %s\n",
@@ -3265,13 +3330,20 @@ SHELL_STATIC_SUBCMD_SET_CREATE(wifi_twt_ops,
32653330
cmd_wifi_twt_setup_quick,
32663331
3, 0),
32673332
SHELL_CMD_ARG(setup, NULL, " Start a TWT flow:\n"
3268-
"<negotiation_type, 0: Individual, 1: Broadcast, 2: Wake TBTT>\n"
3269-
"<setup_cmd: 0: Request, 1: Suggest, 2: Demand>\n"
3270-
"<dialog_token: 1-255> <flow_id: 0-7> <responder: 0/1> <trigger: 0/1> <implicit:0/1> "
3271-
"<announce: 0/1> <twt_wake_interval: 1-262144us> <twt_interval: 1us-2^31us>.\n"
3272-
"<twt_wake_ahead_duration>: 0us-2^31us>\n",
3333+
"<-n --negotiation-type>: 0: Individual, 1: Broadcast, 2: Wake TBTT\n"
3334+
"<-c --setup-cmd>: 0: Request, 1: Suggest, 2: Demand\n"
3335+
"<-t --dialog-token>: 1-255\n"
3336+
"<-f --flow-id>: 0-7\n"
3337+
"<-r --responder>: 0/1\n"
3338+
"<-T --trigger>: 0/1\n"
3339+
"<-I --implicit>:0/1\n"
3340+
"<-a --announce>: 0/1\n"
3341+
"<-w --wake-interval>: 1-262144us\n"
3342+
"<-i --interval>: 1us-2^31us\n"
3343+
"<-D --wake-ahead-duration>: 0us-2^31us\n"
3344+
"[-h, --help]: Print out command usage.\n",
32733345
cmd_wifi_twt_setup,
3274-
12, 0),
3346+
23, 1),
32753347
SHELL_CMD_ARG(teardown, NULL, " Teardown a TWT flow:\n"
32763348
"<negotiation_type, 0: Individual, 1: Broadcast, 2: Wake TBTT>\n"
32773349
"<setup_cmd: 0: Request, 1: Suggest, 2: Demand>\n"

0 commit comments

Comments
 (0)