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 )