Sha256: a1dff6f36860b5724f17963e5708b1e266a53e907da78034e0f77e89dac28bc4

Contents?: true

Size: 1.72 KB

Versions: 16

Compression:

Stored size: 1.72 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 :Servo
    autoload :TwoWheelDriveCar

    autoload :Button
    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,
        baud: 115_200
      }
      opt = Util.process_options(options, defaults)

      if Dino::VERSION >= '0.11'
        txrx = Dino::TxRx.new(opt)
      elsif Dino::VERSION >= '0.10'
        txrx = Dino::TxRx.new
        txrx.io = opt[:device] if opt[:device]
      end
      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

16 entries across 16 versions & 1 rubygems

Version Path
smalruby-0.0.22-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.22 lib/smalruby/hardware.rb
smalruby-0.0.21-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.21 lib/smalruby/hardware.rb
smalruby-0.0.20-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.20 lib/smalruby/hardware.rb
smalruby-0.0.19-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.19 lib/smalruby/hardware.rb
smalruby-0.0.18-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.18 lib/smalruby/hardware.rb
smalruby-0.0.17-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.17 lib/smalruby/hardware.rb
smalruby-0.0.16-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.16 lib/smalruby/hardware.rb
smalruby-0.0.15-x86-mingw32 lib/smalruby/hardware.rb
smalruby-0.0.15 lib/smalruby/hardware.rb