procon_bypass_man 0.1.19 → 0.1.20.2
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 +25 -4
- data/CHANGELOG.md +20 -1
- data/Gemfile.lock +3 -3
- data/README.md +1 -11
- data/docs/getting_started.md +62 -6
- data/docs/setting/splatoon2_recommended_setting.md +127 -0
- data/lib/procon_bypass_man/background/jobs/report_completed_upgrade_pbm_job.rb +10 -0
- data/lib/procon_bypass_man/background/jobs/report_error_reload_config_job.rb +11 -0
- data/lib/procon_bypass_man/background/jobs/report_start_reboot_job.rb +10 -0
- data/lib/procon_bypass_man/background.rb +3 -0
- data/lib/procon_bypass_man/buttons_setting_configuration/loader.rb +21 -2
- data/lib/procon_bypass_man/buttons_setting_configuration/validator.rb +10 -0
- data/lib/procon_bypass_man/buttons_setting_configuration.rb +2 -0
- data/lib/procon_bypass_man/bypass/bypass_mode.rb +29 -0
- data/lib/procon_bypass_man/bypass.rb +10 -8
- data/lib/procon_bypass_man/commands/bypass_command.rb +20 -8
- data/lib/procon_bypass_man/commands/connect_device_command.rb +4 -2
- data/lib/procon_bypass_man/commands/print_boot_message_command.rb +6 -0
- data/lib/procon_bypass_man/configuration.rb +30 -1
- data/lib/procon_bypass_man/device_connector.rb +12 -42
- data/lib/procon_bypass_man/device_procon_finder.rb +45 -0
- data/lib/procon_bypass_man/never_exit_accidentally.rb +12 -0
- data/lib/procon_bypass_man/plugin/splatoon2/macro/fast_return.rb +4 -0
- data/lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_left_key.rb +4 -0
- data/lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_right_key.rb +4 -0
- data/lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_up_key.rb +4 -0
- data/lib/procon_bypass_man/plugin/splatoon2/macro/sokuwari_for_splash_bomb.rb +4 -0
- data/lib/procon_bypass_man/plugin/splatoon2/mode/guruguru.rb +4 -0
- data/lib/procon_bypass_man/remote_pbm_action/change_pbm_version_action.rb +4 -1
- data/lib/procon_bypass_man/remote_pbm_action/reboot_os_action.rb +1 -0
- data/lib/procon_bypass_man/remote_pbm_action/restore_pbm_setting.rb +8 -1
- data/lib/procon_bypass_man/runner.rb +7 -7
- data/lib/procon_bypass_man/scheduler.rb +1 -1
- data/lib/procon_bypass_man/support/yaml_writer.rb +8 -1
- data/lib/procon_bypass_man/usb_device_controller.rb +53 -0
- data/lib/procon_bypass_man/version.rb +1 -1
- data/lib/procon_bypass_man/websocket/pbm_job_client.rb +13 -3
- data/lib/procon_bypass_man.rb +21 -11
- data/procon_bypass_man.gemspec +1 -1
- data/project_template/app.rb +13 -1
- data/project_template/setting.yml +6 -22
- data/project_template/systemd_units/pbm.service +1 -1
- data/sig/main.rbs +5 -0
- metadata +12 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: b74bbbe94f6c14a8e8cfbabb306e7229cab042ea9d5fae34ddfe134df0911528
|
4
|
+
data.tar.gz: b42ea9a421add0181270f5c957c9d10079598871634f5f20da8e7101349c981e
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: df4ce5c1fc721fe5aa06236a0909c143f49b3616b4c02ca4202f0de7519206a22f5de864e58e50390e47dfe631475cdf1a04c3b4e99ed492913825cf0315039f
|
7
|
+
data.tar.gz: 8fed8f7f1181bfb51b6b214984af09b0bc1d8b83573174fa276e97e857a0569affb14148aeabf52f0ba3b90cc30083548c191346649e8c534832fcba3b6aee25
|
data/.circleci/config.yml
CHANGED
@@ -34,6 +34,19 @@ commands: &commands
|
|
34
34
|
- vendor/bundle
|
35
35
|
|
36
36
|
jobs:
|
37
|
+
syntax_check:
|
38
|
+
parameters:
|
39
|
+
ruby-version:
|
40
|
+
type: string
|
41
|
+
executor:
|
42
|
+
name: ruby
|
43
|
+
tag: << parameters.ruby-version >>
|
44
|
+
steps:
|
45
|
+
- checkout
|
46
|
+
- run: ruby -cw project_template/app.rb
|
47
|
+
- run: ruby -cw project_template/web.rb
|
48
|
+
- 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
|
49
|
+
|
37
50
|
bundle_install:
|
38
51
|
parameters:
|
39
52
|
ruby-version:
|
@@ -79,6 +92,14 @@ jobs:
|
|
79
92
|
- run: bundle exec rspec
|
80
93
|
|
81
94
|
build_jobs: &build_jobs
|
95
|
+
- syntax_check:
|
96
|
+
matrix:
|
97
|
+
parameters:
|
98
|
+
ruby-version:
|
99
|
+
- "2.7"
|
100
|
+
- "3.0.1"
|
101
|
+
- "3.0.2"
|
102
|
+
- "3.1.1"
|
82
103
|
- bundle_install:
|
83
104
|
matrix:
|
84
105
|
parameters:
|
@@ -86,7 +107,7 @@ build_jobs: &build_jobs
|
|
86
107
|
- "2.7"
|
87
108
|
- "3.0.1"
|
88
109
|
- "3.0.2"
|
89
|
-
- "3.1.
|
110
|
+
- "3.1.1"
|
90
111
|
- lint:
|
91
112
|
matrix:
|
92
113
|
parameters:
|
@@ -94,7 +115,7 @@ build_jobs: &build_jobs
|
|
94
115
|
- "2.7"
|
95
116
|
- "3.0.1"
|
96
117
|
- "3.0.2"
|
97
|
-
- "3.1.
|
118
|
+
- "3.1.1"
|
98
119
|
requires:
|
99
120
|
- bundle_install
|
100
121
|
- type_check:
|
@@ -104,7 +125,7 @@ build_jobs: &build_jobs
|
|
104
125
|
- "2.7"
|
105
126
|
# - "3.0.1" # たまにSEGVするので
|
106
127
|
- "3.0.2"
|
107
|
-
- "3.1.
|
128
|
+
- "3.1.1"
|
108
129
|
requires:
|
109
130
|
- bundle_install
|
110
131
|
- rspec:
|
@@ -114,7 +135,7 @@ build_jobs: &build_jobs
|
|
114
135
|
- "2.7"
|
115
136
|
- "3.0.1"
|
116
137
|
- "3.0.2"
|
117
|
-
- "3.1.
|
138
|
+
- "3.1.1"
|
118
139
|
requires:
|
119
140
|
- bundle_install
|
120
141
|
workflows:
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,25 @@
|
|
1
|
+
## [0.1.20.2] - 2022-2-18
|
2
|
+
- 起動時にreniceするようにしました
|
3
|
+
- 起動時にusb gadgetモードを有効にするようにしました
|
4
|
+
- pbm-cloudからprocon_bypass_manをアップグレードできるようになりました
|
5
|
+
|
6
|
+
## [0.1.20.1] - 2022-02-13
|
7
|
+
- Switchからプロコンへ送信するバイパスのインターバルを設定できるようにしました(切断・フリーズ対策)
|
8
|
+
|
9
|
+
## [0.1.20] - 2022-02-13
|
10
|
+
- pbm-cloudから再起動・設定ファイルの適用指示があったときにackイベントを返すようになりました
|
11
|
+
- 起動オプションにnever_exit_accidentallyを追加しました。これを有効にすると想定外のエラーが起きたときにプロセスが停止しなくなります。デフォルトで無効です。
|
12
|
+
- pbm-cloudから設定ファイルの適用に失敗したときにファイルへの書き込みをしないようになりました
|
13
|
+
- まだadd_procon_gadget.shを実行していないときに、接続処理をする前に処理を停止するようにしました
|
14
|
+
- ラズパイに複数のUSBデバイスが刺さっていてもプロコンのデバイスを選択できるようにしました
|
15
|
+
- Switchからプロコンへ送信するバイパスを動かし続けるようにしました(切断対策)
|
16
|
+
|
17
|
+
## [0.1.19.1] - 2022-02-09
|
18
|
+
- 設定ファイルをpbm-cloudから復元するときに設定ファイルの改行コードが消える不具合を修正しました
|
19
|
+
|
1
20
|
## [0.1.19] - 2022-02-09
|
2
21
|
- 設定ファイルを再読み込みするときに構文がエラーがあると、接続が切れる不具合を修正しました
|
3
|
-
-
|
22
|
+
- ~設定ファイルをpbm-cloudから復元するときに設定ファイルの改行コードが消える不具合を修正しました~
|
4
23
|
|
5
24
|
## [0.1.18] - 2022-02-05
|
6
25
|
- macroでできることが増えました
|
data/Gemfile.lock
CHANGED
@@ -1,9 +1,9 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
procon_bypass_man (0.1.
|
4
|
+
procon_bypass_man (0.1.20.2)
|
5
5
|
action_cable_client
|
6
|
-
pbmenv
|
6
|
+
pbmenv (>= 0.1.9)
|
7
7
|
sorted_set
|
8
8
|
|
9
9
|
GEM
|
@@ -36,7 +36,7 @@ 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.9)
|
40
40
|
pry (0.14.1)
|
41
41
|
coderay (~> 1.1)
|
42
42
|
method_source (~> 1.0)
|
data/README.md
CHANGED
@@ -7,6 +7,7 @@
|
|
7
7
|
* 設定ファイルはrubyスクリプトで記述します
|
8
8
|
* 特定のタイトルに特化した振る舞いにしたい時は各プラグインを使ってください
|
9
9
|
* ドキュメントは [getting_started.md](docs/getting_started.md) にまとめています
|
10
|
+
* https://pbm-cloud.herokuapp.com を使うと、webだけで運用が可能です
|
10
11
|
|
11
12
|

|
12
13
|
|
@@ -50,17 +51,6 @@ Switch <-- (PBM): ZR連打
|
|
50
51
|
## Plugins
|
51
52
|
* https://github.com/splaplapla/procon_bypass_man-splatoon2
|
52
53
|
|
53
|
-
## 関連ソフトウェア
|
54
|
-
* procon_bypass_man_cloud
|
55
|
-
* webアプリケーション
|
56
|
-
* https://github.com/splaplapla/procon_bypass_man_cloud
|
57
|
-
* このwebアプリからOS自体の再起動、設定ファイルのバックアップ・変更、PBMのバージョンアップができます
|
58
|
-
* ご自身でホストティングもできますが、 私がホスティングをしている https://pbm-cloud.herokuapp.com を使うことができます
|
59
|
-
* [使い方](https://pbm-cloud.herokuapp.com/faq)
|
60
|
-
* pbmenv
|
61
|
-
* procon_bypass_manのバージョンマネージャー
|
62
|
-
* https://github.com/splaplapla/pbmenv
|
63
|
-
|
64
54
|
## FAQ
|
65
55
|
* どうやって動かすの?
|
66
56
|
* このツールはRaspberry Pi4をUSBガジェットモードで起動して有線でプロコンとSwitchに接続して使います
|
data/docs/getting_started.md
CHANGED
@@ -4,20 +4,19 @@
|
|
4
4
|
* [procon_bypass_manで解決したいこと](#procon_bypass_manで解決したいこと)
|
5
5
|
* [procon_bypass_manでできること](#procon_bypass_manでできること)
|
6
6
|
* [セットアップ](#セットアップ)
|
7
|
-
* ラズベリーパイのセットアップ
|
8
|
-
* procon_bypass_manのインストール
|
9
|
-
* pbmenvを使う方法
|
10
|
-
* pbmenvを使わない方法
|
11
|
-
* とりあえず動かす方法
|
7
|
+
* [ラズベリーパイのセットアップ](#ラズベリーパイのセットアップ)
|
8
|
+
* [procon_bypass_manのインストール](#procon_bypass_manのインストール)
|
9
|
+
* [pbmenvを使う方法](#pbmenvを使う方法)
|
10
|
+
* [pbmenvを使わない方法](#pbmenvを使わない方法)
|
12
11
|
* [普段使いをするためのセットアップ](#普段使いをするためのセットアップ)
|
13
12
|
* レイヤー
|
14
13
|
* モード
|
15
14
|
* マクロ
|
16
15
|
* 左スティックの感度調整
|
17
16
|
* 設定ファイルの書き方
|
18
|
-
* layer
|
19
17
|
* プラグインの書き方
|
20
18
|
* 設定ファイルの書き方がわからない、エラーが起きるとき
|
19
|
+
* [procon_bypass_manのアップグレード方法](#procon_bypass_manのアップグレード方法)
|
21
20
|
* procon_bypass_man_cloudについて
|
22
21
|
|
23
22
|
## はじめに
|
@@ -29,6 +28,7 @@
|
|
29
28
|
このツールを使うことで、使い慣れたコントローラーを使ってボタン連射ができます。また、設定内容はテキストで管理しているため一目瞭然です。
|
30
29
|
|
31
30
|
### procon_bypass_manでできること
|
31
|
+
|
32
32
|
* 設定内容を即時に入れ替え(レイヤー管理)
|
33
33
|
* 連射
|
34
34
|
* 連射中は特定のキーの入力を無視したり、複数のキーをトリガーに連射することもできます
|
@@ -41,8 +41,35 @@
|
|
41
41
|
* ボタンリマップ
|
42
42
|
|
43
43
|
## セットアップ
|
44
|
+
### ラズベリーパイのセットアップ
|
45
|
+
|
44
46
|
* 後で書きます
|
45
47
|
|
48
|
+
### procon_bypass_manのインストール
|
49
|
+
|
50
|
+
pbmenvを使うと https://pbm-cloud.herokuapp.com と連携ができるのでおすすめですが、pbmenvを使わなくてもprocon_bypass_manをインストールすることは可能です。
|
51
|
+
|
52
|
+
#### pbmenvを使う方法
|
53
|
+
|
54
|
+
https://github.com/splaplapla/pbmenv
|
55
|
+
pbmenvはprocon_bypass_manのバージョンマネジャーです。procon_bypass_manはバージョンアップによって起動スクリプトに変更が入ることがあって、バージョンアップするときはpbmenvを使うとエラーが起きることなくインストールができるようになります。また、pbm-cloudと連携してすべての機能を使うには、pbmenvの利用が必須になります。
|
56
|
+
|
57
|
+
```
|
58
|
+
gem install pbmenv
|
59
|
+
sudo pbmenv install latest
|
60
|
+
cd /usr/share/pbm/current
|
61
|
+
sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
|
62
|
+
```
|
63
|
+
|
64
|
+
#### pbmenvを使わない方法
|
65
|
+
|
66
|
+
https://github.com/jiikko/procon_bypass_man_sample にある app.rb と setting.yml を Raspberry Pi にダウンロードし、ruby 3.0.1 をインストールすれば起動することができます。
|
67
|
+
|
68
|
+
```
|
69
|
+
rbenv install 3.0.1
|
70
|
+
sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb
|
71
|
+
```
|
72
|
+
|
46
73
|
## 普段使いをするためのセットアップ
|
47
74
|
|
48
75
|
procon_bypass_manを起動するだけでプロコンと接続ができるようになったら、Raspberry Piを起動したときにprocon_bypass_manも自動起動するように設定しましょう。
|
@@ -58,3 +85,32 @@ sudo systemctl enable pbm.service
|
|
58
85
|
pbmenvを使っていない場合は、 https://github.com/splaplapla/procon_bypass_man/blob/master/project_template/systemd_units/pbm.service をダウンロードして、 `systemctl link` をしてください。
|
59
86
|
|
60
87
|
ゲームをやめたくなったらSwitchはそのままスリープに入って問題ないです。このときにRaspberry Piも一緒に電源が切れてしまいますが故障することはありません。
|
88
|
+
|
89
|
+
## レイヤー
|
90
|
+
* 後で書きます
|
91
|
+
|
92
|
+
## モード
|
93
|
+
* 後で書きます
|
94
|
+
|
95
|
+
## マクロ
|
96
|
+
* 後で書きます
|
97
|
+
|
98
|
+
## 左スティックの感度調整
|
99
|
+
* 後で書きます
|
100
|
+
|
101
|
+
## 設定ファイルの書き方
|
102
|
+
* 後で書きます
|
103
|
+
|
104
|
+
## プラグインの書き方
|
105
|
+
* 後で書きます
|
106
|
+
|
107
|
+
## 設定ファイルの書き方がわからない、エラーが起きるとき
|
108
|
+
|
109
|
+
設定部分は、Rubyスクリプトになっているので構文エラーが起きることがあります。
|
110
|
+
discordで質問してみてください。
|
111
|
+
|
112
|
+
## procon_bypass_manのアップグレード方法
|
113
|
+
[/docs/upgrade_pbm.md](/docs/upgrade_pbm.md)
|
114
|
+
|
115
|
+
## procon_bypass_man_cloudについて
|
116
|
+
* 後で書きます
|
@@ -0,0 +1,127 @@
|
|
1
|
+
# スプラトゥーン2: おすすめの設定
|
2
|
+
## 1 全般
|
3
|
+
### 1.1 デスしてから最速スパジャンのためのAボタン連打
|
4
|
+
|
5
|
+
`flip :a, if_pressed: [:a]`
|
6
|
+
Aボタンを連打にします。復帰してから最速で前線復帰ができます
|
7
|
+
|
8
|
+
### 1.2 簡単スニーキング
|
9
|
+
|
10
|
+
ボタンを押している間は、水飛沫のたたないスニーキングの感度まで調整することができます。
|
11
|
+
[設定方法](/docs/setting/left-analogstick-cap.md)
|
12
|
+
|
13
|
+
### 1.3 ナイス玉連打
|
14
|
+
|
15
|
+
`flip :down, if_pressed: :down`
|
16
|
+
十字キーの下ボタンは常に連打にしておくとナイス玉が来たときに楽です。
|
17
|
+
|
18
|
+
### 1.4 最速スーパージャンプ
|
19
|
+
|
20
|
+
```
|
21
|
+
install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::FastReturn
|
22
|
+
install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToUpKey
|
23
|
+
install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToRightKey
|
24
|
+
install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToLeftKey
|
25
|
+
|
26
|
+
layer :up do
|
27
|
+
macro ProconBypassMan::Plugin::Splatoon2::Macro::FastReturn, if_pressed: [:y, :b, :down]
|
28
|
+
macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToUpKey, if_pressed: [:y, :b, :up]
|
29
|
+
macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToRightKey, if_pressed: [:y, :b, :right]
|
30
|
+
macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToLeftKey, if_pressed: [:y, :b, :left]
|
31
|
+
end
|
32
|
+
```
|
33
|
+
|
34
|
+
マップを開かずにジャンプができます。トリガーは自由に設定できます。
|
35
|
+
|
36
|
+
## 2 武器に特化した設定
|
37
|
+
### 2.1 パブロ向け
|
38
|
+
|
39
|
+
`flip :zr, if_pressed: :zr, force_neutral: :zl`
|
40
|
+
zrを連打にします。`force_neutral: :zl` というオプションをつけることで、ZRを押している間はZLを押しても無視されるようになります。パブロでは意味がありませんが、シューターだと煽りのような動作を抑制することができます。
|
41
|
+
|
42
|
+
### 2.2 ボトルガイザー(フォイル)向け
|
43
|
+
|
44
|
+
バブル即割のマクロがあります。
|
45
|
+
[設定方法](/docs/setting/splatoon2_macro_sokuwari_bubble.md)
|
46
|
+
|
47
|
+
## 3 設定例
|
48
|
+
### 3.1 シンプルなパブロ向け
|
49
|
+
|
50
|
+
* ZRボタン, ZLボタン, Lボタンを同時押しながら十字キーを押すとレイヤーを切り替える
|
51
|
+
* ナイス玉が来たときにゲージを貯めるために十字キーの下を連打
|
52
|
+
* 復帰から最速ジャンプのためにAボタンを連打
|
53
|
+
* 筆を振るためにZRボタンを連打
|
54
|
+
* 筆ダッシュをするためにLボタンをZRボタンに変更
|
55
|
+
|
56
|
+
```yaml
|
57
|
+
version: 1.0
|
58
|
+
setting: |-
|
59
|
+
prefix_keys_for_changing_layer [:zr, :zl, :l]
|
60
|
+
|
61
|
+
layer :up do
|
62
|
+
flip :zr, if_pressed: :zr, force_neutral: :zl
|
63
|
+
flip :a, if_pressed: [:a]
|
64
|
+
flip :down, if_pressed: :down
|
65
|
+
remap :l, to: :zr
|
66
|
+
end
|
67
|
+
|
68
|
+
layer :right do
|
69
|
+
end
|
70
|
+
|
71
|
+
layer :left do
|
72
|
+
end
|
73
|
+
|
74
|
+
layer :down do
|
75
|
+
end
|
76
|
+
```
|
77
|
+
|
78
|
+
### 3.2 全部盛り
|
79
|
+
|
80
|
+
* ZRボタン, ZLボタン, Lボタンを同時押しながら十字キーを押すとレイヤーを切り替える
|
81
|
+
* ナイス玉が来たときにゲージを貯めるために十字キーの下を連打
|
82
|
+
* 筆を振るためにZRボタンを連打
|
83
|
+
* 復帰から最速ジャンプのためにAボタンを連打
|
84
|
+
* YボタンとBボタンと十字キーの上を同時に押したときに、マップ開いた時の↑に設定されている味方にスーパージャンプ
|
85
|
+
* YボタンとBボタンと十字キーの左を同時に押したときに、マップ開いた時の←に設定されている味方にスーパージャンプ
|
86
|
+
* YボタンとBボタンと十字キーの右を同時に押したときに、マップ開いた時の→に設定されている味方にスーパージャンプ
|
87
|
+
* YボタンとBボタンと十字キーの下を同時に押したときに、リスポーンにスーパージャンプ
|
88
|
+
* ZLボタンと十字キーの右ボタンを同時に、バブル即割を発動
|
89
|
+
* 筆ダッシュをするためにLボタンをZRボタンに変更
|
90
|
+
* ZLボタンとAボタンを同時に押したときに移動するとスニーキング
|
91
|
+
|
92
|
+
```yaml
|
93
|
+
version: 1.0
|
94
|
+
setting: |-
|
95
|
+
install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::FastReturn
|
96
|
+
install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToUpKey
|
97
|
+
install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToRightKey
|
98
|
+
install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToLeftKey
|
99
|
+
install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb
|
100
|
+
|
101
|
+
prefix_keys_for_changing_layer [:zr, :zl, :l]
|
102
|
+
set_neutral_position 2100, 2000
|
103
|
+
|
104
|
+
layer :up do
|
105
|
+
flip :zr, if_pressed: :zr, force_neutral: :zl
|
106
|
+
flip :a, if_pressed: [:a]
|
107
|
+
flip :down, if_pressed: :down
|
108
|
+
|
109
|
+
macro ProconBypassMan::Plugin::Splatoon2::Macro::FastReturn, if_pressed: [:y, :b, :down]
|
110
|
+
macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToUpKey, if_pressed: [:y, :b, :up]
|
111
|
+
macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToRightKey, if_pressed: [:y, :b, :right]
|
112
|
+
macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToLeftKey, if_pressed: [:y, :b, :left]
|
113
|
+
macro ProconBypassMan::Plugin::Splatoon2::Macro::SokuwariForSplashBomb, if_pressed: [:zl, :right]
|
114
|
+
|
115
|
+
remap :l, to: :zr
|
116
|
+
left_analog_stick_cap cap: 1100, if_pressed: [:zl, :a], force_neutral: :a
|
117
|
+
end
|
118
|
+
|
119
|
+
layer :right do
|
120
|
+
end
|
121
|
+
|
122
|
+
layer :left do
|
123
|
+
end
|
124
|
+
|
125
|
+
layer :down do
|
126
|
+
end
|
127
|
+
```
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class ProconBypassMan::ReportCompletedUpgradePbmJob < ProconBypassMan::ReportEventBaseJob
|
2
|
+
extend ProconBypassMan::HasExternalApiSetting
|
3
|
+
|
4
|
+
def self.perform
|
5
|
+
ProconBypassMan::ReportHttpClient.new(
|
6
|
+
path: path,
|
7
|
+
server_pool: server_pool,
|
8
|
+
).post(body: nil, event_type: :completed_upgrade_pbm)
|
9
|
+
end
|
10
|
+
end
|
@@ -0,0 +1,11 @@
|
|
1
|
+
class ProconBypassMan::ReportErrorReloadConfigJob < ProconBypassMan::ReportEventBaseJob
|
2
|
+
extend ProconBypassMan::HasExternalApiSetting
|
3
|
+
|
4
|
+
# @param [String] body
|
5
|
+
def self.perform(body)
|
6
|
+
ProconBypassMan::ReportHttpClient.new(
|
7
|
+
path: path,
|
8
|
+
server_pool: server_pool,
|
9
|
+
).post(body: body, event_type: :error_reload_config)
|
10
|
+
end
|
11
|
+
end
|
@@ -0,0 +1,10 @@
|
|
1
|
+
class ProconBypassMan::ReportStartRebootJob < ProconBypassMan::ReportEventBaseJob
|
2
|
+
extend ProconBypassMan::HasExternalApiSetting
|
3
|
+
|
4
|
+
def self.perform
|
5
|
+
ProconBypassMan::ReportHttpClient.new(
|
6
|
+
path: path,
|
7
|
+
server_pool: server_pool,
|
8
|
+
).post(body: nil, event_type: :start_reboot)
|
9
|
+
end
|
10
|
+
end
|
@@ -6,8 +6,11 @@ require "procon_bypass_man/background/job_performer"
|
|
6
6
|
require "procon_bypass_man/background/jobs/base_job"
|
7
7
|
require "procon_bypass_man/background/jobs/report_event_base_job"
|
8
8
|
require "procon_bypass_man/background/jobs/report_boot_job"
|
9
|
+
require "procon_bypass_man/background/jobs/report_start_reboot_job"
|
9
10
|
require "procon_bypass_man/background/jobs/report_reload_config_job"
|
11
|
+
require "procon_bypass_man/background/jobs/report_error_reload_config_job"
|
10
12
|
require "procon_bypass_man/background/jobs/report_load_config_job"
|
11
13
|
require "procon_bypass_man/background/jobs/report_error_job"
|
12
14
|
require "procon_bypass_man/background/jobs/report_pressed_buttons_job"
|
15
|
+
require "procon_bypass_man/background/jobs/report_completed_upgrade_pbm_job"
|
13
16
|
require "procon_bypass_man/background/jobs/sync_device_stats_job"
|
@@ -5,6 +5,8 @@ module ProconBypassMan
|
|
5
5
|
|
6
6
|
# @return [ProconBypassMan::ButtonsSettingConfiguration]
|
7
7
|
def self.load(setting_path: )
|
8
|
+
ProconBypassMan::ButtonsSettingConfiguration.instance.setting_path = setting_path
|
9
|
+
|
8
10
|
ProconBypassMan::ButtonsSettingConfiguration.switch_new_context(:validation) do |new_instance|
|
9
11
|
yaml = YAML.load_file(setting_path) or raise "読み込みに失敗しました"
|
10
12
|
new_instance.instance_eval(yaml["setting"])
|
@@ -12,17 +14,19 @@ module ProconBypassMan
|
|
12
14
|
if validator.valid?
|
13
15
|
next
|
14
16
|
else
|
15
|
-
raise ProconBypassMan::CouldNotLoadConfigError, validator.
|
17
|
+
raise ProconBypassMan::CouldNotLoadConfigError, validator.errors_to_s
|
16
18
|
end
|
17
19
|
rescue SyntaxError
|
20
|
+
fallback_setting_if_has_backup(current_setting_path: setting_path)
|
18
21
|
raise ProconBypassMan::CouldNotLoadConfigError, "Rubyスクリプトのシンタックスエラーです"
|
19
22
|
rescue NoMethodError
|
23
|
+
fallback_setting_if_has_backup(current_setting_path: setting_path)
|
20
24
|
raise ProconBypassMan::CouldNotLoadConfigError, "Rubyスクリプトに未定義の定数・変数があります"
|
21
25
|
rescue Psych::SyntaxError
|
26
|
+
fallback_setting_if_has_backup(current_setting_path: setting_path)
|
22
27
|
raise ProconBypassMan::CouldNotLoadConfigError, "yamlのシンタックスエラーです"
|
23
28
|
end
|
24
29
|
|
25
|
-
ProconBypassMan::ButtonsSettingConfiguration.instance.setting_path = setting_path
|
26
30
|
ProconBypassMan::ButtonsSettingConfiguration.instance.reset!
|
27
31
|
ProconBypassMan.reset!
|
28
32
|
|
@@ -38,12 +42,27 @@ module ProconBypassMan
|
|
38
42
|
|
39
43
|
File.write(ProconBypassMan.digest_path, Digest::MD5.hexdigest(yaml["setting"]))
|
40
44
|
|
45
|
+
if File.exist?(ProconBypassMan.fallback_setting_path)
|
46
|
+
FileUtils.rm_rf(ProconBypassMan.fallback_setting_path)
|
47
|
+
end
|
48
|
+
|
41
49
|
ProconBypassMan::ButtonsSettingConfiguration.instance
|
42
50
|
end
|
43
51
|
|
44
52
|
def self.reload_setting
|
45
53
|
self.load(setting_path: ProconBypassMan::ButtonsSettingConfiguration.instance.setting_path)
|
46
54
|
end
|
55
|
+
|
56
|
+
def self.fallback_setting_if_has_backup(current_setting_path: )
|
57
|
+
return unless File.exist?(ProconBypassMan.fallback_setting_path)
|
58
|
+
return if current_setting_path.nil?
|
59
|
+
|
60
|
+
FileUtils.copy(
|
61
|
+
ProconBypassMan.fallback_setting_path,
|
62
|
+
current_setting_path,
|
63
|
+
)
|
64
|
+
FileUtils.rm_rf(ProconBypassMan.fallback_setting_path)
|
65
|
+
end
|
47
66
|
end
|
48
67
|
end
|
49
68
|
end
|
@@ -32,6 +32,16 @@ module ProconBypassMan
|
|
32
32
|
@errors ||= Hash.new {|h,k| h[k] = [] }
|
33
33
|
end
|
34
34
|
|
35
|
+
# @return [Array<String>]
|
36
|
+
def errors_to_s
|
37
|
+
errors.map { |_x, message|
|
38
|
+
value = <<~EOH
|
39
|
+
#{message.map { |m| "layer #{m}" }.join("\n")}
|
40
|
+
EOH
|
41
|
+
value.chomp
|
42
|
+
}.join("\n")
|
43
|
+
end
|
44
|
+
|
35
45
|
private
|
36
46
|
|
37
47
|
def validate_config_of_button_lonely
|
@@ -101,6 +101,8 @@ module ProconBypassMan
|
|
101
101
|
def reset!
|
102
102
|
@prefix_keys_for_changing_layer = []
|
103
103
|
self.mode_plugins = {}
|
104
|
+
# プロセスを一度起動するとsetting_pathは変わらない、という想定なので適当に扱う. resetでは初期化しない
|
105
|
+
# self.setting_path = nil
|
104
106
|
self.macro_plugins = {}
|
105
107
|
self.layers = {
|
106
108
|
up: Layer.new,
|
@@ -0,0 +1,29 @@
|
|
1
|
+
class ProconBypassMan::BypassMode
|
2
|
+
TYPE_NORMAL = :normal
|
3
|
+
TYPE_AGGRESSIVE = :aggressive
|
4
|
+
TYPES = [TYPE_NORMAL, TYPE_AGGRESSIVE]
|
5
|
+
|
6
|
+
DEFAULT_GADGET_TO_PROCON_INTERVAL = 0.5
|
7
|
+
|
8
|
+
attr_accessor :mode, :gadget_to_procon_interval
|
9
|
+
|
10
|
+
def self.default_value
|
11
|
+
new(
|
12
|
+
mode: TYPE_NORMAL,
|
13
|
+
gadget_to_procon_interval: DEFAULT_GADGET_TO_PROCON_INTERVAL,
|
14
|
+
)
|
15
|
+
end
|
16
|
+
|
17
|
+
def initialize(mode: , gadget_to_procon_interval: )
|
18
|
+
@mode = mode.to_sym
|
19
|
+
@gadget_to_procon_interval = gadget_to_procon_interval
|
20
|
+
end
|
21
|
+
|
22
|
+
def to_s
|
23
|
+
if mode == TYPE_NORMAL
|
24
|
+
"#{mode}(#{gadget_to_procon_interval})"
|
25
|
+
else
|
26
|
+
mode.to_s
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -1,10 +1,12 @@
|
|
1
1
|
require "procon_bypass_man/bypass/usb_hid_logger"
|
2
|
+
require "procon_bypass_man/bypass/bypass_mode"
|
2
3
|
|
3
4
|
class ProconBypassMan::Bypass
|
4
5
|
include ProconBypassMan::Bypass::UsbHidLogger
|
5
6
|
|
6
7
|
class BypassValue < Struct.new(:binary, :sent)
|
7
8
|
def to_text
|
9
|
+
return unless binary
|
8
10
|
"#{binary.unpack.first} #{'x' unless sent}"
|
9
11
|
end
|
10
12
|
end
|
@@ -31,16 +33,16 @@ class ProconBypassMan::Bypass
|
|
31
33
|
self.bypass_value.binary = ProconBypassMan::Domains::InboundProconBinary.new(binary: input)
|
32
34
|
rescue IO::EAGAINWaitReadable
|
33
35
|
monitor.record(:eagain_wait_readable_on_read)
|
34
|
-
sleep(0.001)
|
35
|
-
retry
|
36
36
|
end
|
37
37
|
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
38
|
+
if input
|
39
|
+
begin
|
40
|
+
self.procon.write_nonblock(input)
|
41
|
+
self.bypass_value.sent = true
|
42
|
+
rescue IO::EAGAINWaitReadable
|
43
|
+
monitor.record(:eagain_wait_readable_on_write)
|
44
|
+
break
|
45
|
+
end
|
44
46
|
end
|
45
47
|
end
|
46
48
|
|
@@ -27,19 +27,31 @@ class ProconBypassMan::BypassCommand
|
|
27
27
|
monitor1 = ProconBypassMan::IOMonitor.new(label: "switch -> procon")
|
28
28
|
monitor2 = ProconBypassMan::IOMonitor.new(label: "procon -> switch")
|
29
29
|
ProconBypassMan.logger.info "Thread1を起動します"
|
30
|
+
|
31
|
+
@send_interval = 0.005
|
32
|
+
|
30
33
|
t1 = Thread.new do
|
31
34
|
timer = ProconBypassMan::SafeTimeout.new(timeout: Time.now + 10)
|
32
|
-
|
35
|
+
@did_first_step = false
|
33
36
|
loop do
|
37
|
+
bypass = ProconBypassMan::Bypass.new(gadget: @gadget, procon: @procon, monitor: monitor1)
|
34
38
|
break if $will_terminate_token
|
35
|
-
timer.throw_if_timeout!
|
39
|
+
!@did_first_step && timer.throw_if_timeout!
|
36
40
|
bypass.send_gadget_to_procon!
|
37
|
-
sleep(
|
41
|
+
sleep(@send_interval)
|
38
42
|
rescue ProconBypassMan::SafeTimeout::Timeout
|
39
|
-
ProconBypassMan.
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
+
case ProconBypassMan.config.bypass_mode.mode
|
44
|
+
when ProconBypassMan::BypassMode::TYPE_AGGRESSIVE
|
45
|
+
ProconBypassMan.logger.info "10秒経過したのでThread1を終了します"
|
46
|
+
monitor1.shutdown
|
47
|
+
break
|
48
|
+
when ProconBypassMan::BypassMode::TYPE_NORMAL
|
49
|
+
ProconBypassMan.logger.info "10秒経過したのでsend_intervalを長くします"
|
50
|
+
@send_interval = ProconBypassMan.config.bypass_mode.gadget_to_procon_interval
|
51
|
+
else
|
52
|
+
raise "unknown type"
|
53
|
+
end
|
54
|
+
@did_first_step = true
|
43
55
|
rescue Errno::EIO, Errno::ENODEV, Errno::EPROTO, IOError, Errno::ESHUTDOWN => e
|
44
56
|
ProconBypassMan::SendErrorCommand.execute(error: "Switchとの切断されました.終了処理を開始します. #{e.full_message}")
|
45
57
|
Process.kill "TERM", Process.ppid
|
@@ -80,7 +92,7 @@ class ProconBypassMan::BypassCommand
|
|
80
92
|
[t1, t2].each(&:join)
|
81
93
|
@gadget&.close
|
82
94
|
@procon&.close
|
83
|
-
exit 1
|
95
|
+
exit 1 # child processなのでexitしていい
|
84
96
|
end
|
85
97
|
end
|
86
98
|
end
|
@@ -1,4 +1,6 @@
|
|
1
1
|
class ProconBypassMan::ConnectDeviceCommand
|
2
|
+
class NotFoundProconError < StandardError; end
|
3
|
+
|
2
4
|
# @return [void]
|
3
5
|
def self.execute!
|
4
6
|
gadget, procon = ProconBypassMan::DeviceConnector.connect
|
@@ -6,11 +8,11 @@ class ProconBypassMan::ConnectDeviceCommand
|
|
6
8
|
ProconBypassMan.logger.error e
|
7
9
|
gadget&.close
|
8
10
|
procon&.close
|
9
|
-
raise ProconBypassMan::NotFoundProconError
|
11
|
+
raise ProconBypassMan::ConnectDeviceCommand::NotFoundProconError
|
10
12
|
rescue ProconBypassMan::SafeTimeout::Timeout
|
11
13
|
ProconBypassMan.logger.error "デバイスとの通信でタイムアウトが起きて接続ができませんでした。"
|
12
14
|
gadget&.close
|
13
15
|
procon&.close
|
14
|
-
raise
|
16
|
+
raise ProconBypassMan::EternalConnectionError
|
15
17
|
end
|
16
18
|
end
|