imet4: add option --rawhex, raw hex input

test
Zilog80 2024-04-25 18:39:33 +02:00
rodzic a2f18ce3ca
commit 47805d261a
1 zmienionych plików z 221 dodań i 160 usunięć

Wyświetl plik

@ -64,6 +64,7 @@ int option_verbose = 0, // ausfuehrliche Anzeige
option_b = 1,
option_json = 0;
int rawhex = 0; // raw hex input
/* ------------------------------------------------------------------------------------ */
@ -910,6 +911,17 @@ void print_rawbits(int len) {
fprintf(stdout, "\n");
}
int hexval(char nib) {
int i;
int h = 0;
if (nib >= '0' && nib <= '9') h = nib-'0';
else if (nib >= 'a' && nib <= 'f') h = nib-'a'+0xA;
else if (nib >= 'A' && nib <= 'F') h = nib-'A'+0xA;
else return -1;
return (h & 0xF);
}
/* -------------------------------------------------------------------------- */
@ -1216,7 +1228,7 @@ int print_xdata(int pos, ui8_t N) {
/* -------------------------------------------------------------------------- */
int print_frame(dsp_t *dsp, int len) {
int print_frame(int len, int bits2byte) {
int i;
int framelen;
int crc_err1 = 0,
@ -1225,15 +1237,20 @@ int print_frame(dsp_t *dsp, int len) {
int ofs = 0;
int out = 0;
if ( len < 2 || len > LEN_BYTEFRAME) return -1;
for (i = len; i < LEN_BYTEFRAME; i++) byteframe[i] = 0;
gpx.gps_valid = 0;
gpx.ptu_valid = 0;
framelen = bits2bytes(bitframe, byteframe, len);
if ( len < 2 || len > LEN_BYTEFRAME ) return -1;
if (option_rawbits)
if (bits2byte) {
memset(byteframe, 0, LEN_BYTEFRAME);
framelen = bits2bytes(bitframe, byteframe, len);
}
else {
framelen = len;
}
if (option_rawbits && !rawhex)
{
print_rawbits(framelen*BITS);
}
@ -1449,6 +1466,7 @@ int main(int argc, char *argv[]) {
if (frq < 300000000) frq = -1;
cfreq = frq;
}
else if (strcmp(*argv, "--rawhex") == 0) { rawhex = 1; } // raw hex input
else if (strcmp(*argv, "-") == 0) {
int sample_rate = 0, bits_sample = 0, channels = 0;
++argv;
@ -1478,6 +1496,8 @@ int main(int argc, char *argv[]) {
if (!wavloaded) fp = stdin;
if (!rawhex) {
if (option_iq == 0 && option_pcmraw) {
fclose(fp);
fprintf(stderr, "error: raw data not IQ\n");
@ -1501,7 +1521,6 @@ int main(int argc, char *argv[]) {
gpx.jsn_freq = fq_kHz;
}
// init dsp
//
dsp.fp = fp;
@ -1603,7 +1622,7 @@ int main(int argc, char *argv[]) {
bitpos++;
if (bitpos >= LEN_BITFRAME-200) { // LEN_GPSePTU*BITS+40
print_frame(&dsp, bitpos/BITS);
print_frame(bitpos/BITS, 1);
bitpos = 0;
header_found = 0;
@ -1642,7 +1661,7 @@ int main(int argc, char *argv[]) {
bitpos++;
if (bitpos >= LEN_BITFRAME-200) { // LEN_GPSePTU*BITS+40
print_frame(&dsp, bitpos/BITS);
print_frame(bitpos/BITS, 1);
bitpos = 0;
header_found = 0;
@ -1653,11 +1672,53 @@ int main(int argc, char *argv[]) {
}
}
}
fprintf(stdout, "\n");
if (buffer) { free(buffer); buffer = NULL; }
free_buffers(&dsp);
}
else { // rawhex
char buffer_rawhex[3*(LEN_BYTEFRAME)+12];
char *pbuf = NULL;
int hi, lo;
int len, j, n;
gpx.jsn_freq = 0;
if (cfreq > 0) {
gpx.jsn_freq = cfreq/1e3;
}
while (1 > 0) {
memset(byteframe, 0, LEN_BYTEFRAME);
memset(buffer_rawhex, 0, 3*(LEN_BYTEFRAME)+6);
pbuf = fgets(buffer_rawhex, 3*(LEN_BYTEFRAME)+6, fp);
if (pbuf == NULL) break;
buffer_rawhex[3*(LEN_BYTEFRAME)] = '\0';
len = strlen(buffer_rawhex);
while (len > 0 && buffer_rawhex[len-1] <= ' ') len--;
buffer_rawhex[len] = '\0';
j = 0;
n = 0;
while (pbuf[j] && n < LEN_BYTEFRAME) {
if (pbuf[j] == ' ') j++; // if/while
hi = hexval(pbuf[j]); if (hi < 0) break;
j++;
lo = hexval(pbuf[j]); if (lo < 0) break;
j++;
byteframe[n] = (hi << 4) | lo;
n++;
}
len = n;
if (len > 10) {
print_frame(len, 0);
}
}
}
fprintf(stdout, "\n");
fclose(fp);
return 0;