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