procon_bypass_man 0.2.0 → 0.2.3
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.
- checksums.yaml +4 -4
- data/.circleci/config.yml +19 -6
- data/.github/workflows/gitleacks.yml +2 -1
- data/.github/workflows/release.yml +1 -0
- data/.github/workflows/ruby.yml +1 -1
- data/.rubocop.yml +4 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +16 -1
- data/Gemfile +6 -3
- data/Gemfile.lock +3 -3
- data/README.md +17 -8
- data/Steepfile +0 -1
- data/bin/generate_default_app +10 -0
- data/docs/getting_started.md +98 -25
- data/docs/setup_raspi_by_mitamae.md +44 -2
- data/lib/procon_bypass_man/background/job_performer.rb +1 -2
- data/lib/procon_bypass_man/background/job_queue.rb +50 -0
- data/lib/procon_bypass_man/background/jobs/base_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/concerns/has_external_api_setting.rb +2 -2
- data/lib/procon_bypass_man/background/jobs/concerns/job_performable.rb +16 -0
- data/lib/procon_bypass_man/background/jobs/post_completed_remote_macro_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_boot_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_completed_upgrade_pbm_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_error_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_error_reload_config_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_load_config_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_procon_performance_measurements_job.rb +43 -0
- data/lib/procon_bypass_man/background/jobs/report_reload_config_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/report_start_reboot_job.rb +1 -1
- data/lib/procon_bypass_man/background/jobs/sync_device_stats_job.rb +1 -1
- data/lib/procon_bypass_man/background.rb +3 -4
- data/lib/procon_bypass_man/bypass/bypass_command.rb +6 -15
- data/lib/procon_bypass_man/bypass/bypass_value.rb +6 -0
- data/lib/procon_bypass_man/bypass/procon_to_switch.rb +107 -0
- data/lib/procon_bypass_man/bypass/switch_to_procon.rb +64 -0
- data/lib/procon_bypass_man/bypass.rb +5 -112
- data/lib/procon_bypass_man/configuration.rb +16 -40
- data/lib/procon_bypass_man/device_connection/output_report_sub_command_table.rb +1 -1
- data/lib/procon_bypass_man/device_connection/procon_setting_overrider.rb +12 -3
- data/lib/procon_bypass_man/procon/macro.rb +1 -1
- data/lib/procon_bypass_man/procon/performance_measurement/last_bypass_at.rb +17 -0
- data/lib/procon_bypass_man/procon/performance_measurement/measurement_collection.rb +9 -0
- data/lib/procon_bypass_man/procon/performance_measurement/measurements_summarizer.rb +84 -0
- data/lib/procon_bypass_man/procon/performance_measurement/procon_performance_span_transfer_job.rb +8 -0
- data/lib/procon_bypass_man/procon/performance_measurement/queue_over_process.rb +38 -0
- data/lib/procon_bypass_man/procon/performance_measurement/span_queue.rb +42 -0
- data/lib/procon_bypass_man/procon/performance_measurement/span_transfer_buffer.rb +39 -0
- data/lib/procon_bypass_man/procon/performance_measurement.rb +103 -0
- data/lib/procon_bypass_man/procon.rb +2 -1
- data/lib/procon_bypass_man/procon_display/bypass_hook.rb +12 -0
- data/lib/procon_bypass_man/procon_display/http_request.rb +31 -0
- data/lib/procon_bypass_man/procon_display/http_response.rb +23 -0
- data/lib/procon_bypass_man/procon_display/server.rb +33 -0
- data/lib/procon_bypass_man/procon_display/server_app.rb +17 -0
- data/lib/procon_bypass_man/procon_display/status.rb +20 -0
- data/lib/procon_bypass_man/procon_display.rb +11 -0
- data/lib/procon_bypass_man/remote_macro/queue_over_process.rb +26 -44
- data/lib/procon_bypass_man/remote_macro/remote_macro_object.rb +22 -24
- data/lib/procon_bypass_man/remote_macro/remote_macro_receiver.rb +1 -1
- data/lib/procon_bypass_man/remote_macro/remote_macro_sender.rb +1 -1
- data/lib/procon_bypass_man/remote_macro/task.rb +1 -5
- data/lib/procon_bypass_man/remote_macro/task_queue.rb +6 -10
- data/lib/procon_bypass_man/remote_pbm_action/commands/update_remote_pbm_action_status_command.rb +1 -1
- data/lib/procon_bypass_man/runner.rb +4 -9
- data/lib/procon_bypass_man/scheduler.rb +15 -6
- data/lib/procon_bypass_man/support/callbacks.rb +72 -34
- data/lib/procon_bypass_man/support/can_over_process.rb +60 -0
- data/lib/procon_bypass_man/support/gc.rb +8 -0
- data/lib/procon_bypass_man/support/http_client.rb +9 -6
- data/lib/procon_bypass_man/support/load_agv.rb +20 -0
- data/lib/procon_bypass_man/support/procon_performance_http_client.rb +7 -0
- data/lib/procon_bypass_man/support/retryable.rb +16 -0
- data/lib/procon_bypass_man/support/signal_handler.rb +1 -1
- data/lib/procon_bypass_man/version.rb +1 -1
- data/lib/procon_bypass_man/websocket/client.rb +2 -2
- data/lib/procon_bypass_man/worker.rb +32 -0
- data/lib/procon_bypass_man.rb +41 -10
- data/procon_bypass_man.gemspec +1 -1
- data/project_template/README.md +0 -5
- data/project_template/app.rb +21 -11
- data/project_template/app.rb.erb +62 -0
- data/project_template/lib/app_generator.rb +31 -0
- data/project_template/web.rb +1 -1
- data/sig/main.rbs +10 -52
- data/tmp/.keep +0 -0
- metadata +34 -10
- data/lib/procon_bypass_man/background/job_runner.rb +0 -45
- data/lib/procon_bypass_man/background/jobs/concerns/has_internal_api_setting.rb +0 -5
- data/lib/procon_bypass_man/background/jobs/concerns/job_runnable.rb +0 -16
- data/lib/procon_bypass_man/background/jobs/report_pressed_buttons_job.rb +0 -15
- data/lib/procon_bypass_man/bypass/usb_hid_logger.rb +0 -44
- data/lib/procon_bypass_man/io_monitor.rb +0 -108
- data/lib/procon_bypass_man/support/server_pool.rb +0 -46
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: dddf32b941507a57c7b2c5656879e132132f51eefcd64f29788567c81566c235
|
|
4
|
+
data.tar.gz: e3649afcdb4877b41c6d05754ed77176d46a1fcc46a3d45751e15b1c91f6a23d
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 231bb01ab26c17cdd6d044030a71479dfd1016d05e353de537e3ecd3978f5f4d23b2d8c4058e4f86cadbd555e3762e6124f7cb36920df2544c306e154d568bfe
|
|
7
|
+
data.tar.gz: 8ae5c0a6b510d9b6dc22eb54fbf748e21e9b2b90671f00dc197baad2f90d00473ba4ee64f6ff148e7a200498df8f22edd738281979ab5e1240233a6bbc9e349b
|
data/.circleci/config.yml
CHANGED
|
@@ -15,7 +15,7 @@ executors:
|
|
|
15
15
|
BUNDLE_JOBS: 4
|
|
16
16
|
working_directory: ~/app
|
|
17
17
|
|
|
18
|
-
commands:
|
|
18
|
+
commands:
|
|
19
19
|
bundle_install:
|
|
20
20
|
parameters:
|
|
21
21
|
ruby-version:
|
|
@@ -55,6 +55,14 @@ jobs:
|
|
|
55
55
|
- run: ruby -cw project_template/web.rb
|
|
56
56
|
- run: ruby -ryaml -e 'puts YAML.load_file("./project_template/setting.yml")["setting"]' > /tmp/content_of_setting.rb && ruby -cw /tmp/content_of_setting.rb
|
|
57
57
|
|
|
58
|
+
outdated_app_checker:
|
|
59
|
+
executor:
|
|
60
|
+
name: ruby
|
|
61
|
+
tag: 3.0.1
|
|
62
|
+
steps:
|
|
63
|
+
- checkout
|
|
64
|
+
- run: ruby bin/generate_default_app && git diff --exit-code project_template/app.rb
|
|
65
|
+
|
|
58
66
|
bundle_install:
|
|
59
67
|
parameters:
|
|
60
68
|
ruby-version:
|
|
@@ -101,27 +109,31 @@ jobs:
|
|
|
101
109
|
|
|
102
110
|
build_jobs: &build_jobs
|
|
103
111
|
- check_pbm_version
|
|
112
|
+
- outdated_app_checker
|
|
104
113
|
- syntax_check:
|
|
105
114
|
matrix:
|
|
106
115
|
parameters:
|
|
107
116
|
ruby-version:
|
|
117
|
+
- "2.5.5"
|
|
108
118
|
- "3.0.1"
|
|
109
119
|
- "3.0.2"
|
|
110
|
-
- "3.1.
|
|
120
|
+
- "3.1.2"
|
|
111
121
|
- bundle_install:
|
|
112
122
|
matrix:
|
|
113
123
|
parameters:
|
|
114
124
|
ruby-version:
|
|
125
|
+
- "2.5.5"
|
|
115
126
|
- "3.0.1"
|
|
116
127
|
- "3.0.2"
|
|
117
|
-
- "3.1.
|
|
128
|
+
- "3.1.2"
|
|
118
129
|
- lint:
|
|
119
130
|
matrix:
|
|
120
131
|
parameters:
|
|
121
132
|
ruby-version:
|
|
133
|
+
- "2.5.5"
|
|
122
134
|
- "3.0.1"
|
|
123
135
|
- "3.0.2"
|
|
124
|
-
- "3.1.
|
|
136
|
+
- "3.1.2"
|
|
125
137
|
requires:
|
|
126
138
|
- bundle_install
|
|
127
139
|
- type_check:
|
|
@@ -130,16 +142,17 @@ build_jobs: &build_jobs
|
|
|
130
142
|
ruby-version:
|
|
131
143
|
# - "3.0.1" # たまにSEGVするので
|
|
132
144
|
- "3.0.2"
|
|
133
|
-
- "3.1.
|
|
145
|
+
- "3.1.2"
|
|
134
146
|
requires:
|
|
135
147
|
- bundle_install
|
|
136
148
|
- rspec:
|
|
137
149
|
matrix:
|
|
138
150
|
parameters:
|
|
139
151
|
ruby-version:
|
|
152
|
+
- "2.5.5"
|
|
140
153
|
- "3.0.1"
|
|
141
154
|
- "3.0.2"
|
|
142
|
-
- "3.1.
|
|
155
|
+
- "3.1.2"
|
|
143
156
|
requires:
|
|
144
157
|
- bundle_install
|
|
145
158
|
workflows:
|
data/.github/workflows/ruby.yml
CHANGED
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
3.
|
|
1
|
+
3.1.2
|
data/CHANGELOG.md
CHANGED
|
@@ -1,5 +1,20 @@
|
|
|
1
|
+
## [0.2.3] - 2022-8-27
|
|
2
|
+
* プロコンのラグ具合をpbm-cloudに送信し、グラフで見れるようになりました #158
|
|
3
|
+
* 非同期ジョブをmasterプロセス経由で実行するようになりました #191
|
|
4
|
+
* バイパス処理が数秒間固まる現象がおそらく直りました #179
|
|
5
|
+
|
|
6
|
+
## [0.2.2] - 2022-07-10
|
|
7
|
+
* project_template/app.rbを動的に生成する仕組みを追加しました
|
|
8
|
+
* ドキュメントからpbm_webに関する記述を削除しました
|
|
9
|
+
* 起動スクリプト(app.rb) がたまに意図せず /usr/share/pbm/current を削除してしまう不具合を修正しました
|
|
10
|
+
|
|
11
|
+
## [0.2.1] - 2022-05-29
|
|
12
|
+
- 入力表示機能を提供するSwitchProconInputViewerに対応しました
|
|
13
|
+
- https://github.com/splaplapla/switch-procon-input-viewer
|
|
14
|
+
- app.rb内のバグ修正, ログファイルとして残る世代を減らしました
|
|
15
|
+
|
|
1
16
|
## [0.2.0] - 2022-05-20
|
|
2
|
-
- 3
|
|
17
|
+
- 3つ以上のボタンを操作するマクロに対応しました
|
|
3
18
|
- IOに関するログをデフォルトで無効にしました
|
|
4
19
|
- 有効にする場合はapp.rbに `config.io_monitor_logging = true` を記述してください
|
|
5
20
|
- 接続が安定化するまでの時間が短くなりました
|
data/Gemfile
CHANGED
|
@@ -10,8 +10,11 @@ gem "rspec"
|
|
|
10
10
|
gem "pry"
|
|
11
11
|
gem "timecop"
|
|
12
12
|
gem "rubocop", require: false
|
|
13
|
-
gem "steep", require: false
|
|
14
|
-
gem 'typeprof', require: false
|
|
15
|
-
gem 'rbs', require: false
|
|
16
13
|
gem "sinatra", require: false
|
|
17
14
|
gem "webrick", require: false
|
|
15
|
+
|
|
16
|
+
if Gem::Version.new(RUBY_VERSION) > Gem::Version.new("2.6.0")
|
|
17
|
+
gem 'typeprof', require: false
|
|
18
|
+
gem 'rbs', require: false
|
|
19
|
+
gem "steep", require: false
|
|
20
|
+
end
|
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
procon_bypass_man (0.2.
|
|
4
|
+
procon_bypass_man (0.2.3)
|
|
5
5
|
action_cable_client
|
|
6
6
|
pbmenv (>= 0.1.9)
|
|
7
7
|
sorted_set
|
|
@@ -36,11 +36,11 @@ GEM
|
|
|
36
36
|
parallel (1.21.0)
|
|
37
37
|
parser (3.0.3.2)
|
|
38
38
|
ast (~> 2.4.1)
|
|
39
|
-
pbmenv (0.1.
|
|
39
|
+
pbmenv (0.1.10)
|
|
40
40
|
pry (0.14.1)
|
|
41
41
|
coderay (~> 1.1)
|
|
42
42
|
method_source (~> 1.0)
|
|
43
|
-
rack (2.2.3)
|
|
43
|
+
rack (2.2.3.1)
|
|
44
44
|
rack-protection (2.2.0)
|
|
45
45
|
rack
|
|
46
46
|
rainbow (3.0.0)
|
data/README.md
CHANGED
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
|
|
13
13
|
<img width="880" alt="スクリーンショット 2022-04-02 9 10 38" src="https://user-images.githubusercontent.com/1664497/161356057-71e4bc2a-0217-4434-9bf1-0002b9fb261a.png">
|
|
14
14
|
|
|
15
|
-
|
|
15
|
+
https://user-images.githubusercontent.com/1664497/171327108-f12f56a5-fc36-48da-95a5-65e976553a20.mov
|
|
16
16
|
|
|
17
17
|
<!--
|
|
18
18
|

|
|
@@ -33,7 +33,7 @@ Switch <-- (PBM): ZR連打
|
|
|
33
33
|
* データ通信が可能なUSBケーブル
|
|
34
34
|
|
|
35
35
|
## 使うソフトウェア
|
|
36
|
-
* ruby
|
|
36
|
+
* ruby 2.5 以上
|
|
37
37
|
|
|
38
38
|
## Usage
|
|
39
39
|
* USBガジェットモードで起動するRaspberry Pi4を用意する
|
|
@@ -61,9 +61,6 @@ Switch <-- (PBM): ZR連打
|
|
|
61
61
|
* ケーブルでそれらを接続した状態で、Raspberry Pi4にsshして本プログラムを起動することで使用します
|
|
62
62
|
* ラズベリーパイ4のセットアップ方法は?
|
|
63
63
|
* https://github.com/splaplapla/procon_bypass_man/tree/master/docs/setup_raspi.md
|
|
64
|
-
* モード, マクロの違いは?
|
|
65
|
-
* modeはProconの入力をそのまま再現するため機能。レイヤーを切り替えるまで繰り返し続けます
|
|
66
|
-
* マクロは特定のキーを順番に入れていく機能。キーの入力が終わったらマクロは終了します
|
|
67
64
|
* レイヤーとは?
|
|
68
65
|
* 自作キーボードみたいな感じでレイヤー毎に設定内容を記述して切り替えれます
|
|
69
66
|
* レイヤーは4つあって、up, down, left, rightです。十字キーに対応しています
|
|
@@ -80,6 +77,13 @@ Switch <-- (PBM): ZR連打
|
|
|
80
77
|
* sshなしで運用は可能ですか?
|
|
81
78
|
* https://pbm-cloud.herokuapp.com を使えば、sshを使わずに運用が可能です
|
|
82
79
|
|
|
80
|
+
## 仕様・制約
|
|
81
|
+
* 日を跨ぐ24時ちょうどになった瞬間はLinuxのcronが起動などがするようで、この時間は数秒間バイパスが激しく遅延します
|
|
82
|
+
* ログファイルのローテションが少なくとも走るはずなので、不要なデーモンを停止するなどで影響を小さくすることはできると思いますが、完全に抑制することは難しいと思います
|
|
83
|
+
* コントローラーから読み取ってSwitchに書き込む時間は、少なくとも0.02秒はかかります
|
|
84
|
+
* 動かしているRaspberry Piの負荷に依存するこの限りではありません
|
|
85
|
+
|
|
86
|
+
<!--
|
|
83
87
|
## TODO
|
|
84
88
|
* レコーディング機能(プロコンの入力をマクロとして登録ができる)
|
|
85
89
|
* ドキュメントを書く(doing)
|
|
@@ -103,11 +107,16 @@ sudo kill -USR2 `cat ./pbm_pid`
|
|
|
103
107
|
* CHANGELOG.md に日付を書く
|
|
104
108
|
* be rake release
|
|
105
109
|
* githubのreleaseを作成する
|
|
110
|
+
-->
|
|
106
111
|
|
|
107
|
-
##
|
|
108
|
-
|
|
109
|
-
|
|
112
|
+
## 開発を支援してくれる人を募集しています
|
|
113
|
+
* https://jiikko.fanbox.cc/
|
|
114
|
+
* procon_bypassの運営・開発・サーバー費用に充てさせていただきます。また、問い合わせに優先して対応します。
|
|
110
115
|
|
|
111
116
|
## Links
|
|
112
117
|
* https://discord.gg/bEcRNKf4ep
|
|
113
118
|
* 質問などご意見をdiscordでも受け付けています
|
|
119
|
+
|
|
120
|
+
## License
|
|
121
|
+
|
|
122
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Steepfile
CHANGED
|
@@ -38,7 +38,6 @@ target :lib do
|
|
|
38
38
|
check 'lib/procon_bypass_man/support/http_client'
|
|
39
39
|
check 'lib/procon_bypass_man/support/send_device_stats_http_client'
|
|
40
40
|
check 'lib/procon_bypass_man/support/on_memory_cache'
|
|
41
|
-
check 'lib/procon_bypass_man/support/server_pool'
|
|
42
41
|
check 'lib/procon_bypass_man/support/uptime.rb'
|
|
43
42
|
check 'lib/procon_bypass_man/support/safe_timeout'
|
|
44
43
|
check 'lib/procon_bypass_man/support/update_remote_pbm_action_status_http_client'
|
data/docs/getting_started.md
CHANGED
|
@@ -10,22 +10,26 @@
|
|
|
10
10
|
* [pbmenvを使わない方法](#pbmenvを使わない方法)
|
|
11
11
|
* [普段使いをするためのセットアップ](#普段使いをするためのセットアップ)
|
|
12
12
|
* [レイヤー](#レイヤー)
|
|
13
|
-
* モード
|
|
14
13
|
* [マクロ](#マクロ)
|
|
15
14
|
* [左スティックの感度調整](#左スティックの感度調整)
|
|
16
|
-
*
|
|
15
|
+
* [入力表示](#入力表示)
|
|
16
|
+
* [設定ファイルの書き方](#設定ファイルの書き方)
|
|
17
17
|
* プラグインの書き方
|
|
18
18
|
* [設定ファイルの書き方がわからない、エラーが起きるとき](#設定ファイルの書き方がわからない、エラーが起きるとき)
|
|
19
19
|
* [procon_bypass_manのアップグレード方法](#procon_bypass_manのアップグレード方法)
|
|
20
20
|
* [procon_bypass_man_cloudについて](#procon_bypass_man_cloudについて)
|
|
21
|
+
* [最適化について](#最適化について)
|
|
21
22
|
|
|
22
23
|
## はじめに
|
|
23
24
|
### procon_bypass_manで解決したいこと
|
|
24
25
|
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
26
|
+
サードパーティー製のコントローラーは頑丈で使いやすいですか?
|
|
27
|
+
|
|
28
|
+
通常、ボタンの連射をするには、サードパーティー製のコントローラーを使う必要があるのですが、ボタンの押した感覚や各種設定方法は各社の独自仕様であるため、それらを手に馴染ませるのがとても大変です。
|
|
29
|
+
特に「説明書を熟読して、コントローラーの設定方法を理解し適用すること、時間が空いてから設定されている状態を思い出す」がつらいと思っています。
|
|
30
|
+
また、サードパーティー製のコントローラーは非常に壊れやすく、同じ製品が再び購入できるとは限りません。
|
|
31
|
+
|
|
32
|
+
本ツールを使うと、使い慣れた純正コントローラーを使って、サードパーティー製のコントローラー以上のことができます。設定内容はテキストで管理しているため一目瞭然です。設定内容のコピーも容易です。
|
|
29
33
|
|
|
30
34
|
### procon_bypass_manでできること
|
|
31
35
|
|
|
@@ -34,11 +38,12 @@
|
|
|
34
38
|
* 連射中は特定のキーの入力を無視したり、複数のキーをトリガーに連射することもできます
|
|
35
39
|
* マクロ
|
|
36
40
|
* [活用例](/docs/setting/splatoon2_macro_sokuwari_bubble.md)
|
|
37
|
-
* 特定の同じ操作の繰り返し(モード)
|
|
38
41
|
* 左スティックの感度調整
|
|
39
42
|
* [設定方法](/docs/setting/left-analogstick-cap.md)
|
|
40
43
|
* WEBから設定状態の閲覧・反映
|
|
41
44
|
* ボタンリマップ
|
|
45
|
+
* 入力表示
|
|
46
|
+
* https://github.com/splaplapla/switch-procon-input-viewer
|
|
42
47
|
|
|
43
48
|
## セットアップ
|
|
44
49
|
### ラズベリーパイのセットアップ
|
|
@@ -47,26 +52,66 @@
|
|
|
47
52
|
|
|
48
53
|
### procon_bypass_manのインストール
|
|
49
54
|
|
|
50
|
-
pbmenvを使うと https://pbm-cloud.herokuapp.com と連携ができるのでおすすめですが、pbmenvを使わなくてもprocon_bypass_manをインストールすることは可能です。
|
|
55
|
+
pbmenvを使うと https://pbm-cloud.herokuapp.com と連携ができるのでおすすめですが、pbmenvを使わなくてもprocon_bypass_manをインストールすることは可能です。
|
|
56
|
+
次の4つからインストール方法を1つ選んでください。
|
|
57
|
+
|
|
58
|
+
* pbmenvを使う方法
|
|
59
|
+
* systemにインストールされているrubyを使う場合(初心者におすすめ)
|
|
60
|
+
* rbenvでインストールしたrubyを使う場合
|
|
61
|
+
* pbmenvを使わない方法
|
|
62
|
+
* systemにインストールされているrubyを使う場合(初心者におすすめ)
|
|
63
|
+
* rbenvでインストールしたrubyを使う場合
|
|
64
|
+
|
|
65
|
+
ちなみに、rbenvを使った方がラグは少ないような気がしますが、明確な体験の違いはそこまでないように思います。
|
|
51
66
|
|
|
52
|
-
#### pbmenvを使う方法
|
|
67
|
+
#### 1) pbmenvを使う方法
|
|
53
68
|
|
|
54
69
|
https://github.com/splaplapla/pbmenv
|
|
55
|
-
pbmenvはprocon_bypass_manのバージョンマネジャーです。
|
|
70
|
+
pbmenvはprocon_bypass_manのバージョンマネジャーです。
|
|
71
|
+
procon_bypass_manはバージョンアップによって起動スクリプトに変更が入ることがあって、バージョンアップするときはpbmenvを使うとエラーが起きることなくインストールができるようになります。また、pbm-cloudと連携してすべての機能を使うには、pbmenvの利用が必須になります。
|
|
56
72
|
|
|
73
|
+
##### 1-1) systemにインストールされているrubyを使う場合(初心者におすすめ)
|
|
74
|
+
|
|
75
|
+
```bash
|
|
76
|
+
sudo apt-get install ruby ruby-dev
|
|
77
|
+
sudo gem i bundler pbmenv
|
|
78
|
+
sudo pbmenv install latest --use
|
|
79
|
+
cd /usr/share/pbm/current
|
|
80
|
+
sudo ruby app.rb
|
|
57
81
|
```
|
|
58
|
-
|
|
59
|
-
|
|
82
|
+
|
|
83
|
+
##### 1-2) rbenvでインストールしたrubyを使う場合
|
|
84
|
+
rbenvはrubyのパッケージマネージャーです。
|
|
85
|
+
|
|
86
|
+
```bash
|
|
87
|
+
rbenv install 3.0.1
|
|
88
|
+
sudo gem install pbmenv
|
|
89
|
+
sudo pbmenv install latest --use
|
|
60
90
|
cd /usr/share/pbm/current
|
|
61
91
|
sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
|
|
62
92
|
```
|
|
63
93
|
|
|
64
|
-
#### pbmenvを使わない方法
|
|
94
|
+
#### 2) pbmenvを使わない方法
|
|
95
|
+
https://github.com/jiikko/procon_bypass_man_sample にある app.rb と setting.yml を Raspberry Pi にダウンロードすれば、起動することができます。
|
|
65
96
|
|
|
66
|
-
|
|
97
|
+
##### 2-1) systemにインストールされているrubyを使う場合(初心者におすすめ)
|
|
67
98
|
|
|
99
|
+
```bash
|
|
100
|
+
sudo apt-get install ruby ruby-dev wget
|
|
101
|
+
wget https://raw.githubusercontent.com/jiikko/procon_bypass_man_sample/master/app.rb
|
|
102
|
+
wget https://raw.githubusercontent.com/jiikko/procon_bypass_man_sample/master/setting.yml
|
|
103
|
+
sudo gem i bundler
|
|
104
|
+
sudo ruby app.rb
|
|
68
105
|
```
|
|
106
|
+
|
|
107
|
+
##### 2-2) rbenvでインストールしたrubyを使う場合
|
|
108
|
+
rbenvはrubyのパッケージマネージャーです。
|
|
109
|
+
|
|
110
|
+
```bash
|
|
69
111
|
rbenv install 3.0.1
|
|
112
|
+
sudo apt-get install wget
|
|
113
|
+
wget https://raw.githubusercontent.com/jiikko/procon_bypass_man_sample/master/app.rb
|
|
114
|
+
wget https://raw.githubusercontent.com/jiikko/procon_bypass_man_sample/master/setting.yml
|
|
70
115
|
sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
|
|
71
116
|
```
|
|
72
117
|
|
|
@@ -87,12 +132,12 @@ pbmenvを使っていない場合は、 https://github.com/splaplapla/procon_byp
|
|
|
87
132
|
ゲームをやめたくなったらSwitchはそのままスリープに入って問題ないです。このときにRaspberry Piも一緒に電源が切れてしまいますが故障することはありません。
|
|
88
133
|
|
|
89
134
|
## レイヤー
|
|
90
|
-
|
|
135
|
+
レイヤーごとにボタンの設定をすることができ、用途に応じてレイヤーを切り替えることで、違う設定を即座に適用できるという機能です。
|
|
91
136
|
レイヤーは、up, down, left, rightの4つあります。 設定ファイルの書いている `prefix_keys_for_changing_layer` を押しながら、十字キーのup, down, left, rightのどれかを押すと、レイヤーを変更することができます。
|
|
92
137
|
|
|
93
|
-
|
|
138
|
+
設定ファイルでのレイヤー毎の定義方法は、 `layer` ブロックで囲って定義します。
|
|
94
139
|
以下の例は、upレイヤーとleftレイヤーだけに設定が書かれています。ゲーム進行状況によってレイヤーを切り替えてください。
|
|
95
|
-
|
|
140
|
+
procon_bypass_manを起動した直後に有効になっているレイヤーは、 up です。
|
|
96
141
|
|
|
97
142
|
```ruby
|
|
98
143
|
layer :up do
|
|
@@ -110,15 +155,12 @@ layer :down do
|
|
|
110
155
|
end
|
|
111
156
|
```
|
|
112
157
|
|
|
113
|
-
## モード
|
|
114
|
-
* 後で書きます
|
|
115
|
-
|
|
116
158
|
## マクロ
|
|
117
159
|
|
|
118
160
|
決まった入力を繰り返し実行できる機能を「マクロ」と呼んでいます。
|
|
119
|
-
|
|
161
|
+
マクロを使うことで、スプラトゥーンであれば、バブル即割の操作や、試合中の味方へのスーパージャンプもマクロ経由で入力できます。
|
|
120
162
|
|
|
121
|
-
|
|
163
|
+
設定ファイルに記述するマクロは文字列で定義します。
|
|
122
164
|
マクロを設定ファイルに定義するには、「プラグイン」か設定ファイルへ直接を記述する「open_macro」のどちらかで行えます。
|
|
123
165
|
|
|
124
166
|
「プラグイン」を使用する場合は、マクロの詳細を記述する必要がなく、PBMのバージョンアップとともに改善が入る可能性があります。
|
|
@@ -133,10 +175,13 @@ open_macroは、マクロの詳細を設定ファイルに直書きするため
|
|
|
133
175
|
y, x, b, a, sl, sr, r, zr, minus, plus, thumbr, thumbl, home, cap, down, up, right, left, l, zl
|
|
134
176
|
```
|
|
135
177
|
|
|
178
|
+
<!--
|
|
136
179
|
マクロの形式には、1ボタンずつ入力する「バージョン1」と時間指定のできる「バージョン2」があります。
|
|
137
180
|
バージョン1は、 `[:x, :y, :up]` と記述すると、x, y, 十字キーの上ボタンを順番に入力します。バージョン1では実行時間を指定することはできません。
|
|
181
|
+
-->
|
|
138
182
|
|
|
139
|
-
|
|
183
|
+
マクロは、複数のボタンを同時に「連打」「押しっぱなし」または「待機」ができます。
|
|
184
|
+
|
|
140
185
|
連打はtoggleで、押しっぱなしはpressing, 無操作は、waitというキーワードを使います。
|
|
141
186
|
複数のボタンを同時押しの場合は、andで繋ぎます。Xボタンを押しっぱなしにして、ZRボタンを連打する場合は `pressing_x_and_toggle_zr` と記述します。
|
|
142
187
|
これに時間を指定をする場合は、forで繋ぎます。 `pressing_x_and_toggle_zr_for_1sec` となります。
|
|
@@ -151,7 +196,7 @@ y, x, b, a, sl, sr, r, zr, minus, plus, thumbr, thumbl, home, cap, down, up, rig
|
|
|
151
196
|
* toggle_x_and_toggle_zr_for_0_2sec
|
|
152
197
|
* XボタンとZRボタンを0.2秒間連打
|
|
153
198
|
|
|
154
|
-
上述したマクロ(ステップ)は、open_macro
|
|
199
|
+
上述したマクロ(ステップ)は、open_macroという構文でも記述できます。次は実際の記述例です。
|
|
155
200
|
|
|
156
201
|
```
|
|
157
202
|
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]
|
|
@@ -162,8 +207,17 @@ open_macro :sokuwari, steps: [:toggle_r_for_0_2sec, :toggle_thumbr_for_0_14sec,
|
|
|
162
207
|
## 左スティックの感度調整
|
|
163
208
|
[左スティックの感度調整](/docs/setting/left-analogstick-cap.md)
|
|
164
209
|
|
|
210
|
+
## 入力表示
|
|
211
|
+
* 使い方は https://github.com/splaplapla/switch-procon-input-viewer を参照してください。
|
|
212
|
+
* https://zenn.dev/jiikko/articles/2ef0ccbdfe0fe7 に技術的な解説を書きました
|
|
213
|
+
|
|
165
214
|
## 設定ファイルの書き方
|
|
166
|
-
|
|
215
|
+
設定ファイルは、ymlフォーマットに埋め込まれたRubyスクリプトで記述します。
|
|
216
|
+
Rubyスクリプトな上に独特な構文に対して、アレンジを加えることは難しいと思ったので、マウス操作をするだけで設定ファイルを生成するツールを作りました。
|
|
217
|
+
https://splaplapla.github.io/procon_bypass_man_setting_editor/ です。
|
|
218
|
+
このツールで設定ファイルを生成し、コピペをするだけで大半のことは済みます。
|
|
219
|
+
|
|
220
|
+
TODO 設定ファイルの書き方
|
|
167
221
|
|
|
168
222
|
## プラグインの書き方
|
|
169
223
|
* 後で書きます
|
|
@@ -184,3 +238,22 @@ procon_bypass_man_cloudとの接続が完了後、Raspberry Piを起動時にpro
|
|
|
184
238
|
セットアップ方法などでわからないことがあればdiscordで質問してみてください。
|
|
185
239
|
|
|
186
240
|
セットアップ方法は https://pbm-cloud.herokuapp.com/faq に書いています。
|
|
241
|
+
|
|
242
|
+
## 最適化について
|
|
243
|
+
本稿では、Rubyの最適化について書きます。上級者向けです。適用しなくても普通に動きますが、逆に適用したことで何らかのケースで遅くなる場合があるかもしれません。
|
|
244
|
+
|
|
245
|
+
* jemallocを使う
|
|
246
|
+
* GCの回数が減る(はずな)ので小さな遅延が減ると考えています。が、違いを測定および体感はできませんでした。
|
|
247
|
+
* インストール方法と動作確認
|
|
248
|
+
* sudo apt install libjemalloc-dev
|
|
249
|
+
* export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so.2
|
|
250
|
+
* MALLOC_CONF=stats_print:true ruby -e "exit"
|
|
251
|
+
* 適用方法
|
|
252
|
+
* `/usr/share/pbm/current/systemd_units/pbm.service` の `ExecStart` 行に `LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so.2` を足してください
|
|
253
|
+
* ex) `ExecStart=/bin/bash -c "LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so.2 /home/pi/.rbenv/versions/3.0.1/bin/ruby /usr/share/pbm/current/app.rb"`
|
|
254
|
+
* jitを有効にする
|
|
255
|
+
* 起動した直後は、コンパイルが走るので遅くなります。しかし、有効にしたところで本プログラムはIOバインドなので効果は薄いようです。
|
|
256
|
+
* 適用方法
|
|
257
|
+
* `/usr/share/pbm/current/systemd_units/pbm.service` の `ExecStart` 行に `--jit` を足してください
|
|
258
|
+
* ex) `ExecStart=/bin/bash -c "/home/pi/.rbenv/versions/3.0.1/bin/ruby --jit /usr/share/pbm/current/app.rb"`
|
|
259
|
+
* ラズベリーパイのGUIをオフにする
|
|
@@ -9,12 +9,52 @@
|
|
|
9
9
|
* wget https://raw.githubusercontent.com/splaplapla/procon_bypass_man/master/docs/setup_raspi.mitamae.rb -O setup_raspi.mitamae.rb
|
|
10
10
|
* sudo ./mitamae-armhf-linux local setup_raspi.mitamae.rb -l debug
|
|
11
11
|
* sudo reboot
|
|
12
|
-
* sudo sh /usr/share/pbm/shared/add_procon_gadget.sh
|
|
13
|
-
*
|
|
12
|
+
* sudo sh /usr/share/pbm/shared/add_procon_gadget.sh の実行する
|
|
13
|
+
* 何も表示されなければOK
|
|
14
14
|
* PCとRaspberry Pi4を接続し、プロコンとして認識していることを確認する
|
|
15
15
|
* sudo gem i pbmenv
|
|
16
16
|
* sudo pbmenv install latest
|
|
17
17
|
|
|
18
|
+
Raspberry Piのセットアップは以上です。
|
|
19
|
+
次は、SwitchとRaspberry Piとプロコンにケーブルを接続した上で、次のコマンドをshellに入力し、procon_bypass_manの動作確認を行なってください。
|
|
20
|
+
|
|
21
|
+
```shell
|
|
22
|
+
cd /usr/share/pbm/current
|
|
23
|
+
sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
次のような出力が画面に表示されれば、動作しています。
|
|
27
|
+
|
|
28
|
+
```
|
|
29
|
+
----
|
|
30
|
+
ProconBypassMan::VERSION: 0.2.2
|
|
31
|
+
RUBY_VERSION: 3.0.1
|
|
32
|
+
Pbmenv::VERSION: 0.1.10
|
|
33
|
+
pid: 574
|
|
34
|
+
root: /usr/share/pbm/v0.2.0
|
|
35
|
+
pid_path: /usr/share/pbm/v0.2.0/pbm_pid
|
|
36
|
+
setting_path: /usr/share/pbm/current/setting.yml
|
|
37
|
+
uptime from boot: 60 sec
|
|
38
|
+
use_pbmenv: true
|
|
39
|
+
session_id: s_c6f36422-c20f-4a04-a446-b4a235c2face
|
|
40
|
+
device_id: d_8b0c90d8-90*************************
|
|
41
|
+
bypass_mode: normal(5)
|
|
42
|
+
----
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
<hr>
|
|
46
|
+
|
|
47
|
+
procon_bypass_manを手動で起動する場合は、先ほどの2行のコマンドを毎回入力してください。
|
|
48
|
+
procon_bypass_manを自動起動する方法については `GETTING STARTED` を参照してください。
|
|
49
|
+
|
|
50
|
+
<hr>
|
|
51
|
+
|
|
52
|
+
|
|
53
|
+
ケーブルの接続方法は、次の写真を参考にしてください。
|
|
54
|
+
|
|
55
|
+
<img src="https://user-images.githubusercontent.com/1664497/151661582-3a1e8ce9-6c38-4754-8075-7a4453b3109a.jpg" width="500px">
|
|
56
|
+
|
|
57
|
+
<!--
|
|
18
58
|
## 上記手順の動作確認方法
|
|
19
59
|
* 使えそうなイメージ
|
|
20
60
|
* navikey/raspbian-bullseye
|
|
@@ -48,3 +88,5 @@ sudo ./mitamae-armhf-linux local setup_raspi.mitamae.rb -l debug
|
|
|
48
88
|
* /etc/modules に指定の文字列があること
|
|
49
89
|
* /boot/config.txt に指定の文字列があること
|
|
50
90
|
* /usr/share/pbm/shared/add_procon_gadget.sh が存在していること
|
|
91
|
+
|
|
92
|
+
-->
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
class ProconBypassMan::Background::JobQueue
|
|
2
|
+
extend ProconBypassMan::CanOverProcess
|
|
3
|
+
|
|
4
|
+
include Singleton
|
|
5
|
+
|
|
6
|
+
attr_reader :distributed_queue
|
|
7
|
+
|
|
8
|
+
# @override
|
|
9
|
+
def self.enable?
|
|
10
|
+
true
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
# @override
|
|
14
|
+
def self.distributed_class
|
|
15
|
+
Queue
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
# @override
|
|
19
|
+
def self.socket_file_path
|
|
20
|
+
"/tmp/procon_bypass_man_background_job_queue_queue".freeze
|
|
21
|
+
end
|
|
22
|
+
|
|
23
|
+
def self.push(value)
|
|
24
|
+
return unless enable?
|
|
25
|
+
|
|
26
|
+
instance.distributed_queue.push(value)
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
def self.pop
|
|
30
|
+
return unless enable?
|
|
31
|
+
|
|
32
|
+
instance.distributed_queue.pop
|
|
33
|
+
end
|
|
34
|
+
|
|
35
|
+
def self.size
|
|
36
|
+
return unless enable?
|
|
37
|
+
|
|
38
|
+
instance.distributed_queue.size
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
def self.clear
|
|
42
|
+
return unless enable?
|
|
43
|
+
|
|
44
|
+
instance.distributed_queue.clear
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
def initialize
|
|
48
|
+
@distributed_queue = DRbObject.new_with_uri(self.class.socket_path)
|
|
49
|
+
end
|
|
50
|
+
end
|
|
@@ -0,0 +1,16 @@
|
|
|
1
|
+
module ProconBypassMan
|
|
2
|
+
module Background
|
|
3
|
+
module JobPerformable
|
|
4
|
+
def perform(*)
|
|
5
|
+
raise NotImplementedError, nil
|
|
6
|
+
end
|
|
7
|
+
|
|
8
|
+
def perform_async(*args)
|
|
9
|
+
ProconBypassMan::Background::JobQueue.push(
|
|
10
|
+
args: args,
|
|
11
|
+
job_class: self.name, # drb上のQueueに格納するので念の為文字列入れて、取り出すときにevalでクラス化する
|
|
12
|
+
)
|
|
13
|
+
end
|
|
14
|
+
end
|
|
15
|
+
end
|
|
16
|
+
end
|