diff --git a/pyModeS/adsb.py b/pyModeS/adsb.py
index aa69c3c..b530f91 100644
--- a/pyModeS/adsb.py
+++ b/pyModeS/adsb.py
@@ -1,20 +1,20 @@
+# Copyright (C) 2015 Junzi Sun (TU Delft)
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
"""
A python package for decoding ABS-D messages.
-
-Copyright (C) 2015 Junzi Sun (TU Delft)
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
"""
import math
@@ -169,6 +169,18 @@ def cprlon(msg):
def position(msg0, msg1, t0, t1):
+ """Decode position from a pair of even and odd position message
+ (works with both airborne and surface position messages)
+
+ Args:
+ msg0 (string): even message (28 bytes hexadecimal string)
+ msg1 (string): odd message (28 bytes hexadecimal string)
+ t0 (int): timestamps for the even message
+ t1 (int): timestamps for the odd message
+
+ Returns:
+ (float, float): (latitude, longitude) of the aircraft
+ """
if (5 <= typecode(msg0) <= 8 and 5 <= typecode(msg1) <= 8):
return surface_position(msg0, msg1, t0, t1)
@@ -181,7 +193,6 @@ def position(msg0, msg1, t0, t1):
def airborne_position(msg0, msg1, t0, t1):
"""Decode airborn position from a pair of even and odd position message
- 131072 is 2^17, since CPR lat and lon are 17 bits each.
Args:
msg0 (string): even message (28 bytes hexadecimal string)
@@ -196,6 +207,7 @@ def airborne_position(msg0, msg1, t0, t1):
msgbin0 = util.hex2bin(msg0)
msgbin1 = util.hex2bin(msg1)
+ # 131072 is 2^17, since CPR lat and lon are 17 bits each.
cprlat_even = util.bin2int(msgbin0[54:71]) / 131072.0
cprlon_even = util.bin2int(msgbin0[71:88]) / 131072.0
cprlat_odd = util.bin2int(msgbin1[54:71]) / 131072.0
@@ -241,6 +253,20 @@ def airborne_position(msg0, msg1, t0, t1):
def position_with_ref(msg, lat_ref, lon_ref):
+ """Decode position with only one message,
+ knowing reference nearby location, such as previously
+ calculated location, ground station, or airport location, etc.
+ (works with both airborne and surface position messages)
+
+ Args:
+ msg0 (string): even message (28 bytes hexadecimal string)
+ msg1 (string): odd message (28 bytes hexadecimal string)
+ t0 (int): timestamps for the even message
+ t1 (int): timestamps for the odd message
+
+ Returns:
+ (float, float): (latitude, longitude) of the aircraft
+ """
if 5 <= typecode(msg) <= 8:
return airborne_position_with_ref(msg, lat_ref, lon_ref)
@@ -252,8 +278,9 @@ def position_with_ref(msg, lat_ref, lon_ref):
def airborne_position_with_ref(msg, lat_ref, lon_ref):
- """Decode airborn position with one message,
- knowing previous reference location
+ """Decode airborne position with only one message,
+ knowing reference nearby location, such as previously calculated location,
+ ground station, or airport location, etc.
Args:
msg (string): even message (28 bytes hexadecimal string)
@@ -297,7 +324,7 @@ def surface_position(msg0, msg1, t0, t1):
def surface_position_with_ref(msg, lat_ref, lon_ref):
- """Decode surface position with one message,
+ """Decode surface position with only one message,
knowing reference nearby location, such as previously calculated location,
ground station, or airport location, etc.
@@ -338,6 +365,8 @@ def surface_position_with_ref(msg, lat_ref, lon_ref):
def _cprNL(lat):
+ """NL() function in CPR decoding
+ """
if lat == 0:
return 59
diff --git a/pyModeS/ehs.py b/pyModeS/ehs.py
index 26d9ea8..7d46bad 100644
--- a/pyModeS/ehs.py
+++ b/pyModeS/ehs.py
@@ -1,20 +1,20 @@
+# Copyright (C) 2016 Junzi Sun (TU Delft)
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
"""
A python package for decoding ModeS (DF20, DF21) messages.
-
-Copyright (C) 2016 Junzi Sun (TU Delft)
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
"""
from . import util
diff --git a/pyModeS/util.py b/pyModeS/util.py
index ee40b5d..89a3efd 100644
--- a/pyModeS/util.py
+++ b/pyModeS/util.py
@@ -1,22 +1,24 @@
+# Copyright (C) 2015 Junzi Sun (TU Delft)
+
+# This program is free software: you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation, either version 3 of the License, or
+# (at your option) any later version.
+
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+
+# You should have received a copy of the GNU General Public License
+# along with this program. If not, see .
+
+
"""
Common functions for ADS-B and Mode-S EHS decoder
-
-Copyright (C) 2015 Junzi Sun (TU Delft)
-
-This program is free software: you can redistribute it and/or modify
-it under the terms of the GNU General Public License as published by
-the Free Software Foundation, either version 3 of the License, or
-(at your option) any later version.
-
-This program is distributed in the hope that it will be useful,
-but WITHOUT ANY WARRANTY; without even the implied warranty of
-MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
-GNU General Public License for more details.
-
-You should have received a copy of the GNU General Public License
-along with this program. If not, see .
"""
+
import math
# the polynominal generattor code for CRC
@@ -32,10 +34,12 @@ def hex2bin(hexstr):
def bin2int(binstr):
+ """Convert a binary string to integer. """
return int(binstr, 2)
def hex2int(hexstr):
+ """Convert a hexdecimal string to integer. """
return int(hexstr, 16)
@@ -75,7 +79,9 @@ def crc(msg, encode=False):
def floor(x):
""" Mode-S floor function
- Defined as the greatest integer value k, such that k <= x
- eg.: floor(3.6) = 3, while floor(-3.6) = -4
+
+ Defined as the greatest integer value k, such that k <= x
+
+ eg.: floor(3.6) = 3, while floor(-3.6) = -4
"""
return int(math.floor(x))