blob: 0951fb9b46f39ec3efa97efaeadba4403d442caf [file] [log] [blame]
// Copyright 2016 The Android Open Source Project
//
// This software is licensed under the terms of the GNU General Public
// License version 2, as published by the Free Software Foundation, and
// may be copied, distributed, and modified under those terms.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
#pragma once
#include "android/base/files/Stream.h"
#include "android/emulation/AndroidPipe.h"
#include <memory>
namespace android {
namespace emulation {
// AdbDebugPipe implements pipes for the 'qemud:adb-debug' pipe service
// which simply prints ADB debug messages to an optional output stream.
//
// Usage:
// 1) Create a new AdbDebugPipe::Service instance, passing an
// android::base::Stream instance, or nullptr to disable any output.
//
// 2) Call AndroidPipe::Service::add() to register it at emulation setup
// time.
//
class AdbDebugPipe : public AndroidPipe {
public:
using Stream = android::base::Stream;
// Service implementation class.
class Service : public AndroidPipe::Service {
public:
// Create new service instance. |output| is either nullptr
// (to disable output), or a valid android::base::Stream
// instance. NOTE: This transfers ownership of |output|
// to the service.
Service(Stream* output)
: AndroidPipe::Service("qemud:adb-debug"), mOutput(output) {}
virtual AndroidPipe* create(void* hwPipe, const char* args) override;
virtual bool canLoad() const override;
virtual AndroidPipe* load(void* hwPipe,
const char* args,
android::base::Stream* stream) override;
private:
std::unique_ptr<Stream> mOutput;
};
virtual void onGuestClose() override;
virtual unsigned onGuestPoll() const override;
virtual int onGuestRecv(AndroidPipeBuffer* buffers, int count) override;
virtual int onGuestSend(const AndroidPipeBuffer* buffers,
int count) override;
virtual void onGuestWantWakeOn(int flags) override;
virtual void onSave(android::base::Stream* stream) override;
private:
AdbDebugPipe(void* hwPipe, Service* service, Stream* output)
: AndroidPipe(hwPipe, service), mOutput(output) {}
Stream* mOutput = nullptr;
};
} // namespace emulation
} // namespace android