From 5c87c39e0ce845e4fe04c64f7b75e5d38a69fd70 Mon Sep 17 00:00:00 2001 From: Jeffrey Phillips Freeman <jeffrey.freeman@syncleus.com> Date: Sat, 1 Oct 2016 15:54:15 -0400 Subject: [PATCH] Fixed a bug revealed with the new unit tests. --- lib/aprs/aprs_kiss.rb | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/lib/aprs/aprs_kiss.rb b/lib/aprs/aprs_kiss.rb index 60f2716..106414b 100644 --- a/lib/aprs/aprs_kiss.rb +++ b/lib/aprs/aprs_kiss.rb @@ -17,7 +17,7 @@ module Aprs if frame_len > 16 (0...frame_len - 2).each do |raw_slice| # Is address field length correct? - if raw_frame[raw_slice] & 0x01 and ((raw_slice + 1) % 7) == 0 + if raw_frame[raw_slice] & 0x01 != 0 and ((raw_slice + 1) % 7) == 0 i = (raw_slice.to_f + 1.0) / 7.0 # Less than 2 callsigns? if 1.0 < i and i < 11.0 @@ -42,8 +42,8 @@ module Aprs (2...start).each do |i| path = identity_as_string(extract_callsign(raw_frame[i * 7..-1])) - if path - if raw_frame[i * 7 + 6] & 0x80 + if path&.length + if raw_frame[i * 7 + 6] & 0x80 != 0 full_path << [path, '*'].join else full_path << path @@ -58,12 +58,13 @@ module Aprs callsign_as_array = raw_frame[0...6].map { |x| (x >> 1).chr } callsign = callsign_as_array.join.strip ssid = (raw_frame[6] >> 1) & 0x0f + ssid = (ssid == nil or ssid == 0 ? nil : ssid) return {:callsign => callsign, :ssid => ssid} end private def self.identity_as_string(identity) - if identity[:ssid] + if identity[:ssid] and identity[:ssid] > 0 return [identity[:callsign], identity[:ssid].to_s].join('-') else return identity[:callsign] @@ -73,11 +74,12 @@ module Aprs private def self.encode_frame(frame) enc_frame = encode_callsign(parse_identity_string(frame[:destination])) + encode_callsign(parse_identity_string(frame[:source])) - frame[:path].each do |p| - enc_frame += encode_callsign(parse_identity_string(p)) + + frame[:path].each do |path| + enc_frame += encode_callsign(parse_identity_string(path)) end - return enc_frame[0..-1] + [enc_frame[-1] | 0x01] + [Kiss::SLOT_TIME] + [0xf0] + frame[:text].chars.map { |c| c.ord } + return enc_frame[0...-1] + [enc_frame[-1] | 0x01] + [Kiss::SLOT_TIME] + [0xf0] + frame[:text].chars.map { |c| c.ord } end private -- GitLab