kiss-tnc 1.0.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +5 -5
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/CHANGELOG.md +11 -1
- data/CONTRIBUTORS.md +19 -0
- data/Rakefile +25 -26
- data/kiss-tnc.gemspec +8 -6
- data/lib/kiss/app_info.rb +1 -1
- data/lib/kiss/kiss_abstract.rb +177 -27
- data/lib/kiss/kiss_serial.rb +4 -4
- metadata +36 -23
- data/lib/kiss/test/kiss_mock.rb +0 -41
- data/lib/kiss/test.rb +0 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
|
-
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
2
|
+
SHA256:
|
|
3
|
+
metadata.gz: de2de9bab4531fa71c87064c557b99545191a14ca86d094c46be3969f7d326a9
|
|
4
|
+
data.tar.gz: d6623ac8144ac07a344262577aec994a4841ef5cd1e47a2b84c0ea398a8d3e2a
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 56e1500ab363d8382e9d4f5324cdb9df36f9516974c01edf4c93e985e31a0597d50ff812853e101146f61838f563a832487309298a6c9427c3221a48d964463e
|
|
7
|
+
data.tar.gz: cfe67d7786440d421a7b676407c9efc102b1b6e568805b9992995d762eebf4758fc3b0110804cd115b319ecc42e04caa08fa7854fb10f2141e1c5e5c853961fe
|
data/.gitignore
CHANGED
data/.rspec
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
--require spec_helper
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,15 @@
|
|
|
1
1
|
# Changelog
|
|
2
2
|
|
|
3
|
+
## 2.0.0
|
|
4
|
+
|
|
5
|
+
* Moved abstraction over to abstractify library.
|
|
6
|
+
* Added more parsing methods so entry points now take strings rather than KISS encoded data.
|
|
7
|
+
* Added errors where appropriate, for example writing invalid frames now throw an IOError.
|
|
8
|
+
|
|
9
|
+
## 1.0.3
|
|
10
|
+
|
|
11
|
+
* Changed KissSerial so its methods can accept any arguments, used for abstraction purposes.
|
|
12
|
+
|
|
3
13
|
## 1.0.2
|
|
4
14
|
|
|
5
15
|
* Fixed a bug where bytes were not written to the serial stream correctly.
|
|
@@ -12,4 +22,4 @@
|
|
|
12
22
|
|
|
13
23
|
## 1.0.0
|
|
14
24
|
|
|
15
|
-
* Initial release
|
|
25
|
+
* Initial release
|
data/CONTRIBUTORS.md
ADDED
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
## Current Project Lead
|
|
2
|
+
|
|
3
|
+
* Jeffrey Phillips Freeman (WI2ARD) - http://JeffreyFreeman.me
|
|
4
|
+
|
|
5
|
+
## Past Contributors
|
|
6
|
+
|
|
7
|
+
* Greg Albrecht W2GMD <oss@undef.net>
|
|
8
|
+
* Martin Murray (KD8LVZ)
|
|
9
|
+
* Paul McMillan - https://github.com/PaulMcMillan
|
|
10
|
+
* Russ Innes
|
|
11
|
+
* John Hogenmiller (KB3DFZ) - https://github.com/ytjohn
|
|
12
|
+
* Phil Gagnon N1HHG
|
|
13
|
+
* Ben Benesh - https://github.com/bbene
|
|
14
|
+
* Joe Goforth
|
|
15
|
+
* Rick Eason
|
|
16
|
+
* Jay Nugent
|
|
17
|
+
* Pete Loveall (AE5PL)
|
|
18
|
+
* darksidelemm - https://github.com/darksidelemm
|
|
19
|
+
* agmuino - https://github.com/agmuino
|
data/Rakefile
CHANGED
|
@@ -24,44 +24,43 @@ def dump_load_path
|
|
|
24
24
|
end
|
|
25
25
|
end
|
|
26
26
|
|
|
27
|
-
gem 'json', '~> 1.8.3'
|
|
28
|
-
|
|
29
|
-
gem 'bundler', '~> 1.7'
|
|
27
|
+
# gem 'json', '~> 1.8.3'
|
|
28
|
+
#
|
|
29
|
+
# gem 'bundler', '~> 1.7'
|
|
30
30
|
require 'bundler'
|
|
31
31
|
|
|
32
|
-
gem 'rake', '~> 11.3.0'
|
|
32
|
+
# gem 'rake', '~> 11.3.0'
|
|
33
33
|
require 'rake/clean'
|
|
34
34
|
require 'rake/testtask'
|
|
35
35
|
|
|
36
36
|
|
|
37
|
-
require 'cucumber'
|
|
38
|
-
require 'cucumber/rake/task'
|
|
39
|
-
gem 'rdoc' # we need the installed RDoc gem, not the system one
|
|
40
|
-
require 'rdoc/task'
|
|
37
|
+
# require 'cucumber'
|
|
38
|
+
# require 'cucumber/rake/task'
|
|
39
|
+
# gem 'rdoc' # we need the installed RDoc gem, not the system one
|
|
40
|
+
# require 'rdoc/task'
|
|
41
41
|
|
|
42
42
|
include Rake::DSL
|
|
43
43
|
|
|
44
44
|
Bundler::GemHelper.install_tasks
|
|
45
45
|
|
|
46
46
|
|
|
47
|
-
Rake::TestTask.new do |t|
|
|
48
|
-
|
|
49
|
-
end
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
CUKE_RESULTS = 'results.html'
|
|
53
|
-
CLEAN << CUKE_RESULTS
|
|
54
|
-
Cucumber::Rake::Task.new(:features) do |t|
|
|
55
|
-
t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty --no-source -x"
|
|
56
|
-
t.fork = false
|
|
57
|
-
end
|
|
58
|
-
|
|
59
|
-
Rake::RDocTask.new do |rd|
|
|
47
|
+
# Rake::TestTask.new do |t|
|
|
48
|
+
# t.pattern = 'test/tc_*.rb'
|
|
49
|
+
# end
|
|
60
50
|
|
|
61
|
-
rd.main = "README.rdoc"
|
|
62
|
-
|
|
63
|
-
rd.rdoc_files.include("README.rdoc", "lib/**/*.rb", "bin/**/*")
|
|
64
|
-
end
|
|
65
51
|
|
|
66
|
-
|
|
52
|
+
# CUKE_RESULTS = 'results.html'
|
|
53
|
+
# CLEAN << CUKE_RESULTS
|
|
54
|
+
# Cucumber::Rake::Task.new(:features) do |t|
|
|
55
|
+
# t.cucumber_opts = "features --format html -o #{CUKE_RESULTS} --format pretty --no-source -x"
|
|
56
|
+
# t.fork = false
|
|
57
|
+
# end
|
|
67
58
|
|
|
59
|
+
# Rake::RDocTask.new do |rd|
|
|
60
|
+
#
|
|
61
|
+
# rd.main = "README.rdoc"
|
|
62
|
+
#
|
|
63
|
+
# rd.rdoc_files.include("README.rdoc", "lib/**/*.rb", "bin/**/*")
|
|
64
|
+
# end
|
|
65
|
+
#
|
|
66
|
+
# task :default => [:test, :features]
|
data/kiss-tnc.gemspec
CHANGED
|
@@ -12,7 +12,7 @@ Gem::Specification.new do |spec|
|
|
|
12
12
|
|
|
13
13
|
spec.summary = %q{Library for KISS communication with TNCs.}
|
|
14
14
|
spec.description = %q{Ruby library for KISS communication with Terminal Node Controllers.}
|
|
15
|
-
spec.homepage = 'https://
|
|
15
|
+
spec.homepage = 'https://git.qoto.org/digipex/kiss-tnc'
|
|
16
16
|
|
|
17
17
|
# Prevent pushing this gem to RubyGems.org. To allow pushes either set the 'allowed_push_host'
|
|
18
18
|
# to allow pushing to a single host or delete this section to allow pushing to any host.
|
|
@@ -29,10 +29,12 @@ Gem::Specification.new do |spec|
|
|
|
29
29
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
|
30
30
|
spec.require_paths = ['lib']
|
|
31
31
|
|
|
32
|
-
spec.add_dependency '
|
|
32
|
+
spec.add_dependency 'abstractify', '~> 1.1'
|
|
33
33
|
spec.add_dependency 'serialport', '~> 1.3'
|
|
34
|
-
spec.add_development_dependency 'bundler', '~>
|
|
35
|
-
spec.add_development_dependency 'rake', '~>
|
|
36
|
-
spec.add_development_dependency '
|
|
37
|
-
spec.add_development_dependency '
|
|
34
|
+
spec.add_development_dependency 'bundler', '~> 2.3'
|
|
35
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
|
36
|
+
spec.add_development_dependency 'rspec', '~> 3.12'
|
|
37
|
+
spec.add_development_dependency 'simplecov', '~> 0.22'
|
|
38
|
+
spec.add_development_dependency 'simplecov-console', '~> 0.9'
|
|
39
|
+
#spec.add_development_dependency 'rdoc', '~> 6.5'
|
|
38
40
|
end
|
data/lib/kiss/app_info.rb
CHANGED
data/lib/kiss/kiss_abstract.rb
CHANGED
|
@@ -1,10 +1,12 @@
|
|
|
1
1
|
require 'thread'
|
|
2
|
-
require '
|
|
2
|
+
require 'abstractify'
|
|
3
3
|
require 'kiss/constants'
|
|
4
4
|
|
|
5
5
|
module Kiss
|
|
6
6
|
class KissAbstract
|
|
7
|
-
|
|
7
|
+
include Abstractify::Abstract
|
|
8
|
+
|
|
9
|
+
abstract :write_interface, :read_interface, :connect, :close
|
|
8
10
|
|
|
9
11
|
protected
|
|
10
12
|
def initialize(strip_df_start=true)
|
|
@@ -52,9 +54,132 @@ module Kiss
|
|
|
52
54
|
(port << 4) & command_code
|
|
53
55
|
end
|
|
54
56
|
|
|
55
|
-
|
|
56
|
-
def
|
|
57
|
-
|
|
57
|
+
private
|
|
58
|
+
def self.extract_path(start, raw_frame)
|
|
59
|
+
full_path = []
|
|
60
|
+
|
|
61
|
+
(2...start).each do |i|
|
|
62
|
+
path = identity_as_string(extract_callsign(raw_frame[i * 7..-1]))
|
|
63
|
+
if path and path.length > 0
|
|
64
|
+
if raw_frame[i * 7 + 6] & 0x80 != 0
|
|
65
|
+
full_path << [path, '*'].join
|
|
66
|
+
else
|
|
67
|
+
full_path << path
|
|
68
|
+
end
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
return full_path
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
private
|
|
75
|
+
def self.parse_identity_string(identity_string)
|
|
76
|
+
# If we are parsing a spent token then first lets get rid of the astresick suffix.
|
|
77
|
+
if identity_string[-1] == '*'
|
|
78
|
+
identity_string = identity_string[0..-1]
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
if identity_string.include? '-'
|
|
82
|
+
call_sign, ssid = identity_string.split('-')
|
|
83
|
+
else
|
|
84
|
+
call_sign = identity_string
|
|
85
|
+
ssid = 0
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
return {:callsign => call_sign, :ssid => ssid.to_i}
|
|
89
|
+
end
|
|
90
|
+
|
|
91
|
+
private
|
|
92
|
+
def self.identity_as_string(identity)
|
|
93
|
+
if identity[:ssid] and identity[:ssid] > 0
|
|
94
|
+
return [identity[:callsign], identity[:ssid].to_s].join('-')
|
|
95
|
+
else
|
|
96
|
+
return identity[:callsign]
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
|
|
100
|
+
private
|
|
101
|
+
def self.extract_callsign(raw_frame)
|
|
102
|
+
callsign_as_array = raw_frame[0...6].map { |x| (x >> 1).chr }
|
|
103
|
+
callsign = callsign_as_array.join.strip
|
|
104
|
+
ssid = (raw_frame[6] >> 1) & 0x0f
|
|
105
|
+
ssid = (ssid == nil or ssid == 0 ? nil : ssid)
|
|
106
|
+
return {:callsign => callsign, :ssid => ssid}
|
|
107
|
+
end
|
|
108
|
+
|
|
109
|
+
private
|
|
110
|
+
def self.encode_callsign(callsign)
|
|
111
|
+
call_sign = callsign[:callsign]
|
|
112
|
+
|
|
113
|
+
enc_ssid = (callsign[:ssid] << 1) | 0x60
|
|
114
|
+
|
|
115
|
+
if call_sign.include? '*'
|
|
116
|
+
call_sign.gsub!(/\*/, '')
|
|
117
|
+
enc_ssid |= 0x80
|
|
118
|
+
end
|
|
119
|
+
|
|
120
|
+
while call_sign.length < 6
|
|
121
|
+
call_sign = [call_sign, ' '].join
|
|
122
|
+
end
|
|
123
|
+
|
|
124
|
+
return call_sign.chars.map { |p| p.ord << 1 } + [enc_ssid]
|
|
125
|
+
end
|
|
126
|
+
|
|
127
|
+
private
|
|
128
|
+
def self.encode_frame(frame)
|
|
129
|
+
enc_frame = encode_callsign(parse_identity_string(frame[:destination].to_s)) + encode_callsign(parse_identity_string(frame[:source].to_s))
|
|
130
|
+
|
|
131
|
+
frame[:path].each do |hop|
|
|
132
|
+
enc_frame += encode_callsign(parse_identity_string(hop.to_s))
|
|
133
|
+
end
|
|
134
|
+
|
|
135
|
+
return enc_frame[0...-1] + [enc_frame[-1] | 0x01] + [Kiss::SLOT_TIME] + [0xf0] + frame[:payload].chars.map { |c| c.ord }
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
private
|
|
139
|
+
def self.decode_frame(raw_frame)
|
|
140
|
+
frame_len = raw_frame.length
|
|
141
|
+
|
|
142
|
+
if frame_len > 16
|
|
143
|
+
(0...frame_len - 2).each do |raw_slice|
|
|
144
|
+
# Is address field length correct?
|
|
145
|
+
if raw_frame[raw_slice] & 0x01 != 0 and ((raw_slice + 1) % 7) == 0
|
|
146
|
+
i = (raw_slice.to_f + 1.0) / 7.0
|
|
147
|
+
# Less than 2 callsigns?
|
|
148
|
+
if 1.0 < i and i < 11.0
|
|
149
|
+
if raw_frame[raw_slice + 1] & 0x03 == 0x03 and [0xf0, 0xcf].include? raw_frame[raw_slice + 2]
|
|
150
|
+
payload_as_array = raw_frame[raw_slice + 3..-1].map { |b| b.chr }
|
|
151
|
+
payload = payload_as_array.join
|
|
152
|
+
destination = identity_as_string(extract_callsign(raw_frame))
|
|
153
|
+
source = identity_as_string(extract_callsign(raw_frame[7..-1]))
|
|
154
|
+
path = extract_path(i.to_i, raw_frame)
|
|
155
|
+
return {:source => source, :destination => destination, :path => path, :payload => payload}
|
|
156
|
+
end
|
|
157
|
+
end
|
|
158
|
+
end
|
|
159
|
+
end
|
|
160
|
+
end
|
|
161
|
+
return nil
|
|
162
|
+
end
|
|
163
|
+
|
|
164
|
+
private
|
|
165
|
+
def self.valid_frame(raw_frame)
|
|
166
|
+
frame_len = raw_frame.length
|
|
167
|
+
|
|
168
|
+
if frame_len > 16
|
|
169
|
+
(0...frame_len - 2).each do |raw_slice|
|
|
170
|
+
# Is address field length correct?
|
|
171
|
+
if raw_frame[raw_slice] & 0x01 != 0 and ((raw_slice + 1) % 7) == 0
|
|
172
|
+
i = (raw_slice.to_f + 1.0) / 7.0
|
|
173
|
+
# Less than 2 callsigns?
|
|
174
|
+
if 1.0 < i and i < 11.0
|
|
175
|
+
if raw_frame[raw_slice + 1] & 0x03 == 0x03 and [0xf0, 0xcf].include? raw_frame[raw_slice + 2]
|
|
176
|
+
return true
|
|
177
|
+
end
|
|
178
|
+
end
|
|
179
|
+
end
|
|
180
|
+
end
|
|
181
|
+
end
|
|
182
|
+
return false
|
|
58
183
|
end
|
|
59
184
|
|
|
60
185
|
private
|
|
@@ -115,39 +240,64 @@ module Kiss
|
|
|
115
240
|
end
|
|
116
241
|
end
|
|
117
242
|
|
|
243
|
+
private
|
|
244
|
+
def read_bytes(*args, **kwargs)
|
|
245
|
+
if @frame_buffer.length == 0
|
|
246
|
+
fill_buffer
|
|
247
|
+
end
|
|
248
|
+
|
|
249
|
+
if @frame_buffer.length > 0
|
|
250
|
+
return_frame = @frame_buffer[0]
|
|
251
|
+
@frame_buffer.shift
|
|
252
|
+
return return_frame
|
|
253
|
+
else
|
|
254
|
+
return nil
|
|
255
|
+
end
|
|
256
|
+
end
|
|
257
|
+
|
|
258
|
+
private
|
|
259
|
+
def write_bytes(frame_bytes, port=0, *args, **kwargs)
|
|
260
|
+
kiss_packet = [FEND] + [KissAbstract.command_byte_combine(port, DATA_FRAME)] +
|
|
261
|
+
KissAbstract.escape_special_codes(frame_bytes) + [FEND]
|
|
262
|
+
|
|
263
|
+
write_interface(kiss_packet)
|
|
264
|
+
end
|
|
265
|
+
|
|
266
|
+
protected
|
|
267
|
+
def write_setting(command, value)
|
|
268
|
+
write_interface([FEND] + [command] + KissAbstract.escape_special_codes(value) + [FEND])
|
|
269
|
+
end
|
|
270
|
+
|
|
118
271
|
public
|
|
119
272
|
def connect(mode_init=nil, *args, **kwargs)
|
|
120
273
|
end
|
|
121
274
|
|
|
122
275
|
public
|
|
123
|
-
def close
|
|
276
|
+
def close(*args, **kwargs)
|
|
124
277
|
end
|
|
125
278
|
|
|
126
279
|
public
|
|
127
280
|
def read(*args, **kwargs)
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
return return_frame
|
|
137
|
-
else
|
|
138
|
-
return nil
|
|
139
|
-
end
|
|
140
|
-
end
|
|
281
|
+
@lock.synchronize do
|
|
282
|
+
frame = self.read_bytes(*args, **kwargs)
|
|
283
|
+
if frame and frame.length > 0
|
|
284
|
+
return KissAbstract.decode_frame(frame)
|
|
285
|
+
else
|
|
286
|
+
return nil
|
|
287
|
+
end
|
|
288
|
+
end
|
|
141
289
|
end
|
|
142
290
|
|
|
143
291
|
public
|
|
144
|
-
def write(
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
292
|
+
def write(frame, port=0, *args, **kwargs)
|
|
293
|
+
@lock.synchronize do
|
|
294
|
+
encoded_frame = KissAbstract.encode_frame(frame)
|
|
295
|
+
if KissAbstract.valid_frame(encoded_frame)
|
|
296
|
+
self.write_bytes(encoded_frame, *args, **kwargs)
|
|
297
|
+
else
|
|
298
|
+
raise IOError.new("frame was able to be encoded but was determined not to be valid")
|
|
299
|
+
end
|
|
300
|
+
end
|
|
151
301
|
end
|
|
152
302
|
end
|
|
153
|
-
end
|
|
303
|
+
end
|
data/lib/kiss/kiss_serial.rb
CHANGED
|
@@ -46,7 +46,7 @@ module Kiss
|
|
|
46
46
|
end
|
|
47
47
|
|
|
48
48
|
public
|
|
49
|
-
def connect(mode_init=nil, **kwargs)
|
|
49
|
+
def connect(mode_init=nil, *args, **kwargs)
|
|
50
50
|
super
|
|
51
51
|
|
|
52
52
|
@serial = SerialPort.new(@com_port, @baud, @byte_size, @stop_bits, @parity)
|
|
@@ -69,7 +69,7 @@ module Kiss
|
|
|
69
69
|
end
|
|
70
70
|
|
|
71
71
|
public
|
|
72
|
-
def close
|
|
72
|
+
def close(*args, **kwargs)
|
|
73
73
|
super
|
|
74
74
|
|
|
75
75
|
if @exit_kiss
|
|
@@ -77,10 +77,10 @@ module Kiss
|
|
|
77
77
|
end
|
|
78
78
|
|
|
79
79
|
if @serial == nil or @serial.closed?
|
|
80
|
-
raise 'Attempting to close before the class has been started.'
|
|
80
|
+
raise IOError.new('Attempting to close before the class has been started.')
|
|
81
81
|
else
|
|
82
82
|
@serial.close
|
|
83
83
|
end
|
|
84
84
|
end
|
|
85
85
|
end
|
|
86
|
-
end
|
|
86
|
+
end
|
metadata
CHANGED
|
@@ -1,29 +1,29 @@
|
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
|
2
2
|
name: kiss-tnc
|
|
3
3
|
version: !ruby/object:Gem::Version
|
|
4
|
-
version:
|
|
4
|
+
version: 2.0.0
|
|
5
5
|
platform: ruby
|
|
6
6
|
authors:
|
|
7
7
|
- Jeffrey Phillips Freeman
|
|
8
|
-
autorequire:
|
|
8
|
+
autorequire:
|
|
9
9
|
bindir: exe
|
|
10
10
|
cert_chain: []
|
|
11
|
-
date:
|
|
11
|
+
date: 2023-08-16 00:00:00.000000000 Z
|
|
12
12
|
dependencies:
|
|
13
13
|
- !ruby/object:Gem::Dependency
|
|
14
|
-
name:
|
|
14
|
+
name: abstractify
|
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
|
16
16
|
requirements:
|
|
17
17
|
- - "~>"
|
|
18
18
|
- !ruby/object:Gem::Version
|
|
19
|
-
version:
|
|
19
|
+
version: '1.1'
|
|
20
20
|
type: :runtime
|
|
21
21
|
prerelease: false
|
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
|
23
23
|
requirements:
|
|
24
24
|
- - "~>"
|
|
25
25
|
- !ruby/object:Gem::Version
|
|
26
|
-
version:
|
|
26
|
+
version: '1.1'
|
|
27
27
|
- !ruby/object:Gem::Dependency
|
|
28
28
|
name: serialport
|
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -44,56 +44,70 @@ dependencies:
|
|
|
44
44
|
requirements:
|
|
45
45
|
- - "~>"
|
|
46
46
|
- !ruby/object:Gem::Version
|
|
47
|
-
version: '
|
|
47
|
+
version: '2.3'
|
|
48
48
|
type: :development
|
|
49
49
|
prerelease: false
|
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
51
51
|
requirements:
|
|
52
52
|
- - "~>"
|
|
53
53
|
- !ruby/object:Gem::Version
|
|
54
|
-
version: '
|
|
54
|
+
version: '2.3'
|
|
55
55
|
- !ruby/object:Gem::Dependency
|
|
56
56
|
name: rake
|
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
|
58
58
|
requirements:
|
|
59
59
|
- - "~>"
|
|
60
60
|
- !ruby/object:Gem::Version
|
|
61
|
-
version: '
|
|
61
|
+
version: '13.0'
|
|
62
62
|
type: :development
|
|
63
63
|
prerelease: false
|
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
|
65
65
|
requirements:
|
|
66
66
|
- - "~>"
|
|
67
67
|
- !ruby/object:Gem::Version
|
|
68
|
-
version: '
|
|
68
|
+
version: '13.0'
|
|
69
69
|
- !ruby/object:Gem::Dependency
|
|
70
|
-
name:
|
|
70
|
+
name: rspec
|
|
71
71
|
requirement: !ruby/object:Gem::Requirement
|
|
72
72
|
requirements:
|
|
73
73
|
- - "~>"
|
|
74
74
|
- !ruby/object:Gem::Version
|
|
75
|
-
version: '
|
|
75
|
+
version: '3.12'
|
|
76
76
|
type: :development
|
|
77
77
|
prerelease: false
|
|
78
78
|
version_requirements: !ruby/object:Gem::Requirement
|
|
79
79
|
requirements:
|
|
80
80
|
- - "~>"
|
|
81
81
|
- !ruby/object:Gem::Version
|
|
82
|
-
version: '
|
|
82
|
+
version: '3.12'
|
|
83
83
|
- !ruby/object:Gem::Dependency
|
|
84
|
-
name:
|
|
84
|
+
name: simplecov
|
|
85
85
|
requirement: !ruby/object:Gem::Requirement
|
|
86
86
|
requirements:
|
|
87
87
|
- - "~>"
|
|
88
88
|
- !ruby/object:Gem::Version
|
|
89
|
-
version: '0.
|
|
89
|
+
version: '0.22'
|
|
90
90
|
type: :development
|
|
91
91
|
prerelease: false
|
|
92
92
|
version_requirements: !ruby/object:Gem::Requirement
|
|
93
93
|
requirements:
|
|
94
94
|
- - "~>"
|
|
95
95
|
- !ruby/object:Gem::Version
|
|
96
|
-
version: '0.
|
|
96
|
+
version: '0.22'
|
|
97
|
+
- !ruby/object:Gem::Dependency
|
|
98
|
+
name: simplecov-console
|
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
|
100
|
+
requirements:
|
|
101
|
+
- - "~>"
|
|
102
|
+
- !ruby/object:Gem::Version
|
|
103
|
+
version: '0.9'
|
|
104
|
+
type: :development
|
|
105
|
+
prerelease: false
|
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
|
107
|
+
requirements:
|
|
108
|
+
- - "~>"
|
|
109
|
+
- !ruby/object:Gem::Version
|
|
110
|
+
version: '0.9'
|
|
97
111
|
description: Ruby library for KISS communication with Terminal Node Controllers.
|
|
98
112
|
email:
|
|
99
113
|
- jeffrey.freeman@syncleus.com
|
|
@@ -102,7 +116,9 @@ extensions: []
|
|
|
102
116
|
extra_rdoc_files: []
|
|
103
117
|
files:
|
|
104
118
|
- ".gitignore"
|
|
119
|
+
- ".rspec"
|
|
105
120
|
- CHANGELOG.md
|
|
121
|
+
- CONTRIBUTORS.md
|
|
106
122
|
- Gemfile
|
|
107
123
|
- LICENSE
|
|
108
124
|
- README.md
|
|
@@ -114,14 +130,12 @@ files:
|
|
|
114
130
|
- lib/kiss/constants.rb
|
|
115
131
|
- lib/kiss/kiss_abstract.rb
|
|
116
132
|
- lib/kiss/kiss_serial.rb
|
|
117
|
-
|
|
118
|
-
- lib/kiss/test/kiss_mock.rb
|
|
119
|
-
homepage: https://github.com/Syncleus/aprs
|
|
133
|
+
homepage: https://git.qoto.org/digipex/kiss-tnc
|
|
120
134
|
licenses:
|
|
121
135
|
- Apache-2.0
|
|
122
136
|
metadata:
|
|
123
137
|
allowed_push_host: https://rubygems.org
|
|
124
|
-
post_install_message:
|
|
138
|
+
post_install_message:
|
|
125
139
|
rdoc_options: []
|
|
126
140
|
require_paths:
|
|
127
141
|
- lib
|
|
@@ -136,9 +150,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
|
136
150
|
- !ruby/object:Gem::Version
|
|
137
151
|
version: '0'
|
|
138
152
|
requirements: []
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
signing_key:
|
|
153
|
+
rubygems_version: 3.4.17
|
|
154
|
+
signing_key:
|
|
142
155
|
specification_version: 4
|
|
143
156
|
summary: Library for KISS communication with TNCs.
|
|
144
157
|
test_files: []
|
data/lib/kiss/test/kiss_mock.rb
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
require 'kiss/kiss_abstract'
|
|
2
|
-
|
|
3
|
-
module Kiss
|
|
4
|
-
class KissMock < KissAbstract
|
|
5
|
-
|
|
6
|
-
def initialize(strip_df_start=true)
|
|
7
|
-
super(strip_df_start)
|
|
8
|
-
@read_from_interface = []
|
|
9
|
-
@sent_to_interface = []
|
|
10
|
-
end
|
|
11
|
-
|
|
12
|
-
protected
|
|
13
|
-
def read_interface
|
|
14
|
-
if @read_from_interface.length == 0
|
|
15
|
-
return nil
|
|
16
|
-
end
|
|
17
|
-
return @read_from_interface.shift
|
|
18
|
-
end
|
|
19
|
-
|
|
20
|
-
protected
|
|
21
|
-
def write_interface(data)
|
|
22
|
-
@sent_to_interface << data
|
|
23
|
-
end
|
|
24
|
-
|
|
25
|
-
public
|
|
26
|
-
def clear_interface
|
|
27
|
-
@read_from_interface = []
|
|
28
|
-
@sent_to_interface = []
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
public
|
|
32
|
-
def add_read_from_interface(raw_frame)
|
|
33
|
-
@read_from_interface << raw_frame
|
|
34
|
-
end
|
|
35
|
-
|
|
36
|
-
public
|
|
37
|
-
def get_sent_to_interface
|
|
38
|
-
return @sent_to_interface
|
|
39
|
-
end
|
|
40
|
-
end
|
|
41
|
-
end
|
data/lib/kiss/test.rb
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
require 'kiss/test/kiss_mock'
|