[X] test mode or file I/O (incl stdin/stdout)\r
[X] Octave code to generate include file\r
+ MAX_ITER as well\r
- [ ] check into SVN\r
+ [X] check into SVN\r
[ ] enc/dec running on cmd line\r
[ ] fsk_demod modified for soft decisions\r
[ ] drs232 modified for SD\r
{ \r
int CodeLength, NumberParityBits, max_iter;\r
int i, j, r, num_ok, num_runs;\r
- \r
+ char out_char[CODELENGTH];\r
+\r
/* derive some parameters */\r
\r
max_iter = MAX_ITER;\r
\r
if (argc < 2) {\r
fprintf(stderr, "usage: %s --test\n", argv[0]);\r
- fprintf(stderr, "usage: %s InOneSDSymbolPerDouble OutOneBitPerInt\n", argv[0]);\r
+ fprintf(stderr, "usage: %s InOneSDSymbolPerDouble OutOneBitPerByte\n", argv[0]);\r
exit(0);\r
}\r
\r
if (strcmp(argv[1], "-") == 0) fin = stdin;\r
else if ( (fin = fopen(argv[1],"rb")) == NULL ) {\r
fprintf(stderr, "Error opening input SD file: %s: %s.\n",\r
- argv[2], strerror(errno));\r
+ argv[1], strerror(errno));\r
exit(1);\r
}\r
\r
if (strcmp(argv[2], "-") == 0) fout = stdout;\r
else if ( (fout = fopen(argv[2],"wb")) == NULL ) {\r
fprintf(stderr, "Error opening output bit file: %s: %s.\n",\r
- argv[3], strerror(errno));\r
+ argv[2], strerror(errno));\r
exit(1);\r
}\r
\r
double *input_double = calloc(CodeLength, sizeof(double));\r
\r
- while(fread(input_double, sizeof(double), CodeLength, fin) == 1) {\r
+ while(fread(input_double, sizeof(double), CodeLength, fin) == CodeLength) {\r
run_ldpc_decoder(DecodedBits, ParityCheckCount, input_double);\r
- fwrite(DecodedBits, sizeof(int), CodeLength, fout);\r
+\r
+ /* default is all zeros - just in case we don't get a decode */\r
+\r
+ memset(out_char, sizeof(out_char), 0);\r
+\r
+ /* extract output bits from ouput iteration that solved all paritry equations */\r
+\r
+ for (i=0;i<max_iter;i++) {\r
+ if (ParityCheckCount[i] == NumberParityBits) {\r
+ for (j=0; j<CodeLength; j++) {\r
+ out_char[j] = DecodedBits[i+j*max_iter]; \r
+ }\r
+ }\r
+ }\r
+\r
+ fwrite(out_char, sizeof(char), CodeLength, fout);\r
}\r
\r
free(input_double);\r