class Apa102Rbpi::Strip

Attributes

base[R]
brightness[RW]
head[R]
led_frame_rgb_offsets[RW]
mirrors[R]
num_leds[R]
tail[R]

Public Class Methods

new(len = Apa102Rbpi.base.num_leds, opts = {}) click to toggle source
# File lib/apa102_rbpi/strip.rb, line 8
def initialize(len = Apa102Rbpi.base.num_leds, opts = {})
  @base = Apa102Rbpi.base
  if len.is_a?(Array)
    @head = len[0]
    @tail = len[1]
    if @head > @tail
      raise "Beginning of strip can't be a higher index than end"
    end
    @num_leds = (@tail - @head) + 1
  else
    @num_leds = len
    @head = 0
    @tail = @num_leds - 1
  end

  @reverse = false

  @led_frame_rgb_offsets = opts[:led_frame_rgb_offsets] || @base.led_frame_rgb_offsets
  @brightness = opts[:brightness] || @base.brightness
  @mirrors = Set.new
end

Public Instance Methods

clear() click to toggle source
# File lib/apa102_rbpi/strip.rb, line 111
def clear
  @num_leds.times do |led_idx|
    set_pixel(led_idx, 0)
  end
end
clear!() click to toggle source
# File lib/apa102_rbpi/strip.rb, line 117
def clear!
  clear
  show!
end
clear_mirrors() click to toggle source
# File lib/apa102_rbpi/strip.rb, line 45
def clear_mirrors
  @mirrors.each do |m|
    m.mirrors -= [self]
  end

  @mirrors.clear
end
mirror(other_strip) click to toggle source
# File lib/apa102_rbpi/strip.rb, line 38
def mirror(other_strip)
  new_mirrors = @mirrors + other_strip.mirrors + Set.new([self, other_strip])
  new_mirrors.each do |m|
    m.mirrors += (new_mirrors - [m])
  end
end
reverse() click to toggle source
# File lib/apa102_rbpi/strip.rb, line 30
def reverse
  @reverse = !@reverse
end
reversed?() click to toggle source
# File lib/apa102_rbpi/strip.rb, line 34
def reversed?
  @reverse
end
set_all_pixels(color, brightness = @brightness) click to toggle source
# File lib/apa102_rbpi/strip.rb, line 100
def set_all_pixels(color, brightness = @brightness)
  @num_leds.times do |led_idx|
    set_pixel(led_idx, color, brightness)
  end
end
set_all_pixels!(color, brightness = @brightness) click to toggle source
# File lib/apa102_rbpi/strip.rb, line 106
def set_all_pixels!(color, brightness = @brightness)
  set_all_pixels(color, brightness)
  show!
end
set_pixel(pos, color, brightness = nil) click to toggle source
# File lib/apa102_rbpi/strip.rb, line 57
def set_pixel(pos, color, brightness = nil)
  is_hex = if color.is_a?(Integer)
              true
           elsif color.is_a?(Array)
             false
           else
             raise 'Invalid color'
           end

  set_pixel_helper(pos, color, is_hex, brightness || @brightness)
  unless @mirrors.empty?
    @mirrors.each do |strip|
      strip.set_pixel_helper(pos, color, is_hex, brightness || strip.brightness)
    end
  end
end
set_pixel!(pos, color, brightness = @brightness) click to toggle source
# File lib/apa102_rbpi/strip.rb, line 95
def set_pixel!(pos, color, brightness = @brightness)
  set_pixel(pos, color, brightness)
  show!
end
set_pixel_helper(pos, color, is_hex, brightness) click to toggle source
# File lib/apa102_rbpi/strip.rb, line 74
def set_pixel_helper(pos, color, is_hex, brightness)
  led_frame_hdr = (brightness & 0b00011111) | 0b11100000
  idx = if @reverse
          4 * ((@tail - pos) % @base.num_leds)
        else
          4 * ((pos + @head) % @base.num_leds)
        end

  if is_hex
    @base.led_frames[idx] = led_frame_hdr
    @base.led_frames[idx + @led_frame_rgb_offsets[:red]] = (color & 0xFF0000) >> 16
    @base.led_frames[idx + @led_frame_rgb_offsets[:green]] = (color & 0x00FF00) >> 8
    @base.led_frames[idx + @led_frame_rgb_offsets[:blue]] = (color & 0x0000FF)
  else
    @base.led_frames[idx] = led_frame_hdr
    @base.led_frames[idx + @led_frame_rgb_offsets[:red]] = color[0]
    @base.led_frames[idx + @led_frame_rgb_offsets[:green]] = color[1]
    @base.led_frames[idx + @led_frame_rgb_offsets[:blue]] = color[2]
  end
end
show!() click to toggle source
# File lib/apa102_rbpi/strip.rb, line 53
def show!
  @base.show!
end

Protected Instance Methods

mirrors=(m) click to toggle source
# File lib/apa102_rbpi/strip.rb, line 124
def mirrors=(m)
  @mirrors = m
end