Geo-FIT

 view release on metacpan or  search on metacpan

lib/Geo/FIT.pm  view on Meta::CPAN

$devdata_deffld_template = 'C C C';
$devdata_deffld_length   = length(pack($deffld_template));

my @invalid = (0xFF) x ($deffld_mask_type + 1);
$invalid[FIT_SINT8] = 0x7F;
$invalid[FIT_SINT16] = 0x7FFF;
$invalid[FIT_UINT16] = 0xFFFF;
$invalid[FIT_SINT32] = 0x7FFFFFFF;
$invalid[FIT_UINT32] = 0xFFFFFFFF;
$invalid[FIT_STRING] = $invalid[FIT_UINT8Z] = $invalid[FIT_UINT16Z] = $invalid[FIT_UINT32Z] = $invalid[FIT_UINT64Z] = 0;
#$invalid[FIT_FLOAT32] = NaN;
#$invalid[FIT_FLOAT64] = NaN;
$invalid[FIT_FLOAT32] = unpack('f', pack('V', 0xFFFFFFFF));
$invalid[FIT_FLOAT64] = unpack('d', pack('V V', 0xFFFFFFFF, 0xFFFFFFFF));

my ($big_int_base32, $sint64_2c_mask, $sint64_2c_base, $sint64_2c_sign);

if (defined $uint64_invalid) {
    $invalid[FIT_UINT64] = $uint64_invalid;
    $invalid[FIT_SINT64] = eval '0x7FFFFFFFFFFFFFFF';
} else {
    $invalid[FIT_UINT64] = Math::BigInt->new('0xFFFFFFFFFFFFFFFF');

lib/Geo/FIT.pm  view on Meta::CPAN

sub fetch_data_message {
    my ($self, $desc) = @_;
    my $buffer = $self->buffer;

    if ( $self->_buffer_needs_updating( $desc->{message_length} ) ) {
        $self->fill_buffer or return undef
    }
    $self->endian_convert($desc->{endian_converter}, $self->buffer, $self->offset) if ref $desc->{endian_converter} eq 'ARRAY';

    my $i = $self->offset;
    # unpack('f'/'d', ...) unpacks to NaN
    my @v = unpack($desc->{template}, substr($$buffer, $i, $desc->{message_length}));

    if (ref $desc->{packfilter_index} eq 'ARRAY') {
        my $piv = $desc->{packfilter_index};
        my ($i, $j);
        my @v_t = @v;

        @v = ($v_t[0]);

        for ($i = 1, $j = 3 ; $j < @$piv ; $j += 4) {

t/fitdump.txt  view on Meta::CPAN

  xxx111 (111-1-ENUM): 1
  xxx121 (121-1-ENUM): 1
  xxx144 (144-1-ENUM): 1
  xxx170 (170-15-UINT8): {8, 7, 9, 13, 11, 12, 5, 6, 14, 10, 1, 4, 0, 2, 3}
  xxx173 (173-1-ENUM, INVALID): 255
Local message type: 8 (71 octets, message name: user_profile, message number: 3)
  friendly_name (0-16-STRING): "edge830"
  wake_time (28-1-UINT32): 21645
  sleep_time (29-1-UINT32): 79200
  unknown35 (35-1-UINT32, INVALID): 4294967295
  unknown40 (40-1-FLOAT32, INVALID): NaN
  unknown42 (42-1-UINT32, INVALID): 4294967295
  weight (4-1-UINT16): 86.2 kg (862)
  user_running_step_length (31-1-UINT16, INVALID): 65535
  user_walking_step_length (32-1-UINT16, INVALID): 65535
  unknown33 (33-1-UINT16, INVALID): 65535
  unknown34 (34-1-UINT16, INVALID): 65535
  unknown38 (38-1-UINT16, INVALID): 65535
  gender (1-1-ENUM): male (1)
  age (2-1-UINT8): 49 years (49)
  height (3-1-UINT8): 1.78 m (178)



( run in 0.241 second using v1.01-cache-2.11-cpan-fd5d4e115d8 )