Sha256: 6420a8bb86e7ba2aa2cec2b142aee8a20eaf9e016505a81fdb1cd2c86865c6f7

Contents?: true

Size: 1.51 KB

Versions: 12

Compression:

Stored size: 1.51 KB

Contents

# -*- coding: utf-8 -*-
require 'dino'
require 'mutex_m'
require_relative 'hardware/dino/fix_gets'

module Smalruby
  # ハードウェアの名前空間
  module Hardware
    extend ActiveSupport::Autoload

    autoload :Pin
    autoload :Led
    autoload :RgbLedAnode
    autoload :RgbLedCathode
    autoload :Sensor

    module_function

    # ハードウェアを準備する
    #
    # @param [Hash] options オプション
    # @option options [String] :device シリアルポートのデバイス名。
    #   WindowsだとCOM1など
    def init(options = {})
      return if @initialized_hardware
      fail 'already started.' if @started

      defaults = {
        device: nil
      }
      opt = Util.process_options(options, defaults)

      txrx = Dino::TxRx.new
      txrx.io = opt[:device] if opt[:device]
      world.board = Dino::Board.new(txrx)

      @initialized_hardware = true
    end

    # ハードウェアのインスタンスを生成する
    #
    # 作成したハードウェアのインスタンスはキャッシュする
    #
    # @param [Class] klass ハードウェアのクラス
    # @param [String|Numeric] pin ピン番号
    # @return [Object] ハードウェアのインスタンス
    def create_hardware(klass, pin)
      key = [klass, pin]
      @hardware_cache.synchronize do
        @hardware_cache[key] ||= klass.new(pin: pin)
      end
      @hardware_cache[key]
    end

    private

    @initialized_hardware = false
    @hardware_cache = {}
    @hardware_cache.extend(Mutex_m)
  end
end

Version data entries

12 entries across 12 versions & 1 rubygems

Version Path
smalruby-0.0.12-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.12 lib/smalruby/hardware.rb
smalruby-0.0.11-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.11 lib/smalruby/hardware.rb
smalruby-0.0.10-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.10 lib/smalruby/hardware.rb
smalruby-0.0.9-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.9 lib/smalruby/hardware.rb
smalruby-0.0.8-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.8 lib/smalruby/hardware.rb
smalruby-0.0.7-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.7 lib/smalruby/hardware.rb