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"); }
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; }