@@ -146,6 +146,7 @@ char usage[]=
146
146
" gaussian_noise_c\n"
147
147
" awgn_cc <snr_db> [--snrshow]\n"
148
148
" pack_bits_8to1_u8_u8\n"
149
+ " pack_bits_1to8_u8_u8\n"
149
150
" firdes_pulse_shaping_filter_f (RRC <samples_per_symbol> <num_taps> <beta> | COSINE <samples_per_symbol>)\n"
150
151
" pulse_shaping_filter_cc (RRC <samples_per_symbol> <num_taps> <beta> | COSINE <samples_per_symbol>)\n"
151
152
" add_n_zero_samples_at_beginning_f <n_zero_samples>\n"
@@ -154,6 +155,9 @@ char usage[]=
154
155
" add_const_cc <i> <q>\n"
155
156
" tee <path> [buffers]\n"
156
157
" pll_cc (1 [alpha] |2 [bandwidth [damping_factor [ko [kd]]]])\n"
158
+ " pattern_search_u8_u8 <values_after> <pattern_values × N>\n"
159
+ " dbpsk_decoder_c_u8\n"
160
+ " bfsk_demod_cf <spacing> <filter_length>\n"
157
161
" ?<search_the_function_list>\n"
158
162
" =<evaluate_python_expression>\n"
159
163
" \n"
@@ -2723,7 +2727,7 @@ int main(int argc, char *argv[])
2723
2727
}
2724
2728
}
2725
2729
2726
- if (!strcmp (argv [1 ],"pack_bits_8to1_u8_u8 " ))
2730
+ if (!strcmp (argv [1 ],"pack_bits_1to8_u8_u8 " ))
2727
2731
{
2728
2732
if (!initialize_buffers ()) return -2 ;
2729
2733
sendbufsize (the_bufsize * 8 );
@@ -2733,12 +2737,27 @@ int main(int argc, char *argv[])
2733
2737
{
2734
2738
FEOF_CHECK ;
2735
2739
fread ((void * )local_input_buffer , sizeof (unsigned char ), the_bufsize , stdin );
2736
- pack_bits_8to1_u8_u8 (local_input_buffer , local_output_buffer , the_bufsize );
2740
+ pack_bits_1to8_u8_u8 (local_input_buffer , local_output_buffer , the_bufsize );
2737
2741
fwrite ((void * )local_output_buffer , sizeof (unsigned char ), the_bufsize * 8 , stdout );
2738
2742
TRY_YIELD ;
2739
2743
}
2740
2744
}
2741
2745
2746
+ if (!strcmp (argv [1 ],"pack_bits_8to1_u8_u8" ))
2747
+ {
2748
+ if (!initialize_buffers ()) return -2 ;
2749
+ sendbufsize (1 );
2750
+ char local_input_buffer [8 ];
2751
+ for (;;)
2752
+ {
2753
+ FEOF_CHECK ;
2754
+ fread ((void * )local_input_buffer , sizeof (unsigned char ), 8 , stdin );
2755
+ unsigned char c = pack_bits_8to1_u8_u8 (local_input_buffer );
2756
+ fwrite (& c , sizeof (unsigned char ), 1 , stdout );
2757
+ TRY_YIELD ;
2758
+ }
2759
+ }
2760
+
2742
2761
if (!strcmp (argv [1 ],"psk31_varicode_encoder_u8_u8" ))
2743
2762
{
2744
2763
if (!initialize_buffers ()) return -2 ;
@@ -2914,7 +2933,7 @@ int main(int argc, char *argv[])
2914
2933
complexf * taps = (complexf * )malloc (sizeof (complexf )* length );
2915
2934
2916
2935
//Make the filter
2917
- firdes_add_resonator_c (taps , length , rate , window , 0 , 1 );
2936
+ firdes_add_peak_c (taps , length , rate , window , 0 , 1 );
2918
2937
2919
2938
//Do the output
2920
2939
if (octave ) printf ("taps=[" );
@@ -2960,7 +2979,7 @@ int main(int argc, char *argv[])
2960
2979
for (int i = 0 ; i < num_peaks ; i ++ )
2961
2980
{
2962
2981
//fprintf(stderr, "nr = %d\n", i==num_peaks-1);
2963
- firdes_add_resonator_c (taps , taps_length , peak_rate [i ], window , 1 , i == num_peaks - 1 );
2982
+ firdes_add_peak_c (taps , taps_length , peak_rate [i ], window , 1 , i == num_peaks - 1 );
2964
2983
}
2965
2984
2966
2985
int output_size = 0 ;
@@ -3215,6 +3234,53 @@ int main(int argc, char *argv[])
3215
3234
return 0 ;
3216
3235
}
3217
3236
3237
+ if (!strcmp (argv [1 ], "dbpsk_decoder_c_u8" ))
3238
+ {
3239
+ if (!sendbufsize (initialize_buffers ())) return -2 ;
3240
+ unsigned char * local_output_buffer = (unsigned char * )malloc (sizeof (unsigned char )* the_bufsize );
3241
+ for (;;)
3242
+ {
3243
+ FEOF_CHECK ;
3244
+ FREAD_C ;
3245
+ dbpsk_decoder_c_u8 ((complexf * )input_buffer , local_output_buffer , the_bufsize );
3246
+ fwrite (local_output_buffer , sizeof (unsigned char ), the_bufsize , stdout );
3247
+ TRY_YIELD ;
3248
+ }
3249
+ return 0 ;
3250
+ }
3251
+
3252
+ if (!strcmp (argv [1 ], "bfsk_demod_cf" )) //<spacing> <filter_length>
3253
+ {
3254
+ float frequency_shift = 0 ;
3255
+ if (argc <=2 ) return badsyntax ("required parameter <frequency_shift> is missing." );
3256
+ sscanf (argv [2 ],"%f" ,& frequency_shift );
3257
+
3258
+ int filter_length = 0 ;
3259
+ if (argc <=3 ) return badsyntax ("required parameter <filter_length> is missing." );
3260
+ sscanf (argv [3 ],"%d" ,& filter_length );
3261
+
3262
+ complexf * mark_filter = (complexf * )malloc (sizeof (complexf )* filter_length );
3263
+ complexf * space_filter = (complexf * )malloc (sizeof (complexf )* filter_length );
3264
+ firdes_add_peak_c (mark_filter , filter_length , frequency_shift /2 , WINDOW_DEFAULT , 0 , 1 );
3265
+ firdes_add_peak_c (space_filter , filter_length , - frequency_shift /2 , WINDOW_DEFAULT , 0 , 1 );
3266
+
3267
+ if (!sendbufsize (initialize_buffers ())) return -2 ;
3268
+
3269
+ int input_skip = 0 ;
3270
+ int output_size = 0 ;
3271
+ FREAD_C ;
3272
+ for (;;)
3273
+ {
3274
+ FEOF_CHECK ;
3275
+ output_size = bfsk_demod_cf ((complexf * )input_buffer , output_buffer , the_bufsize , mark_filter , space_filter , filter_length );
3276
+ fwrite (output_buffer , sizeof (float ), output_size , stdout );
3277
+ TRY_YIELD ;
3278
+ memmove ((complexf * )input_buffer ,((complexf * )input_buffer )+ output_size ,(the_bufsize - output_size )* sizeof (complexf ));
3279
+ fread (((complexf * )input_buffer )+ (the_bufsize - output_size ), sizeof (complexf ), output_size , stdin );
3280
+ }
3281
+ return 0 ;
3282
+ }
3283
+
3218
3284
if (!strcmp (argv [1 ], "add_const_cc" )) //<i> <q>
3219
3285
{
3220
3286
complexf x ;
@@ -3411,6 +3477,105 @@ int main(int argc, char *argv[])
3411
3477
TRY_YIELD ;
3412
3478
}
3413
3479
}
3480
+ /*
3481
+ if(!strcmp(argv[1],"syncword_search"))
3482
+ {
3483
+ if(argc<3) return badsyntax("need required parameter (syncword)");
3484
+ unsigned long syncword=0UL;
3485
+ int syncword_length=strlen(argv[2]);
3486
+ for(int i=0; i<sycword_len;i++)
3487
+ {
3488
+ syncword<<=4;
3489
+ char c=argv[2][i];
3490
+ unsigned char cval = 0;
3491
+ if(c<='9'&&c>='0') cval = c-'0';
3492
+ if(c<='f'&&c>='a') cval = c-'a'+10;
3493
+ syncword|=cval;
3494
+ }
3495
+ errhead(); fprintf("syncword = 0x%0x, syncword_length=%d\n", syncword, syncword_length);
3496
+ if(argc<4) return badsyntax("need required parameter (bits_after)");
3497
+ int bits_after = 0;
3498
+ sscanf(argv[3], &bits_after);
3499
+ if(bits_after<0) return badsyntax("bits_after should be >0");
3500
+ unsigned char* syncword_bits = malloc(sizeof(unsigned char)*syncword_length*4);
3501
+ int k=0;
3502
+ for(int i=0;i<syncword_length;i++)
3503
+ {
3504
+ for(int j=7;j;j--)
3505
+ {
3506
+ syncword_bits[k++]=syncword[i]>>j
3507
+ }
3508
+ }
3509
+ malloc
3510
+
3511
+ }
3512
+ */
3513
+ if (!strcmp (argv [1 ],"pattern_search_u8_u8" )) //<values_after> <pattern_values × N>
3514
+ {
3515
+ if (argc < 3 ) return badsyntax ("need required parameter (values_after)" );
3516
+ int values_after = 0 ;
3517
+ sscanf (argv [2 ], "%d" , & values_after );
3518
+ if (argc < 4 ) return badsyntax ("need required parameter (pattern_values × N)" );
3519
+ int pattern_values_length = argc - 3 ;
3520
+ unsigned * pattern_values = (unsigned * )malloc (sizeof (unsigned )* pattern_values_length );
3521
+ for (int i = 0 ;i < pattern_values_length ;i ++ )
3522
+ sscanf (argv [3 + i ],"%u" ,pattern_values + i );
3523
+
3524
+ errhead (); fprintf (stderr ,"pattern values: " );
3525
+ for (int i = 0 ;i < pattern_values_length ;i ++ )
3526
+ fprintf (stderr , "%x " , * (pattern_values + i ));
3527
+ fprintf (stderr ,"\n" );
3528
+
3529
+ unsigned char * input_buffer = (unsigned char * )malloc (sizeof (unsigned char )* pattern_values_length ); //circular buffer
3530
+ unsigned char * output_buffer = (unsigned char * )malloc (sizeof (unsigned char )* values_after );
3531
+ int input_index = 0 ;
3532
+ int valid_values = 0 ;
3533
+ for (;;)
3534
+ {
3535
+ FEOF_CHECK ;
3536
+ unsigned char cchar = input_buffer [input_index ++ ]= (unsigned char )fgetc (stdin );
3537
+ if (valid_values < pattern_values_length ) { valid_values ++ ; continue ; }
3538
+ if (input_index >=pattern_values_length ) input_index = 0 ;
3539
+ int match = 1 ;
3540
+ //fprintf(stderr, "ov1: ");
3541
+ //for(int i=0;i<pattern_values_length;i++) fprintf(stderr, "%02x ", input_buffer[i]);
3542
+ //fprintf(stderr, "\nov2: ");
3543
+ //for(int i=0;i<pattern_values_length;i++) fprintf(stderr, "%02x ", pattern_values[i]);
3544
+ //fprintf(stderr, "\n");
3545
+
3546
+ //fprintf(stderr, "v1: ");
3547
+ //for(int i=input_index;i<pattern_values_length;i++) fprintf(stderr, "%s%02x ", ((input_buffer[i])?"\x1B[34m":"\x1B[0m"), input_buffer[i]);
3548
+ //for(int i=0;i<input_index;i++) fprintf(stderr, "%s%02x ", ((input_buffer[i])?"\x1B[34m":"\x1B[0m"), input_buffer[i]);
3549
+ //fprintf(stderr, "\x1B[0m %02x\n", cchar);
3550
+
3551
+ //fprintf(stderr, "========\n");
3552
+ int j = 0 ;
3553
+ for (int i = input_index ;i < pattern_values_length ;i ++ )
3554
+ {
3555
+ //fprintf(stderr, "%02x ~ %02x\n", input_buffer[i], pattern_values[j]);
3556
+ if (input_buffer [i ]!= pattern_values [j ++ ]) { match = 0 ; break ;}
3557
+ }
3558
+ //fprintf(stderr, "~~~~~~~~\n");
3559
+ if (input_index != 0 && match )
3560
+ {
3561
+ for (int i = 0 ;i < input_index ;i ++ )
3562
+ {
3563
+ //fprintf(stderr, "%02x ~ %02x\n", input_buffer[i], pattern_values[j]);
3564
+ if (input_buffer [i ]!= pattern_values [j ++ ]) { match = 0 ; break ;}
3565
+ }
3566
+ }
3567
+
3568
+ //if(match) fprintf(stderr, "j=%d\n", j);
3569
+ if (match )
3570
+ {
3571
+ valid_values = 0 ;
3572
+ //fprintf(stderr,"matched!\n");
3573
+ fread (output_buffer , sizeof (unsigned char ), values_after , stdin );
3574
+ fwrite (output_buffer , sizeof (unsigned char ), values_after , stdout );
3575
+ }
3576
+ TRY_YIELD ;
3577
+ }
3578
+ }
3414
3579
3415
3580
if (!strcmp (argv [1 ],"none" ))
3416
3581
{
0 commit comments