
    g                    :    d dl mZ d dlZddlmZ 	 dddZddZdS )    )annotationsN   )commonFmsgstrsourceboolreturn7None | tuple[None | int, None | float, None | int, str]c                   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }t          j        |dd                   d	k    s t          j        |d
d                   d	k    rdS |dv rt          j        |dd                   }t          j        |d
d                   }|d	k    s|d	k    rd}d}d}n|d         dk    rdnd}	|dz
  }|dk    r|dz  }|d         dk    rdnd}
|dz
  }|dk    r|dz  }|	|z  }|
|z  }t          j        ||z  ||z  z             }t          |          }t          j        ||          }t          j	        |          }|d	k    r|n|dz   }|}d}d}n||d         dk    rd}n"t          j        |dd                   dz  dz  }|}t          j        |d
d                   }|d	k    rdn|dz
  }|dk    r||dz  }|d         dk    rd}nd}d}|d         dk    rdnd}|d         dk    rdnd}t          j        |dd                    }|d	k    rdnt          ||dz
  z  d!z            }|r||||||fS ||||fS )"a  Decode airborne velocity.

    Args:
        msg (str): 28 hexdigits string
        source (boolean): Include direction and vertical rate sources in return.
            Default to False.
            If set to True, the function will return six value instead of four.

    Returns:
        int, float, int, string, [string], [string]:
            - Speed (kt)
            - Angle (degree), either ground track or heading
            - Vertical rate (ft/min)
            - Speed type ('GS' for ground speed, 'AS' for airspeed)
            - [Optional] Direction source ('TRUE_NORTH' or 'MAGNETIC_NORTH')
            - [Optional] Vertical rate source ('BARO' or 'GNSS')

       4%s: Not a airborne velocity message, expecting TC=19    N            r      #   )         1r   r      ih  GS
TRUE_NORTH0i   g     v@IASTASMAGNETIC_NORTHGNSSBARO$   %   .   @   )
r   typecodeRuntimeErrorhex2binbin2intmathsqrtintatan2degrees)r   r   mbsubtypev_ewv_nsspd
trk_or_hdgvs	v_ew_sign	v_ns_signv_wev_sntrkspd_typedir_typehdg	vr_sourcevr_signvrs                       K/home/andy/.local/lib/python3.11/site-packages/pyModeS/decoder/bds/bds09.pyairborne_velocityrD      s   * sr!!BSH
 
 	
 
		RSS	!BnR!W%%G~bBi  A%%2b5	)B)Ba)G)Gt
 &~bBi((~bBi((199		CJBB fmmI!8D!||	 fmmI!8D!||	t#Dt#D)D4K$+566Cc((C*T4((C,s##C##sSyCJ b6S==CC.BrE++d2U:C
nR2Y''QhhddC!Ga<<CO1HCb6S==HHH#R&C--VIrFcMMbbqG	2b5		"	"Bqc'R!V"4r"9::B 
-
 	
 JH,,    None | floatc                "   t          j        |           }||dk    rt          d| z            t          j        |           }t	          |d                   rdnd}t          j        |dd                   }|d	k    s|d
k    rdS ||dz
  z  dz  S )zDecode the differece between GNSS and barometric altitude.

    Args:
        msg (str): 28 hexdigits string, TC=19

    Returns:
        int: Altitude difference in feet. Negative value indicates GNSS altitude
        below barometric altitude.

    Nr   r   P   r   r   Q   X   r      r   )r   r(   r)   r*   r.   r+   )r   tcmsgbinsignvalues        rC   altitude_diffrP   z   s     
		B	zR2XXBSH
 
 	
 ^C  FVBZ'22aDN6"R%=))EzzUc\\tuqy!B&&rE   )F)r   r   r   r	   r
   r   )r   r   r
   rF   )
__future__r   r,    r   rD   rP    rE   rC   <module>rT      sv    # " " " " "        #i- i- i- i- i-X' ' ' ' ' 'rE   