Skip to content

Commit cc3b563

Browse files
committed
fix signal emitted via binCraft
1 parent 8d2c177 commit cc3b563

File tree

4 files changed

+30
-24
lines changed

4 files changed

+30
-24
lines changed

globe_index.c

+4
Original file line numberDiff line numberDiff line change
@@ -893,6 +893,10 @@ static int load_aircraft(char **p, char *end, int64_t now, threadpool_buffer_t *
893893
if (a->seen > now + 1 * MINUTES)
894894
a->seen = now - 26 * HOURS;
895895

896+
if (a->lastSignalTimestamp > now) {
897+
a->lastSignalTimestamp = 0;
898+
}
899+
896900
if (a->globe_index > GLOBE_MAX_INDEX)
897901
a->globe_index = -5;
898902

json_out.c

-17
Original file line numberDiff line numberDiff line change
@@ -50,23 +50,6 @@ static const char *jsonEscapeString(const char *str, char *buf, int len) {
5050
return buf;
5151
}
5252

53-
static inline double getSignal(struct aircraft *a) {
54-
double sum;
55-
if (likely(a->signalNext >= 8)) {
56-
sum = a->signalLevel[0] + a->signalLevel[1] + a->signalLevel[2] + a->signalLevel[3] +
57-
a->signalLevel[4] + a->signalLevel[5] + a->signalLevel[6] + a->signalLevel[7];
58-
} else if (a->signalNext >= 4) {
59-
sum = 0;
60-
for (uint32_t i = 0; i < a->signalNext; i++) {
61-
sum += a->signalLevel[i];
62-
}
63-
} else {
64-
sum = 0;
65-
}
66-
67-
return 10 * log10(sum / 8 + 1.125e-5);
68-
}
69-
7053
static char *append_flags(char *p, char *end, struct aircraft *a, datasource_t source) {
7154
p = safe_snprintf(p, end, "[");
7255

track.c

+1-1
Original file line numberDiff line numberDiff line change
@@ -1973,7 +1973,7 @@ struct aircraft *trackUpdateFromMessage(struct modesMessage *mm) {
19731973
} else {
19741974
//fprintf(stderr, "signal zero: %06x; %s\n", a->addr, source_string(mm->source));
19751975
// if we haven't received a message with signal level for a bit, set it to zero
1976-
if (now - a->lastSignalTimestamp > 15 * SECONDS) {
1976+
if (now - a->lastSignalTimestamp > 15 * SECONDS && a->signalNext > 0) {
19771977
a->signalNext = 0;
19781978
//fprintf(stderr, "no_sig_thresh: %06x; %d; %d\n", a->addr, (int) a->no_signal_count, (int) a->signalNext);
19791979
}

track.h

+25-6
Original file line numberDiff line numberDiff line change
@@ -752,13 +752,32 @@ static inline int bogus_lat_lon(double lat, double lon) {
752752
return 1;
753753
return 0;
754754
}
755+
756+
static inline float signalRaw(struct aircraft *a) {
757+
float sum;
758+
if (a->signalNext >= 8) {
759+
sum = a->signalLevel[0] + a->signalLevel[1] + a->signalLevel[2] + a->signalLevel[3] +
760+
a->signalLevel[4] + a->signalLevel[5] + a->signalLevel[6] + a->signalLevel[7];
761+
} else if (a->signalNext >= 4) {
762+
sum = 0;
763+
for (uint32_t i = 0; i < a->signalNext; i++) {
764+
sum += a->signalLevel[i];
765+
}
766+
} else {
767+
sum = 0;
768+
}
769+
return sum / 8.0f;
770+
}
771+
772+
static inline float getSignal(struct aircraft *a) {
773+
return 10.0f * log10f(signalRaw(a) + 1.125e-5f);
774+
}
775+
755776
static inline int get8bitSignal(struct aircraft *a) {
756-
double signal = (a->signalLevel[0] + a->signalLevel[1] + a->signalLevel[2] + a->signalLevel[3] +
757-
a->signalLevel[4] + a->signalLevel[5] + a->signalLevel[6] + a->signalLevel[7]) / 8.0;
758-
signal = sqrt(signal) * 255.0;
759-
if (signal > 255) signal = 255;
760-
if (signal < 1 && signal > 0) signal = 1;
761-
return (int) nearbyint(signal);
777+
float signal = sqrtf(signalRaw(a)) * 255.0f;
778+
if (signal > 255.0f) signal = 255.0f;
779+
if (signal < 1.0f && signal > 0.0f) signal = 1.0f;
780+
return (int) nearbyintf(signal);
762781
}
763782

764783
static inline const char *nonIcaoSpace(struct aircraft *a) {

0 commit comments

Comments
 (0)