| // |
| // Copyright 2005 The Android Open Source Project |
| // |
| // Management of the simulated device. |
| // |
| |
| // For compilers that support precompilation, include "wx/wx.h". |
| #include "wx/wxprec.h" |
| |
| // Otherwise, include all standard headers |
| #ifndef WX_PRECOMP |
| # include "wx/wx.h" |
| #endif |
| #include "wx/image.h" |
| |
| #include "ExternalRuntime.h" |
| #include "MyApp.h" |
| #include "UserEvent.h" |
| #include "UserEventMessage.h" |
| |
| #include "SimRuntime.h" |
| #include "LocalBiChannel.h" |
| #include "utils.h" |
| |
| |
| using namespace android; |
| |
| /* |
| * Destructor. |
| */ |
| ExternalRuntime::~ExternalRuntime(void) |
| { |
| if (IsRunning()) { |
| // TODO: cause thread to stop, then Wait for it |
| } |
| printf("Sim: in ~ExternalRuntime()\n"); |
| } |
| |
| /* |
| * Create and run the thread. |
| */ |
| bool ExternalRuntime::StartThread(void) |
| { |
| if (Create() != wxTHREAD_NO_ERROR) { |
| fprintf(stderr, "Sim: ERROR: can't create ExternalRuntime thread\n"); |
| return false; |
| } |
| |
| Run(); |
| return true; |
| } |
| |
| /* |
| * Thread entry point. |
| * |
| * This just sits and waits for a new connection. It hands it off to the |
| * main thread and then goes back to waiting. |
| * |
| * There is currently no "polite" way to shut this down. |
| */ |
| void* ExternalRuntime::Entry(void) |
| { |
| LocalBiChannel lbic; |
| Pipe* reader; |
| Pipe* writer; |
| |
| reader = writer = NULL; |
| |
| if (!lbic.create(ANDROID_PIPE_NAME)) { |
| fprintf(stderr, "Sim: failed creating named pipe '%s'\n", |
| ANDROID_PIPE_NAME); |
| return NULL; |
| } |
| |
| while (lbic.listen(&reader, &writer)) { |
| /* |
| * Throw it over the wall. |
| */ |
| wxWindow* pMainFrame = ((MyApp*)wxTheApp)->GetMainFrame(); |
| |
| UserEventMessage* pUem = new UserEventMessage; |
| pUem->CreateExternalRuntime(reader, writer); |
| |
| UserEvent uev(0, (void*) pUem); |
| pMainFrame->AddPendingEvent(uev); |
| |
| reader = writer = NULL; |
| } |
| |
| printf("Sim: ExternalRuntime thread wants to bail\n"); |
| |
| return NULL; |
| } |
| |