dji_log_parser/record/
smart_battery_group.rs

1use 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    /// volts
48    #[br(map = |x: i32| x as f32 / 1000.0)]
49    pub current_voltage: f32,
50    // ampere
51    #[br(map = |x: i32| x.abs() as f32 / 1000.0)]
52    pub current_current: f32,
53    /// mAh
54    pub full_capacity: u32,
55    /// mAh
56    pub remained_capacity: u32,
57    /// degrees
58    #[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}