diff options
author | Andreas Eversberg <jolly@eversberg.eu> | 2016-04-25 20:20:54 +0200 |
---|---|---|
committer | Andreas Eversberg <jolly@eversberg.eu> | 2016-05-08 15:48:13 +0200 |
commit | 7434e21dc21fe448fba3c119d9c211b790eb0153 (patch) | |
tree | ecff6ebbe91f38e1ab68d50780d770424a74364d /src/anetz | |
parent | de0ce7ba983e98976763612410da7b31e3b46dd5 (diff) |
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.
Diffstat (limited to 'src/anetz')
-rw-r--r-- | src/anetz/anetz.c | 4 | ||||
-rw-r--r-- | src/anetz/anetz.h | 2 | ||||
-rw-r--r-- | src/anetz/main.c | 23 |
3 files changed, 18 insertions, 11 deletions
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); |