import { type CallOptions, type ChannelCredentials, Client, type ClientOptions, type ClientReadableStream, type ClientUnaryCall, type handleServerStreamingCall, type handleUnaryCall, type Metadata, type ServiceError, type UntypedServiceImplementation } from "@grpc/grpc-js";
import { DeviceEventArgs, GetCanChannelBusSpeedsRequest, GetCanChannelBusSpeedsResponse, GetCanFdBusSpeedsRequest, GetCanFdBusSpeedsResponse, GetClassicCanBusSpeedsRequest, GetClassicCanBusSpeedsResponse, GetDevicesRequest, GetDevicesResponse } from "./device_params";
import { Empty } from "./google/protobuf/empty";
/** The device service. This service is responsible for keeping track of all available devices. */
export type DeviceServiceService = typeof DeviceServiceService;
export declare const DeviceServiceService: {
    /**
     * Starts a subscription for device events.
     * @returns A stream of DeviceEventArgs messages.
     */
    readonly subscribeForEvents: {
        readonly path: "/deviceservice.DeviceService/SubscribeForEvents";
        readonly requestStream: false;
        readonly responseStream: true;
        readonly requestSerialize: (value: Empty) => Buffer;
        readonly requestDeserialize: (value: Buffer) => Empty;
        readonly responseSerialize: (value: DeviceEventArgs) => Buffer;
        readonly responseDeserialize: (value: Buffer) => DeviceEventArgs;
    };
    /**
     * Stops the subscription for device events.
     * @returns An empty response message.
     */
    readonly unsubscribeFromEvents: {
        readonly path: "/deviceservice.DeviceService/UnsubscribeFromEvents";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: Empty) => Buffer;
        readonly requestDeserialize: (value: Buffer) => Empty;
        readonly responseSerialize: (value: Empty) => Buffer;
        readonly responseDeserialize: (value: Buffer) => Empty;
    };
    /**
     * Gets all available devices.
     * @param request A request message with API preferences.
     * @returns A response message with all available devices.
     */
    readonly getDevices: {
        readonly path: "/deviceservice.DeviceService/GetDevices";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: GetDevicesRequest) => Buffer;
        readonly requestDeserialize: (value: Buffer) => GetDevicesRequest;
        readonly responseSerialize: (value: GetDevicesResponse) => Buffer;
        readonly responseDeserialize: (value: Buffer) => GetDevicesResponse;
    };
    /**
     * Gets the possible CAN channel bus speeds.
     * @param request A request message with information about the device to get bus speeds for.
     * @returns A response message with the possible CAN channel bus speeds.
     */
    readonly getCanChannelBusSpeeds: {
        readonly path: "/deviceservice.DeviceService/GetCanChannelBusSpeeds";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: GetCanChannelBusSpeedsRequest) => Buffer;
        readonly requestDeserialize: (value: Buffer) => GetCanChannelBusSpeedsRequest;
        readonly responseSerialize: (value: GetCanChannelBusSpeedsResponse) => Buffer;
        readonly responseDeserialize: (value: Buffer) => GetCanChannelBusSpeedsResponse;
    };
    /**
     * Gets the possible classic CAN bus speeds.
     * @param request A request message with information about the device to get bus speeds for.
     * @returns A response message with the possible classic CAN bus speeds.
     */
    readonly getClassicCanBusSpeeds: {
        readonly path: "/deviceservice.DeviceService/GetClassicCanBusSpeeds";
        readonly requestStream: false;
        readonly responseStream: false;
        readonly requestSerialize: (value: GetClassicCanBusSpeedsRequest) => Buffer;
        readonly requestDeserialize: (value: Buffer) => GetClassicCanBusSpeedsRequest;
        readonly responseSerialize: (value: GetClassicCanBusSpeedsResponse) => Buffer;
        readonly responseDeserialize: (value: Buffer) => GetClassicCanBusSpeedsResponse;
    };
    /**
     * Gets the possible CAN-FD bus speeds.
     * Returns a server stream rather than a single response because the number of valid
     * CAN-FD arbitration/data speed combinations can be large; streaming allows the client
     * to process results incrementally without waiting for the full set to be assembled.
     * @param request A request message with information about the device to get bus speeds for.
     * @returns A stream of response messages, each containing one CAN-FD bus speed combination.
     */
    readonly getCanFdBusSpeeds: {
        readonly path: "/deviceservice.DeviceService/GetCanFdBusSpeeds";
        readonly requestStream: false;
        readonly responseStream: true;
        readonly requestSerialize: (value: GetCanFdBusSpeedsRequest) => Buffer;
        readonly requestDeserialize: (value: Buffer) => GetCanFdBusSpeedsRequest;
        readonly responseSerialize: (value: GetCanFdBusSpeedsResponse) => Buffer;
        readonly responseDeserialize: (value: Buffer) => GetCanFdBusSpeedsResponse;
    };
};
export interface DeviceServiceServer extends UntypedServiceImplementation {
    /**
     * Starts a subscription for device events.
     * @returns A stream of DeviceEventArgs messages.
     */
    subscribeForEvents: handleServerStreamingCall<Empty, DeviceEventArgs>;
    /**
     * Stops the subscription for device events.
     * @returns An empty response message.
     */
    unsubscribeFromEvents: handleUnaryCall<Empty, Empty>;
    /**
     * Gets all available devices.
     * @param request A request message with API preferences.
     * @returns A response message with all available devices.
     */
    getDevices: handleUnaryCall<GetDevicesRequest, GetDevicesResponse>;
    /**
     * Gets the possible CAN channel bus speeds.
     * @param request A request message with information about the device to get bus speeds for.
     * @returns A response message with the possible CAN channel bus speeds.
     */
    getCanChannelBusSpeeds: handleUnaryCall<GetCanChannelBusSpeedsRequest, GetCanChannelBusSpeedsResponse>;
    /**
     * Gets the possible classic CAN bus speeds.
     * @param request A request message with information about the device to get bus speeds for.
     * @returns A response message with the possible classic CAN bus speeds.
     */
    getClassicCanBusSpeeds: handleUnaryCall<GetClassicCanBusSpeedsRequest, GetClassicCanBusSpeedsResponse>;
    /**
     * Gets the possible CAN-FD bus speeds.
     * Returns a server stream rather than a single response because the number of valid
     * CAN-FD arbitration/data speed combinations can be large; streaming allows the client
     * to process results incrementally without waiting for the full set to be assembled.
     * @param request A request message with information about the device to get bus speeds for.
     * @returns A stream of response messages, each containing one CAN-FD bus speed combination.
     */
    getCanFdBusSpeeds: handleServerStreamingCall<GetCanFdBusSpeedsRequest, GetCanFdBusSpeedsResponse>;
}
export interface DeviceServiceClient extends Client {
    /**
     * Starts a subscription for device events.
     * @returns A stream of DeviceEventArgs messages.
     */
    subscribeForEvents(request: Empty, options?: Partial<CallOptions>): ClientReadableStream<DeviceEventArgs>;
    subscribeForEvents(request: Empty, metadata?: Metadata, options?: Partial<CallOptions>): ClientReadableStream<DeviceEventArgs>;
    /**
     * Stops the subscription for device events.
     * @returns An empty response message.
     */
    unsubscribeFromEvents(request: Empty, callback: (error: ServiceError | null, response: Empty) => void): ClientUnaryCall;
    unsubscribeFromEvents(request: Empty, metadata: Metadata, callback: (error: ServiceError | null, response: Empty) => void): ClientUnaryCall;
    unsubscribeFromEvents(request: Empty, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: Empty) => void): ClientUnaryCall;
    /**
     * Gets all available devices.
     * @param request A request message with API preferences.
     * @returns A response message with all available devices.
     */
    getDevices(request: GetDevicesRequest, callback: (error: ServiceError | null, response: GetDevicesResponse) => void): ClientUnaryCall;
    getDevices(request: GetDevicesRequest, metadata: Metadata, callback: (error: ServiceError | null, response: GetDevicesResponse) => void): ClientUnaryCall;
    getDevices(request: GetDevicesRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: GetDevicesResponse) => void): ClientUnaryCall;
    /**
     * Gets the possible CAN channel bus speeds.
     * @param request A request message with information about the device to get bus speeds for.
     * @returns A response message with the possible CAN channel bus speeds.
     */
    getCanChannelBusSpeeds(request: GetCanChannelBusSpeedsRequest, callback: (error: ServiceError | null, response: GetCanChannelBusSpeedsResponse) => void): ClientUnaryCall;
    getCanChannelBusSpeeds(request: GetCanChannelBusSpeedsRequest, metadata: Metadata, callback: (error: ServiceError | null, response: GetCanChannelBusSpeedsResponse) => void): ClientUnaryCall;
    getCanChannelBusSpeeds(request: GetCanChannelBusSpeedsRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: GetCanChannelBusSpeedsResponse) => void): ClientUnaryCall;
    /**
     * Gets the possible classic CAN bus speeds.
     * @param request A request message with information about the device to get bus speeds for.
     * @returns A response message with the possible classic CAN bus speeds.
     */
    getClassicCanBusSpeeds(request: GetClassicCanBusSpeedsRequest, callback: (error: ServiceError | null, response: GetClassicCanBusSpeedsResponse) => void): ClientUnaryCall;
    getClassicCanBusSpeeds(request: GetClassicCanBusSpeedsRequest, metadata: Metadata, callback: (error: ServiceError | null, response: GetClassicCanBusSpeedsResponse) => void): ClientUnaryCall;
    getClassicCanBusSpeeds(request: GetClassicCanBusSpeedsRequest, metadata: Metadata, options: Partial<CallOptions>, callback: (error: ServiceError | null, response: GetClassicCanBusSpeedsResponse) => void): ClientUnaryCall;
    /**
     * Gets the possible CAN-FD bus speeds.
     * Returns a server stream rather than a single response because the number of valid
     * CAN-FD arbitration/data speed combinations can be large; streaming allows the client
     * to process results incrementally without waiting for the full set to be assembled.
     * @param request A request message with information about the device to get bus speeds for.
     * @returns A stream of response messages, each containing one CAN-FD bus speed combination.
     */
    getCanFdBusSpeeds(request: GetCanFdBusSpeedsRequest, options?: Partial<CallOptions>): ClientReadableStream<GetCanFdBusSpeedsResponse>;
    getCanFdBusSpeeds(request: GetCanFdBusSpeedsRequest, metadata?: Metadata, options?: Partial<CallOptions>): ClientReadableStream<GetCanFdBusSpeedsResponse>;
}
export declare const DeviceServiceClient: {
    new (address: string, credentials: ChannelCredentials, options?: Partial<ClientOptions>): DeviceServiceClient;
    service: typeof DeviceServiceService;
    serviceName: string;
};
