//
// Copyright 2005 The Android Open Source Project
//
// Miscellaneous definitions and declarations used for interaction
// between the device and the simulator.
//
// This header is included on both sides, so try not to include
// any other headers from here.
//
#ifndef _RUNTIME_SIMULATOR_H
#define _RUNTIME_SIMULATOR_H
#include "MessageStream.h"
#include "Shmem.h"
//#include "utils/RefBase.h"
#include "utils/Log.h"
namespace android {
#define ANDROID_PIPE_NAME "runtime"
/*
* Hold simulator state.
*/
class Simulator {
public:
Simulator(void);
~Simulator(void);
/*
* Commands exchanged between simulator and runtime.
*/
typedef enum Command {
kCommandUnknown = 0,
/* sent from sim to runtime */
kCommandGoAway, // sim says: go away, I'm busy
kCommandConfigDone, // sim says: done sending config
kCommandQuit, // quit nicely
kCommandNewPGroup, // process group management
kCommandKeyDown, // key has been pressed
kCommandKeyUp, // key has been released
kCommandTouch, // finger touched/lifted/dragged
/* sent from runtime to sim */
kCommandNewPGroupCreated, // send process group as argument
kCommandRuntimeReady, // we're initialized and about to start
kCommandUpdateDisplay, // display has been updated
kCommandVibrate, // vibrate on or off
} Command;
typedef enum TouchMode {
kTouchDown = 0,
kTouchUp = 1,
kTouchDrag = 2
} TouchMode;
/*
* Some parameters for config exchange.
*/
enum {
kDisplayConfigMagic = 0x44495350,
kValuesPerDisplay = 5,
};
/*
* Set up communication with parent process.
*/
//bool create(ParentProcess* pParent);
/*
* Set up communication with detached simulator.
*/
bool create(Pipe* reader, Pipe* writer);
/*
* Tell simulator that we're ready to go.
*/
void sendRuntimeReady(void);
/*
* Tell the simulator that a display has been refreshed.
*/
void sendDisplayUpdate(int displayIndex);
/*
* Tell the simulator to turn the vibrator on or off
*/
void sendVibrate(int vibrateOn);
/*
* Get a pointer to the shared memory for the Nth display.
*/
Shmem* getGraphicsBuffer(int displayIndex);
/*
* Return a copy of our input pipe so the event system can monitor
* it for pending activity.
*/
Pipe* getReadPipe(void) { return mStream.getReadPipe(); }
/*
* Retrieve the next command from the parent. Returns NO_ERROR
* if all is okay, WOULD_BLOCK if blocking is false and there
* are no pending commands, or INVALID_OPERATION if the simulator
* has disappeared.
*/
int getNextKey(int32_t* outKey, bool* outDown);
/*
* Log system callback function.
*/
static void writeLogMsg(const android_LogBundle* pBundle);
private:
bool finishCreate(void);
bool handleDisplayConfig(const long* pData, int length);
MessageStream mStream;
};
}; // namespace android
#endif // _RUNTIME_SIMULATOR_H