Source code for lannerpsp.sdk_gps

import logging
from ctypes import c_char_p

from .core import PSP, get_psp_exc_msg
from .exc import (
    PSPError,
    PSPNotExist,
    PSPNotSupport,
)
from .lmbinc import (
    ERR_NotExist,
    ERR_NotSupport,
    ERR_Success,
)
from .sdk_dll import DLL

logger = logging.getLogger(__name__)

SUPPORTED_PLATFORMS = ("V3S", "V6S",)
UNSUPPORTED_PLATFORMS = ("LEB-2680", "LEB-7242", "LEC-2290", "LEC-7230", "NCA-2510",)

DEFAULT_GPS_PORT = "/dev/ttyS1"


[docs] class GPS: """ Global Positioning System. :param bool check_platform: Set to :data:`True` to check if the platform supports this feature. Defaults to :data:`False` for better compatibility. :raises PSPNotSupport: This function is not supported (when ``check_platform`` is set to :data:`True`). :raises NotImplementedError: It has not been verified to run on this platform (when ``check_platform`` is set to :data:`True`). """ def __init__(self, check_platform: bool = False) -> None: self._version = DLL().get_version() if not check_platform: return if self._version.platform_id in SUPPORTED_PLATFORMS: pass elif self._version.platform_id in UNSUPPORTED_PLATFORMS: raise PSPNotSupport("Not supported on this platform") else: raise NotImplementedError
[docs] def search_port(self) -> str: """ Search GPS port. Example: .. code-block:: pycon >>> gps = GPS() >>> gps.search_port() '/dev/ttyS3' :return: the GPS port on the platform :rtype: str :raises PSPNotSupport: This function is not supported. :raises PSPNotExist: The device does not exist. :raises PSPError: General PSP functional error. """ str_gps_port = c_char_p(DEFAULT_GPS_PORT.encode()) with PSP() as psp: i_ret = psp.lib.LMB_GPS_SearchPort(str_gps_port) msg = get_psp_exc_msg("LMB_GPS_SearchPort", i_ret) if i_ret == ERR_Success: gps_port = str_gps_port.value.decode() return gps_port elif i_ret == ERR_NotSupport: raise PSPNotSupport(msg) elif i_ret == ERR_NotExist: raise PSPNotExist(msg) else: raise PSPError(msg)