aboutsummaryrefslogtreecommitdiffstats
path: root/src/anetz
diff options
context:
space:
mode:
authorAndreas Eversberg <jolly@eversberg.eu>2016-04-25 20:20:54 +0200
committerAndreas Eversberg <jolly@eversberg.eu>2016-05-08 15:48:13 +0200
commit7434e21dc21fe448fba3c119d9c211b790eb0153 (patch)
treeecff6ebbe91f38e1ab68d50780d770424a74364d /src/anetz
parentde0ce7ba983e98976763612410da7b31e3b46dd5 (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.c4
-rw-r--r--src/anetz/anetz.h2
-rw-r--r--src/anetz/main.c23
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);