Sha256: 74d25a0c13f2d5087ead8ec3af2f093b4868272f7fea7f9ff738ebab08f6832f

Contents?: true

Size: 1.63 KB

Versions: 7

Compression:

Stored size: 1.63 KB

Contents

class ProconBypassMan::Procon::ButtonCollection
  # https://github.com/dekuNukem/Nintendo_Switch_Reverse_Engineering/blob/ac8093c84194b3232acb675ac1accce9bcb456a3/bluetooth_hid_notes.md
  #0) Input report ID
  #1) Timer. Increments very fast. Can be used to estimate excess Bluetooth latency.
  #2 high nibble) Battery level. 8=full, 6=medium, 4=low, 2=critical, 0=empty. LSB=Charging.
  #2 low nibble) Connection info. (con_info >> 1) & 3 - 3=JC, 0=Pro/ChrGrip. con_info & 1 - 1=Switch/USB powered.
  #3)  ZR	R	SR(right)	SL(right)	A	B	X	Y
  #4)  Grip	(none)	Cap	Home	ThumbL	ThumbR	+	-
  #5)  ZL	L	SL(left)	SR(left)	Left	Right	Up	Down
  #6)  analog[0] Left analog stick data
  #7)  analog[1] Left analog stick data
  #8)  analog[2] Left analog stick data
  #9)  analog[3] Right analog stick data
  #a)  analog[4] Right analog stick data
  #b)  analog[5] Right analog stick data
  BYTES_MAP = {
    0 => nil,
    1 => nil,
    2 => nil,
    3 => [:zr, :r, :sr, :sl, :a, :b, :x, :y],
    4 => [:grip, :_undefined_key, :cap, :home, :thumbl, :thumbr, :plus, :minus],
    5 => [:zl, :l, :sl, :sr, :left, :right, :up, :down],
    6 => [],
    7 => [],
    8 => [],
  }.freeze

  BUTTONS_MAP = BYTES_MAP.reduce({}) { |acc, value|
    next acc if value[1].nil?
    value[1].reverse.each.with_index do |button, index|
      next(acc) if button == :grip || button == :_undefined_key
      acc[button] = { byte_position: value[0], bit_position: index }
    end
    acc
  }.freeze

  BUTTONS = ProconBypassMan::Procon::ButtonCollection::BUTTONS_MAP.keys.freeze

  LEFT_ANALOG_STICK = { byte_position: 6..8 }

  # @return [Array<Symbol>]
  def self.available
    BUTTONS
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
procon_bypass_man-0.3.12 lib/procon_bypass_man/procon/button_collection.rb
procon_bypass_man-0.3.11 lib/procon_bypass_man/procon/button_collection.rb
procon_bypass_man-0.3.10 lib/procon_bypass_man/procon/button_collection.rb
procon_bypass_man-0.3.9 lib/procon_bypass_man/procon/button_collection.rb
procon_bypass_man-0.3.8.1 lib/procon_bypass_man/procon/button_collection.rb
procon_bypass_man-0.3.8 lib/procon_bypass_man/procon/button_collection.rb
procon_bypass_man-0.3.7 lib/procon_bypass_man/procon/button_collection.rb