Main Page | Class Hierarchy | Class List | File List | Class Members | File Members

ipmi_inventory_parser.h

00001 
00002 /*
00003  * ipmi_inventory_parser.h
00004  *
00005  * Copyright (c) 2004 by FORCE Computers
00006  * Copyright (c) 2005 by ESO Technologies.
00007  *
00008  * This program is distributed in the hope that it will be useful,
00009  * but WITHOUT ANY WARRANTY; without even the implied warranty of
00010  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  This
00011  * file and program are licensed under a BSD style license.  See
00012  * the Copying file included with the OpenHPI distribution for
00013  * full licensing terms.
00014  *
00015  * Authors:
00016  *     Thomas Kanngieser <thomas.kanngieser@fci.com>
00017  *     Pierre Sangouard  <psangouard@eso-tech.com>
00018  */
00019 
00020 #ifndef dIpmiInventoryParser_h
00021 #define dIpmiInventoryParser_h
00022 
00023 
00024 #ifndef dArray_h
00025 #include "array.h"
00026 #endif
00027 
00028 #ifndef dIpmiTextBuffer
00029 #include "ipmi_text_buffer.h"
00030 #endif
00031 
00032 
00033 unsigned char IpmiChecksum( const unsigned char *data, int size );
00034 unsigned char IpmiChecksumMulti( const unsigned char *data, int size, unsigned char csum );
00035 
00036 enum tIpmiInventoryRecordType
00037 {
00038   eIpmiInventoryRecordTypeInternal,
00039   eIpmiInventoryRecordTypeChassis,
00040   eIpmiInventoryRecordTypeBoard,
00041   eIpmiInventoryRecordTypeProduct,
00042   eIpmiInventoryRecordTypeMultiRecord,
00043   eIpmiInventoryRecordTypeLast
00044 };
00045 
00046 const char *IpmiInventoryRecordTypeToString( tIpmiInventoryRecordType );
00047 
00048 #define eIpmiInventoryMultiRecordTypeOemFirst   0xc0
00049 #define eIpmiInventoryMultiRecordTypeOemLast    0xff
00050 
00051 class cIpmiInventoryField
00052 {
00053   cIpmiTextBuffer   m_ipmi_text_buffer;
00054   SaHpiIdrFieldT    m_idr_field;
00055 
00056 public:
00057   cIpmiInventoryField(SaHpiEntryIdT area_id,
00058                         SaHpiEntryIdT field_id,
00059                         SaHpiIdrFieldTypeT field_type);
00060   virtual ~cIpmiInventoryField();
00061 
00062   void                  SetAscii( char *str, int size );
00063   void                  SetBinary( const unsigned char *data, unsigned int size );
00064   SaHpiEntryIdT         FieldId() const { return m_idr_field.FieldId; }
00065   SaHpiIdrFieldTypeT    FieldType() const { return m_idr_field.Type; }
00066   SaHpiIdrFieldT        Field() const { return m_idr_field; }
00067 
00068   SaErrorT ReadTextBuffer( const unsigned char *&data, unsigned int &size );
00069 };
00070 
00071 class cIpmiInventoryArea
00072 {
00073 protected:
00074   SaHpiEntryIdT                 m_field_id;
00075   SaHpiIdrAreaHeaderT           m_area_header;
00076   cArray<cIpmiInventoryField>   m_field_array;
00077 
00078 public:
00079   cIpmiInventoryArea(SaHpiEntryIdT area_id);
00080   virtual ~cIpmiInventoryArea();
00081 
00082   cIpmiInventoryField *FindIdrField( SaHpiIdrFieldTypeT fieldtype,
00083                                      SaHpiEntryIdT fieldid );
00084 
00085   SaErrorT GetIdrField( SaHpiIdrFieldTypeT &fieldtype,
00086                         SaHpiEntryIdT &fieldid,
00087                                 SaHpiEntryIdT &nextfieldid,
00088                         SaHpiIdrFieldT &field );
00089 
00090   SaHpiEntryIdT         AreaId() const { return m_area_header.AreaId; }
00091   SaHpiIdrAreaTypeT     AreaType() const { return m_area_header.Type; }
00092   SaHpiIdrAreaHeaderT   AreaHeader() const { return m_area_header; }
00093 
00094 
00095   virtual SaErrorT     ParseFruArea( const unsigned char *data, unsigned int size ) = 0;
00096 
00097 
00098 };
00099 
00100 class cIpmiInventoryAreaInternal : public cIpmiInventoryArea
00101 {
00102 
00103 public:
00104   cIpmiInventoryAreaInternal(SaHpiEntryIdT area_id);
00105   virtual ~cIpmiInventoryAreaInternal();
00106 
00107   virtual SaErrorT     ParseFruArea( const unsigned char *data, unsigned int size );
00108 };
00109 
00110 class cIpmiInventoryAreaMultiRecord : public cIpmiInventoryArea
00111 {
00112 
00113 public:
00114   cIpmiInventoryAreaMultiRecord(SaHpiEntryIdT area_id);
00115   virtual ~cIpmiInventoryAreaMultiRecord();
00116 
00117   virtual SaErrorT     ParseFruArea( const unsigned char *data, unsigned int size );
00118 };
00119 
00120 class cIpmiInventoryAreaChassis : public cIpmiInventoryArea
00121 {
00122 
00123 public:
00124   cIpmiInventoryAreaChassis(SaHpiEntryIdT area_id);
00125   virtual ~cIpmiInventoryAreaChassis();
00126 
00127   virtual SaErrorT     ParseFruArea( const unsigned char *data, unsigned int size );
00128 };
00129 
00130 class cIpmiInventoryAreaBoard : public cIpmiInventoryArea
00131 {
00132 
00133 public:
00134   cIpmiInventoryAreaBoard(SaHpiEntryIdT area_id);
00135   virtual ~cIpmiInventoryAreaBoard();
00136 
00137   virtual SaErrorT     ParseFruArea( const unsigned char *data, unsigned int size );
00138 };
00139 
00140 class cIpmiInventoryAreaProduct : public cIpmiInventoryArea
00141 {
00142 
00143 public:
00144   cIpmiInventoryAreaProduct(SaHpiEntryIdT area_id);
00145   virtual ~cIpmiInventoryAreaProduct();
00146 
00147   virtual SaErrorT     ParseFruArea( const unsigned char *data, unsigned int size );
00148 };
00149 
00150 class cIpmiInventoryParser
00151 {
00152   SaHpiIdrInfoT                 m_idr_info;
00153   SaHpiEntryIdT                 m_area_id;
00154   cArray<cIpmiInventoryArea>    m_area_array;
00155 
00156 public:
00157   cIpmiInventoryParser();
00158   virtual ~cIpmiInventoryParser();
00159 
00160   cIpmiInventoryArea *AllocArea( SaHpiEntryIdT area_id, tIpmiInventoryRecordType type );
00161 
00162 
00163   virtual SaErrorT     ParseFruInfo( const unsigned char *data, unsigned int size, unsigned int idr_id );
00164 
00165   cIpmiInventoryArea *FindIdrArea( SaHpiIdrAreaTypeT areatype, SaHpiEntryIdT areaid );
00166 
00167 
00168   virtual SaErrorT GetIdrInfo( SaHpiIdrIdT &idrid, SaHpiIdrInfoT &idrinfo );
00169 
00170   virtual SaErrorT GetIdrAreaHeader( SaHpiIdrIdT &idrid,
00171                                      SaHpiIdrAreaTypeT &areatype,
00172                                                  SaHpiEntryIdT &areaid,
00173                                      SaHpiEntryIdT &nextareaid,
00174                                      SaHpiIdrAreaHeaderT &header );
00175 
00176   virtual SaErrorT AddIdrArea( SaHpiIdrIdT &idrid,
00177                                SaHpiIdrAreaTypeT &areatype,
00178                                            SaHpiEntryIdT &areaid );
00179 
00180   virtual SaErrorT DelIdrArea( SaHpiIdrIdT &idrid, SaHpiEntryIdT &areaid );
00181 
00182   virtual SaErrorT GetIdrField( SaHpiIdrIdT &idrid,
00183                                 SaHpiEntryIdT &areaid,
00184                                 SaHpiIdrFieldTypeT &fieldtype,
00185                                 SaHpiEntryIdT &fieldid,
00186                                             SaHpiEntryIdT &nextfieldid,
00187                                 SaHpiIdrFieldT &field );
00188 
00189   virtual SaErrorT AddIdrField( SaHpiIdrIdT &idrid, SaHpiIdrFieldT &field );
00190 
00191   virtual SaErrorT SetIdrField( SaHpiIdrIdT &idrid, SaHpiIdrFieldT &field );
00192 
00193   virtual SaErrorT DelIdrField( SaHpiIdrIdT &idrid,
00194                                 SaHpiEntryIdT &areaid,
00195                                 SaHpiEntryIdT &fieldid );
00196 
00197 };
00198 
00199 
00200 #endif

Generated on Thu Mar 4 19:33:14 2010 for New Simulator by  doxygen 1.4.4