Device-GPS

 view release on metacpan or  search on metacpan

lib/Device/GPS.pm  view on Meta::CPAN

    'CALLBACK_GEO_LOC'      => '$GPGLL',
    'CALLBACK_VELOCITY'     => '$GPVTG',
};

has 'connection' => (
    is       => 'ro',
    isa      => 'Device::GPS::Connection',
    required => 1,
);

has '_callbacks' => (
    is  => 'ro',
    isa => 'HashRef[ArrayRef[CodeRef]]',
    default => sub {{
        CALLBACK_POSITION     => [],
        CALLBACK_ACTIVE_SATS  => [],
        CALLBACK_SATS_IN_VIEW => [],
        CALLBACK_REC_MIN      => [],
        CALLBACK_GEO_LOC      => [],
        CALLBACK_VELOCITY     => [],
    }},
);


sub add_callback
{
    my ($self, $type, $callback) = @_;
    push @{ $self->_callbacks->{$type} }, $callback;
    return 1;
}

sub parse_next
{
    my ($self) = @_;
    my $sentence = $self->connection->read_nmea_sentence;
    return unless $sentence;
    my ($type, @data) = split /,/, $sentence;
    my $checksum = pop @data;
    # TODO verify checksum
    @data = $self->_convert_data_by_type( $type, @data );

    foreach my $callback (@{ $self->_callbacks->{$type} }) {
        $callback->(@data);
    }

    return 1;
}

sub _convert_data_by_type
{
    my ($self, $type, @data) = @_;
    $type =~ s/\A\$//;



( run in 0.296 second using v1.01-cache-2.11-cpan-9b1e4054eb1 )