Line data Source code
1 1 : /*
2 : * Copyright (c) 2023 Nordic Semiconductor ASA
3 : *
4 : * SPDX-License-Identifier: Apache-2.0
5 : */
6 :
7 : /** @file
8 : *
9 : * @brief Utility functions to be used by the Wi-Fi subsystem.
10 : */
11 :
12 : #ifndef ZEPHYR_INCLUDE_NET_WIFI_UTILS_H_
13 : #define ZEPHYR_INCLUDE_NET_WIFI_UTILS_H_
14 :
15 : #ifdef __cplusplus
16 : extern "C" {
17 : #endif
18 :
19 : /**
20 : * @addtogroup wifi_mgmt
21 : * @{
22 : */
23 :
24 : /**
25 : * @name Wi-Fi utility functions.
26 : *
27 : * Utility functions for the Wi-Fi subsystem.
28 : * @{
29 : */
30 :
31 : /** Maximum length of the band specification string */
32 1 : #define WIFI_UTILS_MAX_BAND_STR_LEN 3
33 :
34 : /** Maximum length of the channel specification string */
35 1 : #define WIFI_UTILS_MAX_CHAN_STR_LEN 4
36 :
37 : /**
38 : * @brief Convert a band specification string to a bitmap representing the bands.
39 : *
40 : * @details The function will parse a string which specifies Wi-Fi frequency band
41 : * values as a comma separated string and convert it to a bitmap. The string can
42 : * use the following characters to represent the bands:
43 : *
44 : * - 2: 2.4 GHz
45 : * - 5: 5 GHz
46 : * - 6: 6 GHz
47 : *
48 : * For the bitmap generated refer to ::wifi_frequency_bands
49 : * for bit position of each band.
50 : *
51 : * E.g. a string "2,5,6" will be converted to a bitmap value of 0x7
52 : *
53 : * @param scan_bands_str String which spe.
54 : * @param band_map Pointer to the bitmap variable to be updated.
55 : *
56 : * @retval 0 on success.
57 : * @retval -errno value in case of failure.
58 : */
59 1 : int wifi_utils_parse_scan_bands(char *scan_bands_str, uint8_t *band_map);
60 :
61 :
62 : /**
63 : * @brief Append a string containing an SSID to an array of SSID strings.
64 : *
65 : * @param scan_ssids_str string to be appended in the list of scanned SSIDs.
66 : * @param ssids Pointer to an array where the SSIDs pointers are to be stored.
67 : * @param num_ssids Maximum number of SSIDs that can be stored.
68 : *
69 : * @retval 0 on success.
70 : * @retval -errno value in case of failure.
71 : */
72 1 : int wifi_utils_parse_scan_ssids(char *scan_ssids_str,
73 : const char *ssids[],
74 : uint8_t num_ssids);
75 :
76 :
77 : /**
78 : * @brief Convert a string containing a specification of scan channels to an array.
79 : *
80 : * @details The function will parse a string which specifies channels to be scanned
81 : * as a string and convert it to an array.
82 : *
83 : * The channel string has to be formatted using the colon (:), comma(,), hyphen (-) and
84 : * underscore (_) delimiters as follows:
85 : * - A colon identifies the value preceding it as a band. A band value
86 : * (2: 2.4 GHz, 5: 5 GHz 6: 6 GHz) has to precede the channels in that band (e.g. 2: etc)
87 : * - Hyphens (-) are used to identify channel ranges (e.g. 2-7, 32-48 etc)
88 : * - Commas are used to separate channel values within a band. Channels can be specified
89 : * as individual values (2,6,48 etc) or channel ranges using hyphens (1-14, 32-48 etc)
90 : * - Underscores (_) are used to specify multiple band-channel sets (e.g. 2:1,2_5:36,40 etc)
91 : * - No spaces should be used anywhere, i.e. before/after commas,
92 : * before/after hyphens etc.
93 : *
94 : * An example channel specification specifying channels in the 2.4 GHz and 5 GHz bands is
95 : * as below:
96 : * 2:1,5,7,9-11_5:36-48,100,163-167
97 : *
98 : * @param scan_chan_str List of channels expressed in the format described above.
99 : * @param chan Pointer to an array where the parsed channels are to be stored.
100 : * @param max_channels Maximum number of channels to store
101 : *
102 : * @retval 0 on success.
103 : * @retval -errno value in case of failure.
104 : */
105 1 : int wifi_utils_parse_scan_chan(char *scan_chan_str,
106 : struct wifi_band_channel *chan,
107 : uint8_t max_channels);
108 :
109 :
110 : /**
111 : * @brief Validate a channel against a band.
112 : *
113 : * @param band Band to validate the channel against.
114 : * @param chan Channel to validate.
115 : *
116 : * @retval true if the channel is valid for the band.
117 : * @retval false if the channel is not valid for the band.
118 : */
119 1 : bool wifi_utils_validate_chan(uint8_t band,
120 : uint16_t chan);
121 :
122 : /**
123 : * @brief Validate a channel against the 2.4 GHz band.
124 : *
125 : * @param chan Channel to validate.
126 : *
127 : * @retval true if the channel is valid for the band.
128 : * @retval false if the channel is not valid for the band.
129 : */
130 1 : bool wifi_utils_validate_chan_2g(uint16_t chan);
131 :
132 : /**
133 : * @brief Validate a channel against the 5 GHz band.
134 : *
135 : * @param chan Channel to validate.
136 : *
137 : * @retval true if the channel is valid for the band.
138 : * @retval false if the channel is not valid for the band.
139 : */
140 1 : bool wifi_utils_validate_chan_5g(uint16_t chan);
141 :
142 : /**
143 : * @brief Validate a channel against the 6 GHz band.
144 : *
145 : * @param chan Channel to validate.
146 : *
147 : * @retval true if the channel is valid for the band.
148 : * @retval false if the channel is not valid for the band.
149 : */
150 1 : bool wifi_utils_validate_chan_6g(uint16_t chan);
151 :
152 : /**
153 : * @}
154 : */
155 :
156 : /**
157 : * @}
158 : */
159 :
160 : #ifdef __cplusplus
161 : }
162 : #endif
163 : #endif /* ZEPHYR_INCLUDE_NET_WIFI_UTILS_H_ */
|