diff --git a/src/common/serial.c b/src/common/serial.c index fa8c743..43ae3d5 100644 --- a/src/common/serial.c +++ b/src/common/serial.c @@ -48,20 +48,26 @@ void serial_init(serial_gen * ctx, int bitcnt, unsigned int sample_rate, unsigne int serial_tx_getlinestate(serial_gen * ctx) { + int update_flag; + + update_flag = 0; + if ( ctx->acc > (((uint32_t)0xFFFFFFFF) - ctx->inc_acc) ) { // Overflow... Next bit ctx->cur_bit = ctx->tx_reg & ctx->mask; // If mask == 0 -> shifter empty ! ctx->mask >>= 1; + + update_flag = 0x2; } ctx->acc += ctx->inc_acc; if( ctx->cur_bit ) - return 1; + return 1 | update_flag; else - return 0; + return 0 | update_flag; } diff --git a/src/pocsag/pocsag.c b/src/pocsag/pocsag.c index 299bc21..6a43030 100644 --- a/src/pocsag/pocsag.c +++ b/src/pocsag/pocsag.c @@ -144,6 +144,7 @@ void printhelp(char* argv[]) printf(" -fmessage:message_file.txt\t: File message to send\n"); printf(" -level:[0-127]\t\t: Output level (Default: 126)\n"); printf(" -settle_time:[0-100]\t\t: Frequency change settle time, in percent of a bit period (Default: 20)\n"); + printf(" -bits_stream_out\t\t: Enable bits stream output\n"); printf(" -verbose \t\t\t: Verbose mode\n"); printf(" -help \t\t\t: This help\n\n"); printf("Example : ./pocsag -generate -stdout -ric:154232 -message:\"Hello\" -alpha | hackrf_transfer -f 466200500 -t - -x 10 -a 0 -s 2000000\n"); @@ -479,6 +480,8 @@ int main(int argc, char* argv[]) int level; int verbose; int message_size; + int ser_state; + int data_stream_mode; wave_io * wave1; @@ -525,6 +528,12 @@ int main(int argc, char* argv[]) freqshift = atoi(temp_str); } + data_stream_mode = 0; + if(isOption(argc,argv,"bits_stream_out",NULL,NULL)>0) + { + data_stream_mode = 1; + } + message[0] = 0; if(isOption(argc,argv,"message",(char*)&message,NULL)>0) { @@ -770,7 +779,9 @@ int main(int argc, char* argv[]) serial_tx_settxreg(&ser,0xAA); } - if( serial_tx_getlinestate(&ser) ) + ser_state = serial_tx_getlinestate(&ser); + + if( ser_state & 1 ) { if(freqidx < settle_size - 1) freqidx++; @@ -804,7 +815,9 @@ int main(int argc, char* argv[]) serial_tx_settxreg(&ser,tmp); } - if( serial_tx_getlinestate(&ser) ) + ser_state = serial_tx_getlinestate(&ser); + + if( ser_state & 1 ) { if(freqidx < settle_size - 1) freqidx++; @@ -815,6 +828,11 @@ int main(int argc, char* argv[]) freqidx--; } + if( (ser_state & 0x2) && data_stream_mode ) + { + fprintf(stderr,"%d", ser_state & 1); + } + iqgen.Frequency = (double)CENTRAL_IF_FREQ + settle_buf[freqidx]; iq_wave_buf[j] = get_next_iq(&iqgen); j++; @@ -835,7 +853,9 @@ int main(int argc, char* argv[]) else iqgen.Amplitude = 0; - if( serial_tx_getlinestate(&ser) ) + ser_state = serial_tx_getlinestate(&ser); + + if( ser_state & 1 ) { if(freqidx < settle_size - 1) freqidx++;