
    go1                        d dl mZ ddlmZ ddZdd
Zd dZd dZd!dZddZ	d!dZ
d"dZd"dZd"dZd"dZd"dZd"dZd#dZd$dZdS )%    )annotations   )commonmsgstrreturntuple[None | float, str]c                   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          j        |d	d
                   }|dk    rdS |dz
  dz  }t          |d                   dk    rdnd}||fS )zDecode selected altitude.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: Selected altitude (ft)
        string: Source ('MCP/FCU' or 'FMS')

       :%s: Not a target state and status message, expecting TC=29    N      r   zs%s: ADS-B version 1 target state and status message does not contain selected altitude, use target altitude instead	      )NN/A      MCP/FCUFMSr   typecodeRuntimeErrorhex2binbin2intint)r   mbsubtypealt
alt_sources        K/home/andy/.local/lib/python3.11/site-packages/pyModeS/decoder/bds/bds62.pyselected_altituder"      s     sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||FHKL
 
 	

 .AbD
"
"C
axx{7b.C!"Q%jjAoo5J
?    tuple[None | int, str, str]c                   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          j        |dd	                   }|d
k    rdS |dk    rd}n|dk    rd}nd}t          |d	                   d
k    rdnd}dt          j        |dd                   dz  z   }|||fS )a9  Decode target altitude.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: Target altitude (ft)
        string: Source ('MCP/FCU', 'Holding mode' or 'FMS/RNAV')
        string: Altitude reference, either pressure altitude or barometric
           corrected altitude ('FL' or 'MSL')

    r   r   r   Nr   r   r   zs%s: ADS-B version 2 target state and status message does not contain target altitude, use selected altitude insteadr   r   )Nr    r      zHolding modeFMS/RNAVFLMSLi      d   r   )r   r   r   	alt_availr    alt_refr   s          r!   target_altituder0   0   s#    sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||FHKL
 
 	

 r!A#w''IA~~	a

	a#


"Q%jjAoodd5G
&.BrE++c1
1C
G##r#   
None | intc                B   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          j        |d	d
                   }|dk    rdS |S )a  Decode vertical mode.

    Value   Meaning
    -----   -----------------------
    1       "Acquiring" mode
    2       "Capturing" or "Maintaining" mode
    3       Reserved

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: Vertical mode

    r   r   r   Nr   r   r   zi%s: ADS-B version 2 target state and status message does not contain vertical mode, use vnav mode instead   r+   r   r   r   r   r   r   )r   r   r   vertical_modes       r!   r5   r5   ^   s    " sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||<>AB
 
 	

 N2be9--Mtr#   c                B   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          j        |d	d
                   }|dk    rdS |S )a  Decode horizontal mode.

    Value   Meaning
    -----   -----------------------
    1       "Acquiring" mode
    2       "Capturing" or "Maintaining" mode
    3       Reserved

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: Horizontal mode

    r   r   r   Nr   r   r   zk%s: ADS-B version 2 target state and status message does not contain horizontal mode, use lnav mode insteadr,      r   r4   )r   r   r   horizontal_modes       r!   r8   r8      s    " sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||=?BC
 
 	

 nR2Y//O!tr#   None | floatc                   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          |d                   dk    rdS t          |d	                   }|d
z   t          j        |dd                   z  dz  }|S )zDecode selected heading.

    Args:
        msg (str): 28 bytes hexadecimal message string

    Returns:
        float: Selected heading (degree)

    r   r   r   Nr   r   r   zo%s: ADS-B version 1 target state and status message does not contain selected heading, use target angle instead   r      '   g     ?r   )r   r   r   hdg_signhdgs        r!   selected_headingr@      s     sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||ACFG
 
 	

 2b6{{atr"v;;!|v~bBi888IFJr#   c                   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          j        |d	d
                   }|dk    rdS t          j        |d
d                   }|dk    rd}n|dk    rd}nd}t          |d                   rdnd}|||fS )a  Decode target heading/track angle.

    Args:
        msg (str): 28 bytes hexadecimal message string

    Returns:
        int: Target angle (degree)
        string: Angle type ('Heading' or 'Track')
        string: Source ('MCP/FCU', 'Autopilot Mode' or 'FMS/RNAV')

    r   r   r   Nr   r   r   zo%s: ADS-B version 2 target state and status message does not contain target angle, use selected heading insteadr,   r7   r   )Nr&   r   $   r   r'   zAutopilot moder(   HeadingTrackr   )r   r   r   angle_availangleangle_source
angle_types          r!   target_anglerI      s    sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||ACFG
 
 	

 .BrE++Kar"R%y))!$LLA+LL%L"%bf++:YY7
*l**r#   c                T   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          j        |d	d                   }|dk    rdS d
|dz
  dz  z   S )zDecode barometric pressure setting.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        float: Barometric pressure setting (millibars)

    r   r   r   Nr   r   r   z`%s: ADS-B version 1 target state and status message does not contain barometric pressure settingr   i   r   g?r4   )r   r   r   baros       r!   baro_pressure_settingrL      s     sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||2478
 
 	

 >"RU)$$Dqyyt$(c!!!r#   None | boolc                j   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          |d	                   dk    rdS t          |d
                   dk    rdnd}|S )zDecode autopilot engagement.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        bool: Autopilot engaged

    r   r   r   Nr   r   r   zY%s: ADS-B version 1 target state and status message does not contain autopilot engagement.   /   r   TFr   )r   r   r   	autopilots       r!   rQ   rQ     s     sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||+-01
 
 	

 2b6{{atBrFq((eIr#   c                j   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          |d	                   dk    rdS t          |d
                   dk    rdnd}|S )zwDecode VNAV mode.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        bool: VNAV mode engaged

    r   r   r   Nr   r   r   zi%s: ADS-B version 1 target state and status message does not contain vnav mode, use vertical mode insteadrO   0   r   TFr   )r   r   r   	vnav_modes       r!   rT   rT   @  s     sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||;=@A
 
 	

 2b6{{atBrFq((eIr#   c                j   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          |d	                   dk    rdS t          |d
                   dk    rdnd}|S )zDecode altitude hold mode.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        bool: Altitude hold mode engaged

    r   r   r   Nr   r   r   zW%s: ADS-B version 1 target state and status message does not contain altitude hold moderO   1   r   TFr   )r   r   r   alt_hold_modes       r!   altitude_hold_moderX   b  s     sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||)+./
 
 	

 2b6{{at2KK1,,DD%Mr#   c                j   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          |d	                   dk    rdS t          |d
                   dk    rdnd}|S )zDecode approach mode.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        bool: Approach mode engaged

    r   r   r   Nr   r   r   zR%s: ADS-B version 1 target state and status message does not contain approach moderO   3   r   TFr   )r   r   r   app_modes       r!   approach_moder\     s     sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||$&)*
 
 	

 2b6{{at2b6{{a''ttUHOr#   c                j   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          |d	                   dk    rdS t          |d
                   dk    rdnd}|S )zwDecode LNAV mode.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        bool: LNAV mode engaged

    r   r   r   Nr   r   r   zk%s: ADS-B version 1 target state and status message does not contain lnav mode, use horizontal mode insteadrO   5   r   TFr   )r   r   r   	lnav_modes       r!   r_   r_     s     sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||=?BC
 
 	

 2b6{{atBrFq((eIr#   c                L   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          |d                   dk    rd	nd
}nt          |d                   dk    rd	nd
}|S )zDecode TCAS/ACAS operational.

    Args:
        msg (str): 28 bytes hexadecimal message string

    Returns:
        bool: TCAS/ACAS operational

    r   r   r   Nr   r   r   rZ   TF4   r   r   )r   r   r   tcass       r!   tcas_operationalrc     s     sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||2b6{{a''ttU2b6{{a''ttUKr#   boolc                4   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          |d	                   dk    rd
nd}|S )zDecode TCAS/ACAS Resolution advisory.

    Args:
        msg (str): 28 bytes hexadecimal message string

    Returns:
        bool: TCAS/ACAS Resolution advisory active

    r   r   r   Nr   r   r   zQ%s: ADS-B version 2 target state and status message does not contain TCAS/ACAS RAra   TFr   )r   r   r   tcas_ras       r!   rf   rf     s     sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||#%()
 
 	

 "R&kkQ&&ddEGNr#   r   c                .   t          j        |           dk    rt          d| z            t          j        |           dd         }t          j        |dd                   }|dk    rt          d| z            t          j        |d	d
                   S )a  Decode aircraft emergency status.

    Value   Meaning
    -----   -----------------------
    0       No emergency
    1       General emergency
    2       Lifeguard/medical emergency
    3       Minimum fuel
    4       No communications
    5       Unlawful interference
    6       Downed aircraft
    7       Reserved

    Args:
        msg (str): 28 bytes hexadecimal message string

    Returns:
        int: Emergency status

    r   r   r   Nr   r   r   zU%s: ADS-B version 2 target state and status message does not contain emergency statusr^   8   r4   )r   r   r   s      r!   emergency_statusri     s    , sr!!H3N
 
 	
 
		RSS	!BnR!W%%G!||'),-
 
 	

 >"RU)$$$r#   N)r   r   r   r	   )r   r   r   r$   )r   r   r   r1   )r   r   r   r9   )r   rM   )r   rd   )r   r   )
__future__r   r&   r   r"   r0   r5   r8   r@   rI   rL   rQ   rT   rX   r\   r_   rc   rf   ri    r#   r!   <module>rl      sm   # " " " " "      ! ! ! !H+$ +$ +$ +$\$ $ $ $N$ $ $ $N       F++ ++ ++ ++\" " " "B   D   D   D   D   D   8   >%% %% %% %% %% %%r#   