// // 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