The Android Open Source Project | 52d4c30 | 2009-03-03 19:29:09 -0800 | [diff] [blame] | 1 | // |
| 2 | // Copyright 2005 The Android Open Source Project |
| 3 | // |
| 4 | // Miscellaneous definitions and declarations used for interaction |
| 5 | // between the device and the simulator. |
| 6 | // |
| 7 | // This header is included on both sides, so try not to include |
| 8 | // any other headers from here. |
| 9 | // |
| 10 | #ifndef _RUNTIME_SIMULATOR_H |
| 11 | #define _RUNTIME_SIMULATOR_H |
| 12 | |
| 13 | #include "MessageStream.h" |
| 14 | #include "Shmem.h" |
| 15 | //#include "utils/RefBase.h" |
| 16 | #include "utils/Log.h" |
| 17 | |
| 18 | namespace android { |
| 19 | |
| 20 | #define ANDROID_PIPE_NAME "runtime" |
| 21 | |
| 22 | /* |
| 23 | * Hold simulator state. |
| 24 | */ |
| 25 | class Simulator { |
| 26 | public: |
| 27 | Simulator(void); |
| 28 | ~Simulator(void); |
| 29 | |
| 30 | /* |
| 31 | * Commands exchanged between simulator and runtime. |
| 32 | */ |
| 33 | typedef enum Command { |
| 34 | kCommandUnknown = 0, |
| 35 | |
| 36 | /* sent from sim to runtime */ |
| 37 | kCommandGoAway, // sim says: go away, I'm busy |
| 38 | kCommandConfigDone, // sim says: done sending config |
| 39 | kCommandQuit, // quit nicely |
| 40 | kCommandNewPGroup, // process group management |
| 41 | kCommandKeyDown, // key has been pressed |
| 42 | kCommandKeyUp, // key has been released |
| 43 | kCommandTouch, // finger touched/lifted/dragged |
| 44 | |
| 45 | /* sent from runtime to sim */ |
| 46 | kCommandNewPGroupCreated, // send process group as argument |
| 47 | kCommandRuntimeReady, // we're initialized and about to start |
| 48 | kCommandUpdateDisplay, // display has been updated |
| 49 | kCommandVibrate, // vibrate on or off |
| 50 | } Command; |
| 51 | |
| 52 | typedef enum TouchMode { |
| 53 | kTouchDown = 0, |
| 54 | kTouchUp = 1, |
| 55 | kTouchDrag = 2 |
| 56 | } TouchMode; |
| 57 | |
| 58 | /* |
| 59 | * Some parameters for config exchange. |
| 60 | */ |
| 61 | enum { |
| 62 | kDisplayConfigMagic = 0x44495350, |
| 63 | kValuesPerDisplay = 5, |
| 64 | }; |
| 65 | |
| 66 | /* |
| 67 | * Set up communication with parent process. |
| 68 | */ |
| 69 | //bool create(ParentProcess* pParent); |
| 70 | |
| 71 | /* |
| 72 | * Set up communication with detached simulator. |
| 73 | */ |
| 74 | bool create(Pipe* reader, Pipe* writer); |
| 75 | |
| 76 | /* |
| 77 | * Tell simulator that we're ready to go. |
| 78 | */ |
| 79 | void sendRuntimeReady(void); |
| 80 | |
| 81 | /* |
| 82 | * Tell the simulator that a display has been refreshed. |
| 83 | */ |
| 84 | void sendDisplayUpdate(int displayIndex); |
| 85 | |
| 86 | /* |
| 87 | * Tell the simulator to turn the vibrator on or off |
| 88 | */ |
| 89 | void sendVibrate(int vibrateOn); |
| 90 | |
| 91 | /* |
| 92 | * Get a pointer to the shared memory for the Nth display. |
| 93 | */ |
| 94 | Shmem* getGraphicsBuffer(int displayIndex); |
| 95 | |
| 96 | /* |
| 97 | * Return a copy of our input pipe so the event system can monitor |
| 98 | * it for pending activity. |
| 99 | */ |
| 100 | Pipe* getReadPipe(void) { return mStream.getReadPipe(); } |
| 101 | |
| 102 | /* |
| 103 | * Retrieve the next command from the parent. Returns NO_ERROR |
| 104 | * if all is okay, WOULD_BLOCK if blocking is false and there |
| 105 | * are no pending commands, or INVALID_OPERATION if the simulator |
| 106 | * has disappeared. |
| 107 | */ |
| 108 | int getNextKey(int32_t* outKey, bool* outDown); |
| 109 | |
| 110 | /* |
| 111 | * Log system callback function. |
| 112 | */ |
| 113 | static void writeLogMsg(const android_LogBundle* pBundle); |
| 114 | |
| 115 | private: |
| 116 | bool finishCreate(void); |
| 117 | bool handleDisplayConfig(const long* pData, int length); |
| 118 | |
| 119 | MessageStream mStream; |
| 120 | }; |
| 121 | |
| 122 | }; // namespace android |
| 123 | |
| 124 | #endif // _RUNTIME_SIMULATOR_H |