my_gpsd_client 0.02.02 → 0.02.07
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +3 -5
- data/lib/my_gpsd_client.rb +112 -49
- data/lib/my_gpsd_client/version.rb +1 -1
- data/my_gpsd_client-0.02.05.gem +0 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: '096fa3d4b6b58846f87925834aee7c05d46301e6ef76aa10350870f977931470'
|
4
|
+
data.tar.gz: 0c551f03daa20cd290f57d1941015402e5f23ae08787205995dca6b553f179a0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8bd6857e8065d4de4ad3e0aff6555940bb08ffc5c462ece1f8f6f3493eeaad984352e099676da47eb7c0eac86352f5beb5bb07078d15ccc85a0382c26c41ed3f
|
7
|
+
data.tar.gz: f75b8d76245d80cf44742ab629e72a81c9d6897c5c08962dbf1ea9ebed3fef06b25ae6ea015ad5c99f6803de3f19b921102a320385981dfe2ace0156a7502f6e
|
data/README.md
CHANGED
@@ -36,7 +36,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
|
|
36
36
|
From the gem's main folder...
|
37
37
|
|
38
38
|
$ gem build my_gpsd_client.gemspec
|
39
|
-
$ gem install my_gpsd_client-
|
39
|
+
$ gem install my_gpsd_client-[version].gem
|
40
40
|
|
41
41
|
$ irb
|
42
42
|
irb(main):001:0> require 'my_gpsd_client'
|
@@ -45,14 +45,12 @@ From the gem's main folder...
|
|
45
45
|
=> #<MyGpsdClient:0x00007fd8b98806a0...
|
46
46
|
irb(main):003:0> gps.version
|
47
47
|
=> "0.1.17"
|
48
|
-
irb(main):004:0>
|
48
|
+
irb(main):004:0>
|
49
49
|
|
50
50
|
To release to rubygems.org...
|
51
51
|
|
52
|
-
$ rake build
|
52
|
+
$ rake build; rake release
|
53
53
|
my_gpsd_client 0.1.10 built to pkg/my_gpsd_client-0.1.0.gem.
|
54
|
-
|
55
|
-
$ rake release
|
56
54
|
my_gpsd_client 0.1.10 built to pkg/my_gpsd_client-0.1.0.gem.
|
57
55
|
Tagged v0.1.10.
|
58
56
|
Pushed git commits and tags.
|
data/lib/my_gpsd_client.rb
CHANGED
@@ -5,14 +5,23 @@ require 'date'
|
|
5
5
|
require 'logger'
|
6
6
|
|
7
7
|
class MyGpsdClient
|
8
|
-
attr_accessor :host, :port, :command, :
|
9
|
-
|
8
|
+
attr_accessor :host, :port, :command, :min_speed, :watchdog_max, :watchdog_force, :watchdog_euthanized,
|
9
|
+
:log_progname, :log_level, :log_path, :log_format, :log_time_format
|
10
|
+
attr_reader :version, :last_watch, :socket_ready, :socket, :msg_counts, :watchdog_fired_count,
|
11
|
+
:readthread, :socket_init_thread, :watchdogthread, :watchdog_count
|
12
|
+
|
10
13
|
|
11
14
|
DEFAULT_HOST = 'localhost'
|
12
15
|
DEFAULT_PORT = 2947
|
13
|
-
DEFAULT_WATCH = {"enable":false,"json":false,"nmea":false}
|
14
|
-
DEFAULT_LOG_LEVEL = 0
|
16
|
+
DEFAULT_WATCH = {"class":"WATCH", "enable":false,"json":false,"nmea":false}
|
15
17
|
DEFAULT_WATCHDOG_MAX = 5.0
|
18
|
+
|
19
|
+
DEFAULT_LOG_PROGNAME = "MyGpsdClient"
|
20
|
+
DEFAULT_LOG_LEVEL = Logger::DEBUG
|
21
|
+
DEFAULT_LOG_PATH = 'log/MyGpsdClient.log'
|
22
|
+
DEFAULT_LOG_FORMAT = ''
|
23
|
+
DEFAULT_LOG_TIME_FORMAT = '%Y-%m-%d %T.%N %z %Z'
|
24
|
+
|
16
25
|
WATCHDOG_STEP = 0.1 # Check watchdog ten times per second
|
17
26
|
|
18
27
|
THREAD_NAMES = { # Keep displayed names the same length
|
@@ -23,6 +32,8 @@ class MyGpsdClient
|
|
23
32
|
}
|
24
33
|
Thread.current[:name]=THREAD_NAMES[:MainThread]
|
25
34
|
|
35
|
+
@@logger = nil
|
36
|
+
|
26
37
|
|
27
38
|
# A simple gpsd client that dump's json objects contianing all info received from the gpsd deamon
|
28
39
|
# you need to at least setup either the raw callback (on_raw_change) or position callback (on_position_change) to use GPSD2JSON. the raw callback just passes the json objects it received from the daemon on to the block you pass it. the on_position_change and on_satellites_change are a bit easier to use.
|
@@ -44,7 +55,12 @@ class MyGpsdClient
|
|
44
55
|
@host = host
|
45
56
|
@port = port
|
46
57
|
@last_watch = watch
|
58
|
+
|
47
59
|
@log_level = log_level
|
60
|
+
@log_path = DEFAULT_LOG_PATH
|
61
|
+
@log_format = DEFAULT_LOG_FORMAT
|
62
|
+
@log_time_format = DEFAULT_LOG_TIME_FORMAT
|
63
|
+
@log_progname = DEFAULT_LOG_PROGNAME
|
48
64
|
|
49
65
|
@socket = nil
|
50
66
|
@socket_ready = false
|
@@ -55,6 +71,7 @@ class MyGpsdClient
|
|
55
71
|
@watchdog_max = DEFAULT_WATCHDOG_MAX
|
56
72
|
@watchdog_fired_count = 0
|
57
73
|
@watchdog_force = false
|
74
|
+
@watchdog_euthanized = false
|
58
75
|
@min_speed = 0 # speed needs to be higher than this to make the gps info count
|
59
76
|
@last = nil #last gps info
|
60
77
|
@sats = nil # last satellites info
|
@@ -68,13 +85,12 @@ class MyGpsdClient
|
|
68
85
|
toff: 0, pol: 0, pps: 0, dev: 0, devs: 0, err: 0,
|
69
86
|
unk: 0}
|
70
87
|
|
71
|
-
|
72
|
-
MyGpsdClient.logger.level = @log_level
|
88
|
+
@logger = new_logger path: @log_path, progname: @log_progname, time_format: @log_time_format, level: @log_level
|
73
89
|
my_logger level: 'info', msg: "MyGpsdClient Gem - Version: #{@version}"
|
74
90
|
end
|
75
91
|
|
76
92
|
#
|
77
|
-
#
|
93
|
+
# attribute_writters additional actions
|
78
94
|
#
|
79
95
|
def command=(val)
|
80
96
|
@command = val
|
@@ -85,9 +101,34 @@ class MyGpsdClient
|
|
85
101
|
|
86
102
|
def log_level=(val)
|
87
103
|
@log_level = val
|
88
|
-
|
104
|
+
@logger.level = @log_level
|
105
|
+
end
|
106
|
+
|
107
|
+
def log_progname=(val)
|
108
|
+
@log_progname = val
|
109
|
+
@logger.progname = @log_progname
|
89
110
|
end
|
90
111
|
|
112
|
+
def log_format=(val)
|
113
|
+
@log_format = val
|
114
|
+
@logger.format = @log_format
|
115
|
+
end
|
116
|
+
|
117
|
+
def log_time_format=(val)
|
118
|
+
@log_time_format = val
|
119
|
+
@logger.datetime_format = @log_time_format
|
120
|
+
end
|
121
|
+
|
122
|
+
def log_path=(val)
|
123
|
+
@log_path = val
|
124
|
+
@logger = new_logger path: @log_path, progname: @log_progname, time_format: @log_time_format, level: @log_level
|
125
|
+
end
|
126
|
+
#
|
127
|
+
# End attribute_writters additional actions
|
128
|
+
#
|
129
|
+
|
130
|
+
|
131
|
+
|
91
132
|
def log_marker level: 'debug', msg: "Log Marker"
|
92
133
|
my_logger level: level, msg: "~~~~~~~~~~~~~~~~~~~~~~~ #{msg} ~~~~~~~~~~~~~~~~~~~~~~~"
|
93
134
|
end
|
@@ -119,7 +160,11 @@ class MyGpsdClient
|
|
119
160
|
else
|
120
161
|
# it's ready, tell it to start watching and passing
|
121
162
|
my_logger msg: "Send_cmmd: socket ready, send cmmd"
|
122
|
-
|
163
|
+
if @command.size > 1
|
164
|
+
str = "?#{@command[:class].upcase}=#{@command.to_json}"
|
165
|
+
else
|
166
|
+
str = "?#{@command[:class].upcase};"
|
167
|
+
end
|
123
168
|
my_logger level: 'info', msg: "Send_cmmd: sending: #{str}"
|
124
169
|
@sent_raw_callback.call( str) if @sent_raw_callback
|
125
170
|
@socket.puts str
|
@@ -178,43 +223,48 @@ class MyGpsdClient
|
|
178
223
|
|
179
224
|
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
180
225
|
# background thread to implement a watchdog timer
|
181
|
-
|
182
|
-
|
183
|
-
|
184
|
-
my_logger msg: "Watchdog Thread
|
185
|
-
@
|
186
|
-
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
|
193
|
-
|
194
|
-
|
195
|
-
|
196
|
-
|
197
|
-
@watchdog_fired_count += 1
|
198
|
-
@watchdog_enabled = false
|
199
|
-
# Kill the readthread...
|
200
|
-
my_logger msg: "Watchdog Thread: Killing ReadThread"
|
201
|
-
Thread.kill(@readthread) if @readthread && @readthread.alive?
|
202
|
-
if @last_watch[:enable]
|
203
|
-
stop
|
204
|
-
sleep 0.5
|
205
|
-
my_logger msg: "Watchdog Thread: Send Last_Watch: #{@last_watch}"
|
206
|
-
@command = @last_watch
|
207
|
-
send_cmmd
|
208
|
-
my_logger msg: "Watchdog Thread: Thread.exit"
|
209
|
-
Thread.exit
|
210
|
-
else
|
211
|
-
close_socket
|
226
|
+
if @watchdog_euthanized
|
227
|
+
my_logger msg: "Watchdog has been euthanized!"
|
228
|
+
else
|
229
|
+
my_logger msg: "Start: Starting Watchdog Thread"
|
230
|
+
@watchdogthread = Thread.start do
|
231
|
+
Thread.current[:name]=THREAD_NAMES[:WatchdogThread]
|
232
|
+
my_logger msg: "Watchdog Thread: #{Thread.current[:name]}"
|
233
|
+
@watchdog_count = 0.0
|
234
|
+
@watchdog_enabled = true
|
235
|
+
while @watchdog_enabled && !@watchdog_euthanized do
|
236
|
+
my_logger msg: "Watchdog Thread: Watchdog Tick"
|
237
|
+
if @watchdog_force
|
238
|
+
@watchdog_force = false
|
239
|
+
# force the watchdog to fire by killing the socket
|
240
|
+
@socket.close if @socket && !@socket.closed?
|
241
|
+
#@watchdog_count = @watchdog_max
|
212
242
|
end
|
213
|
-
|
214
|
-
|
215
|
-
|
216
|
-
|
217
|
-
|
243
|
+
if (@watchdog_count += WATCHDOG_STEP) >= @watchdog_max
|
244
|
+
my_logger level: 'warn', msg: "Watchdog Fired"
|
245
|
+
@watchdog_count = 0.0
|
246
|
+
@watchdog_fired_count += 1
|
247
|
+
@watchdog_enabled = false
|
248
|
+
# Kill the readthread...
|
249
|
+
my_logger msg: "Watchdog Thread: Killing ReadThread"
|
250
|
+
Thread.kill(@readthread) if @readthread && @readthread.alive?
|
251
|
+
if @last_watch[:enable]
|
252
|
+
stop
|
253
|
+
sleep 0.5
|
254
|
+
my_logger msg: "Watchdog Thread: Send Last_Watch: #{@last_watch}"
|
255
|
+
@command = @last_watch
|
256
|
+
send_cmmd
|
257
|
+
my_logger msg: "Watchdog Thread: Thread.exit"
|
258
|
+
Thread.exit
|
259
|
+
else
|
260
|
+
close_socket
|
261
|
+
end
|
262
|
+
end
|
263
|
+
sleep WATCHDOG_STEP
|
264
|
+
end # while Wchdog enabled
|
265
|
+
my_logger msg: "Closing Watchdog Thread"
|
266
|
+
end # wtchdg thread start do
|
267
|
+
end # watchdog euthanize if
|
218
268
|
#~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
219
269
|
|
220
270
|
my_logger msg: "Start: Exiting Start"
|
@@ -265,8 +315,9 @@ class MyGpsdClient
|
|
265
315
|
else
|
266
316
|
sleep 0.1
|
267
317
|
end
|
268
|
-
rescue
|
269
|
-
my_logger level: 'error', msg: "Read_from_socket: error reading from socket: #{$!}"
|
318
|
+
rescue StandardError => e
|
319
|
+
# my_logger level: 'error', msg: "Read_from_socket: error reading from socket: #{$!}"
|
320
|
+
my_logger level: 'error', msg: "Read_from_socket: error reading from socket: #{e.message}"
|
270
321
|
@socket_ready = !@socket.closed? if @socket
|
271
322
|
end
|
272
323
|
else
|
@@ -451,16 +502,28 @@ LOG_LEVELS = {debug: Logger::DEBUG, info: Logger::INFO, warn: Logger::WARN,
|
|
451
502
|
error: Logger::ERROR, fatal: Logger::FATAL, unknown: Logger::UNKNOWN}
|
452
503
|
|
453
504
|
def my_logger(level: 'debug', msg: "Blank")
|
454
|
-
|
505
|
+
@logger.add (LOG_LEVELS[level.to_sym]) {"#{Thread.current[:name]} -- #{msg}"}
|
506
|
+
end
|
507
|
+
|
508
|
+
def new_logger( progname: nil, path:, format: nil, time_format: nil, level: LOG_LEVELS[:debug])
|
509
|
+
logger = Logger.new(path)
|
510
|
+
logger.progname = progname if progname
|
511
|
+
logger.format = format if format
|
512
|
+
logger.level = level if level
|
513
|
+
logger.datetime_format = time_format if time_format
|
514
|
+
logger
|
455
515
|
end
|
456
516
|
|
517
|
+
=begin
|
457
518
|
def self.logger
|
519
|
+
puts "In self.logger: log_path => #{@log_path}, @@logger.nil? => #{@@logger.nil?}"
|
458
520
|
@@logger ||= defined?(Rails) ? Rails.logger : Logger.new("log/MyGpsdClient.log")
|
521
|
+
puts "Exiting self.logger: @@logger => #{@@logger}"
|
459
522
|
end
|
460
523
|
|
461
524
|
def self.logger=(logger)
|
462
525
|
@@logger = logger
|
463
526
|
end
|
464
|
-
|
527
|
+
=end
|
465
528
|
|
466
529
|
end
|
Binary file
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: my_gpsd_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.02.
|
4
|
+
version: 0.02.07
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Steven Finnegan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-06-06 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -55,6 +55,7 @@ files:
|
|
55
55
|
- bin/setup
|
56
56
|
- lib/my_gpsd_client.rb
|
57
57
|
- lib/my_gpsd_client/version.rb
|
58
|
+
- my_gpsd_client-0.02.05.gem
|
58
59
|
- my_gpsd_client.gemspec
|
59
60
|
homepage: https://github.com/sjf-control/my_gpsd_client
|
60
61
|
licenses:
|