Beispiel #1
0
void rx_server_remove(conn_t *c)
{
	c->stop_data = TRUE;
	c->mc = NULL;
	if (c->type == STREAM_SOUND) loguser(c, "(LEAVING)");
	webserver_connection_cleanup(c);
	if (c->user) wrx_free("user", c->user);
	if (c->geo) wrx_free("geo", c->geo);
	
	int task = c->task;
	conn_init(c, c->type, c->rx_channel);
	TaskRemove(task);
	panic("shouldn't return");
}
Beispiel #2
0
bool s4285_msgs(char *msg, int rx_chan)
{
	s4285_t *e = &s4285[rx_chan];
	int n;
	
	printf("### s4285_msgs RX%d <%s>\n", rx_chan, msg);
	
	if (strcmp(msg, "SET ext_server_init") == 0) {
		e->rx_chan = rx_chan;	// remember our receiver channel number
		ext_send_msg(e->rx_chan, S4285_DEBUG_MSG, "EXT ready");
		return true;
	}

	n = sscanf(msg, "SET run=%d", &e->run);
	if (n == 1) {
		if (e->run) {
			if (!e->rx_task) {
				e->rx_task = CreateTask(s4285_rx, 0, EXT_PRIORITY);
			}
			m_CSt4285[rx_chan].reset();
			//m_CSt4285[rx_chan].setSampleRate(ext_get_sample_rateHz());
			m_CSt4285[rx_chan].registerRxCallback(s4285_rx_callback, rx_chan);
			m_CSt4285[rx_chan].registerTxCallback(s4285_tx_callback);
			//m_CSt4285[rx_chan].control((void *) "SET MODE 600L", NULL, 0);
			//ext_register_receive_iq_samps(s4285_data, rx_chan);
			ext_register_receive_real_samps(s4285_data, rx_chan);
		} else {
			ext_unregister_receive_iq_samps(rx_chan);
			if (e->rx_task) {
				TaskRemove(e->rx_task);
				e->rx_task = 0;
			}
		}
		if (e->points == 0)
			e->points = 128;
		return true;
	}
	
	n = sscanf(msg, "SET mode=%d", &e->mode);
	if (n == 1) {
		return true;
	}
	
	int gain;
	n = sscanf(msg, "SET gain=%d", &gain);
	if (n == 1) {
		// 0 .. +100 dB of S4285_MAX_VAL
		e->gain = gain? pow(10.0, ((float) -gain) / 10.0) : 0;
		printf("e->gain %.6f\n", e->gain);
		return true;
	}
	
	int points;
	n = sscanf(msg, "SET points=%d", &points);
	if (n == 1) {
		e->points = points;
		printf("points %d\n", points);
		return true;
	}
	
	int draw;
	n = sscanf(msg, "SET draw=%d", &draw);
	if (n == 1) {
		e->draw = draw;
		printf("draw %d\n", draw);
		return true;
	}
	
	n = strcmp(msg, "SET clear");
	if (n == 0) {
		e->cma = e->ncma = 0;
		return true;
	}
	
	return false;
}