| // 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_ |