pocsag : bit stream output mode.

This commit is contained in:
Jean-François DEL NERO
2026-07-10 23:59:28 +02:00
parent 94a413c098
commit ccaf8adcc0
2 changed files with 31 additions and 5 deletions
+8 -2
View File
@@ -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;
}
+23 -3
View File
@@ -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++;