--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/emulator/emulatorbsp/inc/variant.h Tue Feb 02 01:39:10 2010 +0200
@@ -0,0 +1,192 @@
+// Copyright (c) 1998-2009 Nokia Corporation and/or its subsidiary(-ies).
+// All rights reserved.
+// This component and the accompanying materials are made available
+// under the terms of "Eclipse Public License v1.0"
+// which accompanies this distribution, and is available
+// at the URL "http://www.eclipse.org/legal/epl-v10.html".
+//
+// Initial Contributors:
+// Nokia Corporation - initial contribution.
+//
+// Contributors:
+//
+// Description:
+// wins\inc\variant.h
+// Wins Variant Header
+//
+//
+
+#ifndef __VA_STD_H__
+#define __VA_STD_H__
+
+#include <assp.h>
+#include "vwins.h"
+#include "nk_priv.h"
+#pragma warning(disable : 4201) // nonstandard extension used : nameless struct/union
+#include <mmsystem.h>
+#pragma warning(default : 4201)
+#include <kernel/kpower.h>
+
+#ifdef _DEBUG
+const TInt KDefaultDebugMask = 1<<KPANIC; //KPANIC, override this with "DebugMask 0" in EPOC.INI
+#else
+const TInt KDefaultDebugMask = 0;
+#endif
+
+typedef void (*TMediaChangeCallBack)(TAny*);
+
+class WinsTimer
+ {
+public:
+ enum
+ {
+ EDefaultPeriod = 5, // milliseconds
+ EMaxLag = 100, // milliseconds
+ };
+public:
+ WinsTimer();
+ void Init(TUint aPeriod);
+ void Enable();
+ inline TUint Period() const
+ {return iPeriod;}
+ inline void SetIdleThread()
+ {if (!iIdleThread) iIdleThread = NKern::CurrentThread();}
+ inline void Nobble(TUint aNobbleFactor)
+ {iNobbleNanos = aNobbleFactor * iPeriod;}
+ TInt SystemTime() const;
+ void SetSystemTime(TInt aTime);
+ void Standby();
+ void Wakeup();
+private:
+ void EventThread(NTimerQ& aTimerQ);
+ static DWORD WINAPI Thread(LPVOID);
+ static void CALLBACK Tick(UINT, UINT, DWORD, DWORD, DWORD);
+private:
+ TUint iPeriod;
+ TUint iNobbleNanos;
+ TInt iMaxLagTicks;
+ HANDLE iSemaphore;
+ UINT iTimer;
+ TInt iSuspend;
+ Int64 iTime;
+ NThread* iIdleThread;
+ TBool iStandby;
+ };
+
+class Properties
+ {
+ struct SEntry
+ {
+ char* iProperty;
+ char* iValue;
+ };
+public:
+ Properties();
+ const char* Append(const char* aProperty, const char* aValue);
+ const char* Replace(const char* aProperty, const char* aValue);
+ TInt GetString(const char* aProperty, const char*& aValue) const;
+ TInt GetInt(const char* aProperty, TInt& aValue) const;
+ TInt GetBool(const char* aProperty, TBool& aValue, TBool aDefaultValue=EFalse) const;
+ //
+ void Dump() const;
+private:
+ TInt Find(const char* aProperty) const;
+ const char* Insert(TInt aIndex, const char* aProperty, const char* aValue);
+private:
+ SEntry* iEntries;
+ TInt iCount;
+ TInt iSize;
+ };
+
+class Wins : public Asic
+ {
+public:
+ Wins();
+ //
+ TInt Init(TBool aRunExe);
+ inline void InstallUi(DWinsUiBase& aUi);
+ TInt EmulatorHal(TInt aFunction, TAny* a1, TAny* a2);
+private:
+ // initialisation
+ void Init1();
+ void Init3();
+ void AddressInfo(SAddressInfo& anInfo);
+
+ // power management
+ void Idle();
+
+ // timing
+ TInt MsTickPeriod();
+ TInt SystemTimeInSecondsFrom2000(TInt& aTime);
+ TInt SetSystemTimeInSecondsFrom2000(TInt aTime);
+
+ // HAL
+ TInt VariantHal(TInt aFunction, TAny* a1, TAny* a2);
+
+ // Machine configuration
+ TPtr8 MachineConfiguration();
+ const char* EmulatorMediaPath();
+
+ // Debug trace
+ void DebugPrint(const TDesC8& aDes);
+ TBool ErrorDialog(TError aType, const TDesC8& aPanic, TInt aVal);
+ void EarlyLogging(const char* aMessage1,const char* aMessage2);
+private:
+ TInt InitProperties(TBool aRunExe);
+ TInt DebugMask();
+ TUint32 KernelConfigFlags();
+ TInt ParseCapabilitiesArg(SCapabilitySet& aCapabilities, const char *aText);
+ void DisabledCapabilities(SCapabilitySet& aCapabilities);
+ void CalibrateCpuSpeed();
+ TInt SetCpuSpeed(TUint aSpeed);
+ TInt AddProperty(char* aProperty, const char* aEol);
+ TInt ProcessCommandLine(TBool aRunExe, char* aCDrive);
+ TInt LoadProperties();
+ TInt ReadProperties(char* aData);
+ TInt ReadIniFile(const char* aFileName, char*& aContents);
+ TInt SetupPaths();
+ TInt SetupMediaPath();
+ TInt SetupDrive(int aDrive, const char* aPath);
+ TInt MapFilename(const TDesC& aFilename, TDes& aBuffer) const;
+ TInt MapDrive(int aDrive, TDes& aBuffer) const;
+ HANDLE DebugOutput();
+ void PurgeImages();
+ TBool ConfigSpecificProperty(const char * aProperty);
+ TInt LoadConfigSpecificProperties(const char * pFile);
+ TBool ScreenSpecificProperty(const char * aProperty);
+
+private:
+ friend class DWinsPowerController;
+ DWinsUiBase* iUi;
+ WinsTimer iTimer;
+ Properties iProperties;
+ TUint iRealCpuSpeed;
+ TUint iCpuSpeed;
+ HANDLE iDebugOutput;
+ TBool iLogTimeStamp;
+ TBool iPurgedImages;
+ TBool iLogToDebugger;
+ TBool iLogToFile;
+ TBool iConfigPropertySet;
+ TInt iConfigId;
+
+ class DWinsPowerController* iPowerController;
+ // For MMC emulation
+ static TBool MediaDoorOpen;
+ static TInt CurrentPBusDevice;
+ static TAny* MediaChangeCallbackParam;
+ static TMediaChangeCallBack MediaChangeCallBackPtr;
+public:
+ static Wins* Self()
+ { return (Wins*) Arch::TheAsic();}
+ IMPORT_C void AssertWakeupSignal();
+ IMPORT_C void WakeupEvent();
+ IMPORT_C static TBool* MediaDoorOpenPtr();
+ IMPORT_C static TInt* CurrentPBusDevicePtr();
+ IMPORT_C static void SetMediaChangeCallBackPtr(TMediaChangeCallBack aPtr, TAny* aParam);
+ IMPORT_C static void MediaChangeCallBack();
+ };
+
+GLREF_D Wins TheVariant;
+
+#endif