00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
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