156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall/* 256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Copyright (C) 2011 The Android Open Source Project 356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* 456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Licensed under the Apache License, Version 2.0 (the "License"); 556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* you may not use this file except in compliance with the License. 656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* You may obtain a copy of the License at 756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* 856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* http://www.apache.org/licenses/LICENSE-2.0 956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* 1056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* Unless required by applicable law or agreed to in writing, software 1156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* distributed under the License is distributed on an "AS IS" BASIS, 1256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* See the License for the specific language governing permissions and 1456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall* limitations under the License. 1556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall*/ 1656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#ifndef __QEMU_PIPE_STREAM_H 1756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#define __QEMU_PIPE_STREAM_H 1856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 1956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall/* This file implements an IOStream that uses a QEMU fast-pipe 2056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall * to communicate with the emulator's 'opengles' service. See 2156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall * <hardware/qemu_pipe.h> for more details. 2256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall */ 2356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include <stdlib.h> 2456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#include "IOStream.h" 2556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 2656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallclass QemuPipeStream : public IOStream { 2756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallpublic: 2856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall typedef enum { ERR_INVALID_SOCKET = -1000 } QemuPipeStreamError; 2956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 3056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall explicit QemuPipeStream(size_t bufsize = 10000); 3156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall ~QemuPipeStream(); 3256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int connect(void); 3356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 3456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall virtual void *allocBuffer(size_t minSize); 3556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall virtual int commitBuffer(size_t size); 3656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall virtual const unsigned char *readFully( void *buf, size_t len); 3756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall virtual const unsigned char *read( void *buf, size_t *inout_len); 3856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 3956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall bool valid() { return m_sock >= 0; } 4056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int recv(void *buf, size_t len); 4156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 4256513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall virtual int writeFully(const void *buf, size_t len); 4356513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 4456513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hallprivate: 4556513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall int m_sock; 4656513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall size_t m_bufsize; 4756513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall unsigned char *m_buf; 4856513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall QemuPipeStream(int sock, size_t bufSize); 4956513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall}; 5056513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall 5156513f5ff4f3e851c5f0cb38dc8851d18616b3c0Jesse Hall#endif 52