*
* GNU Radio is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2, or (at your option)
+ * the Free Software Foundation; either version 3, or (at your option)
* any later version.
*
* GNU Radio is distributed in the hope that it will be useful,
#include <gr_io_signature.h>
#include <stdexcept>
#include <gr_count_bits.h>
+#include <cstdio>
+
#define VERBOSE 0
gr_make_io_signature (1, 1, sizeof(char)),
gr_make_io_signature (1, 1, sizeof(char))),
d_data_reg(0), d_flag_reg(0), d_flag_bit(0), d_mask(0),
- d_threshold(threshold), d_flip(0)
+ d_threshold(threshold)
{
if (!set_access_code(access_code)){
{
const unsigned char *in = (const unsigned char *) input_items[0];
unsigned char *out = (unsigned char *) output_items[0];
-
+
for (int i = 0; i < noutput_items; i++){
// compute output value
unsigned int t = 0;
- t |= d_flip ^ (((d_data_reg >> 63) & 0x1) << 0);
+ t |= ((d_data_reg >> 63) & 0x1) << 0;
t |= ((d_flag_reg >> 63) & 0x1) << 1; // flag bit
out[i] = t;
wrong_bits = (d_data_reg ^ d_access_code) & d_mask;
nwrong = gr_count_bits64(wrong_bits);
- // test for access code with up to threshold errors or its compelement
- new_flag = (nwrong <= d_threshold) || (nwrong >= (64-d_threshold));
+ // test for access code with up to threshold errors
+ new_flag = (nwrong <= d_threshold);
-#if 0
+#if VERBOSE
if(new_flag) {
- printf("%llx ==> %llx : d_flip=%u\n", d_access_code, d_data_reg, d_flip);
+ fprintf(stderr, "access code found: %llx\n", d_access_code);
+ }
+ else {
+ fprintf(stderr, "%llx ==> %llx\n", d_access_code, d_data_reg);
}
#endif
d_flag_reg = (d_flag_reg << 1);
if (new_flag) {
d_flag_reg |= d_flag_bit;
- d_flip = nwrong >= (64-d_threshold); // flip bits if this is true
}
}