common code: Display multiple wave forms for each channel used

Use 'w' key to enable/disable RX wave form display.
This commit is contained in:
Andreas Eversberg 2016-10-31 19:16:47 +01:00
parent ea32ab3fa3
commit 6c1b6119ad
3 changed files with 18 additions and 10 deletions

View File

@ -27,6 +27,7 @@
#define WIDTH 80 #define WIDTH 80
#define HEIGHT 10 #define HEIGHT 10
static int num_sender = 0;
static char screen[HEIGHT][WIDTH+1]; static char screen[HEIGHT][WIDTH+1];
static int wave_on = 0; static int wave_on = 0;
@ -35,12 +36,13 @@ void display_wave_init(sender_t *sender, int samplerate)
dispwav_t *disp = &sender->dispwav; dispwav_t *disp = &sender->dispwav;
memset(disp, 0, sizeof(*disp)); memset(disp, 0, sizeof(*disp));
disp->offset = (num_sender++) * HEIGHT;
disp->interval_max = (double)samplerate * DISPLAY_INTERVAL + 0.5; disp->interval_max = (double)samplerate * DISPLAY_INTERVAL + 0.5;
} }
void display_wave_on(int on) void display_wave_on(int on)
{ {
int j; int i, j;
if (on < 0) if (on < 0)
wave_on = 1 - wave_on; wave_on = 1 - wave_on;
@ -49,9 +51,11 @@ void display_wave_on(int on)
memset(&screen, ' ', sizeof(screen)); memset(&screen, ' ', sizeof(screen));
printf("\0337\033[H"); printf("\0337\033[H");
for (j = 0; j < HEIGHT; j++) { for (i = 0; i < num_sender; i++) {
screen[j][WIDTH] = '\0'; for (j = 0; j < HEIGHT; j++) {
puts(screen[j]); screen[j][WIDTH] = '\0';
puts(screen[j]);
}
} }
printf("\0338"); fflush(stdout); printf("\0338"); fflush(stdout);
} }
@ -84,7 +88,11 @@ void display_wave(sender_t *sender, int16_t *samples, int length)
y = (32767 - (int)buffer[j]) * HEIGHT * 2 / 65536; y = (32767 - (int)buffer[j]) * HEIGHT * 2 / 65536;
screen[y >> 1][j] = (y & 1) ? '_' : '-'; screen[y >> 1][j] = (y & 1) ? '_' : '-';
} }
sprintf(screen[0], "(chan %d", sender->kanal);
*strchr(screen[0], '\0') = ')';
printf("\0337\033[H"); printf("\0337\033[H");
for (j = 0; j < disp->offset; j++)
puts("");
for (j = 0; j < HEIGHT; j++) { for (j = 0; j < HEIGHT; j++) {
screen[j][WIDTH] = '\0'; screen[j][WIDTH] = '\0';
puts(screen[j]); puts(screen[j]);

View File

@ -3,6 +3,7 @@ typedef struct sender sender_t;
typedef struct display_wave { typedef struct display_wave {
int interval_pos; int interval_pos;
int interval_max; int interval_max;
int offset;
int16_t buffer[256]; int16_t buffer[256];
} dispwav_t; } dispwav_t;

View File

@ -137,8 +137,7 @@ int sender_create(sender_t *sender, int kanal, const char *sounddev, int sampler
*sender_tailp = sender; *sender_tailp = sender;
sender_tailp = &sender->next; sender_tailp = &sender->next;
if (sender == sender_head) display_wave_init(sender, samplerate);
display_wave_init(sender, samplerate);
return 0; return 0;
error: error:
@ -249,8 +248,7 @@ cant_recover:
#ifndef WAVE_WRITE_TX #ifndef WAVE_WRITE_TX
if (sender->wave_rec.fp) if (sender->wave_rec.fp)
wave_write(&sender->wave_rec, samples, count); wave_write(&sender->wave_rec, samples, count);
if (sender == sender_head) display_wave(sender, samples, count);
display_wave(sender, samples, count);
sender_receive(sender, samples, count); sender_receive(sender, samples, count);
#endif #endif
} }
@ -273,6 +271,7 @@ cant_recover:
if (slave->wave_rec.fp) if (slave->wave_rec.fp)
wave_write(&slave->wave_rec, slave_samples, count); wave_write(&slave->wave_rec, slave_samples, count);
#endif #endif
display_wave(slave, slave_samples, count);
sender_receive(slave, slave_samples, count); sender_receive(slave, slave_samples, count);
} }
/* do pre emphasis towards radio, not wave_write */ /* do pre emphasis towards radio, not wave_write */
@ -379,8 +378,7 @@ cant_recover:
if (sender->wave_rec.fp) if (sender->wave_rec.fp)
wave_write(&sender->wave_rec, samples, count); wave_write(&sender->wave_rec, samples, count);
#endif #endif
if (sender == sender_head) display_wave(sender, samples, count);
display_wave(sender, samples, count);
sender_receive(sender, samples, count); sender_receive(sender, samples, count);
} }
if (sender->loopback == 3) if (sender->loopback == 3)
@ -398,6 +396,7 @@ cant_recover:
if (slave->wave_rec.fp) if (slave->wave_rec.fp)
wave_write(&slave->wave_rec, slave_samples, count); wave_write(&slave->wave_rec, slave_samples, count);
#endif #endif
display_wave(slave, slave_samples, count);
sender_receive(slave, slave_samples, count); sender_receive(slave, slave_samples, count);
} }
if (slave->loopback == 3) if (slave->loopback == 3)