125 lines
3.2 KiB
C++
125 lines
3.2 KiB
C++
//
|
|
// 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
|