#fit #data-transfer #flexible #interoperable #sport #binary #read

fit_file

读取 FIT (灵活且互操作性数据传输) 文件

16 个版本

0.6.0 2023年12月5日
0.5.0 2021年7月14日
0.4.0 2021年6月25日
0.3.5 2021年6月23日
0.1.4 2021年4月26日

#507解析器实现


fit2gpx 中使用

MIT 许可协议

160KB
3K SLoC

fit_file

使用 Rust 编写的 FIT 文件解析器。FIT (Flexible and Interoperable Data Transfer) 是一种常用的二进制文件格式,用于交换健身数据,例如运动手表或自行车计算机中的数据。

此实现使用回调,如下面的示例所示。回调是一种处理大文件的有效方法,因为它允许我们避免返回包含每个已处理记录的大型数组。

示例

use fit_file as fit;
use fit_file::fit_file;

/// Called for each record message as it is processed.
fn callback(timestamp: u32, global_message_num: u16, _local_msg_type: u8, _message_index: u16, fields: Vec<crate::fit_file::FitFieldValue>, data: &mut Context) {
    if global_message_num == crate::fit::GLOBAL_MSG_NUM_SESSION {
        let msg = crate::fit::FitSessionMsg::new(fields);
        let sport_names = crate::fit::init_sport_name_map();
        let sport_id = msg.sport.unwrap();

        println!("Sport: {}", sport_names.get(&sport_id).unwrap());
    }
    else if global_message_num == crate::fit::GLOBAL_MSG_NUM_RECORD {
        let msg = crate::fit::FitRecordMsg::new(fields);

        data.num_records_processed += 1;

        println!("Timestamp: {} Latitude: {} Longitude: {}", timestamp, crate::fit::semicircles_to_degrees(msg.position_lat.unwrap()), crate::fit::semicircles_to_degrees(msg.position_long.unwrap()));
    }
}

/// Context structure. An instance of this will be passed to the parser and ultimately to the callback function so we can use it for whatever.
struct Context {
    num_records_processed: u16,
}

impl Context {
    pub fn new() -> Self {
        let context = Context{ num_records_processed: 0 };
        context
    }
}

fn main() {
    let file = std::fs::File::open("tests/20210218_zwift.fit").unwrap();
    let mut reader = std::io::BufReader::new(file);
    let mut context = Context::new();
    crate::fit::read(&mut reader, callback, &mut context).unwrap();
    println!("{} records processed", context.num_records_processed);
}

当前状态

正在开发中。

修订历史

  • 0.5.0 - 支持长度消息。
  • 0.4.0 - 返回开发者定义的字段,尽管实际上并没有对它们做任何事情。
  • 0.3.0 - 修复了解释规范中的许多问题。现在可以通过多个 Garmin 测试文件进行测试,而不仅仅是原始的 Wahoo 测试文件。
  • 0.2.0 - 通过实现一个勉强够好的代码生成器更新了关键消息结构。
  • 0.1.0 - 基本功能,可以提取跑步和骑行活动的位置和时间戳数据。

许可协议

此项目遵循 MIT 许可协议

依赖关系

~1.2–1.6MB
~20K SLoC