Add option to change start-stop polarity

This commit is contained in:
Marcos Vives Del Sol 2014-08-15 13:25:47 +02:00 committed by Kamal Mostafa
parent 40f1d50cbd
commit 909adf0d59
1 changed files with 12 additions and 3 deletions

View File

@ -337,6 +337,7 @@ usage()
" -S, --space {space_freq}\n" " -S, --space {space_freq}\n"
" --startbits {n}\n" " --startbits {n}\n"
" --stopbits {n.n}\n" " --stopbits {n.n}\n"
" --invert-start-stop\n"
" --sync-byte {0xXX}\n" " --sync-byte {0xXX}\n"
" -q, --quiet\n" " -q, --quiet\n"
" -R, --samplerate {rate}\n" " -R, --samplerate {rate}\n"
@ -376,6 +377,7 @@ main( int argc, char*argv[] )
unsigned int bfsk_do_tx_sync_bytes = 0; unsigned int bfsk_do_tx_sync_bytes = 0;
unsigned int bfsk_sync_byte = -1; unsigned int bfsk_sync_byte = -1;
unsigned int bfsk_n_data_bits = 0; unsigned int bfsk_n_data_bits = 0;
int invert_start_stop = 0;
int autodetect_shift; int autodetect_shift;
char *filename = NULL; char *filename = NULL;
@ -438,6 +440,7 @@ main( int argc, char*argv[] )
MINIMODEM_OPT_UNUSED=256, // placeholder MINIMODEM_OPT_UNUSED=256, // placeholder
MINIMODEM_OPT_STARTBITS, MINIMODEM_OPT_STARTBITS,
MINIMODEM_OPT_STOPBITS, MINIMODEM_OPT_STOPBITS,
MINIMODEM_OPT_INVERT_START_STOP,
MINIMODEM_OPT_SYNC_BYTE, MINIMODEM_OPT_SYNC_BYTE,
MINIMODEM_OPT_LUT, MINIMODEM_OPT_LUT,
MINIMODEM_OPT_FLOAT_SAMPLES, MINIMODEM_OPT_FLOAT_SAMPLES,
@ -471,6 +474,7 @@ main( int argc, char*argv[] )
{ "space", 1, 0, 'S' }, { "space", 1, 0, 'S' },
{ "startbits", 1, 0, MINIMODEM_OPT_STARTBITS }, { "startbits", 1, 0, MINIMODEM_OPT_STARTBITS },
{ "stopbits", 1, 0, MINIMODEM_OPT_STOPBITS }, { "stopbits", 1, 0, MINIMODEM_OPT_STOPBITS },
{ "invert-start-stop", 0, 0, MINIMODEM_OPT_INVERT_START_STOP },
{ "sync-byte", 1, 0, MINIMODEM_OPT_SYNC_BYTE }, { "sync-byte", 1, 0, MINIMODEM_OPT_SYNC_BYTE },
{ "quiet", 0, 0, 'q' }, { "quiet", 0, 0, 'q' },
{ "alsa", 2, 0, 'A' }, { "alsa", 2, 0, 'A' },
@ -557,6 +561,9 @@ main( int argc, char*argv[] )
bfsk_nstopbits = atof(optarg); bfsk_nstopbits = atof(optarg);
assert( bfsk_nstopbits >= 0 ); assert( bfsk_nstopbits >= 0 );
break; break;
case MINIMODEM_OPT_INVERT_START_STOP:
invert_start_stop = 1;
break;
case MINIMODEM_OPT_SYNC_BYTE: case MINIMODEM_OPT_SYNC_BYTE:
bfsk_do_rx_sync = 1; bfsk_do_rx_sync = 1;
bfsk_do_tx_sync_bytes = 16; bfsk_do_tx_sync_bytes = 16;
@ -1005,13 +1012,15 @@ main( int argc, char*argv[] )
// char *expect_bits_string = "10dddddddd1"; // char *expect_bits_string = "10dddddddd1";
// //
char expect_bits_string[32]; char expect_bits_string[32];
char start_bit_value = invert_start_stop ? '1' : '0';
char stop_bit_value = invert_start_stop ? '0' : '1';
int j = 0; int j = 0;
if ( bfsk_nstopbits != 0.0 ) if ( bfsk_nstopbits != 0.0 )
expect_bits_string[j++] = '1'; expect_bits_string[j++] = stop_bit_value;
int i; int i;
// Nb. only integer number of start bits works (for rx) // Nb. only integer number of start bits works (for rx)
for ( i=0; i<bfsk_nstartbits; i++ ) for ( i=0; i<bfsk_nstartbits; i++ )
expect_bits_string[j++] = '0'; expect_bits_string[j++] = start_bit_value;
for ( i=0; i<bfsk_n_data_bits; i++,j++ ) { for ( i=0; i<bfsk_n_data_bits; i++,j++ ) {
if ( ! carrier && bfsk_do_rx_sync ) if ( ! carrier && bfsk_do_rx_sync )
expect_bits_string[j] = ( (bfsk_sync_byte>>i)&1 ) + '0'; expect_bits_string[j] = ( (bfsk_sync_byte>>i)&1 ) + '0';
@ -1019,7 +1028,7 @@ main( int argc, char*argv[] )
expect_bits_string[j] = 'd'; expect_bits_string[j] = 'd';
} }
if ( bfsk_nstopbits != 0.0 ) if ( bfsk_nstopbits != 0.0 )
expect_bits_string[j++] = '1'; expect_bits_string[j++] = stop_bit_value;
expect_bits_string[j++] = 0; expect_bits_string[j++] = 0;