blob: 10b82fac9bd59400e65b69fd6ea9d6b0a23fa415 [file] [log] [blame]
// Copyright 2018 The Chromium OS Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef HERMES_SOCKET_INTERFACE_H_
#define HERMES_SOCKET_INTERFACE_H_
#include <cstdint>
#include <base/callback.h>
namespace hermes {
// Interface representing a socket used to communicate with a modem.
class SocketInterface {
public:
using DataAvailableCallback = base::Callback<void(SocketInterface*)>;
enum class Type {
kQrtr,
kMbim,
};
virtual ~SocketInterface() {}
// Sets callback to run when data is available to be read from the
// socket. Note that the client is responsible for ensuring that the
// SocketInterface* passed as a parameter to the callback remains valid while
// the callback is being run.
virtual void SetDataAvailableCallback(DataAvailableCallback cb) = 0;
// Opens the socket. Returns whether socket is open at the end of the call.
virtual bool Open() = 0;
// Closes the socket.
virtual void Close() = 0;
// Returns whether the socket is valid to be read from and written to.
virtual bool IsValid() const = 0;
// Returns the type of socket represented by this class.
virtual Type GetType() const = 0;
// Requests a service start (e.g. a QMI or MBIM service). The caller is
// responsible for handling any (potentially asynchronous) response to the
// service request. Returns whether the request was successfully sent.
virtual bool StartService(uint32_t service,
uint16_t version_major,
uint16_t version_minor) = 0;
// Requests a service stop. The caller is responsible for handling any
// (potentially asynchronous) response to the service end request. Returns
// whether the request was successfully sent.
virtual bool StopService(uint32_t service,
uint16_t version_major,
uint16_t version_minor) = 0;
// Receives data into the provided data buffer. On success, returns the bytes
// received out. On failure, returns -1.
virtual int Recv(void* buf, size_t size, void* metadata) = 0;
// Sends provided data buffer. On success, returns the bytes sent out. On
// failure, returns -1.
virtual int Send(const void* data, size_t size, const void* metadata) = 0;
};
} // namespace hermes
#endif // HERMES_SOCKET_INTERFACE_H_