コード例 #1
0
ファイル: EmersonPsu.cs プロジェクト: silupher/ChassisManager
        /// <summary>
        /// Attempts to retrieve the Battery Fault Indicator. This method
        /// calls down to the Chassis Manager with SendReceive
        /// </summary>
        private BatteryFaultIndicatorPacket GetBatteryFaultIndicator(byte psuId)
        {
            // Initialize return packet
            BatteryFaultIndicatorPacket returnPacket = new BatteryFaultIndicatorPacket();
            returnPacket.CompletionCode = CompletionCode.UnspecifiedError;

            try
            {
                BatteryFaultIndicatorResponse myResponse = new BatteryFaultIndicatorResponse();
                myResponse = (BatteryFaultIndicatorResponse)this.SendReceive(this.PsuDeviceType, this.PsuId,
                    new PsuRequest((byte)PmBusCommand.FAULT_INDICATOR, (byte)PmBusResponseLength.FAULT_INDICATOR), typeof(BatteryFaultIndicatorResponse));

                if (myResponse.CompletionCode != 0)
                {
                    returnPacket.CompletionCode = (CompletionCode)myResponse.CompletionCode;
                    Tracer.WriteWarning("GetBatteryFaultIndicator Failure: Completion Code: {0}", returnPacket.CompletionCode);
                }
                else
                {
                    returnPacket.CompletionCode = CompletionCode.Success;

                    // Extract status bits from return word. Only top byte contains valid status
                    byte status = myResponse.BatteryFaultIndicator[0];
                    returnPacket.BatteryFault =         (byte)((status >> 7) & 0x1);
                    returnPacket.UnderVoltage =         (byte)((status >> 6) & 0x1);
                    returnPacket.OverCurrentCharge =    (byte)((status >> 5) & 0x1);
                    returnPacket.OverTemp =             (byte)((status >> 4) & 0x1);
                    returnPacket.CellBalanceNotGood =   (byte)((status >> 3) & 0x1);
                    returnPacket.OverVoltage =          (byte)((status >> 2) & 0x1);
                    returnPacket.OverCurrentDischarge = (byte)((status >> 1) & 0x1);
                }
            }
            catch (System.Exception ex)
            {
                returnPacket.CompletionCode = CompletionCode.UnspecifiedError;
                Tracer.WriteError("GetBatteryFaultIndicator Exception: " + ex);
            }
            return returnPacket;
        }
コード例 #2
0
ファイル: EmersonPsu.cs プロジェクト: silupher/ChassisManager
        /// <summary>
        /// Attempts to clear the Battery Fault Indicator. This method
        /// calls down to the Chassis Manager with SendReceive
        /// </summary>
        private CompletionCode ClearBatteryFaultIndicator(byte psuId)
        {
            CompletionCode returnPacket = new CompletionCode();
            returnPacket = CompletionCode.UnspecifiedError;

            // Command payload to clear fault indicators
            byte[] cmdPayload = clearBatteryFaultPayload;

            try
            {
                BatteryFaultIndicatorResponse myResponse = new BatteryFaultIndicatorResponse();
                myResponse = (BatteryFaultIndicatorResponse)this.SendReceive(this.PsuDeviceType, this.PsuId,
                    new PsuWordPayloadRequest((byte)PmBusCommand.FAULT_INDICATOR, cmdPayload, (byte)0), typeof(BatteryFaultIndicatorResponse));

                if (myResponse.CompletionCode != 0)
                {
                    returnPacket = (CompletionCode)myResponse.CompletionCode;
                    Tracer.WriteWarning("ClearBatteryFaultIndicator Failure: Completion Code: {0}", returnPacket);
                }
                else
                {
                    returnPacket = CompletionCode.Success;
                }
            }
            catch (System.Exception ex)
            {
                returnPacket = CompletionCode.UnspecifiedError;
                Tracer.WriteError("ClearBatteryFaultIndicator Exception: " + ex);
            }
            return returnPacket;
        }