The London Perl and Raku Workshop takes place on 26th Oct 2024. If your company depends on Perl, please consider sponsoring and/or attending.

NAME

Parser::FIT - A parser for garmin FIT (Flexible and Interoperable Data Transfer) files

SYNOPSIS

  use Parser::FIT;

  my $recordCount = 0;
  my $parser = Parser::FIT->new(on => {
    record => sub { $recordMsg = shift; $recordCount++; }
  });

  $parser->parse("some/file.fit");

  print "The file contained $recordCount records.";

ALPHA STATUS

The module is in an early alpha status. APIs may change. Parse results may be wrong.

Additionally i will probably not implement the full set of FIT messages. I started the module for my personal needs to be able to parse FIT files from my garmin bike computer. So results for e.g. a triathlon multisport watch may varry greatly!

But this module is free and open source: Feel free to contribute code, example data, etc!

METHODS

new

Create a new Parser::FIT object.

Parameters:

on

Register and deregister handlers for a parser.

  $parser->on(record => sub { });

Registering and already existing handler overwrites the old one.

  $parser->on(session => sub { say "foo" });
  $parser->on(session => sub { say "bar" }); # Overwrites the previous handler

Registering a falsy value for a message type will deregister the handler:

  $parser->on(session => undef);

There is currently no check, if the provided message name actually represents an existing one from the FIT specs.

Additionally there is one special message name: _any. Which can be used to receive just every message encountered by the parser:

  $parser->on(_any => sub {
          my $msgType = shift;
          my $msgData = shift;

          print "Saw a messafe of type $msgType";
  });

The on method can also be called from inside a handler callback in order to de-/register handlers based on the stream of events

  # Count the number of records per lap
  my $lapCount = 0;
  my $lapResults = [];
  $parser->on("lap" => sub {
          my $lapMsg = shift;
          my $lapCount++;
          $parser->on("record" => {
                  $lapResults[$lapCount]++;
          });
  });

AUTHOR

This module was created by Sven Eppler <ghandi@cpan.org>

COPYRIGHT AND LICENSE

Copyright (C) 2018-2022 by Sven Eppler

This program is free software, you can redistribute it and/or modify it under the terms of the Artistic License version 2.0.

SEE ALSO

Parser::FIT::Simple, Garmin FIT SDK