1 /* 2 * Copyright 2011 Google LLC 3 * SPDX-License-Identifier: MIT 4 */ 5 #ifndef __QEMU_PIPE_STREAM_H 6 #define __QEMU_PIPE_STREAM_H 7 8 /* This file implements an IOStream that uses a QEMU fast-pipe 9 * to communicate with the emulator's 'opengles' service. See 10 * <hardware/qemu_pipe.h> for more details. 11 */ 12 #include <stdlib.h> 13 14 #include <memory> 15 16 #include "gfxstream/guest/IOStream.h" 17 18 class QemuPipeStream : public gfxstream::guest::IOStream { 19 public: 20 typedef enum { ERR_INVALID_SOCKET = -1000 } QemuPipeStreamError; 21 22 explicit QemuPipeStream(size_t bufsize = 10000); 23 ~QemuPipeStream(); 24 25 virtual int connect(const char* serviceName = nullptr); 26 virtual uint64_t processPipeInit(); 27 28 virtual void* allocBuffer(size_t minSize); 29 virtual int commitBuffer(size_t size); 30 virtual const unsigned char* readFully(void* buf, size_t len); 31 virtual const unsigned char* commitBufferAndReadFully(size_t size, void* buf, size_t len); 32 virtual const unsigned char* read(void* buf, size_t* inout_len); 33 34 bool valid(); 35 int recv(void* buf, size_t len); 36 37 virtual int writeFully(const void* buf, size_t len); 38 39 private: 40 int m_sock; 41 size_t m_bufsize; 42 unsigned char* m_buf; 43 size_t m_read; 44 size_t m_readLeft; 45 QemuPipeStream(int sock, size_t bufSize); 46 }; 47 48 #endif 49