Allow giving alphanumeric channels (Prepare for IMTS)

This commit is contained in:
Andreas Eversberg 2019-07-20 18:11:17 +02:00
parent f5583953e6
commit e0e8c7f469
13 changed files with 39 additions and 39 deletions

View File

@ -94,7 +94,7 @@ void get_win_size(int *w, int *h)
*w = MAX_DISPLAY_WIDTH - 1;
}
void _printdebug(const char *file, const char __attribute__((unused)) *function, int line, int cat, int level, int chan, const char *fmt, ...)
void _printdebug(const char *file, const char __attribute__((unused)) *function, int line, int cat, int level, const char *kanal, const char *fmt, ...)
{
char buffer[4096], *b = buffer;
int s = sizeof(buffer) - 1;
@ -107,9 +107,9 @@ void _printdebug(const char *file, const char __attribute__((unused)) *function,
buffer[sizeof(buffer) - 1] = '\0';
/* if chan is used, prefix the channel number */
if (num_kanal > 1 && chan >= 0) {
sprintf(buffer, "(chan %d) ", chan);
/* if kanal is used, prefix the channel number */
if (num_kanal > 1 && kanal) {
sprintf(buffer, "(chan %s) ", kanal);
b = strchr(buffer, '\0');
s -= strlen(buffer);
}

View File

@ -30,9 +30,9 @@
void get_win_size(int *w, int *h);
#define PDEBUG(cat, level, fmt, arg...) _printdebug(__FILE__, __FUNCTION__, __LINE__, cat, level, -1, fmt, ## arg)
#define PDEBUG(cat, level, fmt, arg...) _printdebug(__FILE__, __FUNCTION__, __LINE__, cat, level, NULL, fmt, ## arg)
#define PDEBUG_CHAN(cat, level, fmt, arg...) _printdebug(__FILE__, __FUNCTION__, __LINE__, cat, level, CHAN, fmt, ## arg)
void _printdebug(const char *file, const char *function, int line, int cat, int level, int chan, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 7, 8)));
void _printdebug(const char *file, const char *function, int line, int cat, int level, const char *chan_str, const char *fmt, ...) __attribute__ ((__format__ (__printf__, 7, 8)));
const char *debug_amplitude(double level);
const char *debug_db(double level_db);

View File

@ -5,7 +5,7 @@
#define MAX_DISPLAY_WIDTH 1024
typedef struct display_wave {
int kanal;
const char *kanal;
int interval_pos;
int interval_max;
int offset;
@ -44,7 +44,7 @@ typedef struct display_measurements_param {
typedef struct display_measurements {
struct display_measurements *next;
int kanal;
const char *kanal;
dispmeasparam_t *param;
} dispmeas_t;
@ -60,7 +60,7 @@ typedef struct display_iq {
typedef struct display_spectrum_mark {
struct display_spectrum_mark *next;
int kanal;
const char *kanal;
double frequency;
} dispspectrum_mark_t;
@ -74,17 +74,17 @@ typedef struct display_spectrum {
#define MAX_HEIGHT_STATUS 32
void display_wave_init(dispwav_t *disp, int samplerate, int kanal);
void display_wave_init(dispwav_t *disp, int samplerate, const char *kanal);
void display_wave_on(int on);
void display_wave(dispwav_t *disp, sample_t *samples, int length, double range);
void display_status_on(int on);
void display_status_start(void);
void display_status_channel(int channel, const char *type, const char *state);
void display_status_channel(const char *kanal, const char *type, const char *state);
void display_status_subscriber(const char *number, const char *state);
void display_status_end(void);
void display_measurements_init(dispmeas_t *disp, int samplerate, int kanal);
void display_measurements_init(dispmeas_t *disp, int samplerate, const char *kanal);
void display_measurements_exit(dispmeas_t *disp);
void display_measurements_on(int on);
dispmeasparam_t *display_measurements_add(dispmeas_t *disp, char *name, char *format, enum display_measurements_type type, enum display_measurements_bar bar, double min, double max, double mark);
@ -96,7 +96,7 @@ void display_iq_on(int on);
void display_iq(float *samples, int length);
void display_spectrum_init(int samplerate, double center_frequency);
void display_spectrum_add_mark(int kanal, double frequency);
void display_spectrum_add_mark(const char *kanal, double frequency);
void display_spectrum_exit(void);
void display_spectrum_on(int on);
void display_spectrum(float *samples, int length);

View File

@ -40,7 +40,7 @@ static char line_color[MAX_DISPLAY_WIDTH];
dispmeas_t *meas_head = NULL;
void display_measurements_init(dispmeas_t *disp, int __attribute__((unused)) samplerate, int kanal)
void display_measurements_init(dispmeas_t *disp, int __attribute__((unused)) samplerate, const char *kanal)
{
dispmeas_t **disp_p;
@ -114,7 +114,7 @@ static void print_measurements(int on)
for (disp = meas_head; disp; disp = disp->next) {
memset(line, ' ', width);
memset(line_color, 7, width);
sprintf(line, "(chan %d", disp->kanal);
sprintf(line, "(chan %s", disp->kanal);
*strchr(line, '\0') = ')';
display_line(on, width);
for (param = disp->param; param; param = param->next) {

View File

@ -55,7 +55,7 @@ void display_spectrum_init(int samplerate, double _center_frequency)
has_init = 1;
}
void display_spectrum_add_mark(int kanal, double frequency)
void display_spectrum_add_mark(const char *kanal, double frequency)
{
dispspectrum_mark_t *mark, **mark_p;
@ -348,7 +348,7 @@ void display_spectrum(float *samples, int length)
screen[k][j] = ':';
screen_color[k][j] = 12;
}
sprintf(print_channel, "Ch%d", mark->kanal);
sprintf(print_channel, "Ch%s", mark->kanal);
for (o = 0; o < (int)strlen(print_channel); o++) {
s = j - strlen(print_channel) + o;
if (s >= 0 && s < width) {

View File

@ -87,7 +87,7 @@ void display_status_start(void)
line_count = 1;
}
void display_status_channel(int channel, const char *type, const char *state)
void display_status_channel(const char *kanal, const char *type, const char *state)
{
char line[MAX_DISPLAY_WIDTH];
@ -99,9 +99,9 @@ void display_status_channel(int channel, const char *type, const char *state)
return;
if (type)
snprintf(line, sizeof(line), "Channel: %d Type: %s State: %s", channel, type, state);
snprintf(line, sizeof(line), "Channel: %s Type: %s State: %s", kanal, type, state);
else
snprintf(line, sizeof(line), "Channel: %d State: %s", channel, state);
snprintf(line, sizeof(line), "Channel: %s State: %s", kanal, state);
line[sizeof(line) - 1] = '\0';
memcpy(screen[line_count++], line, strlen(line));
}

View File

@ -33,7 +33,7 @@ static int num_sender = 0;
static char screen[HEIGHT][MAX_DISPLAY_WIDTH];
static int wave_on = 0;
void display_wave_init(dispwav_t *disp, int samplerate, int kanal)
void display_wave_init(dispwav_t *disp, int samplerate, const char *kanal)
{
memset(disp, 0, sizeof(*disp));
disp->offset = (num_sender++) * HEIGHT;
@ -198,7 +198,7 @@ void display_wave(dispwav_t *disp, sample_t *samples, int length, double range)
screen[k][j] = '|';
}
}
sprintf(screen[0], "(chan %d", disp->kanal);
sprintf(screen[0], "(chan %s", disp->kanal);
*strchr(screen[0], '\0') = ')';
printf("\0337\033[H");
for (j = 0; j < disp->offset; j++)

View File

@ -50,7 +50,7 @@ static int got_init = 0;
/* common mobile settings */
int num_kanal = 0;
int kanal[MAX_SENDER];
const char *kanal[MAX_SENDER];
int num_audiodev = 0;
const char *audiodev[MAX_SENDER] = { "hw:0,0" };
int use_sdr = 0;
@ -248,7 +248,7 @@ int main_mobile_handle_options(int short_option, int argi, char **argv)
break;
case 'k':
case OPT_CHANNEL:
OPT_ARRAY(num_kanal, kanal, atoi(argv[argi]))
OPT_ARRAY(num_kanal, kanal, argv[argi])
break;
case 'a':
OPT_ARRAY(num_audiodev, audiodev, strdup(argv[argi]))

View File

@ -1,6 +1,6 @@
extern int num_kanal;
extern int kanal[];
extern const char *kanal[];
extern int swap_links;
extern int num_audiodev;
extern const char *audiodev[];

View File

@ -37,7 +37,7 @@ static sender_t **sender_tailp = &sender_head;
int cant_recover = 0;
/* Init transceiver instance and link to list of transceivers. */
int sender_create(sender_t *sender, int kanal, double sendefrequenz, double empfangsfrequenz, const char *audiodev, int use_sdr, int samplerate, double rx_gain, int pre_emphasis, int de_emphasis, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, const char *read_tx_wave, int loopback, enum paging_signal paging_signal)
int sender_create(sender_t *sender, const char *kanal, double sendefrequenz, double empfangsfrequenz, const char *audiodev, int use_sdr, int samplerate, double rx_gain, int pre_emphasis, int de_emphasis, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, const char *read_tx_wave, int loopback, enum paging_signal paging_signal)
{
sender_t *master, *slave;
int rc = 0;
@ -75,14 +75,14 @@ int sender_create(sender_t *sender, int kanal, double sendefrequenz, double empf
* of the master channel.
*/
for (master = sender_head; master; master = master->next) {
if (master->kanal == kanal) {
PDEBUG(DSENDER, DEBUG_ERROR, "Channel %d may not be defined for multiple transceivers!\n", kanal);
if (!strcmp(master->kanal, kanal)) {
PDEBUG(DSENDER, DEBUG_ERROR, "Channel %s may not be defined for multiple transceivers!\n", kanal);
rc = -EIO;
goto error;
}
if (abs(master->kanal - kanal) == 1) {
if (abs(atoi(master->kanal) - atoi(kanal)) == 1) {
PDEBUG(DSENDER, DEBUG_NOTICE, "------------------------------------------------------------------------\n");
PDEBUG(DSENDER, DEBUG_NOTICE, "NOTE: Channel %d is next to channel %d. This will cause interferences.\n", kanal, master->kanal);
PDEBUG(DSENDER, DEBUG_NOTICE, "NOTE: Channel %s is next to channel %s. This will cause interferences.\n", kanal, master->kanal);
PDEBUG(DSENDER, DEBUG_NOTICE, "Please use at least one channel distance to avoid that.\n");
PDEBUG(DSENDER, DEBUG_NOTICE, "------------------------------------------------------------------------\n");
}
@ -91,12 +91,12 @@ int sender_create(sender_t *sender, int kanal, double sendefrequenz, double empf
}
if (master) {
if (master->paging_signal != PAGING_SIGNAL_NONE && !use_sdr) {
PDEBUG(DSENDER, DEBUG_ERROR, "Cannot share audio device with channel %d, because its second audio channel is used for paging signal! Use different audio device.\n", master->kanal);
PDEBUG(DSENDER, DEBUG_ERROR, "Cannot share audio device with channel %s, because its second audio channel is used for paging signal! Use different audio device.\n", master->kanal);
rc = -EBUSY;
goto error;
}
if (paging_signal != PAGING_SIGNAL_NONE && !use_sdr) {
PDEBUG(DSENDER, DEBUG_ERROR, "Cannot share audio device with channel %d, because we need a second audio channel for paging signal! Use different audio device.\n", master->kanal);
PDEBUG(DSENDER, DEBUG_ERROR, "Cannot share audio device with channel %s, because we need a second audio channel for paging signal! Use different audio device.\n", master->kanal);
rc = -EBUSY;
goto error;
}

View File

@ -28,7 +28,7 @@ typedef struct sender {
struct sender *master; /* if set, the audio device is owned by 'master' */
/* system info */
int kanal; /* channel number */
const char *kanal; /* channel number */
double sendefrequenz; /* transmitter frequency */
double empfangsfrequenz; /* receiver frequency */
double ruffrequenz; /* special paging frequency used for B-Netz */
@ -90,7 +90,7 @@ typedef struct sender {
extern sender_t *sender_head;
extern int cant_recover;
int sender_create(sender_t *sender, int kanal, double sendefrequenz, double empfangsfrequenz, const char *audiodev, int use_sdr, int samplerate, double rx_gain, int pre_emphasis, int de_emphasis, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, const char *read_tx_wave, int loopback, enum paging_signal paging_signal);
int sender_create(sender_t *sender, const char *kanal, double sendefrequenz, double empfangsfrequenz, const char *audiodev, int use_sdr, int samplerate, double rx_gain, int pre_emphasis, int de_emphasis, const char *write_rx_wave, const char *write_tx_wave, const char *read_rx_wave, const char *read_tx_wave, int loopback, enum paging_signal paging_signal);
void sender_destroy(sender_t *sender);
void sender_set_fm(sender_t *sender, double max_deviation, double max_modulation, double dBm0_deviation, double max_display);
int sender_open_audio(int latspl);

View File

@ -22,7 +22,7 @@
#include "../libdebug/debug.h"
#include "squelch.h"
#define CHAN squelch->chan
#define CHAN squelch->kanal
/* How does it work:
*
@ -48,10 +48,10 @@
#define SQUELCH_AUTO_TIME 0.5 /* duration of squelch quelch calibration */
#define SQUELCH_AUTO_OFFSET 10.0 /* auto calibration: offset above noise floor */
void squelch_init(squelch_t *squelch, int chan, double threshold_db, double mute_time, double loss_time)
void squelch_init(squelch_t *squelch, const char *kanal, double threshold_db, double mute_time, double loss_time)
{
memset(squelch, 0, sizeof(*squelch));
squelch->chan = chan;
squelch->kanal = kanal;
squelch->threshold_db = threshold_db;
/* wait for init condition */
squelch->init_count = 0.0;

View File

@ -1,6 +1,6 @@
typedef struct squelch {
int chan; /* channel number */
const char *kanal; /* channel number */
double threshold_db; /* threshold level to mute or loss of signal */
double init_count; /* duration counter for starting squelch process */
int auto_state; /* set if auto threshold calibration is performed */
@ -21,6 +21,6 @@ enum squelch_result {
SQUELCH_LOSS,
};
void squelch_init(squelch_t *squelch, int chan, double threshold_db, double mute_time, double loss_time);
void squelch_init(squelch_t *squelch, const char *kanal, double threshold_db, double mute_time, double loss_time);
enum squelch_result squelch(squelch_t *squelch, double rf_level_db, double duration);