Commit graph

1148 commits

Author SHA1 Message Date
hhm a86eb7a61c B"H view1090: do not use pthreads
It *seems* that pthreads are used in dump1090 for I/! sample reading
only. So view1090 need not use pthread_exit.
2014-07-06 05:58:44 -04:00
hhm ec09cc7a71 B"H view1090: sleep a bit between loops
view1090 was using close to 100% CPU before, with the non-blocking
commits and the reconnection code. sleep a bit between loop iterations
to keep CPU usage low.

CPU usage with this addition was down to <1% in testing.
2014-07-03 02:41:06 -04:00
hhm 350a57f858 B"H view1090: do not block
- do not block on network data
2014-07-02 07:41:43 -04:00
hhm 96015e38c8 B"H view1090: handle disconnection
- keep trying to reconnect to server if disconnected
2014-07-02 07:38:46 -04:00
MalcolmRobb c0d6ea073f Merge pull request #20 from hhm0/network_disabling
make network services disable-able
2014-06-27 11:45:41 +01:00
MalcolmRobb 190a746dce Merge pull request #19 from hhm0/decoding
decode more squawk codes
2014-06-27 11:43:30 +01:00
hhm 59984ac8af B"H allow disable ports, doc disable net heartbeat 2014-06-24 23:58:46 -04:00
hhm 506be6e054 B"H decode more data, etc.
- decodes a bit more information
- misc. small changes
2014-06-22 13:05:39 -04:00
MalcolmRobb 189e726792 Merge pull request #16 from papasven/master
Incorrect value for auto-gain
2014-06-18 11:13:37 +01:00
papasven e6c43382b9 Incorrect value for auto-gain
Incorrect value for auto-gain option the Modes.gain is multiplied by 10.
2014-06-01 02:14:40 +02:00
Malcolm Robb 6afdc9bd1b Merge remote-tracking branch 'origin/Debug' 2014-05-27 13:17:49 +01:00
Malcolm Robb 903f93f530 Publish Version 1.08.2705.14
A few minor additions and bug fixes as detailed below

1) Additional command line option "--net-buffer <n>" to specify the TCP
output buffer size. Default is n=0, which is 64Kb. Specify a value of n
to increase the buffer size according to  Size  = 64Kb * 2^n, so an n of
1 = 128Kb, n=2 is 256Kb etc. n is limited to 7, so the max size is 8Mb.
This option may assist if you have a high number of aircraft being
received, and an unreliable network connection, or if the receiving end
can be busy for an extended time.

2) Bug fix in ppup1090 which prevented the uploading of valid
ModeA/Squawk codes

3) Bug fix per Markus Grab's commit.
2014-05-27 13:16:57 +01:00
Markus Gräb 00533e7ff4 Fixed: now skipping correct number of values in magnitude buffer
Variable j points to the current location in the magnitude vector.
When decoding a message  (MODES_PREAMBLE_US+msglen)*2 is added to j.
In the loop head j is increased by 1, so one value was skipped.
2014-05-27 12:23:57 +01:00
MalcolmRobb dfb319146e Merge pull request #14 from kopppa91/master
Fixed: now skipping correct number of values in magnitude buffer
2014-05-27 12:13:24 +01:00
Markus Gräb 583f24299a Fixed: now skipping correct number of values in magnitude buffer
Variable j points to the current location in the magnitude vector.
When decoding a message  (MODES_PREAMBLE_US+msglen)*2 is added to j.
In the loop head j is increased by 1, so one value was skipped.
2014-05-14 19:39:07 +02:00
Malcolm Robb a55b9a76b5 BUGFIX : Windows version HTML Web browser support
Allow connection of a web browser to the Windows version via
http://127.0.0.1:8080
2014-05-09 23:44:11 +01:00
Malcolm Robb d200099244 BUGFIX : Possible linked list bug 2014-04-25 17:00:58 +01:00
Malcolm Robb 30ae45ec2b Windows Version of dump1090
Make the modifications necessary to compile dump1090 for WinXP, Win7 and
hopefully Win8.

The files can be compiled using M$ Visual Studio/C++ 6.0. Due to various
licensing issues, I haven't included the libraries or DLLs. You will
need to locate pthreadVC2.lib and rtlsdr.lib to link the file, install
the zadig drivers to support the dongle, and locate libusb-1.0.dll,
msvcr100.dll, pthreadVC2.dll and rtlsdr.dll.

dump1090.exe will not run on any Windows version prior to XP SP2,
because msvcr100.dll imports several functions from the Windows kernel
that are not available on earlier versions. This means dump1090 won't
work on Win2K.

The major change to the code relates to file handles. The original code
assumes Linux behaviour in that handles are allocated from 0
sequentially upwards. However Windows handles are allocated pseudo
randomly, and handle numbers greater than 1024 would break the code. The
code has therefore been modified to use a linked list of connection
structures, rather than a static array limited to 1024 entries.
2014-04-25 14:48:14 +01:00
Malcolm Robb f7843c1691 Implement TCP Heartbeat
Some users have reported issues where the TCP link to dump1090 can be
lost at times of low traffic density - typically in the middle of the
night. One possible reason for this is that some routers drop the link
if there is no traffic for a predetermined period.

To try and resolve this, dump1090 now sends a 'null' packet consisting
of 7 "0x00" bytes approximately once a  minute if there is no real
received traffic during this time. This packet should be discarded by
the application receiving the dump1090 because it will have an invalid
checksum, and ICAO address 0x000000 is also invalid. However, this null
packet should be enough to keep routers alive.
2014-03-11 01:09:49 +00:00
Jeff Lawson cc27ff6234 link to FlightAware for flight details 2014-02-27 14:40:14 -06:00
Malcolm Robb 4a438d6e34 Update the Windows version of View1090 2014-02-24 10:44:51 +00:00
Malcolm Robb 97c7f69c83 Publish V1.08.2302.14
Final tidy up and publish
2014-02-24 10:28:35 +00:00
Malcolm Robb 260b955f47 BUGFIX : Beast Binary Escape characters
Thanks to Blort on the PP list.

The Beast binary message stream uses the 0x1a character a and escape to
mark the beginning of a new message. However, the 0x1a character could
occur in the body of a message since the message is binary. Therefore,
the 0x1a is repeated  -as Blort put it :

This 56-bit Mode S Frame (containing a 1a) is supposed to look like
this:

1a  32 00 00 48 7b a6 1a 1a 0c  20 28 17 b0 c0 c3 b0

What is actually looks (looked) like (from wireshark) is this:

1a  32 00 00 48 7b a6 1a 0c  20 28 17 b0 c0 c3 b0

There are supposed to be two 1A’s (Gunter’s Escape Character) in a row
(1A 1A) whenever a data byte contains 1A, after the initial two 1A 3x
characters.
2014-02-23 01:55:34 +00:00
Malcolm Robb 75a4c6ee21 BUGFIX : Missed data causes timestamp slip
The Mutex on the RTL data reader thread does not "force" the data
processing thread to execute. Therefore, if the processor is busy, it is
possible for a second RTL callback to occur before the data from the
first has been processed. This will cause the loss of the first data,
but worse, it will cause a slip in the timestamp. This upsets Beamfinder
and MLAT operation in PlanePlotter.

To solve this, keep a Fifo buffer which is filled by the callback
thread, and emptied by the data processing thread. The fifo is the same
size as the number of buffers requested in the call to
rtlsdr_read_async().

Note - we only put the value of the pointer supplied in the callback
into the fifo. We do not attempt to cache the data in the buffer pointed
to by the pointer.  This would require us to memcopy() 2Mbytes per
second, which we don't want to do if we don't have to because it will
only make the processor loading worse. Instead, we assume that the data
in the buffer will remain valid after the callback returns, at least
until it is overwritten by new data.

It is still possible for us to lose data if we can't process it quickly
enough. However, we can now detect this loss of data when the fifo is
almost full, and correct the timestamp for the lost block/blocks.
2014-02-22 23:11:13 +00:00
Malcolm Robb 24080a22b1 antirez
Free the client on best effort write(2) short write
2014-02-22 22:35:42 +00:00
Malcolm Robb b9a1a3e650 antirez
modesFreeClient() optimized to find new maxfd faster
2014-02-22 22:28:20 +00:00
Malcolm Robb f331887b7f antirez
Constant replaced with macro MODES_NET_SERVICES_NUM.
2014-02-22 22:20:25 +00:00
Malcolm Robb 86093ea95e WIZARDISHUNGRY
Dynamically size terminal using SIGWINCH

f18180fef4
2014-02-22 22:11:11 +00:00
Adam Cécile (Le_Vert) e9d2232719 Honor LDFLAGS 2013-10-10 00:45:35 +02:00
Adam Cécile (Le_Vert) b921d80e7f Typo fixes 2013-10-10 00:44:58 +02:00
Malcolm Robb fe9d168ade Bug fix in ppup1090 2013-10-09 15:36:49 +01:00
Malcolm Robb f3b5167a0a Create separate Makefiles
Create separate makefiles for dump1090, view1090 and ppup1090. These can
be run with the command line "make -f makedump1090", "make -f
makeview1019" and "make -f makeppup1090"

Pass dump1090 version number into ppup1090 uploader so that coaa1090.obj
doesn't need re-compiling between versions.

Remove ppup1090 from general Makefile - it's not intended for anything
other than RPi, so gives linker errors on other (non Linux raspian)
systems.
2013-10-07 10:59:10 +01:00
Malcolm Robb 11502e9ec9 Extra list decoding for DF-0 and DF-16
Extra list decoding for DF-0 and DF-16
Tidy up a few things
Change version number
2013-10-04 18:33:49 +01:00
Malcolm Robb 64b24ebc29 Bugfix in position decoding
If the aircraft lands or takes off, the Lat/Lon valid flags are cleared.
In the original code, this also resulted in any even/odd position
reports in the mm record being discarded  This meant that the code would
require an even and odd position after the change of flight status.

The code had been modified so that any position report in the mm record
is used even if there is a change of flight status. This means there
only needs to be an even or odd after a change of FS, rather than
requiring both even and odd. The result should be earlier decoding of
position.
2013-10-04 11:09:40 +01:00
Malcolm Robb fa004fc38a DF-11 SI/II Detection changes
Don't allow detection of DF-11 SI/II until we have received at least one
DF-11 for the aircraft with an SI/II of zero.

Previous versions would allow an ICAOAddr to be marked as valid if a
DF-11 was received where the crc was less than 80. This is required for
SI/II detection where the SI/II is overlaid on the crc field. However,
this also decreaces the security of the crc. It is possible for a
corrupt message to result in a crc value of between 1 and 79, and this
will lead to an invalid ICAOAddr being marked as received.

To try and prevent this, do not allow detection of DF-11 II/SI fields
until at least one DF-11 crc=0 has been received. Once this happens, we
ca be fairly sure that this aircraft really is within range, and so
II/SI detection can e used.
2013-10-04 10:34:26 +01:00
Malcolm Robb f50744b11b Better Incorporate coaa.h 2013-09-30 11:46:36 +01:00
Malcolm Robb f8216130de mode_ac.c comit
Dunno why - haven't changed it - but github is forcing me to re-commit
this.
2013-09-27 15:03:43 +01:00
Malcolm Robb 5b5424df3b View1090 WinXP bugfix
Updated the way socket handles are used in View1090 to maintain
compatibility between UNIX and Windows.

Added the initial attempt at a Planeplotter uploader
2013-09-27 15:01:46 +01:00
Malcolm Robb a968f03c3a Stop heading using multiple lines
In the table view of aircraft, the heading was displayed as "330 (NW)"
or similar. However, this cause the entry to scroll over into two lines
of text, and reduces the number of planes that can be seen in the table
at any one time.

There probably should be a way to make the table view wider by scrolling
it, but I can't see any way to do that. So for the moment I've commented
out the extra (NW) bit.
2013-09-27 10:57:26 +01:00
Malcolm Robb 2e43a9eb63 IE 8/9 Web Interface moving planes
Many thanks to 0xFACE for this fix. Hopefully those using Windows and
IE8/9 should now see some moving action.
2013-09-27 10:05:05 +01:00
Malcolm Robb 19ce5a29b1 Additional debug message printing 2013-09-26 19:25:14 +01:00
Malcolm Robb 2c28d9fe2f IE 8/9 Bugs in Web interface
*DISCLAIMER*
I didn't write any of this code initially, I've never tried to use it,
and I don't understand Java Script at all. In-fact I hate the wretched
stuff.

Anyway, it appears that no-one has bothered to test any of the Web
interface code using Microsoft Internet Explorer 8 or 9. I've attempted
to hack out the sections of the code that are causing problems, and at
least the web interface now seems to run.

However, for some reason the planes never move - I know this must be a
bug, but I don't know how to fix it.

Most of the errors relate to trailing commas.  My guess it that some
Java engines don't mind trailing commas, but that the Microsoft ones do.
There are also some undefined modules (untrackedDeveloperSettings) and
functions (console.log) which I guess those who wrote the code have on
their machines, but forgot to include in the public distribution. I've
no idea how to fix this, so I've just hacked them out of the code.
2013-09-26 12:59:46 +01:00
Malcolm Robb 0430323014 Implement a remote interactive screen
No changes to dump1090, (except the version number)

Include a sample Linux batch start file called dump1090.sh for use when
running dump1090 headless. This file needs to be copied to the
/etc/init.d/ subdirectory on your raspberry pi, and marked as
executable. Then when you re-start your RPi, dump1090 will start-up
auto-magically and run as a sort of server to allow both local and
remote connection to it's various internet ports.

Modified the Makefile to build a new headless helper application called
view1090

Added view1090. This is an executable that allows you to connect to
dump1090 when it is running and 'see' the interactive screen display.
The default is to try and connect to dump1090 on IP address 127.0.0.1
port 30005. This should work if you are running on the same RPi as
dump1090 and using the default dump1090 port settings. However, if
you're running on a different machine you will have to specify the IP
address of the RPi running dump1090 using the --net-bo-ipaddr switch.
Something like "view1090 --net-bo-ipaddr 192.168.2.65" . You may also
have to sudo it, depending on your privilige settings.

I've also compiled view1090 as a Wiin32 exe, so you should be able to
run it under any 32 bit version of Microsoft Windows - i.e. Win95, Win
2K, Win XP, Win 7 etc.  It may work on Win 8 and 64 bit Windows, but I
haven't tried it. The Win32 version is compiled from the same source, so
takes all the same command line switches.
2013-09-24 18:37:54 +01:00
MalcolmRobb 03c16aa19a Merge pull request #10 from termigrator/patch-1
Update net_io.c
2013-09-24 07:17:35 -07:00
termigrator c2962a00e5 Update net_io.c
Added vertical rate (a->vert_rate) to json output
2013-09-22 23:25:12 +02:00
Malcolm Robb d9de1190f0 Version update 2013-09-20 16:50:38 +01:00
Malcolm Robb 7ea2e8fdef Bug Fix in modesReadFromClient()
The modesReadFromClient() funtion is called from modesReadFromClients(),
which in turn is called from backgroundTasks(). backgroundTasks() is
called from within the main processing loop.

However, modesReadFromClient() can and does block. It attempts to read
characters from the input stream, and loops whilst there was no error.
This stalls the main RTL processing loop until an error occurs. In order
to support simultaneous local reception (via our RTL dongle) and remote
forwarding (data received from the interweb) we cannot allow this
internet read to stall.

To fix this, in modesReadFromClient() attempt to read a buffer of data
(currently 0x400 bytes). If we get a full buffer of bytes, then process
them, and attempt to read another full buffer. Keep doing thios untill
we read only a partial buffer (less than 0x400 bytes). Process the
partial buffer bytes and return.

This allows us to occasionally process data that is arriving from the
internet (which is buffered anyway in the TCP stack), without blocking
local RTL dongle decoding.
2013-09-20 16:48:15 +01:00
Malcolm Robb 52ac50b018 Remove some local filtering
Oops - Left some personal ModeA/C filtering in the release code that
only applies if you happen to be within 25 miles of Yeovilton.
2013-08-19 19:04:49 +01:00
Malcolm Robb 6997715fed Split into separate module files
Ok - this is likely to upset some people. Up until now, the vast
majority of the code has been in just one file - dump1090.c. This file
has grown so that it was approaching of 5000 lines long, and it was
becoming unmanagable. So I've split the file into several modules,
hopefully along fairly logical boundaries. The files are :

1) dump1090.c : Basically just the main() entry function, the help
function, the RTL dongle hardware interface, and a few orphan functions
that  don't really fit anywhere else.

2) mode_s.c : This contains all the mode S / ADSB decoding functions.

3) mode_ac.c : This contains all the mode A & C decoding functions

4) interactive.c : This contains all the functions to maintain an
internal list of aircraft seen over the last period, and functions to
print them out to the local console.

5) net_io.c : This contains all the network input/output functions
allowing data to be passed in/out to/from other receivers, in formats
such as SBS-1/3, Beast, AVR and JavaScript.

Hopefully this should provide an easier way forward if/when more
functions are added.
2013-08-19 18:57:03 +01:00
Malcolm Robb 1ebdd6d7a7 Interactive list aircraft display and delete changes
Create two different Time-To-Live parameters for the interactive display
list.

1) Modes.interactive_display_ttl defines for how long the display of an
aircraft persists after the last received message. The default is
MODES_INTERACTIVE_DISPLAY_TTL, which is set to 60 seconds. This replaces
the previous Modes.interactive_ttl/MODES_INTERACTIVE_TTL settings (which
were also 60 seconds)

2) Add an additional Modes.interactive_delete_ttl  parameter, and
default it to  MODES_INTERACTIVE_DELETE_TTL, shich is set to 300
seconds/5 minutes. This defines for how long an aircraft persists in the
list structure after the last received message before being deleted.

Also tidy up a few comments.
2013-08-19 15:55:17 +01:00