dji_log_parser/record/
smart_battery_group.rs1use binrw::binread;
2use serde::Serialize;
3#[cfg(target_arch = "wasm32")]
4use tsify_next::Tsify;
5
6#[binread]
7#[derive(Serialize, Debug)]
8#[serde(tag = "type")]
9#[br(little)]
10#[cfg_attr(target_arch = "wasm32", derive(Tsify))]
11pub enum SmartBatteryGroup {
12 #[br(magic = 1u8)]
13 SmartBatteryStatic(SmartBatteryStatic),
14 #[br(magic = 2u8)]
15 SmartBatteryDynamic(SmartBatteryDynamic),
16 #[br(magic = 3u8)]
17 SmartBatterySingleVoltage(SmartBatterySingleVoltage),
18}
19
20#[binread]
21#[derive(Serialize, Debug)]
22#[br(little)]
23#[cfg_attr(target_arch = "wasm32", derive(Tsify))]
24pub struct SmartBatteryStatic {
25 pub index: u8,
26 pub designed_capacity: u32,
27 pub loop_times: u16,
28 pub full_voltage: u32,
29 #[br(temp)]
30 _unknown: u16,
31 serial_number: u16,
32 #[br(temp)]
33 _unknown2: [u8; 10],
34 #[br(temp)]
35 _unknown3: [u8; 5],
36 pub version_number: [u8; 8],
37 pub battery_life: u8,
38 pub battery_type: u8,
39}
40
41#[binread]
42#[derive(Serialize, Debug)]
43#[br(little)]
44#[cfg_attr(target_arch = "wasm32", derive(Tsify))]
45pub struct SmartBatteryDynamic {
46 pub index: u8,
47 #[br(map = |x: i32| x as f32 / 1000.0)]
49 pub current_voltage: f32,
50 #[br(map = |x: i32| x.abs() as f32 / 1000.0)]
52 pub current_current: f32,
53 pub full_capacity: u32,
55 pub remained_capacity: u32,
57 #[br(map = |x: i16| x as f32 / 10.0)]
59 pub temperature: f32,
60 pub cell_count: u8,
61 pub capacity_percent: u8,
62 pub battery_state: u64,
63}
64
65#[binread]
66#[derive(Serialize, Debug)]
67#[br(little)]
68#[cfg_attr(target_arch = "wasm32", derive(Tsify))]
69pub struct SmartBatterySingleVoltage {
70 pub index: u8,
71 pub cell_count: u8,
72 #[br(count = cell_count, map = |xs: Vec<u16>| xs.into_iter().map(|x| x as f32 / 1000.0).collect())]
73 pub cell_voltages: Vec<f32>,
74}