diff --git a/Makefile b/Makefile index abe5b0656..085e95fbc 100644 --- a/Makefile +++ b/Makefile @@ -222,13 +222,13 @@ showconfig: %.o: %.c *.h $(CC) $(ALL_CCFLAGS) -c $< -o $@ -dump1090: dump1090.o anet.o interactive.o mode_ac.o mode_s.o comm_b.o net_io.o crc.o demod_2400.o stats.o cpr.o icao_filter.o track.o util.o convert.o ais_charset.o adaptive.o $(SDR_OBJ) $(COMPAT) $(CPUFEATURES_OBJS) $(STARCH_OBJS) +dump1090: dump1090.o anet.o interactive.o mode_ac.o mode_s.o comm_b.o net_io.o crc.o demod_2400.o stats.o cpr.o icao_filter.o track.o util.o convert.o adaptive.o $(SDR_OBJ) $(COMPAT) $(CPUFEATURES_OBJS) $(STARCH_OBJS) $(CC) -g -o $@ $^ $(LDFLAGS) $(LIBS) $(LIBS_SDR) $(LIBS_CURSES) -view1090: view1090.o anet.o interactive.o mode_ac.o mode_s.o comm_b.o net_io.o crc.o stats.o cpr.o icao_filter.o track.o util.o ais_charset.o sdr_stub.o $(COMPAT) +view1090: view1090.o anet.o interactive.o mode_ac.o mode_s.o comm_b.o net_io.o crc.o stats.o cpr.o icao_filter.o track.o util.o sdr_stub.o $(COMPAT) $(CC) -g -o $@ $^ $(LDFLAGS) $(LIBS) $(LIBS_CURSES) -faup1090: faup1090.o anet.o mode_ac.o mode_s.o comm_b.o net_io.o crc.o stats.o cpr.o icao_filter.o track.o util.o ais_charset.o sdr_stub.o $(COMPAT) +faup1090: faup1090.o anet.o mode_ac.o mode_s.o comm_b.o net_io.o crc.o stats.o cpr.o icao_filter.o track.o util.o sdr_stub.o $(COMPAT) $(CC) -g -o $@ $^ $(LDFLAGS) $(LIBS) starch-benchmark: cpu.o dsp/helpers/tables.o $(CPUFEATURES_OBJS) $(STARCH_OBJS) $(STARCH_BENCHMARK_OBJ) @@ -252,7 +252,7 @@ benchmarks: oneoff/convert_benchmark oneoff/convert_benchmark: oneoff/convert_benchmark.o convert.o util.o dsp/helpers/tables.o cpu.o $(CPUFEATURES_OBJS) $(STARCH_OBJS) $(CC) $(ALL_CCFLAGS) -g -o $@ $^ -lm -lpthread -oneoff/decode_comm_b: oneoff/decode_comm_b.o comm_b.o ais_charset.o +oneoff/decode_comm_b: oneoff/decode_comm_b.o comm_b.o $(CC) $(ALL_CCFLAGS) -g -o $@ $^ -lm oneoff/dsp_error_measurement: oneoff/dsp_error_measurement.o dsp/helpers/tables.o cpu.o $(CPUFEATURES_OBJS) $(STARCH_OBJS) diff --git a/ais_charset.c b/ais_charset.c deleted file mode 100644 index a487e3cc7..000000000 --- a/ais_charset.c +++ /dev/null @@ -1,3 +0,0 @@ -#include "ais_charset.h" - -char ais_charset[64] = "@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\\]^_ !\"#$%&'()*+,-./0123456789:;<=>?"; diff --git a/ais_charset.h b/ais_charset.h index 93d4a7293..40a9894f1 100644 --- a/ais_charset.h +++ b/ais_charset.h @@ -1,6 +1,10 @@ #ifndef AIS_CHARSET_H #define AIS_CHARSET_H -extern char ais_charset[64]; +// AIS character set is just the first 64 printable ASCII characters, +// but with 0x20..0x3F after 0x40..0x5F. +static inline __attribute__((always_inline)) char ais_to_ascii(unsigned i) { + return (i + 0x20) ^ 0b01100000; +} #endif diff --git a/comm_b.c b/comm_b.c index a9b08fb2f..263c5e2c3 100644 --- a/comm_b.c +++ b/comm_b.c @@ -244,14 +244,14 @@ static int decodeBDS20(struct modesMessage *mm, bool store) return 0; } - callsign[0] = ais_charset[getbits(msg, 9, 14)]; - callsign[1] = ais_charset[getbits(msg, 15, 20)]; - callsign[2] = ais_charset[getbits(msg, 21, 26)]; - callsign[3] = ais_charset[getbits(msg, 27, 32)]; - callsign[4] = ais_charset[getbits(msg, 33, 38)]; - callsign[5] = ais_charset[getbits(msg, 39, 44)]; - callsign[6] = ais_charset[getbits(msg, 45, 50)]; - callsign[7] = ais_charset[getbits(msg, 51, 56)]; + callsign[0] = ais_to_ascii(getbits(msg, 9, 14)); + callsign[1] = ais_to_ascii(getbits(msg, 15, 20)); + callsign[2] = ais_to_ascii(getbits(msg, 21, 26)); + callsign[3] = ais_to_ascii(getbits(msg, 27, 32)); + callsign[4] = ais_to_ascii(getbits(msg, 33, 38)); + callsign[5] = ais_to_ascii(getbits(msg, 39, 44)); + callsign[6] = ais_to_ascii(getbits(msg, 45, 50)); + callsign[7] = ais_to_ascii(getbits(msg, 51, 56)); callsign[8] = 0; // score based on number of valid characters diff --git a/interactive.c b/interactive.c index 8761c955d..f56146d52 100644 --- a/interactive.c +++ b/interactive.c @@ -140,7 +140,7 @@ void interactiveShowData(void) { static bool need_clear = true; uint64_t now = mstime(); char progress; - char spinner[4] = "|/-\\"; + char spinner[4] = { '|', '/', '-', '\\' }; int valid = 0; double signalMax = -100.0; double signalMin = +100.0; diff --git a/mode_s.c b/mode_s.c index adfb112a7..f1e5c84e8 100644 --- a/mode_s.c +++ b/mode_s.c @@ -802,14 +802,14 @@ static void decodeESIdentAndCategory(struct modesMessage *mm) mm->mesub = getbits(me, 6, 8); - mm->callsign[0] = ais_charset[getbits(me, 9, 14)]; - mm->callsign[1] = ais_charset[getbits(me, 15, 20)]; - mm->callsign[2] = ais_charset[getbits(me, 21, 26)]; - mm->callsign[3] = ais_charset[getbits(me, 27, 32)]; - mm->callsign[4] = ais_charset[getbits(me, 33, 38)]; - mm->callsign[5] = ais_charset[getbits(me, 39, 44)]; - mm->callsign[6] = ais_charset[getbits(me, 45, 50)]; - mm->callsign[7] = ais_charset[getbits(me, 51, 56)]; + mm->callsign[0] = ais_to_ascii(getbits(me, 9, 14)); + mm->callsign[1] = ais_to_ascii(getbits(me, 15, 20)); + mm->callsign[2] = ais_to_ascii(getbits(me, 21, 26)); + mm->callsign[3] = ais_to_ascii(getbits(me, 27, 32)); + mm->callsign[4] = ais_to_ascii(getbits(me, 33, 38)); + mm->callsign[5] = ais_to_ascii(getbits(me, 39, 44)); + mm->callsign[6] = ais_to_ascii(getbits(me, 45, 50)); + mm->callsign[7] = ais_to_ascii(getbits(me, 51, 56)); mm->callsign[8] = 0; mm->callsign_valid = 1;