Refactor global variables for signal processing
These are: device, sample rate, buffer, latency Called now: dsp_device, dsp_samplerate, dsp_buffer, dsp_latency Call audio device: call_device, call_samplerate, call_buffer
This commit is contained in:
@@ -1381,7 +1381,7 @@ error:
|
||||
}
|
||||
|
||||
/* open audio device of one or two datenlo_t instance */
|
||||
int datenklo_open_audio(datenklo_t *datenklo, const char *audiodev, int latency, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, const char *read_tx_wave)
|
||||
int datenklo_open_audio(datenklo_t *datenklo, const char *audiodev, int buffer, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, const char *read_tx_wave)
|
||||
{
|
||||
int channels = 1;
|
||||
int rc;
|
||||
@@ -1390,12 +1390,12 @@ int datenklo_open_audio(datenklo_t *datenklo, const char *audiodev, int latency,
|
||||
if (datenklo->slave)
|
||||
channels = 2;
|
||||
|
||||
/* latency of send buffer in samples */
|
||||
datenklo->latspl = datenklo->samplerate * latency / 1000;
|
||||
/* size of send buffer in samples */
|
||||
datenklo->buffer_size = datenklo->samplerate * buffer / 1000;
|
||||
|
||||
#ifdef HAVE_ALSA
|
||||
/* init sound */
|
||||
datenklo->audio = sound_open(audiodev, NULL, NULL, NULL, channels, 0.0, datenklo->samplerate, datenklo->latspl, 1.0, 4000.0, 2.0);
|
||||
datenklo->audio = sound_open(audiodev, NULL, NULL, NULL, channels, 0.0, datenklo->samplerate, datenklo->buffer_size, 1.0, 1.0, 4000.0, 2.0);
|
||||
if (!datenklo->audio) {
|
||||
PDEBUG(DDATENKLO, DEBUG_ERROR, "No sound device!\n");
|
||||
return -EIO;
|
||||
@@ -1484,8 +1484,8 @@ void datenklo_main(datenklo_t *datenklo, int loopback)
|
||||
if (datenklo->slave)
|
||||
num_chan = 2;
|
||||
|
||||
sample_t buff[num_chan][datenklo->latspl], *samples[num_chan];
|
||||
uint8_t pbuff[num_chan][datenklo->latspl], *power[num_chan];
|
||||
sample_t buff[num_chan][datenklo->buffer_size], *samples[num_chan];
|
||||
uint8_t pbuff[num_chan][datenklo->buffer_size], *power[num_chan];
|
||||
for (i = 0; i < num_chan; i++) {
|
||||
samples[i] = buff[i];
|
||||
power[i] = pbuff[i];
|
||||
@@ -1524,7 +1524,7 @@ void datenklo_main(datenklo_t *datenklo, int loopback)
|
||||
process_timer();
|
||||
|
||||
#ifdef HAVE_ALSA
|
||||
count = sound_read(datenklo->audio, samples, datenklo->latspl, num_chan, rf_level_db);
|
||||
count = sound_read(datenklo->audio, samples, datenklo->buffer_size, num_chan, rf_level_db);
|
||||
if (count < 0) {
|
||||
PDEBUG(DDSP, DEBUG_ERROR, "Failed to read RX data from audio device (rc = %d)\n", count);
|
||||
if (count == -EPIPE) {
|
||||
@@ -1556,7 +1556,7 @@ void datenklo_main(datenklo_t *datenklo, int loopback)
|
||||
}
|
||||
|
||||
#ifdef HAVE_ALSA
|
||||
count = sound_get_tosend(datenklo->audio, datenklo->latspl);
|
||||
count = sound_get_tosend(datenklo->audio, datenklo->buffer_size);
|
||||
#else
|
||||
count = samplerate / 1000;
|
||||
#endif
|
||||
@@ -1576,7 +1576,7 @@ void datenklo_main(datenklo_t *datenklo, int loopback)
|
||||
}
|
||||
if (loopback) {
|
||||
/* copy buffer to preserve original audio for later use */
|
||||
sample_t lbuff[num_chan][datenklo->latspl];
|
||||
sample_t lbuff[num_chan][datenklo->buffer_size];
|
||||
memcpy(lbuff, buff, sizeof(lbuff));
|
||||
if (loopback == 2 && num_chan == 2) {
|
||||
/* swap */
|
||||
|
@@ -19,7 +19,7 @@ typedef struct datenklo {
|
||||
double force_tx_baud, force_rx_baud; /* override IOCTL */
|
||||
int tx_back, rx_back; /* set if back channel is used for path */
|
||||
int samplerate; /* audio sample rate */
|
||||
int latspl; /* latenc */
|
||||
int buffer_size; /* audio buffer size */
|
||||
int loopback; /* loopback mode */
|
||||
|
||||
/* states */
|
||||
@@ -86,7 +86,7 @@ typedef struct datenklo {
|
||||
|
||||
void datenklo_main(datenklo_t *datenklo, int loopback);
|
||||
int datenklo_init(datenklo_t *datenklo, const char *dev_name, enum am791x_type am791x_type, uint8_t mc, int auto_rts, double force_tx_baud, double force_rx_baud, int samplerate, int loopback);
|
||||
int datenklo_open_audio(datenklo_t *datenklo, const char *audiodev, int latency, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, const char *read_tx_wave);
|
||||
int datenklo_open_audio(datenklo_t *datenklo, const char *audiodev, int buffer, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, const char *read_tx_wave);
|
||||
void datenklo_exit(datenklo_t *datenklo);
|
||||
void datenklo_init_global(void);
|
||||
|
||||
|
@@ -61,8 +61,8 @@ static int tx_baudrate[MAX_DEVICES] = { 0 }, rx_baudrate[MAX_DEVICES] = { 0 };
|
||||
static int num_ttydev = 0;
|
||||
static const char *ttydev[MAX_DEVICES] = { "/dev/ttyDATENKLO0" };
|
||||
static const char *audiodev = "hw:0,0";
|
||||
static int samplerate = 48000;
|
||||
static int latency = 50;
|
||||
static int dsp_samplerate = 48000;
|
||||
static int dsp_buffer = 50;
|
||||
static int stereo = 0;
|
||||
static int loopback = 0;
|
||||
static int fast_math = 0;
|
||||
@@ -102,9 +102,9 @@ void print_help(const char *arg0)
|
||||
printf(" -a --audio-device hw:<card>,<device>\n");
|
||||
printf(" Sound card and device number (default = '%s')\n", audiodev);
|
||||
printf(" -s --samplerate <rate>\n");
|
||||
printf(" Sample rate of sound device (default = '%d')\n", samplerate);
|
||||
printf(" Sample rate of sound device (default = '%d')\n", dsp_samplerate);
|
||||
printf(" -b --buffer <ms>\n");
|
||||
printf(" How many milliseconds are processed in advance (default = '%d')\n", latency);
|
||||
printf(" How many milliseconds are processed in advance (default = '%d')\n", dsp_buffer);
|
||||
printf(" -l --loopback <type>\n");
|
||||
printf(" Perform audio loopback to test modem.\n");
|
||||
printf(" type 1: Audio from transmitter is fed into receiver (analog loopback)\n");
|
||||
@@ -208,10 +208,10 @@ static int handle_options(int short_option, int argi, char **argv)
|
||||
audiodev = options_strdup(argv[argi]);
|
||||
break;
|
||||
case 's':
|
||||
samplerate = atoi(argv[argi]);
|
||||
dsp_samplerate = atoi(argv[argi]);
|
||||
break;
|
||||
case 'b':
|
||||
latency = atoi(argv[argi]);
|
||||
dsp_buffer = atoi(argv[argi]);
|
||||
break;
|
||||
case 'l':
|
||||
loopback = atoi(argv[argi]);
|
||||
@@ -298,7 +298,7 @@ int main(int argc, char *argv[])
|
||||
/* increment last name */
|
||||
if (i && ttydev[i] == NULL)
|
||||
ttydev[i] = inc_dev_name(ttydev[i - 1]);
|
||||
rc = datenklo_init(&datenklo[i], ttydev[i], am791x_type, mc[i], auto_rts, tx_baudrate[i], rx_baudrate[i], samplerate, loopback);
|
||||
rc = datenklo_init(&datenklo[i], ttydev[i], am791x_type, mc[i], auto_rts, tx_baudrate[i], rx_baudrate[i], dsp_samplerate, loopback);
|
||||
if (rc < 0) {
|
||||
fprintf(stderr, "Failed to create \"Datenklo\" instance. Quitting!\n");
|
||||
goto fail;
|
||||
@@ -308,7 +308,7 @@ int main(int argc, char *argv[])
|
||||
printf("Datenklo on device '/dev/%s' ready. (using sound device '%s')\n", ttydev[i], audiodev);
|
||||
}
|
||||
|
||||
rc = datenklo_open_audio(&datenklo[0], audiodev, latency, write_rx_wave, write_tx_wave, read_rx_wave, read_tx_wave);
|
||||
rc = datenklo_open_audio(&datenklo[0], audiodev, dsp_buffer, write_rx_wave, write_tx_wave, read_rx_wave, read_tx_wave);
|
||||
if (rc < 0) {
|
||||
fprintf(stderr, "Failed to initialize audio. Quitting!\n");
|
||||
goto fail;
|
||||
|
Reference in New Issue
Block a user