Source code for canlib.linlib.exceptions

from ..exceptions import DllException
from .enums import Error

error_text = {
    Error.NOMSG: "No messages available.",
    Error.NOTRUNNING: "NOTRUNNING",
    Error.RUNNING: "RUNNING",
    Error.MASTERONLY: "MASTERONLY",
    Error.SLAVEONLY: "SLAVEONLY",
    Error.PARAM: "Error in parameter.",
    Error.NOTFOUND: "Specified hardware not found. This error is reported when the LIN transceiver isn't powered up.",
    Error.NOMEM: "Out of memory.",
    Error.NOCHANNELS: "No channels avaliable.",
    Error.TIMEOUT: "Timeout occurred.",
    Error.NOTINITIALIZED: "Library not initialized.",
    Error.NOHANDLES: "Can't get handle.",
    Error.INVHANDLE: "Handle is invalid.",
    Error.CANERROR: "CANERROR",
    Error.ERRRESP: "There was an error response from the LIN interface.",
    Error.WRONGRESP: "The LIN interface response wasn't the expected one.",
    Error.DRIVER: "CAN driver type not supported.",
    Error.DRIVERFAILED: "DeviceIOControl failed.",
    Error.NOCARD: "The card was removed or not inserted.",
    Error.LICENSE: "The license is not valid.",
    Error.INTERNAL: "Internal error in the driver.",
    Error.NO_ACCESS: "Access denied.",
    Error.VERSION: "Function not supported in this version.",
    Error.NO_REF_POWER: "Function not supported in this version.",
    Error.NOT_IMPLEMENTED: "Requested feature/function not implemented in the device.",
}


def lin_error(status):
    """Create and return an exception object corresponding to `status`"""
    if status == Error.NOMSG:
        return LinNoMessageError()
    if status == Error.NOT_IMPLEMENTED:
        return LinNotImplementedError()
    else:
        return LinGeneralError(status)


[docs]class LinError(DllException): """Base class for exceptions raised by the linlib class Looks up the error text in the linlib dll and presents it together with the error code and the wrapper function that triggered the exception. """ @staticmethod def _get_error_text(status): msg = error_text.get(status, None) or "Unknown error text" msg += f' ({status})' return msg
[docs]class LinGeneralError(LinError): """A linlib error that does not (yet) have its own Exception .. warning:: Do not explicitly catch this error, instead catch `LinError`. Your error may at any point in the future get its own exception class, and so will no longer be of this type. The actual status code that raised any `LinError` can always be accessed through a `status` attribute. """ def __init__(self, status): self.status = status super().__init__()
[docs]class LinNoMessageError(LinError): """No messages where availible""" status = Error.NOMSG
[docs]class LinNotImplementedError(LinError): """Feature/function not implemented in the device""" status = Error.NOT_IMPLEMENTED