Class: Jfy::Packet

Inherits:
Object
  • Object
show all
Defined in:
lib/jfy/packet.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(code, data = [], options = {}) ⇒ Packet

Returns a new instance of Packet.



5
6
7
8
9
10
11
12
# File 'lib/jfy/packet.rb', line 5

def initialize(code, data = [], options = {})
  @header = [0xA5, 0xA5]
  @src = options[:src] || 0x01
  @dst = options[:dst] || 0x01
  @ctrl, @func = code
  @data = data || []
  @ender = [0x0A, 0x0D]
end

Instance Attribute Details

#dataObject (readonly)

Returns the value of attribute data.



3
4
5
# File 'lib/jfy/packet.rb', line 3

def data
  @data
end

Instance Method Details

#ack?Boolean

Returns:

  • (Boolean)


18
19
20
# File 'lib/jfy/packet.rb', line 18

def ack?
  @data == [0x06]
end

#checksumObject



30
31
32
33
34
35
36
37
38
39
40
41
# File 'lib/jfy/packet.rb', line 30

def checksum
  @checksum ||= begin
    sum = sub_packet.inject(:+)
    sum ^= 0xffff
    sum += 1

    left = (sum & 0xffff) >> 8
    right = sum & 0x00ff

    [left, right]
  end
end

#commandObject



14
15
16
# File 'lib/jfy/packet.rb', line 14

def command
  [@ctrl, @func]
end

#decodeObject



43
44
45
# File 'lib/jfy/packet.rb', line 43

def decode
  @data.pack('c*')
end

#inspectObject



51
52
53
54
55
56
57
# File 'lib/jfy/packet.rb', line 51

def inspect
  hex = @data.map { |d| "0x#{d.to_s(16)}" }.join(' ')
  csum = checksum.map { |d| "0x#{d.to_s(16)}" }.join(' ')
  data = decode.encode('ASCII', :invalid => :replace, :undef => :replace)
  format('<Jfy::Packet:0x%02x @ctrl=0x%02X @func=0x%02X @data=[%s] @hex=[%s] @csum=[%s]>',
         object_id, @ctrl, @func, data, hex, csum)
end

#packetObject



26
27
28
# File 'lib/jfy/packet.rb', line 26

def packet
  @packet ||= sub_packet + checksum + @ender
end

#sub_packetObject



22
23
24
# File 'lib/jfy/packet.rb', line 22

def sub_packet
  @sub_packet ||= @header + [@src, @dst, @ctrl, @func, @data.size] + @data
end

#to_sObject



47
48
49
# File 'lib/jfy/packet.rb', line 47

def to_s
  packet.pack('c*')
end