"""
@generated by mypy-protobuf.  Do not edit manually!
isort:skip_file
"""
import blickfeld.config.algorithm_pb2
import blickfeld.config.scan_pattern_pb2
import blickfeld.data.frame_pb2
import builtins
import google.protobuf.descriptor
import google.protobuf.internal.containers
import google.protobuf.message
import typing
import typing_extensions

DESCRIPTOR: google.protobuf.descriptor.FileDescriptor = ...

class Subscribe(google.protobuf.message.Message):
    """*
    This section describes the different streams to which it is possible to subscribe.
    A stream regularly provides data or status updates for the user. The events will not be pushed automatically to the BSL; the client has to retrieve them.
    """
    DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
    class PointCloud(google.protobuf.message.Message):
        """*
        This request is used for subscribing to a point cloud stream.
        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        REFERENCE_FRAME_FIELD_NUMBER: builtins.int
        FILTER_FIELD_NUMBER: builtins.int
        ALGORITHMS_FIELD_NUMBER: builtins.int
        PREPEND_ADVANCED_CONFIG_ALGORITHMS_FIELD_NUMBER: builtins.int
        @property
        def reference_frame(self) -> blickfeld.data.frame_pb2.Frame:
            """<blockquote>Introduced in BSL v2.10 and firmware v1.9</blockquote> If present, only fields that are set in this message and submessages will be present in the point cloud. If less fields are requested, the Protobuf encoding and network transport time can reduce significantly."""
            pass
        @property
        def filter(self) -> blickfeld.config.scan_pattern_pb2.ScanPattern.Filter:
            """<blockquote>Introduced in BSL v2.10 and firmware v1.9</blockquote> Refer to [ScanPattern.Filter](#blickfeld.protocol.config.ScanPattern.Filter). Overrides parameters of scan pattern."""
            pass
        @property
        def algorithms(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[blickfeld.config.algorithm_pb2.Algorithm]:
            """<blockquote>Introduced in BSL v2.17 and firmware v1.16</blockquote> Refer to [config.Algorithm](#blickfeld.protocol.config.Algorithm). Sets algorithms, which are initialized, configured for the stream and are executed on each frame in the post-processing on the device."""
            pass
        prepend_advanced_config_algorithms: builtins.bool = ...
        """<blockquote>Introduced in BSL v2.17 and firmware v1.16</blockquote> With the server.default_point_cloud_subscription algorithms can be persisted on the device and they are by default prepended to the list of sent algorithms in the subscribe request. This behaviour can be disabled with this field to e.g. disable or overwrite all algorithms."""

        def __init__(self,
            *,
            reference_frame : typing.Optional[blickfeld.data.frame_pb2.Frame] = ...,
            filter : typing.Optional[blickfeld.config.scan_pattern_pb2.ScanPattern.Filter] = ...,
            algorithms : typing.Optional[typing.Iterable[blickfeld.config.algorithm_pb2.Algorithm]] = ...,
            prepend_advanced_config_algorithms : typing.Optional[builtins.bool] = ...,
            ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal[u"filter",b"filter",u"prepend_advanced_config_algorithms",b"prepend_advanced_config_algorithms",u"reference_frame",b"reference_frame"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"algorithms",b"algorithms",u"filter",b"filter",u"prepend_advanced_config_algorithms",b"prepend_advanced_config_algorithms",u"reference_frame",b"reference_frame"]) -> None: ...

    class Status(google.protobuf.message.Message):
        """*
        This request is used for subscribing to a status stream.
        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        def __init__(self,
            ) -> None: ...

    class RawFile(google.protobuf.message.Message):
        """*
        > Introduced in BSL v2.13 and firmware v1.13

        This request is used for subscribing to a raw file stream.
        The requested stream is directly packed in the Blickfeld data format and only raw bytes are sent to the client, which it should write sequentially in a file.
        An [Unsubscribe](#blickfeld.protocol.stream.Unsubscribe) request with the same request data must be sent to properly end the file stream.
        The request raw file stream is ended with an [EndOfStream](#blickfeld.protocol.stream.Event.EndOfStream) event.
        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        POINT_CLOUD_FIELD_NUMBER: builtins.int
        @property
        def point_cloud(self) -> global___Subscribe.PointCloud:
            """Subscribe to a raw point cloud stream. Refer to [Subscribe.PointCloud](#blickfeld.protocol.stream.Subscribe.PointCloud)."""
            pass
        def __init__(self,
            *,
            point_cloud : typing.Optional[global___Subscribe.PointCloud] = ...,
            ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal[u"data",b"data",u"point_cloud",b"point_cloud"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"data",b"data",u"point_cloud",b"point_cloud"]) -> None: ...
        def WhichOneof(self, oneof_group: typing_extensions.Literal[u"data",b"data"]) -> typing.Optional[typing_extensions.Literal["point_cloud"]]: ...

    class IMU(google.protobuf.message.Message):
        """*
        > Introduced in BSL v2.18 and firmware v1.19

        The Cube has an on-board IMU, which can be used for e.g. mapping applications or static auto-leveling.
        A stream can be requested with this subscription.
        The default rate is approx. 1.125 kHz and is provided in bursts.
        The timestamps inside the protocol are synchronized to the ones in point cloud frames.
        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        PACKED_FORMAT_FIELD_NUMBER: builtins.int
        packed_format: builtins.bool = ...
        """Request a packed binary format. This is currently used for efficent Python numpy decoding."""

        def __init__(self,
            *,
            packed_format : typing.Optional[builtins.bool] = ...,
            ) -> None: ...
        def HasField(self, field_name: typing_extensions.Literal[u"packed_format",b"packed_format"]) -> builtins.bool: ...
        def ClearField(self, field_name: typing_extensions.Literal[u"packed_format",b"packed_format"]) -> None: ...

    class Developer(google.protobuf.message.Message):
        """*
        Internal use only
        """
        DESCRIPTOR: google.protobuf.descriptor.Descriptor = ...
        def __init__(self,
            ) -> None: ...

    POINT_CLOUD_FIELD_NUMBER: builtins.int
    STATUS_FIELD_NUMBER: builtins.int
    DEVELOPER_FIELD_NUMBER: builtins.int
    RAW_FILE_FIELD_NUMBER: builtins.int
    IMU_FIELD_NUMBER: builtins.int
    @property
    def point_cloud(self) -> global___Subscribe.PointCloud:
        """Refer to [Subscribe.PointCloud](#blickfeld.protocol.stream.Subscribe.PointCloud)"""
        pass
    @property
    def status(self) -> global___Subscribe.Status:
        """Refer to [Subscribe.Status](#blickfeld.protocol.stream.Subscribe.Status)"""
        pass
    @property
    def developer(self) -> global___Subscribe.Developer:
        """Refer to [Subscribe.Developer](#blickfeld.protocol.stream.Subscribe.Developer)"""
        pass
    @property
    def raw_file(self) -> global___Subscribe.RawFile:
        """Refer to [Subscribe.RawFile](#blickfeld.protocol.stream.Subscribe.RawFile)"""
        pass
    @property
    def imu(self) -> global___Subscribe.IMU:
        """<blockquote>Introduced in BSL v2.18 and firmware v1.19</blockquote> Refer to [Subscribe.IMU](#blickfeld.protocol.stream.Subscribe.IMU)"""
        pass
    def __init__(self,
        *,
        point_cloud : typing.Optional[global___Subscribe.PointCloud] = ...,
        status : typing.Optional[global___Subscribe.Status] = ...,
        developer : typing.Optional[global___Subscribe.Developer] = ...,
        raw_file : typing.Optional[global___Subscribe.RawFile] = ...,
        imu : typing.Optional[global___Subscribe.IMU] = ...,
        ) -> None: ...
    def HasField(self, field_name: typing_extensions.Literal[u"data",b"data",u"developer",b"developer",u"imu",b"imu",u"point_cloud",b"point_cloud",u"raw_file",b"raw_file",u"status",b"status"]) -> builtins.bool: ...
    def ClearField(self, field_name: typing_extensions.Literal[u"data",b"data",u"developer",b"developer",u"imu",b"imu",u"point_cloud",b"point_cloud",u"raw_file",b"raw_file",u"status",b"status"]) -> None: ...
    def WhichOneof(self, oneof_group: typing_extensions.Literal[u"data",b"data"]) -> typing.Optional[typing_extensions.Literal["point_cloud","status","developer","raw_file","imu"]]: ...
global___Subscribe = Subscribe
