95 lines
1.9 KiB
C++
95 lines
1.9 KiB
C++
//
|
|
// 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;
|
|
}
|
|
|