procon_bypass_man 0.1.10 → 0.1.11

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (33) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +4 -1
  3. data/Gemfile.lock +2 -1
  4. data/README.md +3 -3
  5. data/bin/console +4 -0
  6. data/bin/{report_receive_server.rb → dev_api_server.rb} +7 -0
  7. data/lib/procon_bypass_man/background/report_thread.rb +42 -0
  8. data/lib/procon_bypass_man/buttons_setting_configuration.rb +4 -2
  9. data/lib/procon_bypass_man/bypass/usb_hid_logger.rb +7 -0
  10. data/lib/procon_bypass_man/bypass.rb +0 -1
  11. data/lib/procon_bypass_man/configuration.rb +1 -2
  12. data/lib/procon_bypass_man/outbound/base.rb +18 -5
  13. data/lib/procon_bypass_man/outbound/error_reporter.rb +1 -1
  14. data/lib/procon_bypass_man/outbound/{usb_hid_data_reporter.rb → pressed_buttons_reporter.rb} +3 -3
  15. data/lib/procon_bypass_man/outbound/reporter.rb +1 -1
  16. data/lib/procon_bypass_man/procon/analog_stick.rb +31 -0
  17. data/lib/procon_bypass_man/procon/analog_stick_cap.rb +9 -32
  18. data/lib/procon_bypass_man/procon/button_collection.rb +1 -0
  19. data/lib/procon_bypass_man/procon/pressed_button_helper.rb +1 -1
  20. data/lib/procon_bypass_man/procon/user_operation.rb +1 -1
  21. data/lib/procon_bypass_man/procon.rb +3 -1
  22. data/lib/procon_bypass_man/readonly_procon.rb +32 -0
  23. data/lib/procon_bypass_man/runner.rb +3 -0
  24. data/lib/procon_bypass_man/version.rb +1 -1
  25. data/lib/procon_bypass_man.rb +3 -3
  26. data/project_template/app.rb +2 -2
  27. data/project_template/web.rb +1 -1
  28. data/sig/main.rbs +3 -3
  29. metadata +8 -9
  30. data/examples/practical/app.rb +0 -21
  31. data/examples/practical/setting.yml +0 -24
  32. data/lib/procon_bypass_man/analog_stick_position.rb +0 -8
  33. data/lib/procon_bypass_man/procon/debug_dumper.rb +0 -17
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 1a0674ff73c1ac25e311e304e7a3736e3feadb9f8d1221453202abbce8e00372
4
- data.tar.gz: 29e63c8ee818a1ca3fe62de9152779cdbea38167db19824e0f402145dec36c04
3
+ metadata.gz: ead44cd36352dba5f4bd97af9c99936657a1a896fb9793a6735ce730a045b6f1
4
+ data.tar.gz: b8d115ef493d0b58a064fc7a0a7348a66e9e331e8173edd7543d96e9e213daba
5
5
  SHA512:
6
- metadata.gz: 2bbbce43d9ed8495f513b5cbd9688f0187f3fd64cdd932730c3938ba8d5e43d4c8e3b15118082742bb1692d95aa66537ccc501930cd778144d7639460d98c32e
7
- data.tar.gz: 2a2276871754b37296e2dff2c4b0d3f1cc3822ecb4b5c55e61c2eba4996951072af69e990742463fa282cf57a5f956439a70304402cc4a208be8cd1a43309bb1
6
+ metadata.gz: 3229e5e9f0fef53072b4869af2c6469b55703804d12bd8a9d077fe7c413d2198f747d482b30134daa4da55a0c5309eeda45d9928e46cd7778391ed865720ca00
7
+ data.tar.gz: 2de07a44334162b54ca8ba2464286c12a7a21d6ef74cb36b39a97bd5e22a833a5a6a5af2dac5ba6382da99a8635cdd9bd196a98d7f63dac311a4e61c2387ecad
data/CHANGELOG.md CHANGED
@@ -1,4 +1,7 @@
1
- ## [0.1.10] - 202
1
+ ## [0.1.11] - 2021-11-05
2
+ - PBM-WEB(>= 0.1.3)でボタンの入力を見るためのスレッドが動くようになりました
3
+
4
+ ## [0.1.10] - 2021-10-28
2
5
  - ボタンを無効化するdisableを設定できるようになりました
3
6
  - pvmenvで生成する初期ファイルにprocon_bypass_man-webを同梱しました
4
7
  - PBM自体の設定の構文を変更しました
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- procon_bypass_man (0.1.10)
4
+ procon_bypass_man (0.1.11)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -97,6 +97,7 @@ GEM
97
97
  PLATFORMS
98
98
  arm-linux
99
99
  arm64-darwin-20
100
+ arm64-darwin-21
100
101
  armv7l-linux
101
102
  x86_64-linux
102
103
 
data/README.md CHANGED
@@ -70,13 +70,13 @@ sudo kill -USR2 `cat ./pbm_pid`
70
70
  * `ProconBypassMan.api_server = "http://.."` を設定すると、 `POST /api/reports` に対して起動ログを送信するようになります
71
71
 
72
72
  ### 開発環境でログの送信を確認する方法
73
- * `bundle exec bin/report_receive_server.rb`
74
- * `bin/console`
75
- * `ProconBypassMan.api_server = "http://localhost:4567"`
73
+ * `bundle exec bin/dev_api_server.rb`
74
+ * `INTERNAL_API_SERVER=http://localhost:4567 bin/console`
76
75
  * `message = ProconBypassMan::BootMessage.new; ProconBypassMan::Reporter.report(body: message.to_hash)"`
77
76
 
78
77
  ### リリース手順
79
78
  * project_template/web.rb, project_template/app.rb, lib/procon_bypass_man/version.rb のバージョンをあげる
79
+ * CHANGELOG.md に日付を書く
80
80
  * be rake release
81
81
 
82
82
  ## License
data/bin/console CHANGED
@@ -3,6 +3,7 @@
3
3
 
4
4
  require "bundler/setup"
5
5
  require "procon_bypass_man"
6
+ require "pry"
6
7
 
7
8
  # You can add fixtures and/or initialization code here to make experimenting
8
9
  # with your gem easier. You can also use a different console, if you like.
@@ -12,4 +13,7 @@ require "procon_bypass_man"
12
13
  # Pry.start
13
14
 
14
15
  require "irb"
16
+
17
+ ProconBypassMan.config.logger = Logger.new($stdout)
18
+
15
19
  IRB.start(__FILE__)
@@ -9,3 +9,10 @@ post '/api/reports' do
9
9
  status 200
10
10
  body ''
11
11
  end
12
+
13
+ post '/api/pressed_buttons' do
14
+ r = JSON.parse(request.body.read)
15
+ puts r
16
+ status 200
17
+ body ''
18
+ end
@@ -0,0 +1,42 @@
1
+ module ProconBypassMan
2
+ module Background
3
+ class Reporter
4
+ MAX_QUEUE_SIZE = 100
5
+
6
+ def self.start!
7
+ new.start!
8
+ end
9
+
10
+ def start!
11
+ return if defined?(@@thread)
12
+ @@latest_request_result = { stats: true, timestamp: Time.now }
13
+ @@queue = Queue.new
14
+ @@thread = Thread.new do
15
+ while(item = @@queue.pop)
16
+ begin
17
+ result = item[:reporter_class].report(body: item[:data])
18
+ @@latest_request_result = { stats: result.stats, timestamp: Time.now }
19
+ sleep(1)
20
+ rescue => e
21
+ ProconBypassMan.logger.error(e)
22
+ end
23
+ end
24
+ end
25
+ end
26
+
27
+ def self.queue
28
+ raise "Do not start this thread yet" unless defined?(@@queue)
29
+ @@queue
30
+ end
31
+
32
+ def self.push(hash)
33
+ if queue.size > MAX_QUEUE_SIZE
34
+ ProconBypassMan.logger.error('Over queue size cap!!')
35
+ return
36
+ end
37
+
38
+ queue.push(hash)
39
+ end
40
+ end
41
+ end
42
+ end
@@ -3,6 +3,8 @@ require "procon_bypass_man/configuration/loader"
3
3
  require "procon_bypass_man/configuration/layer"
4
4
 
5
5
  module ProconBypassMan
6
+ class AnalogStickPosition < Struct.new(:x, :y); end
7
+
6
8
  class ButtonsSettingConfiguration
7
9
  attr_accessor :layers,
8
10
  :setting_path,
@@ -76,7 +78,7 @@ module ProconBypassMan
76
78
  end
77
79
 
78
80
  def set_neutral_position(x, y)
79
- self.neutral_position = AnalogStickPosition.new(x: x, y: y)
81
+ self.neutral_position = AnalogStickPosition.new(x, y)
80
82
  self
81
83
  end
82
84
 
@@ -94,7 +96,7 @@ module ProconBypassMan
94
96
  left: Layer.new,
95
97
  right: Layer.new,
96
98
  }
97
- @neutral_position = AnalogStickPosition.new(x: 2124, y: 1808)
99
+ @neutral_position = AnalogStickPosition.new(2124, 1808)
98
100
  end
99
101
  end
100
102
  end
@@ -15,6 +15,13 @@ class ProconBypassMan::Bypass
15
15
 
16
16
  def log_procon_to_gadget
17
17
  ProconBypassMan.logger.debug { "<<< #{bypass_status.to_text}" }
18
+
19
+ ProconBypassMan.cache.fetch key: 'reporter', expires_in: 5 do
20
+ ProconBypassMan::Background::Reporter.push({
21
+ data: ProconBypassMan::ReadonlyProcon.new(binary: bypass_status.binary).to_hash,
22
+ reporter_class: ProconBypassMan::PressedButtonsReporter
23
+ })
24
+ end
18
25
  end
19
26
  end
20
27
  end
@@ -72,7 +72,6 @@ class ProconBypassMan::Bypass
72
72
  end
73
73
 
74
74
  begin
75
- # ProconBypassMan::Procon::DebugDumper.new(binary: output).dump_analog_sticks
76
75
  self.gadget.write_nonblock(ProconBypassMan::Processor.new(output).process)
77
76
  self.bypass_status.sent = true
78
77
  rescue IO::EAGAINWaitReadable
@@ -81,8 +81,7 @@ class ProconBypassMan::Configuration
81
81
  if !!ENV["INTERNAL_API_SERVER"]
82
82
  [ENV["INTERNAL_API_SERVER"]]
83
83
  else
84
- [ ENV["INTERNAL_API_SERVER"],
85
- 'http://localhost:9090',
84
+ [ 'http://localhost:9090',
86
85
  'http://localhost:8080',
87
86
  ].compact
88
87
  end
@@ -2,9 +2,12 @@ module ProconBypassMan
2
2
  module Outbound
3
3
  class Base
4
4
  class Client
5
+ class Result < Struct.new(:stats); end
6
+
5
7
  def initialize(path: , server: )
6
8
  @path = path
7
9
  if server.is_a?(Array)
10
+ # TODO エラーが起きたらローテーションする
8
11
  @server = server.first
9
12
  else
10
13
  @server = server
@@ -16,23 +19,33 @@ module ProconBypassMan
16
19
  # TODO ここでvalidationする
17
20
  if @server.nil?
18
21
  ProconBypassMan.logger.info('送信先が未設定なのでスキップしました')
19
- return
22
+ return Result.new(false)
23
+ end
24
+
25
+ unless body.is_a?(Hash)
26
+ body = { value: body }
20
27
  end
21
28
 
22
29
  uri = URI.parse("#{@server}#{@path}")
23
30
  http = Net::HTTP.new(uri.host, uri.port)
24
31
  http.use_ssl = uri.scheme === "https"
32
+ params = { hostname: @hostname }.merge(body)
25
33
  response = http.post(
26
34
  uri.path,
27
- { report: body.to_json, hostname: @hostname }.to_json,
35
+ params.to_json,
28
36
  { "Content-Type" => "application/json" },
29
37
  )
30
- unless response.code == /^20/
31
- ProconBypassMan.logger.error(response.body)
38
+ case response.code
39
+ when /^200/
40
+ return Result.new(true)
41
+ else
42
+ ProconBypassMan.logger.error("200以外(#{response.code})が帰ってきました. #{response.body}")
43
+ return Result.new(false)
32
44
  end
33
45
  rescue => e
34
46
  puts e
35
- ProconBypassMan.logger.error(e)
47
+ ProconBypassMan.logger.error("erro: #{e}")
48
+ Result.new(false)
36
49
  end
37
50
  end
38
51
  end
@@ -7,7 +7,7 @@ class ProconBypassMan::ErrorReporter < ProconBypassMan::Outbound::Base
7
7
  Client.new(
8
8
  path: PATH,
9
9
  server: ProconBypassMan.config.api_server,
10
- ).post(body: body.full_message.to_json)
10
+ ).post(body: body.full_message)
11
11
  end
12
12
  end
13
13
 
@@ -1,13 +1,13 @@
1
1
  require "procon_bypass_man/outbound/base"
2
2
 
3
- class ProconBypassMan::UsbHidDataReporter < ProconBypassMan::Outbound::Base
4
- PATH = "/api/usb_hid_chunks"
3
+ class ProconBypassMan::PressedButtonsReporter < ProconBypassMan::Outbound::Base
4
+ PATH = "/api/pressed_buttons"
5
5
 
6
6
  def self.report(body: )
7
7
  Client.new(
8
8
  path: PATH,
9
9
  server: ProconBypassMan.config.internal_api_servers,
10
- ).post(body: body.to_json)
10
+ ).post(body: body)
11
11
  end
12
12
  end
13
13
 
@@ -7,6 +7,6 @@ class ProconBypassMan::Reporter < ProconBypassMan::Outbound::Base
7
7
  Client.new(
8
8
  path: PATH,
9
9
  server: ProconBypassMan.config.api_server,
10
- ).post(body: body.to_json)
10
+ ).post(body: body)
11
11
  end
12
12
  end
@@ -0,0 +1,31 @@
1
+ class ProconBypassMan::Procon::AnalogStick
2
+ attr_accessor :neutral_position
3
+ attr_accessor :bin_x, :bin_y
4
+
5
+ def initialize(binary: )
6
+ @neutral_position = ProconBypassMan::ButtonsSettingConfiguration.instance.neutral_position
7
+
8
+ byte6 = binary[6].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
9
+ byte7 = binary[7].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
10
+ byte8 = binary[8].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
11
+
12
+ self.bin_x = "#{byte7[4..7]}#{byte6}"
13
+ self.bin_y = "#{byte8}#{byte7[0..3]}"
14
+ end
15
+
16
+ def abs_x
17
+ bin_x.to_i(2)
18
+ end
19
+
20
+ def abs_y
21
+ bin_y.to_i(2)
22
+ end
23
+
24
+ def relative_x
25
+ bin_x.to_i(2) - neutral_position.x
26
+ end
27
+
28
+ def relative_y
29
+ bin_y.to_i(2) - neutral_position.y
30
+ end
31
+ end
@@ -18,19 +18,9 @@ class ProconBypassMan::Procon::AnalogStickCap
18
18
  end
19
19
  end
20
20
 
21
- attr_accessor :bin_x, :bin_y
22
- attr_accessor :neutral_position
23
-
24
21
  def initialize(binary)
25
- @neutral_position = ProconBypassMan::ButtonsSettingConfiguration.instance.neutral_position
26
22
  @binary = binary
27
-
28
- byte6 = binary[6].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
29
- byte7 = binary[7].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
30
- byte8 = binary[8].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
31
-
32
- self.bin_x = "#{byte7[4..7]}#{byte6}"
33
- self.bin_y = "#{byte8}#{byte7[0..3]}"
23
+ @analog_stick = ProconBypassMan::Procon::AnalogStick.new(binary: binary)
34
24
  end
35
25
 
36
26
  # @return [ProconBypassMan::Procon::AnalogStickCap::Position]
@@ -41,8 +31,8 @@ class ProconBypassMan::Procon::AnalogStickCap
41
31
  relative_capped_x = -(relative_capped_x.abs) if relative_x.negative?
42
32
  relative_capped_y = -(relative_capped_y.abs) if relative_y.negative?
43
33
  return Position.new(
44
- x: relative_capped_x + neutral_position.x,
45
- y: relative_capped_y + neutral_position.y,
34
+ x: relative_capped_x + @analog_stick.neutral_position.x,
35
+ y: relative_capped_y + @analog_stick.neutral_position.y,
46
36
  )
47
37
  else
48
38
  return position
@@ -54,23 +44,10 @@ class ProconBypassMan::Procon::AnalogStickCap
54
44
  Position.new(x: abs_x, y: abs_y)
55
45
  end
56
46
 
57
- # 0, 0からのx
58
- def abs_x
59
- bin_x.to_i(2)
60
- end
61
-
62
- # 0, 0からのy
63
- def abs_y
64
- bin_y.to_i(2)
65
- end
66
-
67
- def relative_x
68
- bin_x.to_i(2) - neutral_position.x
69
- end
70
-
71
- def relative_y
72
- bin_y.to_i(2) - neutral_position.y
73
- end
47
+ def abs_x; @analog_stick.abs_x; end # 0, 0からのx
48
+ def abs_y; @analog_stick.abs_y; end # 0, 0からのy
49
+ def relative_x; @analog_stick.relative_x; end
50
+ def relative_y; @analog_stick.relative_y; end
74
51
 
75
52
  # @deprecated
76
53
  def x; relative_x; end
@@ -78,11 +55,11 @@ class ProconBypassMan::Procon::AnalogStickCap
78
55
 
79
56
  def rad
80
57
  (
81
- Math.atan(y / x.to_f) * 180 / Math::PI
58
+ Math.atan(relative_y / relative_x.to_f) * 180 / Math::PI
82
59
  ).floor(6)
83
60
  end
84
61
 
85
62
  def hypotenuse
86
- Math.sqrt(x**2 + y**2).floor(6)
63
+ Math.sqrt(relative_x**2 + relative_y**2).floor(6)
87
64
  end
88
65
  end
@@ -37,6 +37,7 @@ class ProconBypassMan::Procon::ButtonCollection
37
37
  BUTTONS_MAP = BYTES_MAP.reduce({}) { |acc, value|
38
38
  next acc if value[1].nil?
39
39
  value[1].reverse.each.with_index do |button, index|
40
+ next(acc) if button == :grip || button == :_undefined_key
40
41
  acc[button] = { byte_position: value[0], bit_position: index }
41
42
  end
42
43
  acc
@@ -1,4 +1,4 @@
1
- module ProconBypassMan::Procon::PushedButtonHelper
1
+ module ProconBypassMan::Procon::PressedButtonHelper
2
2
  module Dynamic
3
3
  @@compiled = false
4
4
  def compile_if_not_compile_yet!
@@ -1,7 +1,7 @@
1
1
  class ProconBypassMan::Procon
2
2
  class UserOperation
3
3
  include LayerChangeable
4
- extend PushedButtonHelper::Dynamic
4
+ extend PressedButtonHelper::Dynamic
5
5
 
6
6
  attr_reader :binary
7
7
 
@@ -139,7 +139,9 @@ class ProconBypassMan::Procon
139
139
 
140
140
  b = user_operation.binary
141
141
  ProconBypassMan.cache.fetch key: 'user_operation.binary', expires_in: 60 do
142
- ProconBypassMan::Procon::DebugDumper.new(binary: b).dump_analog_sticks
142
+ left_analog_stick = ProconBypassMan::ReadonlyProcon.new(binary: b).left_analog_stick
143
+ ProconBypassMan.logger.debug "x: #{left_analog_stick[:x]}, val: #{left_analog_stick[:x].to_s(2)}"
144
+ ProconBypassMan.logger.debug "y: #{left_analog_stick[:y]}, val: #{left_analog_stick[:y].to_s(2)}"
143
145
  end
144
146
  b
145
147
  end
@@ -0,0 +1,32 @@
1
+ # read
2
+ class ProconBypassMan::ReadonlyProcon
3
+ def initialize(binary: )
4
+ @binary = binary
5
+ @user_operation = ProconBypassMan::Procon::UserOperation.new(binary.dup)
6
+ @analog_stick = ProconBypassMan::Procon::AnalogStick.new(binary: binary)
7
+ end
8
+
9
+ # @return [Array<Symbol>]
10
+ def pressed
11
+ pressed_table = ::ProconBypassMan::Procon::ButtonCollection::BUTTONS.reduce({}) do |acc, button|
12
+ acc[button] = @user_operation.pressed_button?(button)
13
+ acc
14
+ end
15
+ pressed_table.select { |_key, value| value }.keys
16
+ end
17
+
18
+ def left_analog_stick
19
+ { x: @analog_stick.relative_x, y: @analog_stick.relative_y }
20
+ end
21
+
22
+ def left_analog_stick_by_abs
23
+ { x: @analog_stick.abs_x, y: @analog_stick.abs_y }
24
+ end
25
+
26
+ def to_hash
27
+ { left_analog_stick: left_analog_stick,
28
+ left_analog_stick_by_abs: left_analog_stick_by_abs,
29
+ buttons: pressed,
30
+ }
31
+ end
32
+ end
@@ -1,6 +1,7 @@
1
1
  require_relative "io_monitor"
2
2
  require_relative "uptime"
3
3
  require_relative "boot_message"
4
+ require_relative "background/report_thread"
4
5
 
5
6
  class ProconBypassMan::Runner
6
7
  class InterruptForRestart < StandardError; end
@@ -58,6 +59,8 @@ class ProconBypassMan::Runner
58
59
 
59
60
  def main_loop
60
61
  ProconBypassMan::IOMonitor.start!
62
+ ProconBypassMan::Background::Reporter.start!
63
+
61
64
  # gadget => procon
62
65
  # 遅くていい
63
66
  monitor1 = ProconBypassMan::IOMonitor.new(label: "switch -> procon")
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ProconBypassMan
4
- VERSION = "0.1.10"
4
+ VERSION = "0.1.11"
5
5
  end
@@ -6,7 +6,6 @@ require "fileutils"
6
6
 
7
7
  require_relative "procon_bypass_man/version"
8
8
  require_relative "procon_bypass_man/callbacks"
9
- require_relative "procon_bypass_man/analog_stick_position"
10
9
  require_relative "procon_bypass_man/timer"
11
10
  require_relative "procon_bypass_man/bypass"
12
11
  require_relative "procon_bypass_man/device_connector"
@@ -14,12 +13,13 @@ require_relative "procon_bypass_man/runner"
14
13
  require_relative "procon_bypass_man/processor"
15
14
  require_relative "procon_bypass_man/configuration"
16
15
  require_relative "procon_bypass_man/buttons_setting_configuration"
16
+ require_relative "procon_bypass_man/readonly_procon"
17
17
  require_relative "procon_bypass_man/procon"
18
- require_relative "procon_bypass_man/procon/debug_dumper"
18
+ require_relative "procon_bypass_man/procon/analog_stick"
19
19
  require_relative "procon_bypass_man/procon/analog_stick_cap"
20
20
  require_relative "procon_bypass_man/outbound/reporter"
21
21
  require_relative "procon_bypass_man/outbound/error_reporter"
22
- require_relative "procon_bypass_man/outbound/usb_hid_data_reporter"
22
+ require_relative "procon_bypass_man/outbound/pressed_buttons_reporter"
23
23
  require_relative "procon_bypass_man/on_memory_cache"
24
24
 
25
25
  STDOUT.sync = true
@@ -5,7 +5,7 @@ require 'bundler/inline'
5
5
  gemfile do
6
6
  source 'https://rubygems.org'
7
7
  git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
8
- gem 'procon_bypass_man', '0.1.9'
8
+ gem 'procon_bypass_man', '0.1.11'
9
9
  gem 'procon_bypass_man-splatoon2', github: 'splaplapla/procon_bypass_man-splatoon2', tag: "0.1.1"
10
10
  end
11
11
 
@@ -14,7 +14,7 @@ ProconBypassMan.configure do |config|
14
14
  config.logger = Logger.new("#{ProconBypassMan.root}/app.log", 5, 1024 * 1024 * 10)
15
15
  config.logger.level = :debug
16
16
  # pbm.api_server = 'https://...'
17
- config.enable_critical_error_logging!
17
+ config.enable_critical_error_logging = true
18
18
  end
19
19
 
20
20
  ProconBypassMan.run(setting_path: "/usr/share/pbm/current/setting.yml")
@@ -5,7 +5,7 @@ require 'bundler/inline'
5
5
  gemfile do
6
6
  source 'https://rubygems.org'
7
7
  git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
8
- gem 'procon_bypass_man-web', '0.1.2'
8
+ gem 'procon_bypass_man-web', '0.1.3'
9
9
  end
10
10
 
11
11
  ProconBypassMan::Web.configure do |config|
data/sig/main.rbs CHANGED
@@ -423,7 +423,7 @@ class ProconBypassMan::Procon::ModeRegistry
423
423
  def self.plugins: () -> untyped
424
424
  end
425
425
 
426
- module ProconBypassMan::Procon::PushedButtonHelper
426
+ module ProconBypassMan::Procon::PressedButtonHelper
427
427
  module Static
428
428
  def pressed_button?: (untyped button) -> untyped
429
429
  end
@@ -437,9 +437,9 @@ class ProconBypassMan::Procon
437
437
  class UserOperation
438
438
  include LayerChangeable
439
439
 
440
- include PushedButtonHelper::Static
440
+ include PressedButtonHelper::Static
441
441
 
442
- extend PushedButtonHelper::Dynamic
442
+ extend PressedButtonHelper::Dynamic
443
443
 
444
444
  attr_reader binary: untyped
445
445
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: procon_bypass_man
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.10
4
+ version: 0.1.11
5
5
  platform: ruby
6
6
  authors:
7
7
  - jiikko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2021-10-28 00:00:00.000000000 Z
11
+ date: 2021-11-04 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: extension for Nintendo Switch Pro Controller
14
14
  email:
@@ -31,16 +31,14 @@ files:
31
31
  - Rakefile
32
32
  - Steepfile
33
33
  - bin/console
34
- - bin/report_receive_server.rb
34
+ - bin/dev_api_server.rb
35
35
  - bin/setup
36
36
  - docs/how_to_connect_procon.md
37
37
  - docs/setup_raspi.md
38
38
  - docs/setup_raspi.mitamae.rb
39
39
  - docs/setup_raspi_by_mitamae.md
40
- - examples/practical/app.rb
41
- - examples/practical/setting.yml
42
40
  - lib/procon_bypass_man.rb
43
- - lib/procon_bypass_man/analog_stick_position.rb
41
+ - lib/procon_bypass_man/background/report_thread.rb
44
42
  - lib/procon_bypass_man/boot_message.rb
45
43
  - lib/procon_bypass_man/buttons_setting_configuration.rb
46
44
  - lib/procon_bypass_man/bypass.rb
@@ -55,14 +53,14 @@ files:
55
53
  - lib/procon_bypass_man/on_memory_cache.rb
56
54
  - lib/procon_bypass_man/outbound/base.rb
57
55
  - lib/procon_bypass_man/outbound/error_reporter.rb
56
+ - lib/procon_bypass_man/outbound/pressed_buttons_reporter.rb
58
57
  - lib/procon_bypass_man/outbound/reporter.rb
59
- - lib/procon_bypass_man/outbound/usb_hid_data_reporter.rb
60
58
  - lib/procon_bypass_man/processor.rb
61
59
  - lib/procon_bypass_man/procon.rb
60
+ - lib/procon_bypass_man/procon/analog_stick.rb
62
61
  - lib/procon_bypass_man/procon/analog_stick_cap.rb
63
62
  - lib/procon_bypass_man/procon/button_collection.rb
64
63
  - lib/procon_bypass_man/procon/data.rb
65
- - lib/procon_bypass_man/procon/debug_dumper.rb
66
64
  - lib/procon_bypass_man/procon/flip_cache.rb
67
65
  - lib/procon_bypass_man/procon/layer_changeable.rb
68
66
  - lib/procon_bypass_man/procon/macro_registry.rb
@@ -70,6 +68,7 @@ files:
70
68
  - lib/procon_bypass_man/procon/press_button_aware.rb
71
69
  - lib/procon_bypass_man/procon/pressed_button_helper.rb
72
70
  - lib/procon_bypass_man/procon/user_operation.rb
71
+ - lib/procon_bypass_man/readonly_procon.rb
73
72
  - lib/procon_bypass_man/runner.rb
74
73
  - lib/procon_bypass_man/timer.rb
75
74
  - lib/procon_bypass_man/uptime.rb
@@ -104,7 +103,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
104
103
  - !ruby/object:Gem::Version
105
104
  version: '0'
106
105
  requirements: []
107
- rubygems_version: 3.2.22
106
+ rubygems_version: 3.2.30
108
107
  signing_key:
109
108
  specification_version: 4
110
109
  summary: extension for Nintendo Switch Pro Controller
@@ -1,21 +0,0 @@
1
- #!/usr/bin/env ruby
2
-
3
- # sudo ln -s /home/pi/src/procon_bypass_man/examples/practical/setting.yml /home/pi/src/procon_bypass_man/setting.yml
4
- # cd src/procon_bypass_man
5
- # sudo ruby examples/practical/app.rb
6
-
7
- require 'bundler/inline'
8
-
9
- gemfile do
10
- source 'https://rubygems.org'
11
- gem 'procon_bypass_man', github: 'splaplapla/procon_bypass_man', branch: "edge"
12
- gem 'procon_bypass_man-splatoon2', github: 'splaplapla/procon_bypass_man-splatoon2', branch: "0.1.0"
13
- end
14
-
15
- ProconBypassMan.tap do |pbm|
16
- pbm.logger = Logger.new("#{ProconBypassMan.root}/app.log", 5, 1024 * 1024 * 10) # 5世代まで残して, 10MBでローテーション
17
- pbm.logger.level = :debug
18
- pbm.root = File.expand_path(__dir__)
19
- end
20
-
21
- ProconBypassMan.run(setting_path: "./setting.yml")
@@ -1,24 +0,0 @@
1
- version: 1.0
2
- setting: |-
3
- fast_return = ProconBypassMan::Splatoon2::Macro::FastReturn
4
- guruguru = ProconBypassMan::Splatoon2::Mode::Guruguru
5
-
6
- install_macro_plugin fast_return
7
- install_mode_plugin guruguru
8
-
9
- prefix_keys_for_changing_layer [:zr, :r, :zl, :l]
10
-
11
- layer :up, mode: :manual do
12
- flip :zr, if_pressed: :zr, force_neutral: :zl, flip_interval: "8F"
13
- flip :zl, if_pressed: [:y, :b, :zl]
14
- flip :down, if_pressed: :down
15
- macro fast_return.name, if_pressed: [:y, :b, :down]
16
- remap :l, to: :zr
17
- end
18
- layer :right, mode: guruguru.name
19
- layer :left do
20
- # no-op
21
- end
22
- layer :down do
23
- flip :zl
24
- end
@@ -1,8 +0,0 @@
1
- class AnalogStickPosition
2
- attr_accessor :x, :y
3
-
4
- def initialize(x: , y: )
5
- @x = x
6
- @y = y
7
- end
8
- end
@@ -1,17 +0,0 @@
1
- class ProconBypassMan::Procon::DebugDumper
2
- def initialize(binary: )
3
- @binary = binary
4
- # ProconBypassMan.logger.debug { "<<< patched #{@binary.unpack("H*")}" }
5
- end
6
-
7
- def dump_analog_sticks
8
- byte6 = @binary[6].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
9
- byte7 = @binary[7].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
10
- byte8 = @binary[8].unpack("H*").first.to_i(16).to_s(2).rjust(8, "0")
11
-
12
- x = "#{byte7[4..7]}#{byte6}"
13
- y = "#{byte8}#{byte7[0..3]}"
14
- ProconBypassMan.logger.debug "x: #{x}, val: #{x.to_i(2)}"
15
- ProconBypassMan.logger.debug "y: #{y}, val: #{y.to_i(2)}"
16
- end
17
- end