Class: DACPClient::DMAPConverter
- Inherits:
-
Object
- Object
- DACPClient::DMAPConverter
- Defined in:
- lib/dacpclient/dmapconverter.rb
Overview
The DMAPConverter class converts between binary and ruby formats
Class Method Summary collapse
- .bin_to_bool(data) ⇒ Object
- .bin_to_byte(data) ⇒ Object
- .bin_to_date(data) ⇒ Object
- .bin_to_hex(data) ⇒ Object
- .bin_to_int(data) ⇒ Object (also: bin_to_uint32)
- .bin_to_long(data) ⇒ Object (also: bin_to_uint64)
- .bin_to_short(data) ⇒ Object (also: bin_to_uint16)
- .bin_to_string(data) ⇒ Object (also: string_to_bin)
- .bin_to_version(data) ⇒ Object
- .bool_to_bin(data) ⇒ Object
- .byte_to_bin(data) ⇒ Object
- .date_to_bin(data) ⇒ Object
- .decode(type, data) ⇒ Object
- .decode_unknown(data) ⇒ Object (also: bin_to_unknown)
- .encode(type, data) ⇒ Object
- .hex_to_bin(data) ⇒ Object
- .int_to_bin(data) ⇒ Object (also: uint32_to_bin)
- .long_to_bin(data) ⇒ Object (also: uint64_to_bin)
- .short_to_bin(data) ⇒ Object (also: uint16_to_bin)
- .version_to_bin(data) ⇒ Object
Class Method Details
.bin_to_bool(data) ⇒ Object
25 26 27 |
# File 'lib/dacpclient/dmapconverter.rb', line 25 def bin_to_bool(data) data == "\x01" end |
.bin_to_byte(data) ⇒ Object
9 10 11 |
# File 'lib/dacpclient/dmapconverter.rb', line 9 def bin_to_byte(data) data.unpack('C').first end |
.bin_to_date(data) ⇒ Object
37 38 39 |
# File 'lib/dacpclient/dmapconverter.rb', line 37 def bin_to_date(data) Time.at(bin_to_int(data)) end |
.bin_to_hex(data) ⇒ Object
33 34 35 |
# File 'lib/dacpclient/dmapconverter.rb', line 33 def bin_to_hex(data) data.bytes.reduce('') { |a, e| a + sprintf('%02X', e) } end |
.bin_to_int(data) ⇒ Object Also known as: bin_to_uint32
17 18 19 |
# File 'lib/dacpclient/dmapconverter.rb', line 17 def bin_to_int(data) data.unpack('N').first end |
.bin_to_long(data) ⇒ Object Also known as: bin_to_uint64
13 14 15 |
# File 'lib/dacpclient/dmapconverter.rb', line 13 def bin_to_long(data) (bin_to_int(data[0..3]) << 32) + bin_to_int(data[4..7]) end |
.bin_to_short(data) ⇒ Object Also known as: bin_to_uint16
21 22 23 |
# File 'lib/dacpclient/dmapconverter.rb', line 21 def bin_to_short(data) data.unpack('n').first end |
.bin_to_string(data) ⇒ Object Also known as: string_to_bin
84 85 86 |
# File 'lib/dacpclient/dmapconverter.rb', line 84 def bin_to_string(data) data end |
.bin_to_version(data) ⇒ Object
29 30 31 |
# File 'lib/dacpclient/dmapconverter.rb', line 29 def bin_to_version(data) data.unpack('nCC').join '.' end |
.bool_to_bin(data) ⇒ Object
41 42 43 |
# File 'lib/dacpclient/dmapconverter.rb', line 41 def bool_to_bin(data) (data ? 1 : 0).chr end |
.byte_to_bin(data) ⇒ Object
49 50 51 |
# File 'lib/dacpclient/dmapconverter.rb', line 49 def byte_to_bin(data) [data.to_i].pack 'C' end |
.date_to_bin(data) ⇒ Object
5 6 7 |
# File 'lib/dacpclient/dmapconverter.rb', line 5 def date_to_bin(data) int_to_bin(value.to_i) end |
.decode(type, data) ⇒ Object
98 99 100 101 102 103 104 105 106 |
# File 'lib/dacpclient/dmapconverter.rb', line 98 def decode(type, data) decode_method = ('bin_to_' + type.to_s).to_sym if respond_to? decode_method send(decode_method, data) else warn "Decoder: Unknown type #{type}" decode_unknown(data) end end |
.decode_unknown(data) ⇒ Object Also known as: bin_to_unknown
69 70 71 72 73 74 75 76 77 78 79 80 81 82 |
# File 'lib/dacpclient/dmapconverter.rb', line 69 def decode_unknown(data) if data =~ /[^\x20-\x7e]/ # non-readable characters if data.bytesize == 1 return DMAPConverter.bin_to_byte(data) elsif data.bytesize == 2 return DMAPConverter.bin_to_short(data) elsif data.bytesize == 4 return DMAPConverter.bin_to_int(data) elsif data.bytesize == 8 return DMAPConverter.bin_to_long(data) end end data end |
.encode(type, data) ⇒ Object
108 109 110 111 112 113 114 115 116 |
# File 'lib/dacpclient/dmapconverter.rb', line 108 def encode(type, data) encode_method = (type.to_s + '_to_bin').to_sym if respond_to? encode_method send(encode_method, data) else warn "Encoder: Unknown type #{type}" data end end |
.hex_to_bin(data) ⇒ Object
65 66 67 |
# File 'lib/dacpclient/dmapconverter.rb', line 65 def hex_to_bin(data) [data].pack 'H*' end |
.int_to_bin(data) ⇒ Object Also known as: uint32_to_bin
45 46 47 |
# File 'lib/dacpclient/dmapconverter.rb', line 45 def int_to_bin(data) [data.to_i].pack 'N' end |
.long_to_bin(data) ⇒ Object Also known as: uint64_to_bin
53 54 55 |
# File 'lib/dacpclient/dmapconverter.rb', line 53 def long_to_bin(data) [data >> 32, data & 0xfffffff].pack 'NN' end |
.short_to_bin(data) ⇒ Object Also known as: uint16_to_bin
57 58 59 |
# File 'lib/dacpclient/dmapconverter.rb', line 57 def short_to_bin(data) [data.to_i].pack 'n' end |
.version_to_bin(data) ⇒ Object
61 62 63 |
# File 'lib/dacpclient/dmapconverter.rb', line 61 def version_to_bin(data) data.split('.').pack 'nCC' end |