util/spkmodem-recv: cleaner ring buffer handling
make it more obvious that this *is* a ring buffer being handled, and make it more obvious when checking a pulse in the next frame Signed-off-by: Leah Rowe <leah@libreboot.org>fsdg20230625
parent
f257eb6f9d
commit
5c5c1c64fd
|
@ -27,6 +27,7 @@
|
||||||
/* Usage: parec --channels=1 --rate=48000 --format=s16le | ./spkmodem-recv */
|
/* Usage: parec --channels=1 --rate=48000 --format=s16le | ./spkmodem-recv */
|
||||||
|
|
||||||
#define SAMPLES_PER_FRAME 240
|
#define SAMPLES_PER_FRAME 240
|
||||||
|
#define MAX_SAMPLES (2 * SAMPLES_PER_FRAME)
|
||||||
#define FREQ_SEP_MIN 5
|
#define FREQ_SEP_MIN 5
|
||||||
#define FREQ_SEP_MAX 15
|
#define FREQ_SEP_MAX 15
|
||||||
#define FREQ_DATA_MIN 15
|
#define FREQ_DATA_MIN 15
|
||||||
|
@ -37,7 +38,7 @@
|
||||||
#define ERR() (errno = errno ? errno : ECANCELED)
|
#define ERR() (errno = errno ? errno : ECANCELED)
|
||||||
#define reset_char() ascii = 0, ascii_bit = 7
|
#define reset_char() ascii = 0, ascii_bit = 7
|
||||||
|
|
||||||
signed short frame[2 * SAMPLES_PER_FRAME], pulse[2 * SAMPLES_PER_FRAME];
|
signed short frame[MAX_SAMPLES], pulse[MAX_SAMPLES];
|
||||||
int ringpos, debug, freq_data, freq_separator, sample_count, ascii_bit = 7;
|
int ringpos, debug, freq_data, freq_separator, sample_count, ascii_bit = 7;
|
||||||
char ascii = 0;
|
char ascii = 0;
|
||||||
|
|
||||||
|
@ -90,17 +91,16 @@ handle_audio(void)
|
||||||
void
|
void
|
||||||
fetch_sample(void)
|
fetch_sample(void)
|
||||||
{
|
{
|
||||||
|
int next_ringpos = (ringpos + SAMPLES_PER_FRAME) % MAX_SAMPLES;
|
||||||
freq_data -= pulse[ringpos];
|
freq_data -= pulse[ringpos];
|
||||||
freq_data += pulse[(ringpos + SAMPLES_PER_FRAME)
|
freq_data += pulse[next_ringpos];
|
||||||
% (2 * SAMPLES_PER_FRAME)];
|
freq_separator -= pulse[next_ringpos];
|
||||||
freq_separator -= pulse[(ringpos + SAMPLES_PER_FRAME)
|
|
||||||
% (2 * SAMPLES_PER_FRAME)];
|
|
||||||
|
|
||||||
read_frame();
|
read_frame();
|
||||||
if ((pulse[ringpos] = (abs(frame[ringpos]) > THRESHOLD) ? 1 : 0))
|
if ((pulse[ringpos] = (abs(frame[ringpos]) > THRESHOLD) ? 1 : 0))
|
||||||
++freq_separator;
|
++freq_separator;
|
||||||
++ringpos;
|
++ringpos;
|
||||||
ringpos %= 2 * SAMPLES_PER_FRAME;
|
ringpos %= MAX_SAMPLES;
|
||||||
++sample_count;
|
++sample_count;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue