blob: 6dadfb25dea3f5763976a824d8f0a97edcff1c6b [file] [log] [blame]
The Android Open Source Project52d4c302009-03-03 19:29:09 -08001//
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
18namespace android {
19
20#define ANDROID_PIPE_NAME "runtime"
21
22/*
23 * Hold simulator state.
24 */
25class Simulator {
26public:
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
115private:
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