/* Copyright (C) 2007-2008 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. */ #ifndef _android_qemud_h #define _android_qemud_h #include "vl.h" /* recent versions of the emulated Android system contains a background * daemon, named 'qemud', which runs as root and opens /dev/ttyS0 * * its purpose is to multiplex several communication channels between * the emulator and the system through a single serial port. * * each channel will be connected to a qemud-created unix socket on the * system, and to either a emulated character device or other facility in * the emulator. * * +--------> /dev/socket/qemud_gsm * emulated GSM <-----+ ______|_ * | emulated | | * +====> /dev/ttyS0 <===>| qemud |------> /dev/socket/qemud_gps * | |________| * emulated GPS <-----+ | * | +---------> other * | * other <--------------+ * * * this is done to overcome specific permission problems, as well as to add various * features that would require special kernel drivers otherwise even though they * only need a simple character channel. */ /* initialize the qemud support code in the emulator */ extern void android_qemud_init( void ); /* return the character driver state object that needs to be connected to the * emulated serial port where all multiplexed channels go through. */ extern CharDriverState* android_qemud_get_cs( void ); /* return the character driver state corresponding to a named qemud communication * channel. this can be used to send/data the channel. * returns 0 on success, or -1 in case of error */ extern int android_qemud_get_channel( const char* name, CharDriverState* *pcs ); /* set the character driver state for a given qemud communication channel. this * is used to attach the channel to an external char driver device directly. * returns 0 on success, -1 on error */ extern int android_qemud_set_channel( const char* name, CharDriverState* peer_cs ); /* list of known qemud channel names */ #define ANDROID_QEMUD_GSM "gsm" #define ANDROID_QEMUD_GPS "gps" #define ANDROID_QEMUD_CONTROL "control" /* add new channel names here when you need them */ #endif /* _android_qemud_h */