class LIFX::LAN::Firmware
LIFX::LAN::Firmware
handles decoding firmware payloads @private
Public Class Methods
new(payload)
click to toggle source
# File lib/lifx/lan/firmware.rb, line 10 def initialize(payload) self.build_time = decode_time(payload.build) self.major = (payload.version >> 0x10) self.minor = (payload.version & 0xFF) end
Public Instance Methods
<=>(obj)
click to toggle source
# File lib/lifx/lan/firmware.rb, line 21 def <=>(obj) case obj when String major, minor = obj.split('.', 2).map(&:to_i) [self.major, self.minor] <=> [major, minor] when Firmware [self.major, self.minor] <=> [obj.major, obj.minor] else nil end end
to_s()
click to toggle source
# File lib/lifx/lan/firmware.rb, line 16 def to_s "#<Firmware version=#{self.major}.#{self.minor}>" end
Also aliased as: inspect
Protected Instance Methods
byte(n, pos)
click to toggle source
# File lib/lifx/lan/firmware.rb, line 51 def byte(n, pos) 0xFF & (n >> pos) end
bytes(n, *range)
click to toggle source
# File lib/lifx/lan/firmware.rb, line 55 def bytes(n, *range) range.map {|r| byte(n, r)} end
decode_time(int)
click to toggle source
# File lib/lifx/lan/firmware.rb, line 36 def decode_time(int) if int < 1300000000000000000 year = byte(int, 56) + 2000 month = bytes(int, 48, 40, 32).map(&:chr).join day = byte(int, 24) hour = byte(int, 16) min = byte(int, 8) sec = byte(int, 0) # Don't want to pull in DateTime just for DateTime.new Time.parse("%s %d %04d, %02d:%02d:%02d" % [month, day, year, hour, min, sec]) else Time.at(int / 1000000000) end end