public FruDevice(int deviceId, FruCommonHeader commonHeader, byte[] chassisInfoValue, byte[] boardInfoValue, byte[] productInfoValue, byte[] multiRecordInfoValue, byte completionCode) { this.CommonHeader = commonHeader; this.DeviceId = deviceId; this._completionCode = completionCode; if (chassisInfoValue != null) { this.ChassisInfo = new FruChassisInfo(chassisInfoValue); } if (boardInfoValue != null) { this.BoardInfo = new FruBoardInfo(boardInfoValue); } if (productInfoValue != null) { this.ProductInfo = new FruProductInfo(productInfoValue); } if (multiRecordInfoValue != null) { this.MultiRecordInfo = new FruMultiRecordInfo(multiRecordInfoValue); } }
internal FruDevice ReadFru(int deviceId, bool maxLenght = false) { byte countToRead = 8; //FRU common header size GetFruDataResponse fruResponse = IpmiSendReceive <GetFruDataResponse>(new GetFruDataRequest(0, 0, countToRead) { DeviceId = (byte)deviceId }); if (fruResponse.CompletionCode == 0x00) { FruCommonHeader commonHeader = new FruCommonHeader(fruResponse.DataReturned); ushort areaOffset; byte[] chassisInfo = null; byte[] boardInfo = null; byte[] productInfo = null; byte[] multiRecordInfo = null; byte completionCode = fruResponse.CompletionCode; areaOffset = commonHeader.ChassisInfoStartingOffset; if (areaOffset != 0) { chassisInfo = ReadFruAreaBytes(deviceId, areaOffset, maxLenght, out completionCode); } areaOffset = commonHeader.BoardAreaStartingOffset; if (areaOffset != 0) { boardInfo = ReadFruAreaBytes(deviceId, areaOffset, maxLenght, out completionCode); } areaOffset = commonHeader.ProductAreaStartingOffset; if (areaOffset != 0) { productInfo = ReadFruAreaBytes(deviceId, areaOffset, maxLenght, out completionCode); } areaOffset = commonHeader.MultiRecordAreaStartingOffset; if (areaOffset != 0) { multiRecordInfo = ReadFruAreaBytes(deviceId, areaOffset, maxLenght, out completionCode); } return(new FruDevice(deviceId, commonHeader, chassisInfo, boardInfo, productInfo, multiRecordInfo, completionCode)); } else { return(new FruDevice(fruResponse.CompletionCode)); } }
/// <summary> /// Read function /// </summary> /// <param name="offset"></param> /// <param name="length"></param> /// <returns></returns> public byte readChassisFru() { // Constants - TODO - move to config file ushort offset = (ushort)ConfigLoaded.ChassisStartingOffset; ushort length = (ushort)ConfigLoaded.ChassisFruLength; ushort internalUseSize = (ushort)ConfigLoaded.InternalUseSize; // bytes ushort chassisInfoSize = (ushort)ConfigLoaded.ChassisInfoSize; // bytes ushort boardInfoSize = (ushort)ConfigLoaded.BoardInfoSize; // bytes ushort productInfoSize = (ushort)ConfigLoaded.ProductInfoSize; // bytes try { ChassisFruReadResponse fruResponse = readRawChassisFru(offset, length); if (fruResponse.CompletionCode != 0 || fruResponse.DataReturned == null) { Tracer.WriteInfo("Error in CM Fru Read {0}", fruResponse.CompletionCode); this._completionCode = (byte)CompletionCode.UnspecifiedError; return(this._completionCode); } Ipmi.FruCommonHeader commonHeader = new Ipmi.FruCommonHeader(fruResponse.DataReturned); ushort areaOffset; byte[] chassisInfoBytes = new byte[chassisInfoSize]; byte[] boardInfoBytes = new byte[boardInfoSize]; byte[] productInfoBytes = new byte[productInfoSize]; areaOffset = commonHeader.ChassisInfoStartingOffset; if (areaOffset != 0) { Array.Copy(fruResponse.DataReturned, areaOffset, chassisInfoBytes, 0, chassisInfoSize); } areaOffset = commonHeader.BoardAreaStartingOffset; if (areaOffset != 0) { Array.Copy(fruResponse.DataReturned, areaOffset, boardInfoBytes, 0, boardInfoSize); } areaOffset = commonHeader.ProductAreaStartingOffset; if (areaOffset != 0) { Array.Copy(fruResponse.DataReturned, areaOffset, productInfoBytes, 0, productInfoSize); } this.PopulateChassisFru(commonHeader, chassisInfoBytes, boardInfoBytes, productInfoBytes, fruResponse.CompletionCode); } catch (Exception e) { Tracer.WriteError("CM Fru Read had exception {0}", e); this._completionCode = (byte)CompletionCode.UnspecifiedError; } return(this._completionCode); }
static byte slaveId = 0xEE; // slave address of Pikes Peak I2C Controller #endregion Fields #region Methods /// <summary> /// Read Tray Mezz Fru EEPROM /// </summary> internal static Ipmi.FruDevice GetMezzFruEeprom(int bladeId) { byte fruId = 0xA2; byte bytesToRead = 0x08; string cmd = "GetMezzFruEeprom"; Ipmi.SmbusWriteRead response = SendSmbusPayload(bladeId, channel, fruId, bytesToRead, new byte[2] { 0x00, 0x00 }, cmd); if (response.CompletionCode == 0x00) { Ipmi.FruCommonHeader commonHeader = new Ipmi.FruCommonHeader(response.RawData); byte[] chassisInfo = null; byte[] boardInfo = null; byte[] productInfo = null; byte[] multiRecordInfo = null; byte completionCode = response.CompletionCode; ushort areaOffset = commonHeader.ChassisInfoStartingOffset; if (areaOffset != 0) { chassisInfo = ReadFruAreaBytes(bladeId, channel, fruId, areaOffset, false, out completionCode); } areaOffset = commonHeader.BoardAreaStartingOffset; if (areaOffset != 0) { boardInfo = ReadFruAreaBytes(bladeId, channel, fruId, areaOffset, false, out completionCode); } areaOffset = commonHeader.ProductAreaStartingOffset; if (areaOffset != 0) { productInfo = ReadFruAreaBytes(bladeId, channel, fruId, areaOffset, false, out completionCode); } areaOffset = commonHeader.MultiRecordAreaStartingOffset; if (areaOffset != 0) { multiRecordInfo = ReadFruAreaBytes(bladeId, channel, fruId, areaOffset, false, out completionCode); } return new Ipmi.FruDevice(bladeId, commonHeader, chassisInfo, boardInfo, productInfo, multiRecordInfo, completionCode); } else { return new Ipmi.FruDevice(response.CompletionCode); } }
/// <summary> /// Read Tray Mezz Fru EEPROM /// </summary> internal static Ipmi.FruDevice GetMezzFruEeprom(int bladeId) { byte fruId = 0xA2; byte bytesToRead = 0x08; string cmd = "GetMezzFruEeprom"; Ipmi.SmbusWriteRead response = SendSmbusPayload(bladeId, channel, fruId, bytesToRead, new byte[2] { 0x00, 0x00 }, cmd); if (response.CompletionCode == 0x00) { Ipmi.FruCommonHeader commonHeader = new Ipmi.FruCommonHeader(response.RawData); byte[] chassisInfo = null; byte[] boardInfo = null; byte[] productInfo = null; byte[] multiRecordInfo = null; byte completionCode = response.CompletionCode; ushort areaOffset = commonHeader.ChassisInfoStartingOffset; if (areaOffset != 0) { chassisInfo = ReadFruAreaBytes(bladeId, channel, fruId, areaOffset, false, out completionCode); } areaOffset = commonHeader.BoardAreaStartingOffset; if (areaOffset != 0) { boardInfo = ReadFruAreaBytes(bladeId, channel, fruId, areaOffset, false, out completionCode); } areaOffset = commonHeader.ProductAreaStartingOffset; if (areaOffset != 0) { productInfo = ReadFruAreaBytes(bladeId, channel, fruId, areaOffset, false, out completionCode); } areaOffset = commonHeader.MultiRecordAreaStartingOffset; if (areaOffset != 0) { multiRecordInfo = ReadFruAreaBytes(bladeId, channel, fruId, areaOffset, false, out completionCode); } return(new Ipmi.FruDevice(bladeId, commonHeader, chassisInfo, boardInfo, productInfo, multiRecordInfo, completionCode)); } else { return(new Ipmi.FruDevice(response.CompletionCode)); } }
internal FruDevice ReadFru(DeviceType deviceType, bool maxLenght = false) { byte countToRead = 8; //FRU common header size ChassisFruReadResponse fruResponse = SendReceive<ChassisFruReadResponse>(deviceType, this.DeviceId, (new ChassisFruReadRequest(0, 0, countToRead))); if (fruResponse.CompletionCode == 0x00) { FruCommonHeader commonHeader = new FruCommonHeader(fruResponse.DataReturned); ushort areaOffset; byte[] chassisInfo = null; byte[] boardInfo = null; byte[] productInfo = null; byte[] multiRecordInfo = null; byte completionCode = fruResponse.CompletionCode; areaOffset = commonHeader.ChassisInfoStartingOffset; if (areaOffset != 0) { chassisInfo = ReadFruAreaBytes(deviceType, this.DeviceId, areaOffset, maxLenght, out completionCode); } areaOffset = commonHeader.BoardAreaStartingOffset; if (areaOffset != 0) { boardInfo = ReadFruAreaBytes(deviceType, this.DeviceId, areaOffset, maxLenght, out completionCode); } areaOffset = commonHeader.ProductAreaStartingOffset; if (areaOffset != 0) { productInfo = ReadFruAreaBytes(deviceType, this.DeviceId, areaOffset, maxLenght, out completionCode); } areaOffset = commonHeader.MultiRecordAreaStartingOffset; if (areaOffset != 0) { multiRecordInfo = ReadFruAreaBytes(deviceType, this.DeviceId, areaOffset, maxLenght, out completionCode); } return new FruDevice(this.DeviceId, commonHeader, chassisInfo, boardInfo, productInfo, multiRecordInfo, completionCode); } else { return new FruDevice(fruResponse.CompletionCode); } }
/// <summary> /// Complete constructor for CM Fru /// </summary> /// <param name="commonHeader"></param> /// <param name="chassisInfoBytes"></param> /// <param name="boardInfoBytes"></param> /// <param name="productInfoBytes"></param> /// <param name="completionCode"></param> public void PopulateChassisFru(Ipmi.FruCommonHeader commonHeader, byte[] chassisInfoBytes, byte[] boardInfoBytes, byte[] productInfoBytes, byte completionCode) { this.CommonHeader = commonHeader; this._completionCode = completionCode; if (chassisInfoBytes != null) { this.ChassisInfo = new Ipmi.FruChassisInfo(chassisInfoBytes); } if (boardInfoBytes != null) { this.BoardInfo = new Ipmi.FruBoardInfo(boardInfoBytes); } if (productInfoBytes != null) { this.ProductInfo = new Ipmi.FruProductInfo(productInfoBytes); } }
public FruDevice(int deviceId, FruCommonHeader commonHeader, byte[] chassisInfoValue, byte[] boardInfoValue, byte[] productInfoValue, byte completionCode) { this.CommonHeader = commonHeader; this.DeviceId = deviceId; this._completionCode = completionCode; if (chassisInfoValue != null) { this.ChassisInfo = new FruChassisInfo(chassisInfoValue); } if (boardInfoValue != null) { this.BoardInfo = new FruBoardInfo(boardInfoValue); } if (productInfoValue != null) { this.ProductInfo = new FruProductInfo(productInfoValue); } }
/// <summary> /// Read function /// </summary> /// <param name="offset"></param> /// <param name="length"></param> /// <returns></returns> public byte readChassisFru() { // Constants - TODO - move to config file ushort offset = (ushort) ConfigLoaded.ChassisStartingOffset; ushort length = (ushort) ConfigLoaded.ChassisFruLength; ushort internalUseSize = (ushort) ConfigLoaded.InternalUseSize; // bytes ushort chassisInfoSize = (ushort) ConfigLoaded.ChassisInfoSize; // bytes ushort boardInfoSize = (ushort) ConfigLoaded.BoardInfoSize; // bytes ushort productInfoSize = (ushort) ConfigLoaded.ProductInfoSize; // bytes try { ChassisFruReadResponse fruResponse = readRawChassisFru(offset, length); if (fruResponse.CompletionCode != 0 || fruResponse.DataReturned == null) { Tracer.WriteInfo("Error in CM Fru Read {0}", fruResponse.CompletionCode); this._completionCode = (byte)CompletionCode.UnspecifiedError; return this._completionCode; } Ipmi.FruCommonHeader commonHeader = new Ipmi.FruCommonHeader(fruResponse.DataReturned); ushort areaOffset; byte[] chassisInfoBytes = new byte[chassisInfoSize]; byte[] boardInfoBytes = new byte[boardInfoSize]; byte[] productInfoBytes = new byte[productInfoSize]; areaOffset = commonHeader.ChassisInfoStartingOffset; if (areaOffset != 0) { Array.Copy(fruResponse.DataReturned, areaOffset, chassisInfoBytes, 0, chassisInfoSize); } areaOffset = commonHeader.BoardAreaStartingOffset; if (areaOffset != 0) { Array.Copy(fruResponse.DataReturned, areaOffset, boardInfoBytes, 0, boardInfoSize); } areaOffset = commonHeader.ProductAreaStartingOffset; if (areaOffset != 0) { Array.Copy(fruResponse.DataReturned, areaOffset, productInfoBytes, 0, productInfoSize); } this.PopulateChassisFru(commonHeader, chassisInfoBytes, boardInfoBytes, productInfoBytes, fruResponse.CompletionCode); } catch (Exception e) { Tracer.WriteError("CM Fru Read had exception {0}", e); this._completionCode = (byte) CompletionCode.UnspecifiedError; } return this._completionCode; }
internal FruDevice ReadFru(int deviceId, bool maxLenght = false) { byte countToRead = 8; //FRU common header size GetFruDataResponse fruResponse = IpmiSendReceive<GetFruDataResponse>(new GetFruDataRequest(0, 0, countToRead) { DeviceId = (byte)deviceId }); if (fruResponse.CompletionCode == 0x00) { FruCommonHeader commonHeader = new FruCommonHeader(fruResponse.DataReturned); ushort areaOffset; byte[] chassisInfo = null; byte[] boardInfo = null; byte[] productInfo = null; byte completionCode = fruResponse.CompletionCode; areaOffset = commonHeader.ChassisInfoStartingOffset; if (areaOffset != 0) { chassisInfo = ReadFruAreaBytes(deviceId, areaOffset, maxLenght, out completionCode); } areaOffset = commonHeader.BoardAreaStartingOffset; if (areaOffset != 0) { boardInfo = ReadFruAreaBytes(deviceId, areaOffset, maxLenght, out completionCode); } areaOffset = commonHeader.ProductAreaStartingOffset; if (areaOffset != 0) { productInfo = ReadFruAreaBytes(deviceId, areaOffset, maxLenght, out completionCode); } return new FruDevice(deviceId, commonHeader, chassisInfo, boardInfo, productInfo, completionCode); } else { return new FruDevice(fruResponse.CompletionCode); } }