static int get_center_freq_ht40(unsigned int freq, bool upper) { unsigned int center = 0; /* * For HT40 we have a channel offset of 20 MHz, and the * center frequency is in the middle: +/- 10 MHz, depending * on HT40+ or HT40- and whether the channel exists */ if (upper && channel_find_index_from_freq(freq + 20) != -1) center = freq + 10; else if (!upper && channel_find_index_from_freq(freq - 20) != -1) center = freq - 10; return center; }
bool channel_init(void) { /* get available channels */ ifctrl_iwget_freqlist(conf.if_phy, &channels); conf.channel_initialized = 1; printf("Got %d Bands, %d Channels:\n", channels.num_bands, channels.num_channels); for (int i = 0; i < channels.num_channels && i < MAX_CHANNELS; i++) printf("%s\n", channel_get_string(i)); if (conf.channel_set_num > 0) { /* configured values */ int ini_idx = channel_find_index_from_chan(conf.channel_set_num); if (!channel_change(ini_idx, conf.channel_set_width, conf.channel_set_ht40plus)) return false; } else { conf.channel_idx = channel_find_index_from_freq(conf.if_freq); conf.channel_set_num = channel_get_chan(conf.channel_idx); if (conf.channel_idx < 0) return true; // not failure /* try to set max width */ struct band_info b = channel_get_band_from_idx(conf.channel_idx); if (conf.channel_width != b.max_chan_width) { printlog("Try to set max channel width %s", channel_width_string(b.max_chan_width, -1)); // try both HT40+ and HT40- if necessary if (!channel_change(conf.channel_idx, b.max_chan_width, true) && !channel_change(conf.channel_idx, b.max_chan_width, false)) return false; } } return true; }
bool channel_init(void) { /* get available channels */ ifctrl_iwget_freqlist(conf.if_phy, channels); conf.channel_idx = channel_find_index_from_freq(conf.if_freq); if (conf.channel_num_initial > 0) { if (!channel_change(channel_find_index_from_chan(conf.channel_num_initial))) return false; } else { conf.channel_num_initial = channel_get_chan_from_idx(conf.channel_idx); } conf.channel_initialized = 1; return true; }