/// <summary> /// Get battery profile /// </summary> /// <returns>Battery profile</returns> public BatteryProfile GetBatteryProfile() { var batteryProfile = new BatteryProfile(); var response = _piJuice.ReadCommand(PiJuiceCommand.BatteryProfile, 14); batteryProfile.Capacity = new ElectricCharge(BinaryPrimitives.ReadInt16LittleEndian(response), ElectricChargeUnit.MilliampereHour); batteryProfile.ChargeCurrent = new ElectricCurrent(response[2] * 75 + 550, ElectricCurrentUnit.Milliampere); batteryProfile.TerminationCurrent = new ElectricCurrent(response[3] * 50 + 50, ElectricCurrentUnit.Milliampere); batteryProfile.RegulationVoltage = new ElectricPotential(response[4] * 20 + 3500, ElectricPotentialUnit.Millivolt); batteryProfile.CutOffVoltage = new ElectricPotential(response[5] * 20, ElectricPotentialUnit.Millivolt); batteryProfile.TemperatureCold = new Temperature(response[6], TemperatureUnit.DegreeCelsius); batteryProfile.TemperatureCool = new Temperature(response[7], TemperatureUnit.DegreeCelsius); batteryProfile.TemperatureWarm = new Temperature(response[8], TemperatureUnit.DegreeCelsius); batteryProfile.TemperatureHot = new Temperature(response[9], TemperatureUnit.DegreeCelsius); batteryProfile.NegativeTemperatureCoefficientB = (response[11] << 8) | response[10]; batteryProfile.NegativeTemperatureCoefficientResistance = new ElectricResistance(((response[13] << 8) | response[12]) * 10, ElectricResistanceUnit.Ohm); return(batteryProfile); }
private void ExportButton_Click(object sender, EventArgs e) { string filePath; using (var sf = new SaveFileDialog { Filter = FileFilters.XmlFilter }) { if (sf.ShowDialog() != DialogResult.OK) { return; } filePath = sf.FileName; } try { using (var fs = File.Open(filePath, FileMode.Create)) { var data = new BatteryProfile { Cutoff = CutoffUpDown.Value, Points = m_curveControls.Select(x => new BatteryProfilePoint { Percent = (byte)x.PercentsUpDown.Value, Voltage = x.VoltsUpDown.Value }).ToArray() }; Serializer.Write(data, fs); } } catch (Exception ex) { Trace.Warn(ex); InfoBox.Show("An error occurred during battery profile export."); } }
/// <summary> /// Set a custom battery profile /// </summary> /// <param name="batteryProfile">Custom battery profile</param> public void SetCustomBatteryProfile(BatteryProfile batteryProfile) { var data = new byte[14]; data[0] = (byte)((int)(batteryProfile.Capacity.MilliampereHours) & 0xFF); data[1] = (byte)(((int)(batteryProfile.Capacity.MilliampereHours) >> 8) & 0xFF); data[2] = (byte)Math.Round((batteryProfile.ChargeCurrent.Milliamperes - 550) / 75, 0, MidpointRounding.AwayFromZero); data[3] = (byte)Math.Round((batteryProfile.TerminationCurrent.Milliamperes - 50) / 50, 0, MidpointRounding.AwayFromZero); data[4] = (byte)Math.Round((batteryProfile.RegulationVoltage.Millivolts - 3500) / 20, 0, MidpointRounding.AwayFromZero); data[5] = (byte)Math.Round(batteryProfile.CutOffVoltage.Millivolts / 20, 0, MidpointRounding.AwayFromZero); data[6] = (byte)batteryProfile.TemperatureCold.DegreesCelsius; data[7] = (byte)batteryProfile.TemperatureCool.DegreesCelsius; data[8] = (byte)batteryProfile.TemperatureWarm.DegreesCelsius; data[9] = (byte)batteryProfile.TemperatureHot.DegreesCelsius; data[10] = (byte)(batteryProfile.NegativeTemperatureCoefficientB & 0xFF); data[11] = (byte)((batteryProfile.NegativeTemperatureCoefficientB >> 8) & 0xFF); int ntcResistance = (int)batteryProfile.NegativeTemperatureCoefficientResistance.Ohms / 10; data[12] = (byte)(ntcResistance & 0xFF); data[13] = (byte)((ntcResistance >> 8) & 0xFF); _piJuice.WriteCommandVerify(PiJuiceCommand.BatteryProfile, data); }