
    g                         d dl mZ ddlmZ dedefdZdedee         fdZdedee         fdZ	dedee         fd	Z
dedee         fd
Zdedee         fdZdS )    )Optional   )commonmsgreturnc                 Z   t          j        |           rdS t          j        t          j        |                     }t          j        |ddd          rdS t          j        |ddd          rdS t          j        |dd	d
          rdS t          j        |ddd          rdS t          j        |ddd          rdS t          |           }||dk    rdS t          |           }||dk    rdS t          |           }||dk    rdS t          |           }|t          |          dk    rdS dS )zCheck if a message is likely to be BDS code 5,3
    (Air-referenced state vector)

    Args:
        msg (str): 28 hexdigits string

    Returns:
        bool: True or False
    F   r                     !   "   #   .   /   1   8   Ni  i@  T)
r   allzeroshex2bindatawrongstatusias53mach53tas53vr53abs)r   diasmachtasvrs         K/home/andy/.local/lib/python3.11/site-packages/pyModeS/decoder/bds/bds53.pyis53r&      sL    s uv{3''((A !Q2&& u!RR(( u!RR(( u!RR(( u!RR(( u
**C
399u#;;DD1HHu
**C
399u	cB	~#b''D..u4    c                    t          j        t          j        |                     }|d         dk    rdS t          |d                   }t          j        |dd                   }|r|dz
  }|dz  d	z  }|dk     rd
|z   }|S )zMagnetic heading, BDS 5,3 message

    Args:
        msg (str): 28 hexdigits string

    Returns:
        float: angle in degrees to true north (from 0 to 360)
    r   0Nr	      r
   i   Z   i   ih  r   r   r   intbin2int)r   r    signvaluehdgs        r%   hdg53r2   ?   s     	v{3''((Ats{{tqt99DN1QrT7##E 
"*s
C QwwCiJr'   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   }|S )zIndicated airspeed, DBS 5,3 message

    Args:
        msg (str): 28 hexdigits

    Returns:
        int: indicated arispeed in knots
    r
   r)   Nr   r   r   r   r   r.   )r   r    r!   s      r%   r   r   \   sK     	v{3''((Au||t
.2b5
"
"CJr'   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   dz  }|S )zuMACH number, DBS 5,3 message

    Args:
        msg (str): 28 hexdigits

    Returns:
        float: MACH number
    r   r)   Nr   r   gMb?r4   )r   r    r"   s      r%   r   r   n   sP     	v{3''((Au||t>!BrE(##e+DKr'   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   dz  }|S )zAircraft true airspeed, BDS 5,3 message

    Args:
        msg (str): 28 hexdigits

    Returns:
        float: true airspeed in knots
    r   r)   Nr   r   g      ?r4   )r   r    r#   s      r%   r   r      sP     	v{3''((Au||t
.2b5
"
"S
(CJr'   c                    t          j        t          j        |                     }|d         dk    rdS t          |d                   }t          j        |dd                   }|dk    s|dk    rdS |r|d	z
  n|}|d
z  }|S )zVertical rate

    Args:
        msg (str): 28 hexdigits (BDS60) string

    Returns:
        int: vertical rate in feet/minutes
    r   r)   Nr   0   r   r         @   r,   )r   r    r/   r0   rocs        r%   r   r      s     	v{3''((Au||tqu::DN1RU8$$EzzUc\\q*ECKKUE
"*CJr'   N)typingr    r   strboolr&   floatr2   r   r   r   r-   r    r'   r%   <module>rC      s              1c 1d 1 1 1 1hs x    :s x    $     $s x    $c hsm      r'   