Пример #1
0
        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));
            }
        }
Пример #3
0
        /// <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);
            }
        }
Пример #5
0
        /// <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));
            }
        }
Пример #6
0
        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);
            }
        }
Пример #7
0
        /// <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);
            }
        }
Пример #8
0
        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);
            }
        }
Пример #9
0
        /// <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;
        }
Пример #10
0
        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);
            }
        }