diff options
Diffstat (limited to 'src/test')
-rw-r--r-- | src/test/Makefile.am | 48 | ||||
-rw-r--r-- | src/test/dummy.c | 9 | ||||
-rw-r--r-- | src/test/test_compandor.c | 3 | ||||
-rw-r--r-- | src/test/test_dms.c | 23 | ||||
-rw-r--r-- | src/test/test_dtmf.c | 9 | ||||
-rw-r--r-- | src/test/test_emphasis.c | 2 | ||||
-rw-r--r-- | src/test/test_filter.c | 63 | ||||
-rw-r--r-- | src/test/test_goertzel.c | 51 | ||||
-rw-r--r-- | src/test/test_performance.c | 2 | ||||
-rw-r--r-- | src/test/test_sms.c | 29 | ||||
-rw-r--r-- | src/test/test_v27scrambler.c | 133 |
11 files changed, 329 insertions, 43 deletions
diff --git a/src/test/Makefile.am b/src/test/Makefile.am index dd65ec6..e37d9bf 100644 --- a/src/test/Makefile.am +++ b/src/test/Makefile.am @@ -1,22 +1,27 @@ -AM_CPPFLAGS = -Wall -g $(all_includes) +AM_CPPFLAGS = -Wall -Wextra -Wmissing-prototypes -g $(all_includes) noinst_PROGRAMS = \ test_filter \ test_sendevolumenregler \ test_compandor \ test_emphasis \ + test_goertzel \ test_dtmf \ test_dms \ test_sms \ test_performance \ - test_hagelbarger + test_hagelbarger \ + test_v27scrambler test_filter_SOURCES = test_filter.c dummy.c test_filter_LDADD = \ $(COMMON_LA) \ - $(top_builddir)/src/libdebug/libdebug.a \ $(top_builddir)/src/libfilter/libfilter.a \ + $(top_builddir)/src/liboptions/liboptions.a \ + $(top_builddir)/src/liblogging/liblogging.a \ + $(LIBOSMOCC_LIBS) \ + $(LIBOSMOCORE_LIBS) \ -lm test_sendevolumenregler_SOURCES = test_sendevolumenregler.c @@ -37,9 +42,12 @@ test_emphasis_SOURCES = test_emphasis.c dummy.c test_emphasis_LDADD = \ $(COMMON_LA) \ - $(top_builddir)/src/libdebug/libdebug.a \ $(top_builddir)/src/libemphasis/libemphasis.a \ $(top_builddir)/src/libfilter/libfilter.a \ + $(top_builddir)/src/liboptions/liboptions.a \ + $(top_builddir)/src/liblogging/liblogging.a \ + $(LIBOSMOCC_LIBS) \ + $(LIBOSMOCORE_LIBS) \ -lm test_dtmf_SOURCES = dummy.x test_dtmf.c @@ -55,19 +63,20 @@ test_dms_SOURCES = test_dms.c dummy.c test_dms_LDADD = \ $(COMMON_LA) \ - $(top_builddir)/src/libdebug/libdebug.a \ $(top_builddir)/src/libmobile/libmobile.a \ $(top_builddir)/src/liboptions/liboptions.a \ $(top_builddir)/src/libdisplay/libdisplay.a \ $(top_builddir)/src/nmt/libdmssms.a \ $(top_builddir)/src/libjitter/libjitter.a \ - $(top_builddir)/src/libtimer/libtimer.a \ $(top_builddir)/src/libsamplerate/libsamplerate.a \ $(top_builddir)/src/libemphasis/libemphasis.a \ $(top_builddir)/src/libfilter/libfilter.a \ $(top_builddir)/src/libwave/libwave.a \ - $(top_builddir)/src/libmncc/libmncc.a \ $(top_builddir)/src/libsample/libsample.a \ + $(top_builddir)/src/libaaimage/libaaimage.a \ + $(top_builddir)/src/liblogging/liblogging.a \ + $(LIBOSMOCORE_LIBS) \ + $(LIBOSMOCC_LIBS) \ -lm if HAVE_ALSA @@ -90,19 +99,20 @@ test_sms_SOURCES = dummy.c test_sms.c test_sms_LDADD = \ $(COMMON_LA) \ - $(top_builddir)/src/libdebug/libdebug.a \ $(top_builddir)/src/libmobile/libmobile.a \ $(top_builddir)/src/liboptions/liboptions.a \ $(top_builddir)/src/libdisplay/libdisplay.a \ $(top_builddir)/src/nmt/libdmssms.a \ $(top_builddir)/src/libjitter/libjitter.a \ - $(top_builddir)/src/libtimer/libtimer.a \ $(top_builddir)/src/libsamplerate/libsamplerate.a \ $(top_builddir)/src/libemphasis/libemphasis.a \ $(top_builddir)/src/libfilter/libfilter.a \ $(top_builddir)/src/libwave/libwave.a \ - $(top_builddir)/src/libmncc/libmncc.a \ $(top_builddir)/src/libsample/libsample.a \ + $(top_builddir)/src/libaaimage/libaaimage.a \ + $(top_builddir)/src/liblogging/liblogging.a \ + $(LIBOSMOCORE_LIBS) \ + $(LIBOSMOCC_LIBS) \ -lm if HAVE_ALSA @@ -136,3 +146,21 @@ test_hagelbarger_LDADD = \ $(top_builddir)/src/libhagelbarger/libhagelbarger.a \ -lm +test_v27scrambler_SOURCES = dummy.c test_v27scrambler.c + +test_v27scrambler_LDADD = \ + $(COMMON_LA) \ + $(top_builddir)/src/libv27/libv27.a \ + -lm + +test_goertzel_SOURCES = test_goertzel.c dummy.c + +test_goertzel_LDADD = \ + $(COMMON_LA) \ + $(top_builddir)/src/libgoertzel/libgoertzel.a \ + $(top_builddir)/src/liboptions/liboptions.a \ + $(top_builddir)/src/liblogging/liblogging.a \ + $(LIBOSMOCC_LIBS) \ + $(LIBOSMOCORE_LIBS) \ + -lm + diff --git a/src/test/dummy.c b/src/test/dummy.c index 5d08d6b..ef9c8c0 100644 --- a/src/test/dummy.c +++ b/src/test/dummy.c @@ -1,9 +1,18 @@ +void call_down_audio(void); void call_down_audio() { } +void call_down_setup(void); void call_down_setup() { } +void call_down_release(void); void call_down_release() { } +void call_down_disconnect(void); void call_down_disconnect() { } +void call_down_answer(void); void call_down_answer() { } +void print_help(void); void print_help() { } +void sender_send(void); void sender_send() { } +void sender_receive(void); void sender_receive() { } +void dump_info(void); void dump_info() {} diff --git a/src/test/test_compandor.c b/src/test/test_compandor.c index b1cd51e..f91e0b4 100644 --- a/src/test/test_compandor.c +++ b/src/test/test_compandor.c @@ -72,7 +72,8 @@ int main(void) sample_t samples[SAMPLERATE * 2]; int f; - init_compandor(&cstate, SAMPLERATE, ATTACK_MS, RECOVERY_MS); + compandor_init(); + setup_compandor(&cstate, SAMPLERATE, ATTACK_MS, RECOVERY_MS); for (f = 0; f < 3; f++) { /* -16 and -4 dB */ diff --git a/src/test/test_dms.c b/src/test/test_dms.c index a64bf43..e571fd9 100644 --- a/src/test/test_dms.c +++ b/src/test/test_dms.c @@ -5,7 +5,7 @@ #include <string.h> #include <unistd.h> #include "../libsample/sample.h" -#include "../libdebug/debug.h" +#include "../liblogging/logging.h" #include "../nmt/nmt.h" extern int dms_allow_loopback; @@ -20,7 +20,7 @@ static void assert(int condition, char *why) } } -void ok(void) +static void ok(void) { printf("\n OK ;->\n\n"); sleep(1); @@ -39,7 +39,7 @@ static const uint8_t test_null[][8] = { static char ack_bits[77]; -void dms_receive(nmt_t *nmt, const uint8_t *data, int length, int eight_bits) +void dms_receive(nmt_t __attribute__((unused)) *nmt, const uint8_t *data, int length, int __attribute__((unused)) eight_bits) { printf("(getting %d digits from DMS layer)\n", length); @@ -49,11 +49,11 @@ void dms_receive(nmt_t *nmt, const uint8_t *data, int length, int eight_bits) check_length = length; } -void dms_all_sent(nmt_t *nmt) +void dms_all_sent(nmt_t __attribute__((unused)) *nmt) { } -nmt_t *alloc_nmt(void) +static nmt_t *alloc_nmt(void) { nmt_t *nmt; @@ -65,13 +65,13 @@ nmt_t *alloc_nmt(void) return nmt; } -void free_nmt(nmt_t *nmt) +static void free_nmt(nmt_t *nmt) { dms_cleanup_sender(nmt); free(nmt); } -extern void main_mobile(); +extern void main_mobile_loop(); int main(void) { @@ -80,9 +80,10 @@ int main(void) int i, j; /* this is never called, it forces the linker to add mobile functions */ - if (debuglevel == -1000) main_mobile(); + if (loglevel == -1000) main_mobile_loop(); - debuglevel = DEBUG_DEBUG; + loglevel = LOGL_DEBUG; + logging_init(); dms_allow_loopback = 1; nmt = alloc_nmt(); @@ -199,7 +200,7 @@ int main(void) ok(); - debuglevel = DEBUG_INFO; + loglevel = LOGL_INFO; /* test again with pseudo random packet dropps */ srandom(0); @@ -255,5 +256,5 @@ int main(void) void call_down_clock(void) {} -void print_image(void) {} +const char *aaimage[] = { NULL }; diff --git a/src/test/test_dtmf.c b/src/test/test_dtmf.c index 6640c59..e35ec8e 100644 --- a/src/test/test_dtmf.c +++ b/src/test/test_dtmf.c @@ -2,7 +2,7 @@ #include <stdint.h> #include <math.h> #include <string.h> -#include "../libdebug/debug.h" +#include "../liblogging/logging.h" #include "../libsample/sample.h" #include "../libdtmf/dtmf_decode.h" #include "../libdtmf/dtmf_encode.h" @@ -49,7 +49,7 @@ static void check_level(sample_t *samples, const char *desc, double target, int static char got_digit; -static void recv_digit(void *inst, char digit, dtmf_meas_t *meas) +static void recv_digit(void __attribute__((unused)) *inst, char digit, dtmf_meas_t *meas) { printf("decoded digit '%c' frequency %.1f %.1f amplitude %.1f %.1f dB\n", digit, meas->frequency_low, meas->frequency_high, level2db(meas->amplitude_low), level2db(meas->amplitude_high)); got_digit = digit; @@ -65,7 +65,8 @@ int main(void) fm_init(0); - dtmf_decode_init(&dtmf_dec, NULL, recv_digit, SAMPLERATE, db2level(0), db2level(-30.0)); + /* decoder uses a strict frequency offset of 0.1 percent. */ + dtmf_decode_init(&dtmf_dec, NULL, recv_digit, SAMPLERATE, db2level(0), db2level(-30.0), 0.1); for (f = 0; f < 8; f++) { printf("Testing filter with frequency %.0f Hz:\n", test_frequency[f]); @@ -96,7 +97,7 @@ int main(void) for (i = 0; i < 16; i++) { printf("Testing digit '%c' encoding and decoding:\n", test_digits[i]); memset(samples, 0, sizeof(samples[0]) * SAMPLERATE); - dtmf_encode_set_tone(&dtmf_enc, test_digits[i]); + dtmf_encode_set_tone(&dtmf_enc, test_digits[i], 1.0, 0.0); dtmf_encode(&dtmf_enc, samples + SAMPLERATE / 10, SAMPLERATE / 20); got_digit = 0; dtmf_decode(&dtmf_dec, samples, SAMPLERATE); diff --git a/src/test/test_emphasis.c b/src/test/test_emphasis.c index aea6356..ab78ee9 100644 --- a/src/test/test_emphasis.c +++ b/src/test/test_emphasis.c @@ -5,7 +5,7 @@ #include "../libsample/sample.h" #include "../libfilter/iir_filter.h" #include "../libemphasis/emphasis.h" -#include "../libdebug/debug.h" +#include "../liblogging/logging.h" #define level2db(level) (20 * log10(level)) #define db2level(db) pow(10, (double)db / 20.0) diff --git a/src/test/test_filter.c b/src/test/test_filter.c index 7b7b676..f1fe5cc 100644 --- a/src/test/test_filter.c +++ b/src/test/test_filter.c @@ -4,7 +4,8 @@ #include <string.h> #include "../libsample/sample.h" #include "../libfilter/iir_filter.h" -#include "../libdebug/debug.h" +#include "../libfilter/fir_filter.h" +#include "../liblogging/logging.h" #define level2db(level) (20 * log10(level)) #define db2level(db) pow(10, (double)db / 20.0) @@ -40,6 +41,7 @@ int main(void) { iir_filter_t filter_low; iir_filter_t filter_high; + fir_filter_t *fir_low/*, *fir_high*/; sample_t samples[SAMPLERATE]; double level; int iter = 2; @@ -83,6 +85,25 @@ int main(void) printf("\n"); } + printf("testing notch filter with %d iterations, Q = 4\n", 1); + + iir_notch_init(&filter_high, 2605.0, SAMPLERATE, 1, 4); + + for (i = 0; i < 4001; i += 100) { + gen_samples(samples, (double)i); + iir_process(&filter_high, samples, SAMPLERATE); + level = get_level(samples); + printf("%s%4d Hz: %.1f dB", debug_db(level), i, level2db(level)); + if (i == 2600) + printf(" filter frequency (2605 Hz)\n"); + else if (i == 2800) + printf(" about 200 Hz above\n"); + else if (i == 2400) + printf(" about 200 Hz below\n"); + else + printf("\n"); + } + printf("testing band-pass filter with %d iterations\n", iter); iir_lowpass_init(&filter_low, 2000.0, SAMPLERATE, iter); @@ -102,6 +123,46 @@ int main(void) printf("\n"); } + double freq = 2000.0; + double tb = 400.0; + printf("testing low-pass FIR filter with %.0fHz transition bandwidth\n", tb); + + fir_low = fir_lowpass_init(SAMPLERATE, freq, tb); + printf("Using %d taps\n", fir_low->ntaps); + + for (i = 0; i < 4001; i += 100) { + gen_samples(samples, (double)i); + fir_process(fir_low, samples, SAMPLERATE); + level = get_level(samples); + printf("%s%s%4d Hz: %.1f dB", debug_amplitude(level), debug_db(level), i, level2db(level)); + if (i == freq) + printf(" cutoff\n"); + else + printf("\n"); + } + fir_exit(fir_low); + +#if 0 + double freq1 = 1000.0, freq2 = 2000.0; + tb = 100.0; + printf("testing two-pass FIR filter\n"); + + fir_high = fir_twopass_init(SAMPLERATE, freq1, freq2, tb); + printf("Using %d taps\n", fir_high->ntaps); + + for (i = 0; i < 4001; i += 100) { + gen_samples(samples, (double)i); + fir_process(fir_high, samples, SAMPLERATE); + level = get_level(samples); + printf("%s%s%4d Hz: %.1f dB", debug_amplitude(level), debug_db(level), i, level2db(level)); + if (i == freq1 || i == freq2) + printf(" cutoff\n"); + else + printf("\n"); + } + fir_exit(fir_high); +#endif + return 0; } diff --git a/src/test/test_goertzel.c b/src/test/test_goertzel.c new file mode 100644 index 0000000..656f31e --- /dev/null +++ b/src/test/test_goertzel.c @@ -0,0 +1,51 @@ +#include <stdio.h> +#include <stdint.h> +#include <math.h> +#include <string.h> +#include "../libsample/sample.h" +#include "../libgoertzel/goertzel.h" +#include "../liblogging/logging.h" + +#define level2db(level) (20 * log10(level)) +#define db2level(db) pow(10, (double)db / 20.0) + +#define SAMPLERATE 48000 + +static void gen_samples(sample_t *samples, double freq) +{ + int i; + double value; + + for (i = 0; i < SAMPLERATE; i++) { + value = cos(2.0 * M_PI * freq / (double)SAMPLERATE * (double)i); + samples[i] = value; + } +} + +int num_kanal; + +int main(void) +{ + goertzel_t goertzel; + sample_t samples[SAMPLERATE]; + double frequency = 1000; + double duration = 1.0/100.0; + double level; + double i; + + printf("testing goertzel with frequency %.1f and duration 1 / %.0f\n", frequency, 1.0 / duration); + + for (i = 700; i < 1301; i = i + 10) { + gen_samples(samples, (double)i); + audio_goertzel_init(&goertzel, frequency, SAMPLERATE); + audio_goertzel(&goertzel, samples, SAMPLERATE * duration, 0, &level, 1); + printf("%s%.0f Hz: %.1f dB", debug_db(level), i, level2db(level)); + if ((int)round(i) == (int)round(frequency)) + printf(" level=%.6f\n", level); + else + printf("\n"); + } + + return 0; +} + diff --git a/src/test/test_performance.c b/src/test/test_performance.c index a045eee..ae10930 100644 --- a/src/test/test_performance.c +++ b/src/test/test_performance.c @@ -6,7 +6,7 @@ #include "../libsample/sample.h" #include "../libfilter/iir_filter.h" #include "../libfm/fm.h" -#include "../libdebug/debug.h" +#include "../liblogging/logging.h" struct timeval start_tv, tv; double duration; diff --git a/src/test/test_sms.c b/src/test/test_sms.c index f9f2cd2..cb3dd6a 100644 --- a/src/test/test_sms.c +++ b/src/test/test_sms.c @@ -5,7 +5,7 @@ #include <string.h> #include <unistd.h> #include "../libsample/sample.h" -#include "../libdebug/debug.h" +#include "../liblogging/logging.h" #include "../nmt/nmt.h" static const uint8_t test_mo_sms_data1[] = { @@ -53,7 +53,7 @@ static void assert(int condition, char *why) } } -void ok(void) +static void ok(void) { printf("\n OK ;->\n\n"); sleep(1); @@ -61,7 +61,7 @@ void ok(void) static uint8_t dms_buffer[256]; static int dms_buffer_count; -void dms_send(nmt_t *nmt, const uint8_t *data, int length, int eight_bits) +void dms_send(nmt_t __attribute__((unused)) *nmt, const uint8_t *data, int length, int __attribute__((unused)) eight_bits) { int i; @@ -80,12 +80,12 @@ void dms_send(nmt_t *nmt, const uint8_t *data, int length, int eight_bits) assert(!memcmp(data, test_mt_sms_data, length), "Expecting SMS binary data to match"); } -void sms_release(nmt_t *nmt) +void sms_release(nmt_t __attribute__((unused)) *nmt) { printf("(got release from SMS layer)\n"); } -int sms_submit(nmt_t *nmt, uint8_t ref, const char *orig_address, uint8_t orig_type, uint8_t orig_plan, int msg_ref, const char *dest_address, uint8_t dest_type, uint8_t dest_plan, const char *message) +int sms_submit(nmt_t __attribute__((unused)) *nmt, uint8_t __attribute__((unused)) ref, const char __attribute__((unused)) *orig_address, uint8_t __attribute__((unused)) orig_type, uint8_t __attribute__((unused)) orig_plan, int __attribute__((unused)) msg_ref, const char __attribute__((unused)) *dest_address, uint8_t __attribute__((unused)) dest_type, uint8_t __attribute__((unused)) dest_plan, const char *message) { strcpy((char *)dms_buffer, message); dms_buffer_count = strlen(message); @@ -93,12 +93,12 @@ int sms_submit(nmt_t *nmt, uint8_t ref, const char *orig_address, uint8_t orig_t return 0; } -void sms_deliver_report(nmt_t *nmt, uint8_t ref, int error, uint8_t cause) +void sms_deliver_report(nmt_t __attribute__((unused)) *nmt, uint8_t __attribute__((unused)) ref, int __attribute__((unused)) error, uint8_t __attribute__((unused)) cause) { printf("(got deliver report from SMS layer)\n"); } -extern void main_mobile(); +extern void main_mobile_loop(); int main(void) { @@ -107,9 +107,10 @@ int main(void) int rc; /* this is never called, it forces the linker to add mobile functions */ - if (debuglevel == -1000) main_mobile(); + if (loglevel == -1000) main_mobile_loop(); - debuglevel = DEBUG_DEBUG; + loglevel = LOGL_DEBUG; + logging_init(); nmt = calloc(sizeof(*nmt), 1); sms_init_sender(nmt); @@ -131,10 +132,10 @@ int main(void) printf("(submitting SMS 7-bit encoded)\n"); dms_buffer_count = 0; - for (i = 0; i < sizeof(test_mo_sms_data1); i++) + for (i = 0; i < (int)sizeof(test_mo_sms_data1); i++) dms_receive(nmt, test_mo_sms_data1 + i, 1, 1); - assert(dms_buffer_count == strlen(test_mo_sms_text1), "Expecting SMS text length to match"); + assert(dms_buffer_count == (int)strlen(test_mo_sms_text1), "Expecting SMS text length to match"); assert(!memcmp(dms_buffer, test_mo_sms_text1, dms_buffer_count), "Expecting SMS text to match"); sms_cleanup_sender(nmt); @@ -148,10 +149,10 @@ int main(void) printf("(submitting SMS 8-bit encoded)\n"); dms_buffer_count = 0; - for (i = 0; i < sizeof(test_mo_sms_data2); i++) + for (i = 0; i < (int)sizeof(test_mo_sms_data2); i++) dms_receive(nmt, test_mo_sms_data2 + i, 1, 1); - assert(dms_buffer_count == strlen(test_mo_sms_text2), "Expecting SMS text length to match"); + assert(dms_buffer_count == (int)strlen(test_mo_sms_text2), "Expecting SMS text length to match"); assert(!memcmp(dms_buffer, test_mo_sms_text2, dms_buffer_count), "Expecting SMS text to match"); sms_cleanup_sender(nmt); @@ -164,5 +165,5 @@ int main(void) void call_down_clock(void) {} -void print_image(void) {} +const char *aaimage[] = { NULL }; diff --git a/src/test/test_v27scrambler.c b/src/test/test_v27scrambler.c new file mode 100644 index 0000000..7ce9fc7 --- /dev/null +++ b/src/test/test_v27scrambler.c @@ -0,0 +1,133 @@ +#include "stdio.h" +#include "stdint.h" +#include "string.h" +#include "../libv27/scrambler.h" + +static int show_bin(uint8_t *data1, uint8_t *data2, int len) +{ + int i, j, error = 0;; + uint8_t bit1, bit2; + + for (i = 0; i < len; i++) { + printf("."); + for (j = 0; j < 8; j++) { + bit1 = (data1[i] >> j) & 1; + bit2 = (data2[i] >> j) & 1; + if (bit1 == bit2) + printf("%d", bit1); + else { + printf("X"); + error++; + } + } + } + + printf("\n"); + + return error; +} + +static int check_repetition(uint8_t *data, int len, int repeat, int start) +{ + int i; + uint8_t b1, b2; + + for (i = start; i < (len * 8 - repeat); i++) { + b1 = (data[i >> 3] >> (i & 7)) & 1; + b2 = (data[(i+repeat) >> 3] >> ((i+repeat) & 7)) & 1; + if (b1 != b2) + return i - start + repeat; + } + + return 0; +} + +int main(void) +{ + v27scrambler_t scram, descram; + + char message[] = "Jolly Roger~~~~"; + int len = strlen(message); + uint8_t data[len]; + int ret; + + printf("Message: %s\n", message); + + memcpy(data, message, len); + show_bin(data, (uint8_t *)message, len); + + v27_scrambler_init(&scram, 1, 0); + v27_scrambler_block(&scram, data, len); + + printf("Scrambled:\n"); + show_bin(data, data, len); + + v27_scrambler_init(&descram, 1, 1); + v27_scrambler_block(&descram, data, len); + + printf("Descramble without corruption?\n"); + + ret = show_bin(data, (uint8_t *)message, len); + if (ret) { + printf("Descrambling failed!\n"); + return 1; + } + printf("Yes!\n"); + + printf("\n"); + + v27_scrambler_init(&scram, 1, 0); + v27_scrambler_block(&scram, data, len); + + data[0] = 'B'; + data[1] = 'U'; + data[2] = 'G'; + + v27_scrambler_init(&descram, 1, 1); + v27_scrambler_block(&descram, data, len); + + printf("Descramble with 3 bytes corruption: (should fix itself after 4 bytes)\n"); + + show_bin(data, (uint8_t *)message, len); + + printf("\n"); + + printf("Descramble a scrambled sequence of 8 bit repetitions with V.27: 01111110\n"); + + memset(data, 0x7e, len); + + v27_scrambler_init(&descram, 0, 1); + v27_scrambler_block(&descram, data, len); + + show_bin(data, (uint8_t *)data, len); + + /* note at position 6 we have no more change towards 8 bit offset */ + ret = check_repetition(data, len, 8, 6); + if (ret) { + printf("There's is a change of repetition after %d bits after start %d, please fix!\n", ret, 6); + return 1; + } + printf("Repetition not detected, good!\n"); + + printf("\n"); + + printf("Descramble a scrambled sequence of 8 bit repetitions with V.27bis/ter: 01111110\n"); + + memset(data, 0x7e, len); + + v27_scrambler_init(&descram, 1, 1); + v27_scrambler_block(&descram, data, len); + + show_bin(data, (uint8_t *)data, len); + + /* note at position 6 we have no more change towards 8 bit offset */ + ret = check_repetition(data, len, 8, 6); + if (ret != 34) { + printf("There's is NO change of repetition after 34 bits, but after %d bits, which should not happen!\n", ret); + return 1; + } + printf("Repetition detected after %d bits from start %d, good!\n", ret, 6); + + return 0; +} + |