procon_bypass_man 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.circleci/config.yml +19 -6
- data/.github/workflows/gitleacks.yml +1 -1
- data/.rubocop.yml +4 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +15 -0
- data/Gemfile +6 -3
- data/Gemfile.lock +5 -3
- data/README.md +28 -41
- data/Steepfile +0 -1
- data/bin/generate_default_app +10 -0
- data/docs/getting_started.md +102 -28
- data/docs/setup_raspi_by_mitamae.md +43 -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 +16 -20
- data/lib/procon_bypass_man/bypass/bypass_value.rb +6 -0
- data/lib/procon_bypass_man/bypass/procon_to_switch.rb +99 -0
- data/lib/procon_bypass_man/bypass/switch_to_procon.rb +66 -0
- data/lib/procon_bypass_man/bypass.rb +5 -109
- data/lib/procon_bypass_man/commands/print_boot_message_command.rb +0 -2
- data/lib/procon_bypass_man/configuration.rb +18 -39
- data/lib/procon_bypass_man/device_connection/procon_setting_overrider.rb +12 -3
- data/lib/procon_bypass_man/procon/analog_stick_manipulator.rb +2 -0
- data/lib/procon_bypass_man/procon/layer_changer.rb +2 -0
- data/lib/procon_bypass_man/procon/macro.rb +3 -1
- data/lib/procon_bypass_man/procon/macro_builder.rb +2 -0
- data/lib/procon_bypass_man/procon/macro_registry.rb +2 -0
- 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 +101 -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 +110 -0
- data/lib/procon_bypass_man/procon/suppress_rumble.rb +2 -0
- data/lib/procon_bypass_man/procon/user_operation.rb +2 -0
- data/lib/procon_bypass_man/procon/value_objects/analog_stick.rb +2 -0
- data/lib/procon_bypass_man/procon/value_objects/binary/inbound_procon_binary.rb +2 -0
- data/lib/procon_bypass_man/procon/value_objects/binary/processing_procon_binary.rb +2 -0
- data/lib/procon_bypass_man/procon/value_objects/rumble_binary.rb +2 -0
- data/lib/procon_bypass_man/procon.rb +26 -7
- data/lib/procon_bypass_man/procon_display/bypass_hook.rb +12 -0
- data/lib/procon_bypass_man/procon_display.rb +1 -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_macro.rb +2 -0
- data/lib/procon_bypass_man/remote_pbm_action/commands/update_remote_pbm_action_status_command.rb +1 -1
- data/lib/procon_bypass_man/remote_pbm_action.rb +2 -0
- data/lib/procon_bypass_man/runner.rb +4 -10
- data/lib/procon_bypass_man/scheduler.rb +15 -6
- data/lib/procon_bypass_man/support/callbacks.rb +79 -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 +12 -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/renice_command.rb +17 -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 +53 -10
- data/procon_bypass_man.gemspec +4 -2
- data/project_template/README.md +0 -5
- data/project_template/app.rb +17 -11
- data/project_template/app.rb.erb +59 -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 +43 -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 -47
- 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: 556a827cf03895e4212aa4c524963ca7efd24499c2ea14edff2d692bc3e1e63f
|
4
|
+
data.tar.gz: bf7cf5a735fffa13e1ff99c259a329a4c6981be755440477884ece0246188f21
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7bdfd9d2c5bee033c8f6a1f87acebcf3374e353c0ea4d373c76f86ee33b87b248665b087276998f20dee9f0d1258ab2c7c49906cc55b94b51a5e35d84712da5c
|
7
|
+
data.tar.gz: 176ac515a48935df2953c36fb747e09be71c31f7850b09397e338bc0685b5da25bcd7ff81795d235287f2a5870fcdec3fec5aa9334e12ba90ca26662fe8807e7
|
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/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.
|
1
|
+
3.1.2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,18 @@
|
|
1
|
+
## [0.3.0] - 2022-9-9
|
2
|
+
* 表示入力機能を一時的に削除しました #185
|
3
|
+
* バイパス処理中の小さなラグがほぼなくなりました #185
|
4
|
+
* バイパス処理をマルチプロセスで行うようにしたのでGCによる停止時間がほぼなくなったため
|
5
|
+
|
6
|
+
## [0.2.3] - 2022-8-27
|
7
|
+
* プロコンのラグ具合をpbm-cloudに送信し、グラフで見れるようになりました #158
|
8
|
+
* 非同期ジョブをmasterプロセス経由で実行するようになりました #191
|
9
|
+
* バイパス処理が数秒間固まる現象がおそらく直りました #179
|
10
|
+
|
11
|
+
## [0.2.2] - 2022-07-10
|
12
|
+
* project_template/app.rbを動的に生成する仕組みを追加しました
|
13
|
+
* ドキュメントからpbm_webに関する記述を削除しました
|
14
|
+
* 起動スクリプト(app.rb) がたまに意図せず /usr/share/pbm/current を削除してしまう不具合を修正しました
|
15
|
+
|
1
16
|
## [0.2.1] - 2022-05-29
|
2
17
|
- 入力表示機能を提供するSwitchProconInputViewerに対応しました
|
3
18
|
- https://github.com/splaplapla/switch-procon-input-viewer
|
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,8 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
procon_bypass_man (0.
|
4
|
+
procon_bypass_man (0.3.0)
|
5
5
|
action_cable_client
|
6
|
+
blue_green_process
|
6
7
|
pbmenv (>= 0.1.9)
|
7
8
|
sorted_set
|
8
9
|
|
@@ -18,6 +19,7 @@ GEM
|
|
18
19
|
tzinfo (~> 2.0)
|
19
20
|
zeitwerk (~> 2.3)
|
20
21
|
ast (2.4.2)
|
22
|
+
blue_green_process (0.1.3)
|
21
23
|
coderay (1.1.3)
|
22
24
|
concurrent-ruby (1.1.9)
|
23
25
|
diff-lcs (1.4.4)
|
@@ -36,7 +38,7 @@ GEM
|
|
36
38
|
parallel (1.21.0)
|
37
39
|
parser (3.0.3.2)
|
38
40
|
ast (~> 2.4.1)
|
39
|
-
pbmenv (0.1.
|
41
|
+
pbmenv (0.1.10)
|
40
42
|
pry (0.14.1)
|
41
43
|
coderay (~> 1.1)
|
42
44
|
method_source (~> 1.0)
|
@@ -78,7 +80,7 @@ GEM
|
|
78
80
|
parser (>= 3.0.1.1)
|
79
81
|
ruby-progressbar (1.11.0)
|
80
82
|
ruby2_keywords (0.0.5)
|
81
|
-
set (1.0.
|
83
|
+
set (1.0.3)
|
82
84
|
sinatra (2.2.0)
|
83
85
|
mustermann (~> 1.0)
|
84
86
|
rack (~> 2.2)
|
data/README.md
CHANGED
@@ -3,55 +3,26 @@
|
|
3
3
|
|
4
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)
|
5
5
|
|
6
|
-
* Switch
|
7
|
-
* 設定ファイルはrubyスクリプトで記述します
|
8
|
-
* 特定のタイトルに特化した振る舞いにしたい時は各プラグインを使ってください
|
6
|
+
* Nintendo Switch Proコントローラーを連射機などにするRaspberry Pi上で動かすコンバータです
|
9
7
|
* ドキュメントは [getting_started.md](docs/getting_started.md) にまとめています
|
10
8
|
* https://pbm-cloud.herokuapp.com を使うと、webだけで運用が可能です
|
11
9
|
|
12
10
|
|
13
11
|
<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
12
|
|
15
|
-
|
16
|
-
|
17
|
-
<!--
|
18
|
-
![image](https://user-images.githubusercontent.com/1664497/123414210-942f6980-d5ee-11eb-8192-955bd9e37e0b.png)
|
19
|
-
```
|
20
|
-
@startuml
|
21
|
-
ProController \-\-> (PBM): ZR押しっぱなし
|
22
|
-
Switch <-- (PBM): ZR連打
|
23
|
-
@enduml
|
24
|
-
```
|
25
|
-
-->
|
13
|
+
https://user-images.githubusercontent.com/1664497/171327108-f12f56a5-fc36-48da-95a5-65e976553a20.mov
|
26
14
|
|
27
15
|
## 使うハードウェア
|
28
|
-
*
|
16
|
+
* Nintendo Switch Proコントローラー
|
29
17
|
* Switch本体とドック
|
30
|
-
* Raspberry Pi4
|
18
|
+
* Raspberry Pi4 (Raspberry Pi OS)
|
31
19
|
* 他のシリーズは未確認です
|
32
|
-
* zeroは非対応
|
33
20
|
* データ通信が可能なUSBケーブル
|
34
21
|
|
35
22
|
## 使うソフトウェア
|
36
|
-
* ruby
|
37
|
-
|
38
|
-
##
|
39
|
-
* USBガジェットモードで起動するRaspberry Pi4を用意する
|
40
|
-
* https://github.com/splaplapla/procon_bypass_man/blob/master/docs/setup_raspi.md
|
41
|
-
* Raspberry Pi4 でprocon_bypass_manを実行するための準備
|
42
|
-
* rubyのインストール
|
43
|
-
* sudo apt-get install rbenv
|
44
|
-
* git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
|
45
|
-
* rbenv install 3.0.1
|
46
|
-
* gem install pbmenv
|
47
|
-
* sudo [pbmenv](https://github.com/splaplapla/pbmenv) install latest
|
48
|
-
* Raspberry Pi4 でprocon_bypass_manを実行する
|
49
|
-
* cd /usr/share/pbm/current
|
50
|
-
* sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
|
51
|
-
* 動いたのを確認したらserviceとして登録にするなどしてください
|
52
|
-
* [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)
|
53
|
-
|
54
|
-
## Plugins
|
23
|
+
* ruby 2.5 以上
|
24
|
+
|
25
|
+
## プラグイン
|
55
26
|
* https://github.com/splaplapla/procon_bypass_man-splatoon2
|
56
27
|
|
57
28
|
## FAQ
|
@@ -61,9 +32,6 @@ Switch <-- (PBM): ZR連打
|
|
61
32
|
* ケーブルでそれらを接続した状態で、Raspberry Pi4にsshして本プログラムを起動することで使用します
|
62
33
|
* ラズベリーパイ4のセットアップ方法は?
|
63
34
|
* https://github.com/splaplapla/procon_bypass_man/tree/master/docs/setup_raspi.md
|
64
|
-
* モード, マクロの違いは?
|
65
|
-
* modeはProconの入力をそのまま再現するため機能。レイヤーを切り替えるまで繰り返し続けます
|
66
|
-
* マクロは特定のキーを順番に入れていく機能。キーの入力が終わったらマクロは終了します
|
67
35
|
* レイヤーとは?
|
68
36
|
* 自作キーボードみたいな感じでレイヤー毎に設定内容を記述して切り替えれます
|
69
37
|
* レイヤーは4つあって、up, down, left, rightです。十字キーに対応しています
|
@@ -80,6 +48,13 @@ Switch <-- (PBM): ZR連打
|
|
80
48
|
* sshなしで運用は可能ですか?
|
81
49
|
* https://pbm-cloud.herokuapp.com を使えば、sshを使わずに運用が可能です
|
82
50
|
|
51
|
+
## 仕様・制約
|
52
|
+
* 日を跨ぐ24時ちょうどになった瞬間はLinuxのcronが起動などがするようで、この時間は数秒間バイパスが激しく遅延します
|
53
|
+
* ログファイルのローテションが少なくとも走るはずなので、不要なデーモンを停止するなどで影響を小さくすることはできると思いますが、完全に抑制することは難しいと思います
|
54
|
+
* コントローラーから読み取ってSwitchに書き込む時間は、少なくとも0.02秒はかかります
|
55
|
+
* 動かしているRaspberry Piの負荷に依存するこの限りではありません
|
56
|
+
|
57
|
+
<!--
|
83
58
|
## TODO
|
84
59
|
* レコーディング機能(プロコンの入力をマクロとして登録ができる)
|
85
60
|
* ドキュメントを書く(doing)
|
@@ -103,11 +78,23 @@ sudo kill -USR2 `cat ./pbm_pid`
|
|
103
78
|
* CHANGELOG.md に日付を書く
|
104
79
|
* be rake release
|
105
80
|
* githubのreleaseを作成する
|
81
|
+
-->
|
106
82
|
|
107
|
-
##
|
83
|
+
## Raspberry Pi4のセットアップを代行します
|
84
|
+
* Raspberry Pi4を開発者である私の家に配送してくれれば、セットアップを代行します。セットアップが終わり次第送り返します
|
85
|
+
* 使い方に関しては、https://pbm-cloud.herokuapp.com ですべて完結するので、Linuxの知識は不要です
|
86
|
+
* 何か問題が起きた時はリモートログインでサポート可能です
|
87
|
+
* 希望者はDiscordの `kawagu#7684` にDMを送ってください
|
88
|
+
* お金はかかりません
|
108
89
|
|
109
|
-
|
90
|
+
## 開発を支援してくれる人を募集しています
|
91
|
+
* https://jiikko.fanbox.cc/
|
92
|
+
* procon_bypassの運営・開発・サーバー費用に充てさせていただきます。また、問い合わせに優先して対応します。
|
110
93
|
|
111
94
|
## Links
|
112
95
|
* https://discord.gg/bEcRNKf4ep
|
113
96
|
* 質問などご意見をdiscordでも受け付けています
|
97
|
+
|
98
|
+
## License
|
99
|
+
|
100
|
+
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
@@ -3,6 +3,7 @@
|
|
3
3
|
* [はじめに](#はじめに)
|
4
4
|
* [procon_bypass_manで解決したいこと](#procon_bypass_manで解決したいこと)
|
5
5
|
* [procon_bypass_manでできること](#procon_bypass_manでできること)
|
6
|
+
* [セットアップを代行できます](#セットアップを代行できます)
|
6
7
|
* [セットアップ](#セットアップ)
|
7
8
|
* [ラズベリーパイのセットアップ](#ラズベリーパイのセットアップ)
|
8
9
|
* [procon_bypass_manのインストール](#procon_bypass_manのインストール)
|
@@ -10,23 +11,26 @@
|
|
10
11
|
* [pbmenvを使わない方法](#pbmenvを使わない方法)
|
11
12
|
* [普段使いをするためのセットアップ](#普段使いをするためのセットアップ)
|
12
13
|
* [レイヤー](#レイヤー)
|
13
|
-
* モード
|
14
14
|
* [マクロ](#マクロ)
|
15
15
|
* [左スティックの感度調整](#左スティックの感度調整)
|
16
16
|
* [入力表示](#入力表示)
|
17
|
-
* 設定ファイルの書き方
|
17
|
+
* [設定ファイルの書き方](#設定ファイルの書き方)
|
18
18
|
* プラグインの書き方
|
19
19
|
* [設定ファイルの書き方がわからない、エラーが起きるとき](#設定ファイルの書き方がわからない、エラーが起きるとき)
|
20
20
|
* [procon_bypass_manのアップグレード方法](#procon_bypass_manのアップグレード方法)
|
21
21
|
* [procon_bypass_man_cloudについて](#procon_bypass_man_cloudについて)
|
22
|
+
* [最適化について](#最適化について)
|
22
23
|
|
23
24
|
## はじめに
|
24
25
|
### procon_bypass_manで解決したいこと
|
25
26
|
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
27
|
+
サードパーティー製のコントローラーは頑丈で使いやすいですか?
|
28
|
+
|
29
|
+
通常、ボタンの連射をするには、サードパーティー製のコントローラーを使う必要があるのですが、ボタンの押した感覚や各種設定方法は各社の独自仕様であるため、それらを手に馴染ませるのがとても大変です。
|
30
|
+
特に「説明書を熟読して、コントローラーの設定方法を理解し適用すること、時間が空いてから設定されている状態を思い出す」がつらいと思っています。
|
31
|
+
また、サードパーティー製のコントローラーは非常に壊れやすく、同じ製品が再び購入できるとは限りません。
|
32
|
+
|
33
|
+
本ツールを使うと、使い慣れた純正コントローラーを使って、サードパーティー製のコントローラー以上のことができます。設定内容はテキストで管理しているため一目瞭然です。設定内容のコピーも容易です。
|
30
34
|
|
31
35
|
### procon_bypass_manでできること
|
32
36
|
|
@@ -35,13 +39,19 @@
|
|
35
39
|
* 連射中は特定のキーの入力を無視したり、複数のキーをトリガーに連射することもできます
|
36
40
|
* マクロ
|
37
41
|
* [活用例](/docs/setting/splatoon2_macro_sokuwari_bubble.md)
|
38
|
-
* 特定の同じ操作の繰り返し(モード)
|
39
42
|
* 左スティックの感度調整
|
40
43
|
* [設定方法](/docs/setting/left-analogstick-cap.md)
|
41
44
|
* WEBから設定状態の閲覧・反映
|
42
45
|
* ボタンリマップ
|
43
46
|
* 入力表示
|
44
|
-
|
47
|
+
* https://github.com/splaplapla/switch-procon-input-viewer
|
48
|
+
|
49
|
+
## セットアップを代行できます
|
50
|
+
* Raspberry Pi4を開発者である私の家に配送してくれれば、セットアップを代行します。セットアップが終わり次第送り返します
|
51
|
+
* 使い方に関しては、https://pbm-cloud.herokuapp.com ですべて完結するので、Linuxの知識は不要です
|
52
|
+
* 何か問題が起きた時はリモートログインでサポート可能です
|
53
|
+
* 希望者はDiscordの `kawagu#7684` にDMを送ってください
|
54
|
+
* お金はかかりません
|
45
55
|
|
46
56
|
## セットアップ
|
47
57
|
### ラズベリーパイのセットアップ
|
@@ -50,26 +60,66 @@
|
|
50
60
|
|
51
61
|
### procon_bypass_manのインストール
|
52
62
|
|
53
|
-
pbmenvを使うと https://pbm-cloud.herokuapp.com と連携ができるのでおすすめですが、pbmenvを使わなくてもprocon_bypass_manをインストールすることは可能です。
|
63
|
+
pbmenvを使うと https://pbm-cloud.herokuapp.com と連携ができるのでおすすめですが、pbmenvを使わなくてもprocon_bypass_manをインストールすることは可能です。
|
64
|
+
次の4つからインストール方法を1つ選んでください。
|
65
|
+
|
66
|
+
* pbmenvを使う方法
|
67
|
+
* systemにインストールされているrubyを使う場合(初心者におすすめ)
|
68
|
+
* rbenvでインストールしたrubyを使う場合
|
69
|
+
* pbmenvを使わない方法
|
70
|
+
* systemにインストールされているrubyを使う場合(初心者におすすめ)
|
71
|
+
* rbenvでインストールしたrubyを使う場合
|
54
72
|
|
55
|
-
|
73
|
+
ちなみに、rbenvを使った方がラグは少ないような気がしますが、明確な体験の違いはそこまでないように思います。
|
74
|
+
|
75
|
+
#### 1) pbmenvを使う方法
|
56
76
|
|
57
77
|
https://github.com/splaplapla/pbmenv
|
58
|
-
pbmenvはprocon_bypass_manのバージョンマネジャーです。
|
78
|
+
pbmenvはprocon_bypass_manのバージョンマネジャーです。
|
79
|
+
procon_bypass_manはバージョンアップによって起動スクリプトに変更が入ることがあって、バージョンアップするときはpbmenvを使うとエラーが起きることなくインストールができるようになります。また、pbm-cloudと連携してすべての機能を使うには、pbmenvの利用が必須になります。
|
80
|
+
|
81
|
+
##### 1-1) systemにインストールされているrubyを使う場合(初心者におすすめ)
|
59
82
|
|
83
|
+
```bash
|
84
|
+
sudo apt-get install ruby ruby-dev
|
85
|
+
sudo gem i bundler pbmenv
|
86
|
+
sudo pbmenv install latest --use
|
87
|
+
cd /usr/share/pbm/current
|
88
|
+
sudo ruby app.rb
|
60
89
|
```
|
61
|
-
|
62
|
-
|
90
|
+
|
91
|
+
##### 1-2) rbenvでインストールしたrubyを使う場合
|
92
|
+
rbenvはrubyのパッケージマネージャーです。
|
93
|
+
|
94
|
+
```bash
|
95
|
+
rbenv install 3.0.1
|
96
|
+
sudo gem install pbmenv
|
97
|
+
sudo pbmenv install latest --use
|
63
98
|
cd /usr/share/pbm/current
|
64
99
|
sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
|
65
100
|
```
|
66
101
|
|
67
|
-
#### pbmenvを使わない方法
|
102
|
+
#### 2) pbmenvを使わない方法
|
103
|
+
https://github.com/jiikko/procon_bypass_man_sample にある app.rb と setting.yml を Raspberry Pi にダウンロードすれば、起動することができます。
|
68
104
|
|
69
|
-
|
105
|
+
##### 2-1) systemにインストールされているrubyを使う場合(初心者におすすめ)
|
70
106
|
|
107
|
+
```bash
|
108
|
+
sudo apt-get install ruby ruby-dev wget
|
109
|
+
wget https://raw.githubusercontent.com/jiikko/procon_bypass_man_sample/master/app.rb
|
110
|
+
wget https://raw.githubusercontent.com/jiikko/procon_bypass_man_sample/master/setting.yml
|
111
|
+
sudo gem i bundler
|
112
|
+
sudo ruby app.rb
|
71
113
|
```
|
114
|
+
|
115
|
+
##### 2-2) rbenvでインストールしたrubyを使う場合
|
116
|
+
rbenvはrubyのパッケージマネージャーです。
|
117
|
+
|
118
|
+
```bash
|
72
119
|
rbenv install 3.0.1
|
120
|
+
sudo apt-get install wget
|
121
|
+
wget https://raw.githubusercontent.com/jiikko/procon_bypass_man_sample/master/app.rb
|
122
|
+
wget https://raw.githubusercontent.com/jiikko/procon_bypass_man_sample/master/setting.yml
|
73
123
|
sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
|
74
124
|
```
|
75
125
|
|
@@ -90,12 +140,12 @@ pbmenvを使っていない場合は、 https://github.com/splaplapla/procon_byp
|
|
90
140
|
ゲームをやめたくなったらSwitchはそのままスリープに入って問題ないです。このときにRaspberry Piも一緒に電源が切れてしまいますが故障することはありません。
|
91
141
|
|
92
142
|
## レイヤー
|
93
|
-
|
143
|
+
レイヤーごとにボタンの設定をすることができ、用途に応じてレイヤーを切り替えることで、違う設定を即座に適用できるという機能です。
|
94
144
|
レイヤーは、up, down, left, rightの4つあります。 設定ファイルの書いている `prefix_keys_for_changing_layer` を押しながら、十字キーのup, down, left, rightのどれかを押すと、レイヤーを変更することができます。
|
95
145
|
|
96
|
-
|
146
|
+
設定ファイルでのレイヤー毎の定義方法は、 `layer` ブロックで囲って定義します。
|
97
147
|
以下の例は、upレイヤーとleftレイヤーだけに設定が書かれています。ゲーム進行状況によってレイヤーを切り替えてください。
|
98
|
-
|
148
|
+
procon_bypass_manを起動した直後に有効になっているレイヤーは、 up です。
|
99
149
|
|
100
150
|
```ruby
|
101
151
|
layer :up do
|
@@ -113,15 +163,12 @@ layer :down do
|
|
113
163
|
end
|
114
164
|
```
|
115
165
|
|
116
|
-
## モード
|
117
|
-
* 後で書きます
|
118
|
-
|
119
166
|
## マクロ
|
120
167
|
|
121
168
|
決まった入力を繰り返し実行できる機能を「マクロ」と呼んでいます。
|
122
|
-
|
169
|
+
マクロを使うことで、スプラトゥーンであれば、バブル即割の操作や、試合中の味方へのスーパージャンプもマクロ経由で入力できます。
|
123
170
|
|
124
|
-
|
171
|
+
設定ファイルに記述するマクロは文字列で定義します。
|
125
172
|
マクロを設定ファイルに定義するには、「プラグイン」か設定ファイルへ直接を記述する「open_macro」のどちらかで行えます。
|
126
173
|
|
127
174
|
「プラグイン」を使用する場合は、マクロの詳細を記述する必要がなく、PBMのバージョンアップとともに改善が入る可能性があります。
|
@@ -136,10 +183,13 @@ open_macroは、マクロの詳細を設定ファイルに直書きするため
|
|
136
183
|
y, x, b, a, sl, sr, r, zr, minus, plus, thumbr, thumbl, home, cap, down, up, right, left, l, zl
|
137
184
|
```
|
138
185
|
|
186
|
+
<!--
|
139
187
|
マクロの形式には、1ボタンずつ入力する「バージョン1」と時間指定のできる「バージョン2」があります。
|
140
188
|
バージョン1は、 `[:x, :y, :up]` と記述すると、x, y, 十字キーの上ボタンを順番に入力します。バージョン1では実行時間を指定することはできません。
|
189
|
+
-->
|
141
190
|
|
142
|
-
|
191
|
+
マクロは、複数のボタンを同時に「連打」「押しっぱなし」または「待機」ができます。
|
192
|
+
|
143
193
|
連打はtoggleで、押しっぱなしはpressing, 無操作は、waitというキーワードを使います。
|
144
194
|
複数のボタンを同時押しの場合は、andで繋ぎます。Xボタンを押しっぱなしにして、ZRボタンを連打する場合は `pressing_x_and_toggle_zr` と記述します。
|
145
195
|
これに時間を指定をする場合は、forで繋ぎます。 `pressing_x_and_toggle_zr_for_1sec` となります。
|
@@ -154,7 +204,7 @@ y, x, b, a, sl, sr, r, zr, minus, plus, thumbr, thumbl, home, cap, down, up, rig
|
|
154
204
|
* toggle_x_and_toggle_zr_for_0_2sec
|
155
205
|
* XボタンとZRボタンを0.2秒間連打
|
156
206
|
|
157
|
-
上述したマクロ(ステップ)は、open_macro
|
207
|
+
上述したマクロ(ステップ)は、open_macroという構文でも記述できます。次は実際の記述例です。
|
158
208
|
|
159
209
|
```
|
160
210
|
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]
|
@@ -166,11 +216,16 @@ open_macro :sokuwari, steps: [:toggle_r_for_0_2sec, :toggle_thumbr_for_0_14sec,
|
|
166
216
|
[左スティックの感度調整](/docs/setting/left-analogstick-cap.md)
|
167
217
|
|
168
218
|
## 入力表示
|
169
|
-
* https://github.com/splaplapla/switch-procon-input-viewer
|
170
|
-
*
|
219
|
+
* 使い方は https://github.com/splaplapla/switch-procon-input-viewer を参照してください。
|
220
|
+
* https://zenn.dev/jiikko/articles/2ef0ccbdfe0fe7 に技術的な解説を書きました
|
171
221
|
|
172
222
|
## 設定ファイルの書き方
|
173
|
-
|
223
|
+
設定ファイルは、ymlフォーマットに埋め込まれたRubyスクリプトで記述します。
|
224
|
+
Rubyスクリプトな上に独特な構文に対して、アレンジを加えることは難しいと思ったので、マウス操作をするだけで設定ファイルを生成するツールを作りました。
|
225
|
+
https://splaplapla.github.io/procon_bypass_man_setting_editor/ です。
|
226
|
+
このツールで設定ファイルを生成し、コピペをするだけで大半のことは済みます。
|
227
|
+
|
228
|
+
TODO 設定ファイルの書き方
|
174
229
|
|
175
230
|
## プラグインの書き方
|
176
231
|
* 後で書きます
|
@@ -191,3 +246,22 @@ procon_bypass_man_cloudとの接続が完了後、Raspberry Piを起動時にpro
|
|
191
246
|
セットアップ方法などでわからないことがあればdiscordで質問してみてください。
|
192
247
|
|
193
248
|
セットアップ方法は https://pbm-cloud.herokuapp.com/faq に書いています。
|
249
|
+
|
250
|
+
## 最適化について
|
251
|
+
本稿では、Rubyの最適化について書きます。上級者向けです。適用しなくても普通に動きますが、逆に適用したことで何らかのケースで遅くなる場合があるかもしれません。
|
252
|
+
|
253
|
+
* jemallocを使う
|
254
|
+
* GCの回数が減る(はずな)ので小さな遅延が減ると考えています。が、違いを測定および体感はできませんでした。
|
255
|
+
* インストール方法と動作確認
|
256
|
+
* sudo apt install libjemalloc-dev
|
257
|
+
* export LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so.2
|
258
|
+
* MALLOC_CONF=stats_print:true ruby -e "exit"
|
259
|
+
* 適用方法
|
260
|
+
* `/usr/share/pbm/current/systemd_units/pbm.service` の `ExecStart` 行に `LD_PRELOAD=/usr/lib/arm-linux-gnueabihf/libjemalloc.so.2` を足してください
|
261
|
+
* 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"`
|
262
|
+
* jitを有効にする
|
263
|
+
* 起動した直後は、コンパイルが走るので遅くなります。しかし、有効にしたところで本プログラムはIOバインドなので効果は薄いようです。
|
264
|
+
* 適用方法
|
265
|
+
* `/usr/share/pbm/current/systemd_units/pbm.service` の `ExecStart` 行に `--jit` を足してください
|
266
|
+
* ex) `ExecStart=/bin/bash -c "/home/pi/.rbenv/versions/3.0.1/bin/ruby --jit /usr/share/pbm/current/app.rb"`
|
267
|
+
* ラズベリーパイのGUIをオフにする
|
@@ -9,12 +9,51 @@
|
|
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
|
+
----
|
42
|
+
```
|
43
|
+
|
44
|
+
<hr>
|
45
|
+
|
46
|
+
procon_bypass_manを手動で起動する場合は、先ほどの2行のコマンドを毎回入力してください。
|
47
|
+
procon_bypass_manを自動起動する方法については `GETTING STARTED` を参照してください。
|
48
|
+
|
49
|
+
<hr>
|
50
|
+
|
51
|
+
|
52
|
+
ケーブルの接続方法は、次の写真を参考にしてください。
|
53
|
+
|
54
|
+
<img src="https://user-images.githubusercontent.com/1664497/151661582-3a1e8ce9-6c38-4754-8075-7a4453b3109a.jpg" width="500px">
|
55
|
+
|
56
|
+
<!--
|
18
57
|
## 上記手順の動作確認方法
|
19
58
|
* 使えそうなイメージ
|
20
59
|
* navikey/raspbian-bullseye
|
@@ -48,3 +87,5 @@ sudo ./mitamae-armhf-linux local setup_raspi.mitamae.rb -l debug
|
|
48
87
|
* /etc/modules に指定の文字列があること
|
49
88
|
* /boot/config.txt に指定の文字列があること
|
50
89
|
* /usr/share/pbm/shared/add_procon_gadget.sh が存在していること
|
90
|
+
|
91
|
+
-->
|