f1_game_packet_parser/packets/
session_history.rs1use super::u8_to_usize;
2use crate::constants::{ActualTyreCompound, LapValid, VisualTyreCompound};
3
4use binrw::BinRead;
5use serde::{Deserialize, Serialize};
6
7pub(super) const MAX_NUM_LAPS: usize = 100;
8pub(super) const MAX_NUM_TYRE_STINTS: usize = 8;
9
10#[non_exhaustive]
11#[derive(
12 BinRead, Eq, PartialEq, Ord, PartialOrd, Copy, Clone, Debug, Serialize, Deserialize,
13)]
14#[br(little, import(packet_format: u16))]
15pub struct LapHistoryData {
16 pub lap_time_ms: u32,
18 pub sector1_time_ms_part: u16,
20 #[br(if(packet_format >= 2023))]
23 pub sector1_time_minutes_part: u8,
24 pub sector2_time_ms_part: u16,
26 #[br(if(packet_format >= 2023))]
29 pub sector2_time_minutes_part: u8,
30 pub sector3_time_ms_part: u16,
32 #[br(if(packet_format >= 2023))]
35 pub sector3_time_minutes: u8,
36 #[br(map(LapValid::from_bits_retain))]
38 pub lap_valid_bit_flags: LapValid,
39}
40
41#[non_exhaustive]
42#[derive(
43 BinRead, Eq, PartialEq, Ord, PartialOrd, Copy, Clone, Debug, Serialize, Deserialize,
44)]
45#[br(little, import(_packet_format: u16))]
46pub struct TyreStintHistoryData {
47 #[br(map(u8_to_usize))]
49 pub end_lap: usize,
50 pub actual_tyre_compound: ActualTyreCompound,
52 pub visual_tyre_compound: VisualTyreCompound,
54}
55
56pub(super) fn get_lap_history_raw_size(packet_format: u16) -> usize {
57 if packet_format >= 2023 {
58 14
59 } else {
60 11
61 }
62}