00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019 #ifndef RBUIMPL_H
00020 #define RBUIMPL_H
00021
00022
00023 #include "smbios/compat.h"
00024
00025 #include "smbios/DellRbu.h"
00026 #include "FactoryImpl2.h"
00027 #include "ExceptionImpl.h"
00028 #include "RbuLowLevel.h"
00029
00030 # if defined(DEBUG_RBU)
00031 # define DCOUT(line) do { cout << line; } while(0)
00032 # define DCERR(line) do { cerr << line; } while(0)
00033 # else
00034 # define DCOUT(line) do {} while(0)
00035 # define DCERR(line) do {} while(0)
00036 # endif
00037
00038 namespace rbu
00039 {
00040 DEFINE_EXCEPTION_EX( RbuNotSupportedImpl, rbu, RbuNotSupported );
00041 DEFINE_EXCEPTION_EX( InvalidHdrFileImpl, rbu, InvalidHdrFile );
00042 DEFINE_EXCEPTION_EX( UnsupportedSystemForHdrFileImpl, rbu, UnsupportedSystemForHdrFile );
00043 DEFINE_EXCEPTION_EX( HdrFileIOErrorImpl, rbu, HdrFileIOError );
00044 DEFINE_EXCEPTION_EX( RbuDriverIOErrorImpl, rbu, RbuDriverIOError );
00045
00046 class RbuFactoryImpl : public factory::TFactory<RbuFactory>
00047 {
00048 public:
00049 RbuFactoryImpl();
00050 virtual ~RbuFactoryImpl() throw();
00051 virtual IRbuHdr *makeNew( std::string filename );
00052 };
00053
00054
00055 class RbuHdr : public virtual IRbuHdr
00056 {
00057 public:
00058
00059 explicit RbuHdr(std::string filename);
00060
00061
00062 virtual ~RbuHdr ();
00063
00064 virtual std::ostream & streamify(std::ostream & cout ) const;
00065
00066 virtual std::string getBiosVersion() const;
00067 virtual void getHdrVersion(unsigned int &major, unsigned int &minor) const;
00068 virtual const u32 *getSystemIdList() const;
00069 virtual void doUpdate() const;
00070 virtual FILE *getFh() const;
00071
00072 protected:
00073
00074 RbuHdr ();
00075
00076 private:
00077 RbuHdr (const RbuHdr &source);
00078 FILE *hdrFh;
00079 struct rbu_hdr_file_header header;
00080 u32 sysIdList[NUM_SYS_ID_IN_HDR + 1];
00081 };
00082
00083 packet_type getSupportedPacketType(void);
00084 void activateRbuToken();
00085 void cancelRbuToken();
00086 void checksumPacket(rbu_packet *pkt, size_t size);
00087 void createPacket(char *buffer, size_t bufSize, size_t imageSize);
00088 }
00089
00090 #endif