forked from OpenResearchInstitute/ka9q-radio
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathdump.c
277 lines (269 loc) · 8.89 KB
/
dump.c
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
// $Id: dump.c,v 1.11 2019/01/08 06:48:04 karn Exp $
#define _GNU_SOURCE 1
#include <assert.h>
#include <stdio.h>
#include <math.h>
#undef I
#include <netdb.h>
#include "misc.h"
#include "status.h"
int dump_socket(char *host,char *port,unsigned char *val,int optlen){
struct sockaddr_storage sock;
if(decode_socket((struct sockaddr *)&sock,val,optlen) == -1)
return -1;
return getnameinfo((struct sockaddr *)&sock,sizeof(sock),host,NI_MAXHOST,port,NI_MAXSERV,
NI_NOFQDN|NI_NUMERICHOST|NI_NUMERICSERV);
}
void dump_metadata(unsigned char *buffer,int length){
unsigned char *cp = buffer;
char host[NI_MAXHOST];
char port[NI_MAXSERV];
int i;
char sbuf[256];
while(cp - buffer < length){
enum status_type type = *cp++; // increment cp to length field
if(type == EOL)
break; // End of list
unsigned int optlen = *cp++;
if(cp - buffer + optlen >= length)
break; // Invalid length
switch(type){
case EOL: // Shouldn't get here
goto done;
case GPS_TIME:
printf(" %s;",lltime((long long unsigned)decode_int(cp,optlen)));
break;
case COMMAND_TAG:
printf(" cmd tag %llx;",(long long unsigned)decode_int(cp,optlen));
break;
case COMMANDS:
printf(" commands %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case INPUT_DATA_SOURCE_SOCKET:
dump_socket(host,port,cp,optlen);
printf(" in data src %s:%s;",host,port);
break;
case INPUT_METADATA_SOURCE_SOCKET:
dump_socket(host,port,cp,optlen);
printf(" in metadata src %s:%s;",host,port);
break;
case INPUT_DATA_DEST_SOCKET:
dump_socket(host,port,cp,optlen);
printf(" in data dst %s:%s;",host,port);
break;
case INPUT_METADATA_DEST_SOCKET:
dump_socket(host,port,cp,optlen);
printf(" in metadata dst %s:%s;",host,port);
break;
case INPUT_SSRC:
printf(" in SSRC %llx;",(long long unsigned)decode_int(cp,optlen));
break;
case INPUT_SAMPRATE:
printf(" in samprate %'llu Hz;",(long long unsigned)decode_int(cp,optlen));
break;
case INPUT_DATA_PACKETS:
printf(" in data packets %'llu",(long long unsigned)decode_int(cp,optlen));
break;
case INPUT_METADATA_PACKETS:
printf(" in metadata packets %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case INPUT_SAMPLES:
printf(" in samples %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case INPUT_DROPS:
printf(" in drops %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case INPUT_DUPES:
printf(" in dupes %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case OUTPUT_DATA_SOURCE_SOCKET:
dump_socket(host,port,cp,optlen);
printf(" out data src %s:%s;",host,port);
break;
case OUTPUT_DATA_DEST_SOCKET:
dump_socket(host,port,cp,optlen);
printf(" out data dst %s:%s;",host,port);
break;
case OUTPUT_SSRC:
printf(" out SSRC %llx;",(long long unsigned)decode_int(cp,optlen));
break;
case OUTPUT_TTL:
printf(" out TTL %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case OUTPUT_SAMPRATE:
printf(" out samprate %'llu Hz;",(long long unsigned)decode_int(cp,optlen));
break;
case OUTPUT_DATA_PACKETS:
printf(" out data pkts %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case OUTPUT_METADATA_PACKETS:
printf(" out metadata pkts %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case RADIO_FREQUENCY:
printf(" RF %.3lf Hz;",decode_double(cp,optlen));
break;
case FIRST_LO_FREQUENCY:
printf(" first LO %.3lf Hz;",decode_double(cp,optlen));
break;
case SECOND_LO_FREQUENCY:
printf(" second LO %.3lf Hz;",decode_double(cp,optlen));
break;
case SHIFT_FREQUENCY:
printf(" shift %.3lf Hz;",decode_double(cp,optlen));
break;
case DOPPLER_FREQUENCY:
printf(" doppler %.3lf Hz;",decode_double(cp,optlen));
break;
case DOPPLER_FREQUENCY_RATE:
printf(" doppler rate %.3lf Hz/s;",decode_double(cp,optlen));
break;
case LNA_GAIN:
printf(" lna gain %'llu dB;",(long long unsigned)decode_int(cp,optlen));
break;
case MIXER_GAIN:
printf(" mixer gain %'llu dB;",(long long unsigned)decode_int(cp,optlen));
break;
case IF_GAIN:
printf(" if gain %'llu dB;",(long long unsigned)decode_int(cp,optlen));
break;
case DC_I_OFFSET:
printf(" DC I offset %g;",decode_float(cp,optlen));
break;
case DC_Q_OFFSET:
printf(" DC Q offset %g;",decode_float(cp,optlen));
break;
case IQ_IMBALANCE:
printf(" gain imbal %.1f dB;",decode_float(cp,optlen));
break;
case IQ_PHASE:
printf(" phase imbal %.1f deg;",(180./M_PI)*asinf(decode_float(cp,optlen)));
break;
case AD_LEVEL:
printf(" A/D level %.1f dB;",decode_float(cp,optlen));
break;
case LOW_EDGE:
printf(" filt low %g Hz;",decode_float(cp,optlen));
break;
case HIGH_EDGE:
printf(" filt high %g Hz;",decode_float(cp,optlen));
break;
case KAISER_BETA:
printf(" filter kaiser %g;",decode_float(cp,optlen));
break;
case FILTER_BLOCKSIZE:
printf(" filter L %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case FILTER_FIR_LENGTH:
printf(" filter M %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case NOISE_BANDWIDTH:
printf(" noise BW %g Hz;",decode_float(cp,optlen));
break;
case IF_POWER:
printf(" IF pwr %.1f dB;",decode_float(cp,optlen));
break;
case BASEBAND_POWER:
printf(" BB pwr %.1f dB;",decode_float(cp,optlen));
break;
case NOISE_DENSITY:
printf(" N0 %.1f dB/Hz;",decode_float(cp,optlen));
break;
case DEMOD_TYPE:
i = (long long unsigned)decode_int(cp,optlen); // ????
printf(" demod %d;",i);
break;
case INDEPENDENT_SIDEBAND:
printf(" ISB %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case FM_FLAT:
printf(" FM_flat %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case DEMOD_SNR:
printf(" Demod SNR %.1f dB;",decode_float(cp,optlen));
break;
case GAIN:
printf(" gain %.1f dB;",decode_float(cp,optlen));
break;
case FREQ_OFFSET:
printf(" freq offset %g Hz;",decode_float(cp,optlen));
break;
case PEAK_DEVIATION:
printf(" peak FM dev %g Hz;",decode_float(cp,optlen));
break;
case PL_TONE:
printf(" PL tone %g Hz;",decode_float(cp,optlen));
break;
case PLL_LOCK:
printf(" PLL lock %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case PLL_ENABLE:
printf(" PLL enable %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case PLL_SQUARE:
printf(" PLL square %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case PLL_PHASE:
printf(" PLL phase %g deg;",(180/M_PI)*decode_float(cp,optlen));
break;
case OUTPUT_LEVEL:
printf(" output level %lg dB;",decode_float(cp,optlen));
break;
case OUTPUT_CHANNELS:
printf(" out channels %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case CALIBRATE:
printf(" calibration %lg;",decode_double(cp,optlen));
break;
case AGC_ENABLE:
printf(" agc enab %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case HEADROOM:
printf(" headroom %lg dB;",decode_float(cp,optlen));
break;
case AGC_HANGTIME:
printf(" hangtime %lg s;",decode_float(cp,optlen));
break;
case AGC_RECOVERY_RATE:
printf(" recovery rate %lg dB/s;",decode_float(cp,optlen));
break;
case AGC_ATTACK_RATE:
printf(" attack rate %lg dB/s;",decode_float(cp,optlen));
break;
case DESCRIPTION:
printf(" %s;",decode_string(cp,optlen,sbuf,sizeof(sbuf)));
break;
case DIRECT_CONVERSION:
printf(" direct conv %d;",(int)decode_int(cp,optlen));
break;
case OUTPUT_SAMPLES:
printf(" output samp %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
case OPUS_SOURCE_SOCKET:
dump_socket(host,port,cp,optlen);
printf(" opus src %s:%s;",host,port);
break;
case OPUS_DEST_SOCKET:
dump_socket(host,port,cp,optlen);
printf(" opus dst %s:%s;",host,port);
break;
case OPUS_SSRC:
printf(" opus ssrc %x;",(int)decode_int(cp,optlen));
break;
case OPUS_TTL:
printf(" opus ttl %d;",(int)decode_int(cp,optlen));
break;
case OPUS_BITRATE:
printf(" opus rate %'d bps;",(int)decode_int(cp,optlen));
break;
case OPUS_PACKETS:
printf(" opus pkts %'llu;",(long long unsigned)decode_int(cp,optlen));
break;
default:
printf(" unknown type %d length %d;",type,optlen);
break;
}
cp += optlen;
}
done:;
printf("\n");
}