ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/AnyEvent-GPSD/GPSD.pm
(Generate patch)

Comparing AnyEvent-GPSD/GPSD.pm (file contents):
Revision 1.3 by root, Wed Jul 2 05:21:58 2008 UTC vs.
Revision 1.4 by root, Fri Jul 18 01:31:12 2008 UTC

153 153
154sub retry { 154sub retry {
155 my ($self) = @_; 155 my ($self) = @_;
156 156
157 delete $self->{fh}; 157 delete $self->{fh};
158 delete $self->{command};
158 159
159 Scalar::Util::weaken $self; 160 Scalar::Util::weaken $self;
160 $self->{retry_w} = AnyEvent->timer (after => 1, cb => sub { 161 $self->{retry_w} = AnyEvent->timer (after => 1, cb => sub {
161 delete $self->{retry_w}; 162 delete $self->{retry_w};
162 $self->connect; 163 $self->connect;
206 $self->retry; 207 $self->retry;
207 }, 208 },
208 on_eof => sub { 209 on_eof => sub {
209 $! = &Errno::EPIPE; 210 $! = &Errno::EPIPE;
210 $self->event ("error"); 211 $self->event ("error");
212 $self->log ("disconnect");
211 $self->retry; 213 $self->retry;
212 }, 214 },
213 on_read => sub { 215 on_read => sub {
214 $_[0]{rbuf} =~ s/^([^\015\012]*)\015\012// 216 $_[0]{rbuf} =~ s/^([^\015\012]*)\015\012//
215 or return; 217 or return;
222 $self->send ("o"); 224 $self->send ("o");
223 $self->send ("y"); 225 $self->send ("y");
224 $self->send ("c"); 226 $self->send ("c");
225 227
226 $self->event ("connect"); 228 $self->event ("connect");
229 $self->log ("connect");
227 } else { 230 } else {
228 $self->event ("error"); 231 $self->event ("error");
229 } 232 }
230 }; 233 };
231 234
251sub feed { 254sub feed {
252 my ($self, $line) = @_; 255 my ($self, $line) = @_;
253 256
254 $self->{now} = AnyEvent->now; 257 $self->{now} = AnyEvent->now;
255 258
259 $self->log (raw => $line)
260 if $self->{logfh};
261
256 unless ($line =~ /^GPSD,(.)=(.*)$/) { 262 unless ($line =~ /^GPSD,(.)=(.*)$/) {
257 $! = &Errno::EBADMSG; 263 $! = &Errno::EBADMSG;
258 $self->event ("error"); 264 $self->event ("error");
259 return $self->retry; 265 return $self->retry;
260 } 266 }
261 267
262 my ($type, $data) = ($1, $2); 268 my ($type, $data) = ($1, $2);
269
270 #warn "$type=$data\n";#d#
263 271
264 $self->{state}{$type} = [$data => $self->{now}]; 272 $self->{state}{$type} = [$data => $self->{now}];
265 273
266 if ($type eq "O") { 274 if ($type eq "O") {
267 my @data = split /\s+/, $data; 275 my @data = split /\s+/, $data;
348 # if we likely have zero speed, return the point itself 356 # if we likely have zero speed, return the point itself
349 ($fix->{lat}, $fix->{lon}) 357 ($fix->{lat}, $fix->{lon})
350 } 358 }
351} 359}
352 360
361sub log {
362 my ($self, @arg) = @_;
363
364 syswrite $self->{logfh}, JSON::encode_json ([AnyEvent->time, @arg]) . "\n"
365 if $self->{logfh};
366}
367
368sub record_log {
369 my ($self, $path) = @_,
370
371 require JSON;
372
373 open $self->{logfh}, ">", $path
374 or Carp::croak "$path: $!";
375
376 $self->log (start => $VERSION);
377}
378
353=back 379=back
354 380
355=head1 SEE ALSO 381=head1 SEE ALSO
356 382
357L<AnyEvent>. 383L<AnyEvent>.

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines