Beispiel #1
0
int
channel_input(WINDOW *win, int c)
{
	char buf[6];
	int x;

	switch (c) {
	case 'a': case 'A':
		conf.do_change_channel = conf.do_change_channel ? 0 : 1;
		break;

	case 'd': case 'D':
		echo();
		curs_set(1);
		mvwgetnstr(win, 3, 25, buf, 6);
		curs_set(0);
		noecho();
		sscanf(buf, "%d", &x);
		conf.channel_time = x*1000;
		break;

	case 'u': case 'U':
		echo();
		curs_set(1);
		mvwgetnstr(win, 4, 26, buf, 6);
		curs_set(0);
		noecho();
		sscanf(buf, "%d", &x);
		conf.channel_max = x;
		break;

	case 'm': case 'M':
		conf.do_change_channel = 0;
		echo();
		curs_set(1);
		mvwgetnstr(win, 6, 30, buf, 2);
		curs_set(0);
		noecho();
		sscanf(buf, "%d", &x);
		x = channel_find_index_from_chan(x);
		if (x >= 0) {
			if (!conf.serveraddr)
				channel_change(x);
			else
				conf.channel_idx = x;
		}
		break;

	default:
		return 0; /* didn't handle input */
	}

	net_send_channel_config();

	update_channel_win(win);
	return 1;
}
Beispiel #2
0
static int net_receive_conf_chan(unsigned char *buffer, size_t len)
{
	struct net_conf_chan *nc;

	if (len < sizeof(struct net_conf_chan))
		return 0;

	nc = (struct net_conf_chan *)buffer;
	conf.do_change_channel = nc->do_change;
	conf.channel_max = nc->upper;
	conf.channel_time = le32toh(nc->dwell_time);

	enum chan_width width = nc->width_ht40p & ~NET_WIDTH_HT40PLUS;
	bool ht40p = !!(nc->width_ht40p & NET_WIDTH_HT40PLUS);

	if (nc->channel != conf.channel_idx ||
	    width != conf.channel_width ||
	    ht40p != conf.channel_ht40plus) { /* something changed */
		if (cli_fd > -1) { /* server */
			if (!channel_change(nc->channel, width, ht40p)) {
				printlog("Net Channel %d %s is not available/allowed",
					channel_get_chan(nc->channel),
					channel_width_string(width, ht40p));
				net_send_channel_config();
			} else {
				/* success: update UI */
				conf.channel_set_num = channel_get_chan(nc->channel);
				conf.channel_set_width = width;
				conf.channel_set_ht40plus = ht40p;
				update_display(NULL);
			}
		} else { /* client */
			conf.channel_idx = nc->channel;
			conf.channel_width = conf.channel_set_width = width;
			conf.channel_ht40plus = conf.channel_set_ht40plus = ht40p;
			conf.channel_set_num = channel_get_chan(nc->channel);
			update_spectrum_durations();
			update_display(NULL);
		}
	}

	return sizeof(struct net_conf_chan);
}
Beispiel #3
0
bool
channel_input(WINDOW *win, int c)
{
	char buf[6];
	int x;

	switch (c) {
	case 's': case 'S':
		conf.do_change_channel = conf.do_change_channel ? 0 : 1;
		break;

	case 'd': case 'D':
		echo();
		curs_set(1);
		mvwgetnstr(win, 18, 12, buf, 6);
		curs_set(0);
		noecho();
		sscanf(buf, "%d", &x);
		conf.channel_time = x*1000;
		break;

	case 'u': case 'U':
		echo();
		curs_set(1);
		mvwgetnstr(win, 19, 18, buf, 6);
		curs_set(0);
		noecho();
		sscanf(buf, "%d", &x);
		conf.channel_max = x;
		break;

	case 'm': case 'M':
		echo();
		curs_set(1);
		mvwgetnstr(win, 21, 18, buf, 3);
		curs_set(0);
		noecho();
		sscanf(buf, "%d", &x);
		int i = channel_find_index_from_chan(x);
		if (i >= 0) {
			if (!conf.serveraddr[0] != '\0') {
				if (!channel_change(i, conf.channel_set_width, conf.channel_set_ht40plus))
					printlog("Channel %d %s is not available/allowed", x,
						channel_width_string(conf.channel_set_width,
									 conf.channel_set_ht40plus));
			} else
				conf.channel_idx = i;
		}
		break;

	case '1':
		conf.channel_set_width = CHAN_WIDTH_20_NOHT;
		break;

	case '2':
		conf.channel_set_width = CHAN_WIDTH_20;
		break;

	case '4':
		conf.channel_set_width = CHAN_WIDTH_40;
		conf.channel_set_ht40plus = false;
		break;

	case '5':
		conf.channel_set_width = CHAN_WIDTH_40;
		conf.channel_set_ht40plus = true;
		break;

	case '8':
		conf.channel_set_width = CHAN_WIDTH_80;
		break;

	case '6':
		conf.channel_set_width = CHAN_WIDTH_160;
		break;

	default:
		return false; /* didn't handle input */
	}

	// TODO: net client has not set channel_width and ht40p yet:
	net_send_channel_config();

	update_channel_win(win);
	return true;
}
Beispiel #4
0
bool channel_input(WINDOW *win, int c)
{
	char buf[6];
	int x;
	int new_idx = -1;

	switch (c) {
	case 's': case 'S':
		conf.intf.channel_scan = conf.intf.channel_scan ? 0 : 1;
		break;

	case 'd': case 'D':
		echo();
		curs_set(1);
		mvwgetnstr(win, 19, 12, buf, 6);
		curs_set(0);
		noecho();
		sscanf(buf, "%d", &x);
		conf.intf.channel_time = x*1000;
		break;

	case 'u': case 'U':
		echo();
		curs_set(1);
		mvwgetnstr(win, 20, 18, buf, 6);
		curs_set(0);
		noecho();
		sscanf(buf, "%d", &x);
		conf.intf.channel_max = x;
		break;

	case 'm': case 'M':
		echo();
		curs_set(1);
		mvwgetnstr(win, 22, 18, buf, 3);
		curs_set(0);
		noecho();
		sscanf(buf, "%d", &x);
		conf.intf.channel_set.freq = wlan_chan2freq(x);
		break;

	case '1':
		conf.intf.channel_set.width = CHAN_WIDTH_20_NOHT;
		break;

	case '2':
		conf.intf.channel_set.width = CHAN_WIDTH_20;
		break;

	case '4':
		conf.intf.channel_set.width = CHAN_WIDTH_40;
		set_ht40plus = false;
		break;

	case '5':
		conf.intf.channel_set.width = CHAN_WIDTH_40;
		set_ht40plus = true;
		break;

	case '8':
		conf.intf.channel_set.width = CHAN_WIDTH_80;
		break;

	case '6':
		conf.intf.channel_set.width = CHAN_WIDTH_160;
		break;

	case '\r': case KEY_ENTER: /* used to close win, too */
		new_idx = uwifi_channel_idx_from_freq(&conf.intf.channels, conf.intf.channel_set.freq);
		if ((new_idx >= 0 && new_idx != conf.intf.channel_idx) ||
		    conf.intf.channel_set.width != conf.intf.channel.width ||
		    set_ht40plus != uwifi_channel_is_ht40plus(&conf.intf.channel)) {
			uwifi_channel_fix_center_freq(&conf.intf.channel_set, set_ht40plus);
			/* some setting changed */
			if (conf.serveraddr[0] == '\0') {
				/* server */
				if (!uwifi_channel_change(&conf.intf, &conf.intf.channel_set)) {
					/* reset UI */
					conf.intf.channel_set = conf.intf.channel;
				} else {
					net_send_channel_config();
				}
			} else {
				/* client */
				conf.intf.channel_idx = new_idx;
				conf.intf.channel = conf.intf.channel_set;
				LOG_INF("Sending channel config to server");
				net_send_channel_config();
			}
		}
		return false;

	default:
		return false; /* didn't handle input */
	}

	update_channel_win(win);
	return true;
}