Sha256: bda86b6d72786bb98d9cba9c43d2f2164c2b806088c5c4e005c5ee0fb7d6aec7

Contents?: true

Size: 1.4 KB

Versions: 7

Compression:

Stored size: 1.4 KB

Contents

module Denko
  module UART
    class UARTRxPin
      include Behaviors::InputPin
      include Behaviors::Callbacks
    end

    class BitBang
      include Behaviors::MultiPin
      include Behaviors::Callbacks
      
      attr_reader :baud

      def initialize_pins(options={})
        require_pin(:tx)
        proxy_pin(:rx, UARTRxPin)
      end

      def after_initialize(options={})
        hook_rx_callback
        initialize_buffer
        start(options[:baud] || 9600)
      end

      def initialize_buffer
        @buffer       = ""
        @buffer_mutex = Mutex.new
        self.add_callback(:buffer) do |data|
          @buffer_mutex.synchronize do
            @buffer = "#{@buffer}#{data}"
          end
        end
      end

      def gets
        @buffer_mutex.synchronize do
          newline = @buffer.index("\n")
          return nil unless newline
          line = @buffer[0..newline-1]
          @buffer = @buffer[newline+1..-1]
          return line
        end
      end

      def flush
        @buffer_mutex.synchronize do
          @buffer = ""
        end
      end

      def start(baud)
        @baud = baud
        board.uart_bb_start(pins[:tx], pins[:rx], @baud)
      end

      def stop()
        board.uart_bb_stop
      end

      def write(data)
        board.uart_bb_write(data)
      end

      def hook_rx_callback
        rx.add_callback {|data| self.update(data)}
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
denko-0.13.6 lib/denko/uart/bit_bang.rb
denko-0.13.5 lib/denko/uart/bit_bang.rb
denko-0.13.4 lib/denko/uart/bit_bang.rb
denko-0.13.3 lib/denko/uart/bit_bang.rb
denko-0.13.2 lib/denko/uart/bit_bang.rb
denko-0.13.1 lib/denko/uart/bit_bang.rb
denko-0.13.0 lib/denko/uart/bit_bang.rb