
    g                         d dl mZmZ ddlmZ dedefdZdedeee         ee	         f         fdZ
dedee	e	f         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Tuple   )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k    rdS t          |           \  }}||dk    rdS t          |           \  }}t          ||          dk    st          ||          dk     rdS dS )zCheck if a message is likely to be BDS code 4,4.

    Meteorological routine air report

    Args:
        msg (str): 28 hexdigits string

    Returns:
        bool: True or False

    F         #   $   .   /   0   1   2   3   8   r      N   <   iT)
r   allzeroshex2bindatawrongstatusbin2intwind44temp44minmax)r   dvwdwtemptemp2s         K/home/andy/.local/lib/python3.11/site-packages/pyModeS/decoder/bds/bds44.pyis44r(      s5    s uv{3''((A !Q2&& u!RR(( u!RR(( u!RR(( u ~a!f!!uC[[FB	~"s((u++KD%
4"D% 0 03 6 6u4    c                    t          j        t          j        |                     }t          |d                   }|sdS t          j        |dd                   }t          j        |dd                   dz  dz  }||fS )zWind speed and direction.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        (int, float): speed (kt), direction (degree)

    r   )NNr
      r         r   r   r   intr   )r   r"   statusspeed	directions        r'   r   r   8   s|     	v{3''((A1YYF zN1QrT7##EqBx((3.4I)r)   c                     t          j        t          j        |                     }t          |d                   }t          j        |dd                   }|r|dz
  }|dz  }|dz  }||fS )a1  Static air temperature.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        float, float: temperature and alternative temperature in Celsius degree.
            Note: Two values returns due to what seems to be an inconsistency
            error in ICAO 9871 (2008) Appendix A-67.

    r      "   i   g      ?g      ?r.   )r   r"   signvaluer%   temp_alternatives         r'   r   r   N   ss     	v{3''((Aqu::DN1RU8$$E 4<Du}!!!r)   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   }|S )zzStatic pressure.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: static pressure in hPa

    r5   0Nr   r   r   r   r   r   )r   r"   ps      r'   p44r=   i   sK     	v{3''((Au||tqBx  AHr)   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   dz  dz  }|S )zhumidity

    Args:
        msg (str): 28 hexdigits string

    Returns:
        float: percentage of humidity, [0 - 100] %
    r   r:   Nr   r   d   @   r;   )r   r"   hms      r'   hum44rB   }   sU     	v{3''((Au||t	"R%	!	!C	'"	,BIr)   c                     t          j        t          j        |                     }|d         dk    rdS t          j        |dd                   }|S )zTurbulence.

    Args:
        msg (str): 28 hexdigits string

    Returns:
        int: turbulence level. 0=NIL, 1=Light, 2=Moderate, 3=Severe

    r   r:   Nr   r   r;   )r   r"   turbs      r'   turb44rE      sK     	v{3''((Au||t>!BrE(##DKr)   N)typingr   r    r   strboolr(   r/   floatr   r   r=   rB   rE    r)   r'   <module>rL      s/   # " " " " " " "      *c *d * * * *Z hsmXe_<=    ," "eUl+ " " " "6S Xc]    (s x    &       r)   