From 94cdbb466967459b665e475bba6a74018e04cf37 Mon Sep 17 00:00:00 2001 From: James Prestwood Date: Tue, 30 Nov 2021 10:24:12 -0800 Subject: [PATCH] scan: add scan_freq_set_to_fixed_array This serializes a scan_freq_set into a uint32_t array. --- src/util.c | 33 +++++++++++++++++++++++++++++++++ src/util.h | 2 ++ 2 files changed, 35 insertions(+) diff --git a/src/util.c b/src/util.c index 381894f4..ca0f46ae 100644 --- a/src/util.c +++ b/src/util.c @@ -470,3 +470,36 @@ void scan_freq_set_constrain(struct scan_freq_set *set, set->channels_2ghz &= constraint->channels_2ghz; } + +static void add_foreach(uint32_t freq, void *user_data) +{ + uint32_t **list = user_data; + + **list = freq; + + *list = *list + 1; +} + +uint32_t *scan_freq_set_to_fixed_array(const struct scan_freq_set *set, + size_t *len_out) +{ + uint8_t count = 0; + uint32_t *freqs; + + count = __builtin_popcount(set->channels_2ghz) + + l_uintset_size(set->channels_5ghz); + + if (!count) + return NULL; + + freqs = l_new(uint32_t, count); + + scan_freq_set_foreach(set, add_foreach, &freqs); + + /* Move pointer back to start of list */ + freqs -= count; + + *len_out = count; + + return freqs; +} diff --git a/src/util.h b/src/util.h index 8cced9cd..b55a7ea7 100644 --- a/src/util.h +++ b/src/util.h @@ -115,5 +115,7 @@ void scan_freq_set_merge(struct scan_freq_set *to, void scan_freq_set_constrain(struct scan_freq_set *set, const struct scan_freq_set *constraint); bool scan_freq_set_isempty(const struct scan_freq_set *set); +uint32_t *scan_freq_set_to_fixed_array(const struct scan_freq_set *set, + size_t *len_out); #endif /* __UTIL_H */