From 7434e21dc21fe448fba3c119d9c211b790eb0153 Mon Sep 17 00:00:00 2001 From: Andreas Eversberg Date: Mon, 25 Apr 2016 20:20:54 +0200 Subject: Multi transceiver support This can be multiple transceivers on multiple sound cards. Two transceivers can be bundled on one sound device as well, using both channels. --- src/anetz/anetz.c | 4 ++-- src/anetz/anetz.h | 2 +- src/anetz/main.c | 23 +++++++++++++++-------- 3 files changed, 18 insertions(+), 11 deletions(-) (limited to 'src/anetz') diff --git a/src/anetz/anetz.c b/src/anetz/anetz.c index 8c1384a..c4993dd 100644 --- a/src/anetz/anetz.c +++ b/src/anetz/anetz.c @@ -137,7 +137,7 @@ static void anetz_timeout(struct timer *timer); static void anetz_go_idle(anetz_t *anetz); /* Create transceiver instance and link to a list. */ -int anetz_create(const char *sounddev, int samplerate, int pre_emphasis, int de_emphasis, const char *write_wave, const char *read_wave, int kanal, int loopback, double loss_volume) +int anetz_create(int kanal, const char *sounddev, int samplerate, int cross_channels, int pre_emphasis, int de_emphasis, const char *write_wave, const char *read_wave, int loopback, double loss_volume) { anetz_t *anetz; int rc; @@ -156,7 +156,7 @@ int anetz_create(const char *sounddev, int samplerate, int pre_emphasis, int de_ PDEBUG(DANETZ, DEBUG_DEBUG, "Creating 'A-Netz' instance for 'Kanal' = %d (sample rate %d).\n", kanal, samplerate); /* init general part of transceiver */ - rc = sender_create(&anetz->sender, sounddev, samplerate, pre_emphasis, de_emphasis, write_wave, read_wave, kanal, loopback, loss_volume, -1); + rc = sender_create(&anetz->sender, kanal, sounddev, samplerate, cross_channels, pre_emphasis, de_emphasis, write_wave, read_wave, loopback, loss_volume, -1); if (rc < 0) { PDEBUG(DANETZ, DEBUG_ERROR, "Failed to init 'Sender' processing!\n"); goto error; diff --git a/src/anetz/anetz.h b/src/anetz/anetz.h index 9063bed..2cc1643 100644 --- a/src/anetz/anetz.h +++ b/src/anetz/anetz.h @@ -41,7 +41,7 @@ typedef struct anetz { double anetz_kanal2freq(int kanal, int unterband); int anetz_init(void); -int anetz_create(const char *sounddev, int samplerate, int pre_emphasis, int de_emphasis, const char *write_wave, const char *read_wave, int kanal, int loopback, double loss_volume); +int anetz_create(int kanal, const char *sounddev, int samplerate, int cross_channels, int pre_emphasis, int de_emphasis, const char *write_wave, const char *read_wave, int loopback, double loss_volume); void anetz_destroy(sender_t *sender); void anetz_loss_indication(anetz_t *anetz); void anetz_receive_tone(anetz_t *anetz, int bit); diff --git a/src/anetz/main.c b/src/anetz/main.c index 3fb5499..15596ba 100644 --- a/src/anetz/main.c +++ b/src/anetz/main.c @@ -97,6 +97,7 @@ int main(int argc, char *argv[]) int rc; int skip_args; const char *station_id = ""; + int i; /* init common tones */ init_freiton(); @@ -116,11 +117,17 @@ int main(int argc, char *argv[]) station_id += strlen(station_id) - 5; } - if (!kanal) { + if (!num_kanal) { printf("No channel (\"Kanal\") is specified, I suggest channel 30.\n\n"); print_help(argv[-skip_args]); return 0; } + if (num_kanal == 1 && num_sounddev == 0) + num_sounddev = 1; /* use defualt */ + if (num_kanal != num_sounddev) { + fprintf(stdout, "You need to specify as many sound devices as you have channels.\n"); + exit(0); + } if (!loopback) print_image(); @@ -142,14 +149,14 @@ int main(int argc, char *argv[]) } /* create transceiver instance */ - rc = anetz_create(sounddev, samplerate, do_pre_emphasis, do_de_emphasis, write_wave, read_wave, kanal, loopback, lossdetect / 100.0); - if (rc < 0) { - fprintf(stderr, "Failed to create \"Sender\" instance. Quitting!\n"); - goto fail; + for (i = 0; i < num_kanal; i++) { + rc = anetz_create(kanal[i], sounddev[i], samplerate, cross_channels, do_pre_emphasis, do_de_emphasis, write_wave, read_wave, loopback, lossdetect / 100.0); + if (rc < 0) { + fprintf(stderr, "Failed to create \"Sender\" instance. Quitting!\n"); + goto fail; + } + printf("Base station on channel %d ready, please tune transmitter to %.3f MHz and receiver to %.3f MHz.\n", kanal[i], anetz_kanal2freq(kanal[i], 0), anetz_kanal2freq(kanal[i], 1)); } - printf("Base station ready, please tune transmitter to %.3f MHz and receiver " - "to %.3f MHz.\n", anetz_kanal2freq(kanal, 0), - anetz_kanal2freq(kanal, 1)); signal(SIGINT,sighandler); signal(SIGHUP,sighandler); -- cgit v1.2.3