MCPcopy Index your code
hub / github.com/FrameworkComputer/framework-system / collect_data

Method collect_data

framework_lib/src/smart_battery.rs:1021–1103  ·  view source on GitHub ↗
(&self, ec: &CrosEc, unseal_key: Option<u32>)

Source from the content-addressed store, hash-verified

1019 /// Collect raw battery data into a struct (for dumping or analysis)
1020 #[allow(clippy::field_reassign_with_default)]
1021 pub fn collect_data(&self, ec: &CrosEc, unseal_key: Option<u32>) -> EcResult<BatteryData> {
1022 let mut data = BatteryData::default();
1023
1024 // Basic registers (no unseal required)
1025 data.mode = self.read_i16(ec, SmartBatReg::Mode as u16)?;
1026 data.serial_num = self.read_i16(ec, SmartBatReg::SerialNum as u16)?;
1027 data.manufacture_date = self.read_i16(ec, SmartBatReg::ManufactureDate as u16)?;
1028 data.temperature = self.read_i16(ec, SmartBatReg::Temp as u16)?;
1029 data.voltage = self.read_i16(ec, SmartBatReg::Voltage as u16)?;
1030 // Per datasheet: 0x3C=Cell4, 0x3D=Cell3, 0x3E=Cell2, 0x3F=Cell1
1031 data.cell_voltage1 = self.read_i16(ec, SmartBatReg::CellVoltage1 as u16)?;
1032 data.cell_voltage2 = self.read_i16(ec, SmartBatReg::CellVoltage2 as u16)?;
1033 data.cell_voltage3 = self.read_i16(ec, SmartBatReg::CellVoltage3 as u16)?;
1034 data.cell_voltage4 = self.read_i16(ec, SmartBatReg::CellVoltage4 as u16)?;
1035
1036 // Read firmware version (MAC 0x0002, available in SEALED mode)
1037 data.firmware_version = self.mac_read(ec, 0x0002, 14).unwrap_or_default();
1038 data.cycle_count = self.read_i16(ec, SmartBatReg::CycleCount as u16)?;
1039 data.device_name = self.read_string(ec, SmartBatReg::DeviceName as u16)?;
1040 data.manufacturer_name = self.read_string(ec, SmartBatReg::ManufacturerName as u16)?;
1041 data.current = self.read_i16(ec, SmartBatReg::Current as u16)?;
1042 data.avg_current = self.read_i16(ec, SmartBatReg::AverageCurrent as u16)?;
1043 data.rel_state_of_charge = self.read_i16(ec, SmartBatReg::RelativeStateOfCharge as u16)?;
1044 data.abs_state_of_charge = self.read_i16(ec, SmartBatReg::AbsoluteStateOfCharge as u16)?;
1045 data.remaining_capacity = self.read_i16(ec, SmartBatReg::RemainingCapacity as u16)?;
1046 data.full_charge_capacity = self.read_i16(ec, SmartBatReg::FullChargeCapacity as u16)?;
1047 data.charging_current = self.read_i16(ec, SmartBatReg::ChargingCurrent as u16)?;
1048 data.charging_voltage = self.read_i16(ec, SmartBatReg::ChargingVoltage as u16)?;
1049 data.battery_status = self.read_i16(ec, SmartBatReg::BatteryStatus as u16)?;
1050 data.design_capacity = self.read_i16(ec, SmartBatReg::DesignCapacity as u16)?;
1051 data.design_voltage = self.read_i16(ec, SmartBatReg::DesignVoltage as u16)?;
1052 data.device_chemistry = self.read_string(ec, SmartBatReg::DeviceChemistry as u16)?;
1053
1054 // ManufacturerAccess block reads (typically readable in SEALED mode)
1055 data.state_of_health = self
1056 .read_bytes(ec, ManufReg::Soh as u16, 4)
1057 .unwrap_or_default();
1058 data.operation_status = self
1059 .read_i32(ec, ManufReg::OperationStatus as u16)
1060 .unwrap_or(0);
1061 data.safety_alert = self.read_i32(ec, ManufReg::SafetyAlert as u16).unwrap_or(0);
1062 data.safety_status = self
1063 .read_i32(ec, ManufReg::SafetyStatus as u16)
1064 .unwrap_or(0);
1065 data.pf_alert = self.read_i32(ec, ManufReg::PFAlert as u16).unwrap_or(0);
1066 data.pf_status = self.read_i32(ec, ManufReg::PFStatus as u16).unwrap_or(0);
1067 data.lifetime1 = self
1068 .read_bytes(ec, ManufReg::LifeTimeDataBlock1 as u16, 32)
1069 .unwrap_or_default();
1070 data.lifetime2 = self
1071 .read_bytes(ec, ManufReg::LifeTimeDataBlock2 as u16, 20)
1072 .unwrap_or_default();
1073 data.lifetime3 = self
1074 .read_block(ec, ManufReg::LifeTimeDataBlock3 as u16, 16)
1075 .unwrap_or_default();
1076 data.lifetime4 = self
1077 .read_block(ec, ManufReg::LifeTimeDataBlock4 as u16, 32)
1078 .unwrap_or_default();

Callers 2

dump_dataMethod · 0.80
dump_to_fileMethod · 0.80

Calls 8

read_i16Method · 0.80
mac_readMethod · 0.80
read_stringMethod · 0.80
read_bytesMethod · 0.80
read_i32Method · 0.80
read_blockMethod · 0.80
unsealMethod · 0.80
sealMethod · 0.80

Tested by

no test coverage detected