Commit 49e6b0c2 authored by Ajay Parida's avatar Ajay Parida Committed by Carles Cufi
Browse files

net: shell: Code cleanup for ps related commands



Setting ps_mode and ps_timeout related changes handled
in single power save op.

Signed-off-by: default avatarAjay Parida <ajay.parida@nordicsemi.no>
parent bdef1bad
Loading
Loading
Loading
Loading
+2 −0
Original line number Diff line number Diff line
@@ -381,6 +381,8 @@ enum ps_param_type {
        WIFI_PS_PARAM_STATE,
	WIFI_PS_PARAM_LISTEN_INTERVAL,
	WIFI_PS_PARAM_WAKEUP_MODE,
	WIFI_PS_PARAM_MODE,
	WIFI_PS_PARAM_TIMEOUT,
};

enum wifi_ps_wakeup_mode {
+2 −12
Original line number Diff line number Diff line
@@ -194,15 +194,9 @@ struct wifi_ps_params {
	enum wifi_ps enabled;
	unsigned short listen_interval;
	enum wifi_ps_wakeup_mode wakeup_mode;
	enum ps_param_type type;
};

struct wifi_ps_mode_params {
	enum wifi_ps_mode mode;
};

struct wifi_ps_timeout_params {
	int timeout_ms;
	enum ps_param_type type;
};

struct wifi_twt_params {
@@ -255,9 +249,8 @@ struct wifi_twt_flow_info {
};

struct wifi_ps_config {
	struct wifi_twt_flow_info twt_flows[WIFI_MAX_TWT_FLOWS];
	enum wifi_ps_mode mode;
	char num_twt_flows;
	struct wifi_twt_flow_info twt_flows[WIFI_MAX_TWT_FLOWS];
	struct wifi_ps_params ps_params;
};

@@ -313,12 +306,9 @@ struct net_wifi_mgmt_offload {
	int (*get_stats)(const struct device *dev, struct net_stats_wifi *stats);
#endif /* CONFIG_NET_STATISTICS_WIFI */
	int (*set_power_save)(const struct device *dev, struct wifi_ps_params *params);
	int (*set_power_save_mode)(const struct device *dev, struct wifi_ps_mode_params *params);
	int (*set_twt)(const struct device *dev, struct wifi_twt_params *params);
	int (*get_power_save_config)(const struct device *dev, struct wifi_ps_config *config);
	int (*reg_domain)(const struct device *dev, struct wifi_reg_domain *reg_domain);
	int (*set_power_save_timeout)(const struct device *dev,
				      struct wifi_ps_timeout_params *ps_timeout);
};

/* Make sure that the network interface API is properly setup inside
+11 −45
Original line number Diff line number Diff line
@@ -230,6 +230,7 @@ static int wifi_set_power_save(uint32_t mgmt_request, struct net_if *iface,

	switch (ps_params->type) {
	case WIFI_PS_PARAM_LISTEN_INTERVAL:
	case WIFI_PS_PARAM_MODE:
		if (net_mgmt(NET_REQUEST_WIFI_IFACE_STATUS, iface, &info,
			     sizeof(struct wifi_iface_status))) {
			return -EIO;
@@ -241,9 +242,12 @@ static int wifi_set_power_save(uint32_t mgmt_request, struct net_if *iface,
		break;
	case WIFI_PS_PARAM_STATE:
	case WIFI_PS_PARAM_WAKEUP_MODE:
        default:
	case WIFI_PS_PARAM_TIMEOUT:
		break;
	default:
		return -ENOTSUP;
	}

	return off_api->set_power_save(dev, ps_params);
}

@@ -270,23 +274,6 @@ static int wifi_get_power_save_config(uint32_t mgmt_request, struct net_if *ifac

NET_MGMT_REGISTER_REQUEST_HANDLER(NET_REQUEST_WIFI_PS_CONFIG, wifi_get_power_save_config);

static int wifi_set_power_save_mode(uint32_t mgmt_request, struct net_if *iface,
			  void *data, size_t len)
{
	const struct device *dev = net_if_get_device(iface);
	struct net_wifi_mgmt_offload *off_api =
		(struct net_wifi_mgmt_offload *) dev->api;
	struct wifi_ps_mode_params *ps_mode_params = data;

	if (off_api == NULL || off_api->set_power_save_mode == NULL) {
		return -ENOTSUP;
	}

	return off_api->set_power_save_mode(dev, ps_mode_params);
}

NET_MGMT_REGISTER_REQUEST_HANDLER(NET_REQUEST_WIFI_PS_MODE, wifi_set_power_save_mode);

static int wifi_set_twt(uint32_t mgmt_request, struct net_if *iface,
			  void *data, size_t len)
{
@@ -363,27 +350,6 @@ static int wifi_reg_domain(uint32_t mgmt_request, struct net_if *iface,

NET_MGMT_REGISTER_REQUEST_HANDLER(NET_REQUEST_WIFI_REG_DOMAIN, wifi_reg_domain);

static int wifi_set_power_save_timeout(uint32_t mgmt_request, struct net_if *iface,
				       void *data, size_t len)
{
	const struct device *dev = net_if_get_device(iface);
	struct net_wifi_mgmt_offload *off_api =
		(struct net_wifi_mgmt_offload *) dev->api;
	struct wifi_ps_timeout_params *ps_timeout = data;

	if (off_api == NULL || off_api->set_power_save_timeout == NULL) {
		return -ENOTSUP;
	}

	if (!data || len != sizeof(*ps_timeout)) {
		return -EINVAL;
	}

	return off_api->set_power_save_timeout(dev, ps_timeout);
}

NET_MGMT_REGISTER_REQUEST_HANDLER(NET_REQUEST_WIFI_PS_TIMEOUT, wifi_set_power_save_timeout);

void wifi_mgmt_raise_twt_sleep_state(struct net_if *iface,
				     int twt_sleep_state)
{
+29 −24
Original line number Diff line number Diff line
@@ -483,9 +483,9 @@ static int cmd_wifi_ps(const struct shell *sh, size_t argc, char *argv[])

		shell_fprintf(sh, SHELL_NORMAL, "PS status: %s\n",
				wifi_ps2str[config.ps_params.enabled]);
		if (config.enabled) {
		if (config.ps_params.enabled) {
			shell_fprintf(sh, SHELL_NORMAL, "PS mode: %s\n",
					wifi_ps_mode2str[config.mode]);
					wifi_ps_mode2str[config.ps_params.mode]);
		}

		shell_fprintf(sh, SHELL_NORMAL, "PS listen_interval: %d\n",
@@ -494,6 +494,9 @@ static int cmd_wifi_ps(const struct shell *sh, size_t argc, char *argv[])
		shell_fprintf(sh, SHELL_NORMAL, "PS wake up mode: %s\n",
				config.ps_params.wakeup_mode ? "Listen interval" : "DTIM");

		shell_fprintf(sh, SHELL_NORMAL, "PS timeout: %d ms\n",
				config.ps_params.timeout_ms);

		if (config.num_twt_flows == 0) {
			shell_fprintf(sh, SHELL_NORMAL, "No TWT flows\n");
		} else {
@@ -538,25 +541,22 @@ static int cmd_wifi_ps(const struct shell *sh, size_t argc, char *argv[])
static int cmd_wifi_ps_mode(const struct shell *sh, size_t argc, char *argv[])
{
	struct net_if *iface = net_if_get_default();
	struct wifi_ps_mode_params params = { 0 };
	struct wifi_ps_params params = { 0 };

	context.sh = sh;

	if (argc != 2) {
		shell_fprintf(sh, SHELL_WARNING, "Invalid number of arguments\n");
		return -ENOEXEC;
	}

	if (!strncmp(argv[1], "legacy", 6)) {
		params.mode = WIFI_PS_MODE_LEGACY;
	} else if (!strncmp(argv[1], "wmm", 3)) {
		params.mode = WIFI_PS_MODE_WMM;
	} else {
		shell_fprintf(sh, SHELL_WARNING, "Invalid power save mode\n");
		shell_fprintf(sh, SHELL_WARNING, "Invalid PS mode\n");
		return -ENOEXEC;
	}

	if (net_mgmt(NET_REQUEST_WIFI_PS_MODE, iface, &params, sizeof(params))) {
	params.type = WIFI_PS_PARAM_MODE;

	if (net_mgmt(NET_REQUEST_WIFI_PS, iface, &params, sizeof(params))) {
		shell_fprintf(sh, SHELL_WARNING, "%s failed\n", wifi_ps_mode2str[params.mode]);
		return -ENOEXEC;
	}
@@ -569,17 +569,12 @@ static int cmd_wifi_ps_mode(const struct shell *sh, size_t argc, char *argv[])
static int cmd_wifi_ps_timeout(const struct shell *sh, size_t argc, char *argv[])
{
	struct net_if *iface = net_if_get_default();
	struct wifi_ps_timeout_params params = { 0 };
	struct wifi_ps_params params = { 0 };
	long timeout_ms = 0;
	int err = 0;

	context.sh = sh;

	if (argc != 2) {
		shell_fprintf(sh, SHELL_WARNING, "Invalid number of arguments\n");
		return -ENOEXEC;
	}

	timeout_ms = shell_strtol(argv[1], 10, &err);

	if (err) {
@@ -588,14 +583,15 @@ static int cmd_wifi_ps_timeout(const struct shell *sh, size_t argc, char *argv[]
	}

	params.timeout_ms = timeout_ms;
	params.type = WIFI_PS_PARAM_MODE;

	if (net_mgmt(NET_REQUEST_WIFI_PS_TIMEOUT, iface, &params, sizeof(params))) {
		shell_fprintf(sh, SHELL_WARNING, "Setting power save timeout failed\n");
	if (net_mgmt(NET_REQUEST_WIFI_PS, iface, &params, sizeof(params))) {
		shell_fprintf(sh, SHELL_WARNING, "Setting PS timeout failed\n");
		return -ENOEXEC;
	}

	shell_fprintf(sh, SHELL_NORMAL,
		"Power save timeout %d ms\n", params.timeout_ms);
		"PS timeout %d ms\n", params.timeout_ms);

	return 0;
}
@@ -983,9 +979,15 @@ SHELL_STATIC_SUBCMD_SET_CREATE(wifi_commands,
		  cmd_wifi_connect),
	SHELL_CMD(disconnect, NULL, "Disconnect from the Wi-Fi AP",
		  cmd_wifi_disconnect),
	SHELL_CMD(ps, NULL, "Configure Wi-Fi power save on/off, no arguments will dump config",
	SHELL_CMD(ps, NULL, "Configure Wi-F PS on/off, no arguments will dump config",
		  cmd_wifi_ps),
	SHELL_CMD(ps_mode, NULL, "Configure Wi-Fi power save mode legacy/wmm", cmd_wifi_ps_mode),
	SHELL_CMD_ARG(ps_mode,
		      NULL,
		      "<legacy>\n"
		      "<wmm>",
		      cmd_wifi_ps_mode,
		      2,
		      0),
	SHELL_CMD(scan, NULL, "Scan for Wi-Fi APs", cmd_wifi_scan),
	SHELL_CMD(statistics, NULL, "Wi-Fi interface statistics", cmd_wifi_stats),
	SHELL_CMD(status, NULL, "Status of the Wi-Fi interface", cmd_wifi_status),
@@ -997,9 +999,12 @@ SHELL_STATIC_SUBCMD_SET_CREATE(wifi_commands,
		"-f: Force to use this regulatory hint over any other regulatory hints\n"
		"Note: This may cause regulatory compliance issues, use it at your own risk.",
		cmd_wifi_reg_domain),
	SHELL_CMD(ps_timeout, NULL,
		  "Configure Wi-Fi power save inactivity timer(in ms)",
		  cmd_wifi_ps_timeout),
	SHELL_CMD_ARG(ps_timeout,
		      NULL,
		      "<val> - PS inactivity timer(in ms)",
		      cmd_wifi_ps_timeout,
		      2,
		      0),
	SHELL_CMD_ARG(ps_listen_interval,
		      NULL,
		      "<val> - Listen interval in the range of <0-65535>",