
    gX                         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                 `   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          |           }|t          |          dk    rdS t          |           }||dk    rdS t          |           }||dk    rdS ||t          ||z
            dk    rdS dS )zCheck if a message is likely to be BDS code 5,0
    (Track and turn report)

    Args:
        msg (str): 28 hexdigits string

    Returns:
        bool: True or False
    F   r                     "   #   $   -   .   /   8   N2   iX     T)	r   allzeroshex2bindatawrongstatusroll50absgs50tas50)r   drollgstass        K/home/andy/.local/lib/python3.11/site-packages/pyModeS/decoder/bds/bds50.pyis50r&      sQ    s uv{3''((A !Q2&& u!RR(( u!RR(( u!RR(( u!RR(( u#;;Dc$ii"nnu	cB	~"s((u
**C
399u
S_3sRx==33F3F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  }|S )
zRoll angle, BDS 5,0 message

    Args:
        msg (str): 28 hexdigits string

    Returns:
        float: angle in degrees,
               negative->left wing down, positive->right wing down
    r   0Nr	      r
      r      r   r   r   intbin2intr   r!   signvalueangles        r%   r   r   >   sy     	v{3''((Ats{{tqt99DN1QrT7##E BJELr'   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 )zTrue track angle, BDS 5,0 message

    Args:
        msg (str): 28 hexdigits string

    Returns:
        float: angle in degrees to true north (from 0 to 360)
    r
   r)   Nr   r   r   i   Z   g      @r   ih  r-   )r   r!   r1   r2   trks        r%   trk50r7   W   s     	v{3''((Au||tqu::DN1RU8$$E 
"*u
C QwwCiJr'   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   dz  }|S )zGround speed, BDS 5,0 message

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: ground speed in knots
    r   r)   Nr   r   r*   r   r   r   r/   )r   r!   spds      r%   r   r   t   P     	v{3''((Au||t
.2b5
"
"Q
&CJr'   c                     t          j        t          j        |                     }|d         dk    rdS t          |d                   }t          j        |dd                   }|r|dz
  }|dz  d	z  }|S )
zTrack angle rate, BDS 5,0 message

    Args:
        msg (str): 28 hexdigits string

    Returns:
        float: angle rate in degrees/second
    r   r)   Nr   r   r   r+      r,   r-   r0   s        r%   rtrk50r>      sx     	v{3''((Au||tqu::DN1RU8$$E AIOELr'   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   dz  }|S )zAircraft true airspeed, BDS 5,0 message

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: true airspeed in knots
    r   r)   Nr   r   r*   r9   )r   r!   r$   s      r%   r    r       r;   r'   N)typingr    r   strboolr&   floatr   r7   r   r>   r     r'   r%   <module>rF      s              0c 0d 0 0 0 0f     2s x    :c huo    $     0s x      r'   