00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018 #ifndef CMOSRWIMPL_H
00019 #define CMOSRWIMPL_H
00020
00021 #include "smbios/IObserver.h"
00022 #include "smbios/ICmosRW.h"
00023 #include "ExceptionImpl.h"
00024
00025 namespace cmos
00026 {
00027
00028 DEFINE_EXCEPTION_EX( InvalidCmosRWModeImpl, cmos, InvalidCmosRWMode );
00029
00030 class Suppressable : public observer::IObservable
00031 {
00032 public:
00033 Suppressable();
00034 void suppressNotification(bool sup = true) const;
00035 void resumeNotification(bool doNotify = true) const;
00036 bool isNotifySuppressed() const;
00037 virtual ~Suppressable();
00038
00039 protected:
00040 mutable bool suppressNotify;
00041 };
00042
00043 class CmosRWFile : public ICmosRW, public Suppressable
00044 {
00045 public:
00046
00047 explicit CmosRWFile (const std::string &File);
00048 CmosRWFile& operator = (const CmosRWFile & source);
00049 virtual ~CmosRWFile();
00050
00051 u8 readByte( u32 indexPort, u32 dataPort, u32 offset ) const;
00052 void writeByte( u32 indexPort, u32 dataPort, u32 offset, u8 byte ) const;
00053
00054 protected:
00055 std::string fileName;
00056
00057 private:
00058 CmosRWFile (const CmosRWFile & source);
00059 };
00060
00061
00062 class CmosRWIo : public ICmosRW, public Suppressable
00063 {
00064 public:
00065
00066 explicit CmosRWIo ();
00067 CmosRWIo& operator = (const CmosRWIo & source);
00068 virtual ~CmosRWIo();
00069
00070 u8 readByte( u32 indexPort, u32 dataPort, u32 offset ) const;
00071 void writeByte( u32 indexPort, u32 dataPort, u32 offset, u8 byte ) const;
00072 private:
00073 CmosRWIo (const CmosRWIo & source);
00074 };
00075
00076 }
00077
00078
00079 #endif