procon_bypass_man 0.1.15 → 0.1.18

Sign up to get free protection for your applications and to get access to all the features.
Files changed (80) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +1 -0
  3. data/.github/workflows/release.yml +2 -2
  4. data/.rubocop.yml +2 -0
  5. data/CHANGELOG.md +17 -0
  6. data/Gemfile +1 -0
  7. data/Gemfile.lock +29 -7
  8. data/README.md +32 -4
  9. data/Steepfile +31 -17
  10. data/docs/setting/left-analogstick-cap.md +60 -0
  11. data/docs/setting/splatoon2_macro_sokuwari_bubble.md +52 -0
  12. data/docs/setup_raspi.md +2 -0
  13. data/docs/setup_raspi.mitamae.rb +7 -8
  14. data/docs/setup_raspi_by_mitamae.md +37 -1
  15. data/docs/upgrade_pbm.md +32 -0
  16. data/lib/ext/em_pure_ruby.rb +25 -0
  17. data/lib/ext/module.rb +16 -0
  18. data/lib/procon_bypass_man/background.rb +0 -1
  19. data/lib/procon_bypass_man/buttons_setting_configuration/layer.rb +35 -13
  20. data/lib/procon_bypass_man/buttons_setting_configuration/loader.rb +4 -1
  21. data/lib/procon_bypass_man/buttons_setting_configuration/validator.rb +36 -0
  22. data/lib/procon_bypass_man/buttons_setting_configuration.rb +28 -13
  23. data/lib/procon_bypass_man/bypass/usb_hid_logger.rb +6 -4
  24. data/lib/procon_bypass_man/bypass.rb +13 -6
  25. data/lib/procon_bypass_man/commands/bypass_command.rb +2 -2
  26. data/lib/procon_bypass_man/commands/print_boot_message_command.rb +50 -1
  27. data/lib/procon_bypass_man/commands/print_message_command.rb +8 -0
  28. data/lib/procon_bypass_man/commands/run_remote_pbm_action_dispatch_command.rb +1 -1
  29. data/lib/procon_bypass_man/commands/send_reload_config_event_command.rb +1 -2
  30. data/lib/procon_bypass_man/commands.rb +1 -0
  31. data/lib/procon_bypass_man/configuration.rb +32 -1
  32. data/lib/procon_bypass_man/domains/binary/base.rb +25 -0
  33. data/lib/procon_bypass_man/domains/binary/has_immutable_binary.rb +5 -0
  34. data/lib/procon_bypass_man/domains/binary/has_mutable_binary.rb +5 -0
  35. data/lib/procon_bypass_man/domains/binary/inbound_procon_binary.rb +9 -0
  36. data/lib/procon_bypass_man/domains/binary/processing_procon_binary.rb +66 -0
  37. data/lib/procon_bypass_man/domains.rb +11 -0
  38. data/lib/procon_bypass_man/plugin/splatoon2/macro/fast_return.rb +1 -1
  39. data/lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_left_key.rb +1 -1
  40. data/lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_right_key.rb +1 -1
  41. data/lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_up_key.rb +1 -1
  42. data/lib/procon_bypass_man/plugin/splatoon2/macro/sokuwari_for_splash_bomb.rb +22 -0
  43. data/lib/procon_bypass_man/plugin/splatoon2/version.rb +1 -1
  44. data/lib/procon_bypass_man/{plugin.rb → plugins.rb} +1 -0
  45. data/lib/procon_bypass_man/processor.rb +4 -5
  46. data/lib/procon_bypass_man/procon/button.rb +11 -0
  47. data/lib/procon_bypass_man/procon/button_collection.rb +9 -11
  48. data/lib/procon_bypass_man/procon/layer_changer.rb +3 -2
  49. data/lib/procon_bypass_man/procon/macro.rb +89 -0
  50. data/lib/procon_bypass_man/procon/macro_builder.rb +123 -0
  51. data/lib/procon_bypass_man/procon/macro_registry.rb +9 -27
  52. data/lib/procon_bypass_man/procon/mode_registry.rb +4 -4
  53. data/lib/procon_bypass_man/procon/press_button_aware.rb +9 -7
  54. data/lib/procon_bypass_man/procon/user_operation.rb +58 -61
  55. data/lib/procon_bypass_man/procon/{analog_stick.rb → value_objects/analog_stick.rb} +3 -4
  56. data/lib/procon_bypass_man/procon/value_objects/procon_reader.rb +34 -0
  57. data/lib/procon_bypass_man/procon.rb +20 -16
  58. data/lib/procon_bypass_man/remote_pbm_action/{lib → commands}/update_remote_pbm_action_status_command.rb +0 -0
  59. data/lib/procon_bypass_man/remote_pbm_action/restore_pbm_setting.rb +1 -1
  60. data/lib/procon_bypass_man/{value_objects → remote_pbm_action/value_objects}/remote_pbm_action_object.rb +0 -0
  61. data/lib/procon_bypass_man/remote_pbm_action.rb +1 -1
  62. data/lib/procon_bypass_man/runner.rb +3 -3
  63. data/lib/procon_bypass_man/scheduler.rb +0 -7
  64. data/lib/procon_bypass_man/support/compress_array.rb +5 -0
  65. data/lib/procon_bypass_man/support/http_client.rb +4 -0
  66. data/lib/procon_bypass_man/support/on_memory_cache.rb +3 -1
  67. data/lib/procon_bypass_man/support/server_pool.rb +4 -0
  68. data/lib/procon_bypass_man/version.rb +1 -1
  69. data/lib/procon_bypass_man/websocket/pbm_job_client.rb +90 -0
  70. data/lib/procon_bypass_man.rb +13 -6
  71. data/procon_bypass_man.gemspec +3 -1
  72. data/project_template/README.md +10 -5
  73. data/project_template/app.rb +3 -2
  74. data/sig/main.rbs +226 -41
  75. data/sig/on_memory_cache.rbs +16 -0
  76. metadata +56 -13
  77. data/lib/procon_bypass_man/background/jobs/fetch_and_run_remote_pbm_action_job.rb +0 -29
  78. data/lib/procon_bypass_man/boot_message.rb +0 -48
  79. data/lib/procon_bypass_man/commands/run_local_shell_command.rb +0 -6
  80. data/lib/procon_bypass_man/procon_reader.rb +0 -31
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7820b087d86ac7338128dbfdebba48f8e3100d4a2163894962296e6526ea6b6e
4
- data.tar.gz: 43d3bd4d0b3d18a61edc2df29320ad345f6d9313de79b6bb732a2bf526a18e5a
3
+ metadata.gz: ae61096a07d9982a4a88fd64c0ba41039d351b5925ff2953ca4b44c546d92715
4
+ data.tar.gz: 1c969b841734cd26e0d8ee58e182e8cfda86f69a40a57e4a88fb6f0d8e92e201
5
5
  SHA512:
6
- metadata.gz: 78f98474a1a3d6bf7a6a6420c36c51bc4c9ba835d35361b5bcd45623b3c9c5e3b8ef173d341bd026d324f78787bc020b6536e6deff658c8f073767d3ff0f664e
7
- data.tar.gz: 341d4645b6650594533dcf23b32e24a8e5acd8413fea428d21fa2d2a2b4af1636d312a1ebc3472d5dbcbce193157a4da459eb1314619c27342b93dd30b8a96b3
6
+ metadata.gz: 64507342d85810c8b92a3ed8b0098055ce984fd959d070c7259a04097bb295e4720ebe6c0e615493e233d04957783e259fc20fa78b5f2d0bbbd73d624c6154c5
7
+ data.tar.gz: a7ac7c9073422240e6f80d1d3aff3fc606dc6b718f3922cb05769783b5cfae62acb449bdba5b2282a922f1cf7a42f34e26e0818251ec89812f875b0c50dab46f
data/.circleci/config.yml CHANGED
@@ -42,6 +42,7 @@ build_jobs: &build_jobs
42
42
  - "2.7"
43
43
  - "3.0.1"
44
44
  - "3.0.2"
45
+ - "3.1.0"
45
46
  workflows:
46
47
  version: 2
47
48
  build:
@@ -13,10 +13,10 @@ jobs:
13
13
  - uses: actions/checkout@v2
14
14
  with:
15
15
  token: ${{ secrets.GITHUB_TOKEN }}
16
- - name: Set up Ruby 2.6
16
+ - name: Set up Ruby 3.0.1
17
17
  uses: ruby/setup-ruby@v1
18
18
  with:
19
- ruby-version: 2.6
19
+ ruby-version: 3.0.1
20
20
  bundler-cache: true
21
21
  - name: Publish to RubyGems
22
22
  run: |
data/.rubocop.yml CHANGED
@@ -24,3 +24,5 @@ Lint/EmptyBlock:
24
24
  Enabled: false
25
25
  Lint/ReturnInVoidContext:
26
26
  Enabled: false
27
+ Lint/AssignmentInCondition:
28
+ Enabled: false
data/CHANGELOG.md CHANGED
@@ -1,3 +1,20 @@
1
+ ## [0.1.18] - 2022-0
2
+ - macroでできることが増えました
3
+ - 1ステップで複数のボタン入力と継続時間を指定ができるようになりました
4
+ - スプラトゥーン2用のバブル即割マクロ(SokuwariForSplashBomb)が使えるようになりました
5
+ - https://github.com/splaplapla/procon_bypass_man-splatoon2
6
+
7
+ ## [0.1.17] - 2022-01-26
8
+ - procon_bypass_man_cloudに組み込むために、内部のデータ構造を変更しました
9
+ - 設定ファイルにmacroを直接打ち込めるようになりました
10
+ - ex) `open_macro :special_command, steps: [:x, :y, :up], if_pressed: [:y]`
11
+
12
+ ## [0.1.16.1] - 2022-01-22
13
+ - 初期状態ではinternal api(pbm-web)の通信を無効にしました
14
+
15
+ ## [0.1.16] - 2021-12-26
16
+ - websocket経由で外部サーバからの命令を受け取れるようになりました
17
+
1
18
  ## [0.1.15] - 2021-12-08
2
19
  - 外部サーバから設定ファイルのリストアができるようになりました
3
20
  - splatoon2 pluginのネームスペースを変更しました
data/Gemfile CHANGED
@@ -11,6 +11,7 @@ gem "pry"
11
11
  gem "timecop"
12
12
  gem "rubocop", require: false
13
13
  gem "steep", require: false
14
+ gem 'typeprof', require: false
14
15
  gem 'rbs', require: false
15
16
  gem "sinatra", require: false
16
17
  gem "webrick", require: false
data/Gemfile.lock CHANGED
@@ -1,12 +1,16 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- procon_bypass_man (0.1.15)
4
+ procon_bypass_man (0.1.18)
5
+ action_cable_client
5
6
  pbmenv
7
+ sorted_set
6
8
 
7
9
  GEM
8
10
  remote: https://rubygems.org/
9
11
  specs:
12
+ action_cable_client (3.1.0)
13
+ websocket-eventmachine-client (>= 1.2.0)
10
14
  activesupport (6.1.4.1)
11
15
  concurrent-ruby (~> 1.0, >= 1.0.2)
12
16
  i18n (>= 1.6, < 2)
@@ -17,6 +21,7 @@ GEM
17
21
  coderay (1.1.3)
18
22
  concurrent-ruby (1.1.9)
19
23
  diff-lcs (1.4.4)
24
+ eventmachine (1.2.7)
20
25
  ffi (1.15.4)
21
26
  i18n (1.8.11)
22
27
  concurrent-ruby (~> 1.0)
@@ -29,9 +34,9 @@ GEM
29
34
  mustermann (1.1.1)
30
35
  ruby2_keywords (~> 0.0.1)
31
36
  parallel (1.21.0)
32
- parser (3.0.2.0)
37
+ parser (3.0.3.2)
33
38
  ast (~> 2.4.1)
34
- pbmenv (0.1.6)
39
+ pbmenv (0.1.7)
35
40
  pry (0.14.1)
36
41
  coderay (~> 1.1)
37
42
  method_source (~> 1.0)
@@ -44,7 +49,8 @@ GEM
44
49
  rb-inotify (0.10.1)
45
50
  ffi (~> 1.0)
46
51
  rbs (1.7.1)
47
- regexp_parser (2.1.1)
52
+ rbtree (0.4.4)
53
+ regexp_parser (2.2.0)
48
54
  rexml (3.2.5)
49
55
  rspec (3.10.0)
50
56
  rspec-core (~> 3.10.0)
@@ -68,32 +74,46 @@ GEM
68
74
  rubocop-ast (>= 1.12.0, < 2.0)
69
75
  ruby-progressbar (~> 1.7)
70
76
  unicode-display_width (>= 1.4.0, < 3.0)
71
- rubocop-ast (1.13.0)
77
+ rubocop-ast (1.14.0)
72
78
  parser (>= 3.0.1.1)
73
79
  ruby-progressbar (1.11.0)
74
80
  ruby2_keywords (0.0.5)
81
+ set (1.0.2)
75
82
  sinatra (2.1.0)
76
83
  mustermann (~> 1.0)
77
84
  rack (~> 2.2)
78
85
  rack-protection (= 2.1.0)
79
86
  tilt (~> 2.0)
80
- steep (0.46.0)
87
+ sorted_set (1.0.3)
88
+ rbtree
89
+ set (~> 1.0)
90
+ steep (0.47.0)
81
91
  activesupport (>= 5.1)
82
92
  language_server-protocol (>= 3.15, < 4.0)
83
93
  listen (~> 3.0)
84
94
  parallel (>= 1.0.0)
85
95
  parser (>= 3.0)
86
96
  rainbow (>= 2.2.2, < 4.0)
87
- rbs (>= 1.2.0)
97
+ rbs (~> 1.7.0)
88
98
  terminal-table (>= 2, < 4)
89
99
  terminal-table (3.0.2)
90
100
  unicode-display_width (>= 1.1.1, < 3)
91
101
  tilt (2.0.10)
92
102
  timecop (0.9.4)
103
+ typeprof (0.20.4)
104
+ rbs (>= 1.6.2)
93
105
  tzinfo (2.0.4)
94
106
  concurrent-ruby (~> 1.0)
95
107
  unicode-display_width (2.1.0)
96
108
  webrick (1.7.0)
109
+ websocket (1.2.9)
110
+ websocket-eventmachine-base (1.2.0)
111
+ eventmachine (~> 1.0)
112
+ websocket (~> 1.0)
113
+ websocket-native (~> 1.0)
114
+ websocket-eventmachine-client (1.3.0)
115
+ websocket-eventmachine-base (~> 1.0)
116
+ websocket-native (1.0.0)
97
117
  zeitwerk (2.5.1)
98
118
 
99
119
  PLATFORMS
@@ -101,6 +121,7 @@ PLATFORMS
101
121
  arm64-darwin-20
102
122
  arm64-darwin-21
103
123
  armv7l-linux
124
+ ruby
104
125
  x86_64-linux
105
126
 
106
127
  DEPENDENCIES
@@ -113,6 +134,7 @@ DEPENDENCIES
113
134
  sinatra
114
135
  steep
115
136
  timecop
137
+ typeprof
116
138
  webrick
117
139
 
118
140
  BUNDLED WITH
data/README.md CHANGED
@@ -1,4 +1,6 @@
1
1
  # ProconBypassMan
2
+ <img src="https://user-images.githubusercontent.com/1664497/151661582-3a1e8ce9-6c38-4754-8075-7a4453b3109a.jpg" width="500px">
3
+
2
4
  [![Ruby](https://github.com/splaplapla/procon_bypass_man/actions/workflows/ruby.yml/badge.svg?branch=master)](https://github.com/splaplapla/procon_bypass_man/actions/workflows/ruby.yml)
3
5
 
4
6
  * Switchに繋いだプロコンを連射機にしたり、キーのリマップをしたり、マクロを実行できるツールです
@@ -28,12 +30,33 @@ Switch <-- (PBM): ZR連打
28
30
  ## Usage
29
31
  * USBガジェットモードで起動するRaspberry Pi4を用意する
30
32
  * https://github.com/splaplapla/procon_bypass_man/blob/master/docs/setup_raspi.md
31
- * Raspberry Pi4 で sudo pbmenv install latest && cd /usr/share/pbm/current && sudo ruby app.rb
33
+ * Raspberry Pi4 でprocon_bypass_manを実行するための準備
34
+ * rubyのインストール
35
+ * sudo apt-get install rbenv
36
+ * git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
37
+ * rbenv install 3.0.1
38
+ * sudo gem install pbmenv
39
+ * sudo [pbmenv](https://github.com/splaplapla/pbmenv) install latest
40
+ * Raspberry Pi4 でprocon_bypass_manを実行する
41
+ * cd /usr/share/pbm/current
42
+ * sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
32
43
  * 動いたのを確認したらserviceとして登録にするなどしてください
44
+ * [serviceとして登録する方法](https://github.com/splaplapla/procon_bypass_man/tree/master/project_template#systemd%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9%E3%81%AB%E7%99%BB%E9%8C%B2%E3%81%99%E3%82%8B%E6%96%B9%E6%B3%95)
33
45
 
34
46
  ## Plugins
35
47
  * https://github.com/splaplapla/procon_bypass_man-splatoon2
36
48
 
49
+ ## 関連ソフトウェア
50
+ * procon_bypass_man_cloud
51
+ * webアプリケーション
52
+ * https://github.com/splaplapla/procon_bypass_man_cloud
53
+ * このwebアプリからOS自体の再起動、設定ファイルのバックアップ・変更、PBMのバージョンアップができます
54
+ * ご自身でホストティングもできますが、 私がホスティングをしている https://pbm-cloud.herokuapp.com を使うことができます
55
+ * [使い方](https://pbm-cloud.herokuapp.com/faq)
56
+ * pbmenv
57
+ * procon_bypass_manのバージョンマネージャー
58
+ * https://github.com/splaplapla/pbmenv
59
+
37
60
  ## FAQ
38
61
  * どうやって動かすの?
39
62
  * このツールはRaspberry Pi4をUSBガジェットモードで起動して有線でプロコンとSwitchに接続して使います
@@ -46,6 +69,8 @@ Switch <-- (PBM): ZR連打
46
69
  * マクロは特定のキーを順番に入れていく機能。キーの入力が終わったらマクロは終了する
47
70
  * レイヤーとは?
48
71
  * 自作キーボードみたいな感じでレイヤー毎に設定内容を記述して切り替えれる
72
+ * レイヤーを切り替える方法は?
73
+ * 設定ファイルに記述している `prefix_keys_for_changing_layer`の後ろにあるキーを同時押しながら、十字キーのどれかを押すことで任意のレイヤーに切り替わります
49
74
  * このツールでできることは?
50
75
  * キーリマップ, 連射, マクロ, 特定の同じ操作の繰り返し(mode)
51
76
  * リマップは1つのキーを別のキーに割り当てます
@@ -54,11 +79,13 @@ Switch <-- (PBM): ZR連打
54
79
  * 操作するdeviceファイルの所有者がrootだから
55
80
  * 市販されているサードパーティ製連射機との違いは?
56
81
  * サードパーティ製のコントローラーは、設定方法や形状が特殊で買い換えるたびに学習・設定コストが発生します。本ツールを使えば、設定内容はテキストで管理することができ、使い慣れたプロコンで同等のことができます。
82
+ * sshなしで運用は可能ですか?
83
+ * 後述するWEBアプリケーションを使えば、sshを使わずに運用が可能です
84
+ * https://github.com/splaplapla/procon_bypass_man_cloud
85
+ * 機能開発中ですが、使ってくれる人を探しているのでdiscordからお問合せください
57
86
 
58
87
  ## TODO
59
88
  * レコーディング機能(プロコンの入力をマクロとして登録ができる)
60
- * マクロにdelayを入れれるようにする
61
- * 設定ファイル マクロの引数に、ボタンを取れるようにする
62
89
 
63
90
  ## 開発系
64
91
  ### プロコンとの接続を維持したまま、現在の設定ファイルをPBMに反映する
@@ -78,11 +105,12 @@ sudo kill -USR2 `cat ./pbm_pid`
78
105
  * project_template/web.rb, project_template/app.rb, lib/procon_bypass_man/version.rb のバージョンをあげる
79
106
  * CHANGELOG.md に日付を書く
80
107
  * be rake release
108
+ * githubのreleaseを作成する
81
109
 
82
110
  ## License
83
111
 
84
112
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
85
113
 
86
-
87
114
  ## Links
88
115
  * https://discord.gg/bEcRNKf4ep
116
+ * 質問などご意見をdiscordでも受け付けています
data/Steepfile CHANGED
@@ -1,15 +1,15 @@
1
1
  # D = Steep::Diagnostic
2
2
  #
3
3
  # target :lib do
4
- # signature "sig"
4
+ # signature 'sig'
5
5
  #
6
- # check "lib" # Directory name
7
- # check "Gemfile" # File name
8
- # check "app/models/**/*.rb" # Glob
9
- # # ignore "lib/templates/*.rb"
6
+ # check 'lib' # Directory name
7
+ # check 'Gemfile' # File name
8
+ # check 'app/models/**/*.rb' # Glob
9
+ # # ignore 'lib/templates/*.rb'
10
10
  #
11
- # # library "pathname", "set" # Standard libraries
12
- # # library "strong_json" # Gems
11
+ # # library 'pathname', 'set' # Standard libraries
12
+ # # library 'strong_json' # Gems
13
13
  #
14
14
  # # configure_code_diagnostics(D::Ruby.strict) # `strict` diagnostics setting
15
15
  # # configure_code_diagnostics(D::Ruby.lenient) # `lenient` diagnostics setting
@@ -19,21 +19,35 @@
19
19
  # end
20
20
 
21
21
  # target :test do
22
- # signature "sig", "sig-private"
22
+ # signature 'sig', 'sig-private'
23
23
  #
24
- # check "test"
24
+ # check 'test'
25
25
  #
26
- # # library "pathname", "set" # Standard libraries
26
+ # # library 'pathname', 'set' # Standard libraries
27
27
  # end
28
28
 
29
29
  target :lib do
30
- check "lib/procon_bypass_man/timer.rb"
31
- check "lib/procon_bypass_man/uptime.rb"
32
- check "lib/procon_bypass_man/configuration.rb"
30
+ check 'lib/procon_bypass_man/timer.rb'
31
+ check 'lib/procon_bypass_man/configuration.rb'
32
+ check 'lib/procon_bypass_man/processor'
33
+ check 'lib/procon_bypass_man/procon/macro_registry'
34
+ check 'lib/procon_bypass_man/procon/mode_registry'
35
+ check 'lib/procon_bypass_man/domains/*'
36
+ check 'lib/procon_bypass_man/domains'
37
+ check 'lib/procon_bypass_man/support/report_http_client'
38
+ check 'lib/procon_bypass_man/support/http_client'
39
+ check 'lib/procon_bypass_man/support/send_device_stats_http_client'
40
+ check 'lib/procon_bypass_man/support/on_memory_cache'
41
+ check 'lib/procon_bypass_man/support/server_pool'
42
+ check 'lib/procon_bypass_man/support/uptime.rb'
43
+ check 'lib/procon_bypass_man/support/safe_timeout'
44
+ check 'lib/procon_bypass_man/support/update_remote_pbm_action_status_http_client'
45
+ check 'lib/procon_bypass_man/support/compress_array'
33
46
 
34
- signature "sig"
47
+ signature 'sig'
35
48
 
36
- library "time"
37
- library "logger"
38
- library "monitor"
49
+ library 'time'
50
+ library 'logger'
51
+ library 'monitor'
52
+ library 'uri'
39
53
  end
@@ -0,0 +1,60 @@
1
+ # 左アナログスティック感度調整の設定方法
2
+ https://user-images.githubusercontent.com/1664497/150636857-f3d40900-2713-41b8-856a-279c200d9ae7.mp4
3
+
4
+ * procon_bypass_man: 0.1.9以上が必要です
5
+ * PBMには、左アナログスティックの入力の最大値を書き換える機能があります。それをsetting.ymlに書く方法を説明します
6
+ * これを使うと、特定のボタンを押している間は、スティックを完全に倒している状態で、スプラトゥーンでいうところの `スニーキング` で移動ができるようになります
7
+
8
+ ## 1. プロコンの左スティックのほぼニュートラルな状態の座標を記述する
9
+ * `set_neutral_position x, y`を使って、プロコンの左スティックのほぼニュートラルな状態の座標を記述します
10
+ * 完全にニュートラルな値を記述すると最速のスニーキングが出ないので微妙にずらします
11
+ * プロコンごとにニュートラルな状態の座標に個体差があって、最速のスニーキングを出すには本数値を調整する必要があります
12
+ * 実際に設定している座標の例
13
+ * `set_neutral_position 1906, 1886`
14
+ * `set_neutral_position 2100, 2000`
15
+
16
+ ## 2. 左アナログスティックの入力の最大値を設定する
17
+ * ニュートラルな状態の座標が決まったら、次はどのボタンを押したときに、どれくらいスティック感度を書き換えるか、を設定します
18
+ * 設定には `left_analog_stick_cap` を使います
19
+ * 実際にパラメータを記述した例を用いると `left_analog_stick_cap cap: 1100, if_pressed: [:zl, :a], force_neutral: :a` のようになります
20
+ * パラメータは3つあります
21
+ * `cap: 1100`
22
+ * こちらはニュートラル座標からの最大距離をどのくらいにするか、を決めます
23
+ * 指定したボタンが押されている間は、ニュートラル座標から1100までの範囲に「現在の座標」を書き換える、という設定になります
24
+ * スプラトゥーンのスニーキング用途であれば、1100固定で問題ありません
25
+ * `if_pressed: [:zl, :a]`
26
+ * こちらは zlボタン, aボタンが両方押されている状態の時に本設定が発動する、という設定になります。トリガーです
27
+ * つまり、zlとaを同時押ししている時に、左アナログスティックの入力を書き換えます
28
+ * `force_neutral: :a`
29
+ * こちらは、左アナログスティックの入力を書き換えている時は、「強制的にaボタンを押していない状態にする」という設定になります
30
+ * つまり、zlボタンとaボタンを同時押ししている時には、左アナログスティックの入力を書き換えて、aボタンは押していない状態になります
31
+ * どうしてこれが必要かというと、ゲームタイトルによるのですが、スプラトゥーンの場合は、ガチアサリ中に、保有しているアサリを投げないために必要になっています
32
+ * force_neutralはoptionalです
33
+
34
+ ## 3. 設定を反映させる
35
+ * 上記の記述を加えたsetting.ymlを起動中のprocon_bypass_manプロセスで読み込むには、プロセスにその旨を伝える必要があります
36
+ * ラズベリーパイを再起動して、プロセスを立ち上げ直す、でも目的は達成できますが、もっと簡単にsetting.ymlを再読み込みする必要があります
37
+ * 書き換えたsetting.ymlを、起動中のprocon_bypass_manプロセスへ即時反映するには、procon_bypass_manプロセスを動かしたまま、別のshellから 以下をを実行してください
38
+ * setting.ymlのシンタックスが正しければ、switchとの接続が継続したままsetting.ymlの内容を読み込んでいるはずです
39
+
40
+ ```shell
41
+ sudo kill -USR2 `cat ./pbm_pid`
42
+ ```
43
+
44
+ ## まとめ
45
+ * スティックの中央値を設定します
46
+ * スプラトゥーンでの最速スニーキングを出すには、set_neutral_positionの値を変更してください
47
+ * 発動するボタンを設定します
48
+ * setting.ymlを再読み込みします
49
+
50
+ ## 設定例
51
+ ```yaml
52
+ version: 1.0
53
+ setting: |-
54
+ prefix_keys_for_changing_layer [:zr, :zl, :l]
55
+ set_neutral_position 2100, 2000
56
+
57
+ layer :up, mode: :manual do
58
+ left_analog_stick_cap cap: 1100, if_pressed: [:zl, :a], force_neutral: :a
59
+ end
60
+ ```
@@ -0,0 +1,52 @@
1
+ # スプラトゥーン2: バブル即割(スプラッシュボム)マクロの設定方法
2
+ https://user-images.githubusercontent.com/1664497/152633205-ab44896b-9fa4-402c-b9aa-667e00676032.mp4
3
+
4
+ * procon_bypass_man: 0.1.18以上が必要です
5
+ * このマクロは、バブルの1個目のみを即割します
6
+
7
+ ## 1. install_macro_pluginで即割マクロを有効化します
8
+ * `setting.yml` に`install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb` と書きます
9
+ * これを記述することで、layer内で呼び出せるようになります
10
+
11
+ ## 2. どのlayerで発動するかを宣言します
12
+ * `setting.yml` のlayer内に`macro ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb, if_pressed: [:zl, :right]` と書きます
13
+ * `if_pressed` がどのボタンを押したときにこのマクロが発動するかの設定です
14
+ * ここのオプションは、自由に変更可能です
15
+ * この場合は、ZLと十字キーの左を同時すると、このマクロが発動します
16
+
17
+ ## 3. 設定を反映させる
18
+ * 上記の記述を加えたsetting.ymlを起動中のprocon_bypass_manプロセスで読み込むには、プロセスにその旨を伝える必要があります
19
+ * ラズベリーパイを再起動して、プロセスを立ち上げ直す、でも目的は達成できますが、もっと簡単にsetting.ymlを再読み込みする必要があります
20
+ * 書き換えたsetting.ymlを、起動中のprocon_bypass_manプロセスへ即時反映するには、procon_bypass_manプロセスを動かしたまま、別のshellから 以下をを実行してください
21
+ * setting.ymlのシンタックスが正しければ、switchとの接続が継続したままsetting.ymlの内容を読み込んでいるはずです
22
+
23
+ ## まとめ
24
+ * 次の2行の追加が必要です。
25
+ * `install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb`
26
+ * `macro ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb, if_pressed: [:zl, :right]`
27
+
28
+ ## 設定例1
29
+ ```yaml
30
+ version: 1.0
31
+ setting: |-
32
+ prefix_keys_for_changing_layer [:zr, :zl, :l]
33
+ install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb
34
+
35
+ layer :up do
36
+ macro ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb, if_pressed: [:zl, :right]
37
+ end
38
+ ```
39
+
40
+ ## 設定例2
41
+ * `open_macro` キーワードを使っても同じことが実行可能です。
42
+ * この場合は、 `install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb` が不要です。
43
+
44
+ ```yaml
45
+ version: 1.0
46
+ setting: |-
47
+ prefix_keys_for_changing_layer [:zr, :zl, :l]
48
+
49
+ layer :up do
50
+ open_macro :sokuwari, steps: [:toggle_r_for_0_2sec, :toggle_thumbr_for_0_14sec, :toggle_thumbr_and_toggle_zr_for_0_34sec, :toggle_r_for_1sec], if_pressed: [:zl, :right]
51
+ end
52
+ ```
data/docs/setup_raspi.md CHANGED
@@ -1,3 +1,5 @@
1
+ https://github.com/splaplapla/procon_bypass_man/blob/master/docs/setup_raspi_by_mitamae.md に半自動化した手順があります
2
+
1
3
  # Raspberry Pi4のセットアップ手順
2
4
  * SDカードにRaspberry Pi OS (32-bit)を焼く
3
5
  * SDカードをRaspberry Pi4本体に挿して起動する
@@ -1,6 +1,6 @@
1
1
  run_command "apt-get update"
2
2
 
3
- package 'ruby' do
3
+ package 'rbenv' do
4
4
  action :install
5
5
  end
6
6
 
@@ -41,16 +41,15 @@ execute "Initialize PBM" do
41
41
  SHELL
42
42
  end
43
43
 
44
- # rbenv
45
- execute "Install rbenv" do
46
- not_if "which rbenv"
47
- command "git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build"
48
- end
49
-
50
44
  # ruby
51
45
  execute "Install ruby" do
46
+ user "pi"
52
47
  not_if "rbenv versions | grep 3.0.1"
53
- command "rbenv install 3.0.1"
48
+ command <<~EOH
49
+ mkdir -p "$(rbenv root)"/plugins
50
+ git clone https://github.com/rbenv/ruby-build.git --depth 1 "$(rbenv root)"/plugins/ruby-build
51
+ rbenv install 3.0.1
52
+ EOH
54
53
  end
55
54
 
56
55
  run_command 'sudo systemctl disable triggerhappy.socket'
@@ -1,9 +1,11 @@
1
+ セットアップ手順を半自動化にしました
2
+
1
3
  # Raspberry Pi4のセットアップ手順 With mitamae
2
4
  * SDカードにRaspberry Pi OS lite (32-bit)を焼く
3
5
  * sshをできる状態で焼いておく
4
6
  * SDカードをRaspberry Pi4本体に挿して起動する
5
7
  * sshする
6
- * curl -L https://github.com/itamae-kitchen/mitamae/releases/latest/download/mitamae-armhf-linux.tar.gz | tar xvz
8
+ * wget -O - "https://github.com/itamae-kitchen/mitamae/releases/latest/download/mitamae-armhf-linux.tar.gz" | tar xvz
7
9
  * wget https://raw.githubusercontent.com/splaplapla/procon_bypass_man/master/docs/setup_raspi.mitamae.rb -O setup_raspi.mitamae.rb
8
10
  * sudo ./mitamae-armhf-linux local setup_raspi.mitamae.rb -l debug
9
11
  * sudo reboot
@@ -12,3 +14,37 @@
12
14
  * PCとRaspberry Pi4を接続し、プロコンとして認識していることを確認する
13
15
  * sudo gem i pbmenv
14
16
  * sudo pbmenv install latest
17
+
18
+ ## 上記手順の動作確認方法
19
+ * 使えそうなイメージ
20
+ * navikey/raspbian-bullseye
21
+ * balenalib/raspberry-pi
22
+
23
+ ```shell
24
+ docker run -it --rm --name my-running-app2 navikey/raspbian-bullseye bash
25
+ ```
26
+
27
+ ### 準備
28
+ * docker runするとrootなのでpiでログインする
29
+
30
+ ```shell
31
+ useradd -m --uid 1000 --groups sudo pi
32
+ echo pi:pi | chpasswd
33
+ su pi
34
+ cd ~ && sudo ls
35
+ ```
36
+
37
+ ### mitamaeスクリプトを実行する
38
+
39
+ ```
40
+ wget -O - "https://github.com/itamae-kitchen/mitamae/releases/latest/download/mitamae-armhf-linux.tar.gz" | tar xvz
41
+ wget https://raw.githubusercontent.com/splaplapla/procon_bypass_man/master/docs/setup_raspi.mitamae.rb -O setup_raspi.mitamae.rb
42
+ sudo ./mitamae-armhf-linux local setup_raspi.mitamae.rb -l debug
43
+ ```
44
+
45
+ 実行に成功したら以下を確認する
46
+
47
+ * /home/pi/.rbenv/verions に ruby3.0.1がインストールしていること
48
+ * /etc/modules に指定の文字列があること
49
+ * /boot/config.txt に指定の文字列があること
50
+ * /usr/share/pbm/shared/add_procon_gadget.sh が存在していること
@@ -0,0 +1,32 @@
1
+ # procon_bypass_man のアップグレード方法
2
+ * rbファイル内にある `gem 'procon_bypass_man', ` の後ろの番号を変更することで、procon_bypass_manのバージョンを変更できます
3
+ * 最新バージョンは https://rubygems.org/gems/procon_bypass_man を参照してください
4
+ * 変更後は、プログラムを実行し直してください。プログラムを起動中であればraspberry piを再起動後にプログラムを起動してください
5
+ * バージョンを変更後、エラーになる場合はサポートするので、discordやissueに報告をお願いします
6
+
7
+ ```ruby
8
+ #!/usr/bin/env ruby
9
+
10
+ require 'bundler/inline'
11
+
12
+ gemfile do
13
+ source 'https://rubygems.org'
14
+ git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
15
+ gem 'procon_bypass_man', '0.1.16.1'
16
+ end
17
+
18
+ ProconBypassMan.configure do |config|
19
+ config.root = File.expand_path(__dir__)
20
+ config.logger = Logger.new("#{ProconBypassMan.root}/app.log", 5, 1024 * 1024 * 10)
21
+ config.logger.level = :debug
22
+ # config.api_servers = ['https://...']
23
+ config.enable_critical_error_logging = true
24
+ end
25
+
26
+ ProconBypassMan.run(setting_path: "/usr/share/pbm/current/setting.yml")
27
+ ```
28
+
29
+ ```diff
30
+ - gem 'procon_bypass_man', '0.1.16.1'
31
+ + gem 'procon_bypass_man', '0.1.17'
32
+ ```
@@ -0,0 +1,25 @@
1
+ # https://github.com/eventmachine/eventmachine/pull/929 is not released yet.
2
+ # i will delete this patch if released.
3
+ module EventMachine
4
+ # @private
5
+ class Reactor
6
+ def run_timers
7
+ timers_to_delete = []
8
+ @timers.each {|t|
9
+ if t.first <= @current_loop_time
10
+ #@timers.delete t
11
+ timers_to_delete << t
12
+ EventMachine::event_callback "", TimerFired, t.last
13
+ else
14
+ break
15
+ end
16
+ }
17
+ timers_to_delete.map{|c| @timers.delete c}
18
+ timers_to_delete = nil
19
+ #while @timers.length > 0 and @timers.first.first <= now
20
+ # t = @timers.shift
21
+ # EventMachine::event_callback "", TimerFired, t.last
22
+ #end
23
+ end
24
+ end
25
+ end
data/lib/ext/module.rb ADDED
@@ -0,0 +1,16 @@
1
+ # pluginの定数未定義を握りつぶす
2
+ class Module
3
+ module ExtModule
4
+ def const_missing(id)
5
+ if self.name =~ /^ProconBypassMan::Plugin/
6
+ parent_const = Object.const_get("#{self.name}")
7
+ parent_const.const_set(id, Module.new)
8
+ Object.const_get("#{self.name}::#{id}")
9
+ else
10
+ super
11
+ end
12
+ end
13
+ end
14
+
15
+ prepend ExtModule
16
+ end
@@ -10,5 +10,4 @@ require "procon_bypass_man/background/jobs/report_reload_config_job"
10
10
  require "procon_bypass_man/background/jobs/report_load_config_job"
11
11
  require "procon_bypass_man/background/jobs/report_error_job"
12
12
  require "procon_bypass_man/background/jobs/report_pressed_buttons_job"
13
- require "procon_bypass_man/background/jobs/fetch_and_run_remote_pbm_action_job"
14
13
  require "procon_bypass_man/background/jobs/sync_device_stats_job"