def METHOD_NAME(self, timeout):
    with error_check("Cannot receive message"):
        frame = self.interface.recv(int(timeout * 1000))
    if frame is None:
        # timeout occurred
        return None, False
    msg = Message(
        arbitration_id=frame["id"],
        is_extended_id=frame["extended"],
        timestamp=frame["timestamp"],
        is_remote_frame=frame["rtr"],
        dlc=frame["dlc"],
        data=frame["data"][: frame["dlc"]],
        channel=frame["channel"],
        is_rx=(not frame["loopback"]),  # received if not loopback frame
    )
    return msg, False