diff options
Diffstat (limited to 'SrcShared/Hardware/EmHAL.h')
-rw-r--r-- | SrcShared/Hardware/EmHAL.h | 164 |
1 files changed, 164 insertions, 0 deletions
diff --git a/SrcShared/Hardware/EmHAL.h b/SrcShared/Hardware/EmHAL.h new file mode 100644 index 0000000..4f01752 --- /dev/null +++ b/SrcShared/Hardware/EmHAL.h @@ -0,0 +1,164 @@ +/* -*- mode: C++; tab-width: 4 -*- */ +/* ===================================================================== *\ + Copyright (c) 2000-2001 Palm, Inc. or its subsidiaries. + All rights reserved. + + This file is part of the Palm OS Emulator. + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. +\* ===================================================================== */ + +#ifndef EmHAL_h +#define EmHAL_h + +#include "Skins.h" // SkinElementType + +class EmHAL; +class EmPixMap; +class EmScreenUpdateInfo; + +enum +{ + kLEDOff = 0x00, + kLEDGreen = 0x01, + kLEDRed = 0x02 +}; + +enum EmUARTDeviceType +{ + kUARTBegin = 0, + + kUARTSerial = kUARTBegin, + kUARTIR, + kUARTBluetooth, + kUARTMystery, + kUARTNone, + + kUARTEnd +}; + +DEFINE_SCALAR_MODIFIERS (EmUARTDeviceType) + +class EmHALHandler +{ + public: + EmHALHandler (void); + virtual ~EmHALHandler (void); + + virtual void Cycle (Bool sleeping); + virtual void CycleSlowly (Bool sleeping); + + virtual void ButtonEvent (SkinElementType, Bool buttonIsDown); + virtual void TurnSoundOff (void); + virtual void ResetTimer (void); + virtual void ResetRTC (void); + + virtual int32 GetInterruptLevel (void); + virtual int32 GetInterruptBase (void); + + virtual Bool GetLCDScreenOn (void); + virtual Bool GetLCDBacklightOn (void); + virtual Bool GetLCDHasFrame (void); + virtual void GetLCDBeginEnd (emuptr&, emuptr&); + virtual void GetLCDScanlines (EmScreenUpdateInfo& info); + + virtual int32 GetDynamicHeapSize (void); + virtual int32 GetROMSize (void); + virtual emuptr GetROMBaseAddress (void); + virtual Bool ChipSelectsConfigured (void); + virtual int32 GetSystemClockFrequency (void); + virtual Bool GetCanStop (void); + virtual Bool GetAsleep (void); + + virtual uint8 GetPortInputValue (int); + virtual uint8 GetPortInternalValue (int); + virtual void PortDataChanged (int, uint8, uint8); + virtual void GetKeyInfo (int* numRows, int* numCols, + uint16* keyMap, Bool* rows); + + virtual Bool GetLineDriverState (EmUARTDeviceType); + virtual EmUARTDeviceType GetUARTDevice (int uartNum); + + virtual Bool GetDTR (int uartNum); + + virtual Bool GetVibrateOn (void); + virtual uint16 GetLEDState (void); + + protected: + EmHALHandler* GetNextHandler (void) { return fNextHandler; } + + private: + EmHALHandler* fNextHandler; + EmHALHandler* fPrevHandler; + + friend class EmHAL; +}; + + +class EmHAL +{ + public: + static void AddHandler (EmHALHandler*); + static void RemoveHandler (EmHALHandler*); + static void EnsureCoverage (void); + + static void Cycle (Bool sleeping); + static void CycleSlowly (Bool sleeping); + + static void ButtonEvent (SkinElementType, Bool buttonIsDown); + static void TurnSoundOff (void); + static void ResetTimer (void); + static void ResetRTC (void); + + static int32 GetInterruptLevel (void); + static int32 GetInterruptBase (void); + + static Bool GetLCDScreenOn (void); + static Bool GetLCDBacklightOn (void); + static Bool GetLCDHasFrame (void); + static void GetLCDBeginEnd (emuptr&, emuptr&); + static void GetLCDScanlines (EmScreenUpdateInfo& info); + + static int32 GetDynamicHeapSize (void); + static int32 GetROMSize (void); + static emuptr GetROMBaseAddress (void); + static Bool ChipSelectsConfigured (void); + static int32 GetSystemClockFrequency (void); + static Bool GetCanStop (void); + static Bool GetAsleep (void); + + static uint8 GetPortInputValue (int); + static uint8 GetPortInternalValue (int); + static void PortDataChanged (int, uint8, uint8); + static void GetKeyInfo (int* numRows, int* numCols, + uint16* keyMap, Bool* rows); + + static void LineDriverChanged (EmUARTDeviceType); + static Bool GetLineDriverState (EmUARTDeviceType); + static EmUARTDeviceType GetUARTDevice (int uartNum); + + static void GetLineDriverStates (Bool* states); + static void CompareLineDriverStates (const Bool* oldStates); + + static Bool GetDTR (int uartNum); + static void DTRChanged (int uartNum); + + static Bool GetVibrateOn (void); + static uint16 GetLEDState (void); + + private: + static EmHALHandler* GetRootHandler (void) { return fgRootHandler; } + static EmHALHandler* fgRootHandler; +}; + +inline void EmHAL::Cycle (Bool sleeping) +{ + EmAssert (EmHAL::GetRootHandler()); + EmHAL::GetRootHandler()->Cycle (sleeping); +} + + +#endif /* EmHAL_h */ |