procon_bypass_man 0.2.3 → 0.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +12 -0
- data/Gemfile.lock +4 -2
- data/README.md +11 -33
- data/docs/getting_started.md +8 -0
- data/docs/setting/splatoon2_macro_forward_ikarole.md +34 -0
- data/docs/setup_raspi.md +12 -15
- data/docs/setup_raspi_by_mitamae.md +0 -1
- data/lib/procon_bypass_man/buttons_setting_configuration/layer.rb +1 -0
- data/lib/procon_bypass_man/buttons_setting_configuration/loader.rb +2 -1
- data/lib/procon_bypass_man/buttons_setting_configuration.rb +11 -0
- data/lib/procon_bypass_man/bypass/bypass_command.rb +11 -6
- data/lib/procon_bypass_man/bypass/procon_to_switch.rb +44 -41
- data/lib/procon_bypass_man/bypass/switch_to_procon.rb +2 -0
- data/lib/procon_bypass_man/commands/print_boot_message_command.rb +0 -2
- data/lib/procon_bypass_man/configuration.rb +4 -0
- data/lib/procon_bypass_man/device_connection/procon_setting_overrider.rb +0 -3
- data/lib/procon_bypass_man/ephemeral_configuration.rb +9 -0
- data/lib/procon_bypass_man/plugin/splatoon2/macro/{dasei_cancel.rb → forward_ikarole.rb} +4 -4
- data/lib/procon_bypass_man/plugins.rb +1 -1
- data/lib/procon_bypass_man/procon/analog_stick_manipulator.rb +18 -4
- data/lib/procon_bypass_man/procon/layer_changer.rb +2 -0
- data/lib/procon_bypass_man/procon/macro.rb +2 -0
- data/lib/procon_bypass_man/procon/macro_builder.rb +13 -0
- data/lib/procon_bypass_man/procon/macro_registry.rb +2 -0
- data/lib/procon_bypass_man/procon/performance_measurement/measurements_summarizer.rb +41 -24
- data/lib/procon_bypass_man/procon/performance_measurement/span_transfer_buffer.rb +1 -1
- data/lib/procon_bypass_man/procon/performance_measurement.rb +12 -5
- data/lib/procon_bypass_man/procon/rumbler.rb +18 -0
- data/lib/procon_bypass_man/procon/suppress_rumble.rb +2 -0
- data/lib/procon_bypass_man/procon/user_operation.rb +3 -1
- 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 +28 -18
- data/lib/procon_bypass_man/remote_macro.rb +2 -0
- data/lib/procon_bypass_man/remote_pbm_action.rb +2 -0
- data/lib/procon_bypass_man/runner.rb +0 -1
- data/lib/procon_bypass_man/support/callbacks.rb +10 -3
- data/lib/procon_bypass_man/support/http_client.rb +3 -0
- data/lib/procon_bypass_man/support/renice_command.rb +17 -0
- data/lib/procon_bypass_man/version.rb +1 -1
- data/lib/procon_bypass_man.rb +24 -6
- data/procon_bypass_man.gemspec +3 -1
- data/project_template/app.rb +1 -4
- data/project_template/app.rb.erb +1 -4
- data/project_template/setting.yml +3 -0
- metadata +21 -5
- data/docs/setting/splatoon2_macro_dasei_cancel.md +0 -77
- data/lib/procon_bypass_man/support/analog_stick_hypotenuse_tilting_power_scaler.rb +0 -59
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 3d7e6a739dbaf4be4022b97c591828d5ccca8d947c0c3bc0a0a8ffa8097a2b95
|
4
|
+
data.tar.gz: f7ad824a4e34d051c3f3514d18f6c6ab4b3e23b0cf6d9c574af1038afe9118b0
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5ab67436d5d4dbca83ec68d42b0621d6737370388e10d5d86738914506dd6261aa6f495b7074f36ec685d1392b433ec1d7070f9417c2dfe4e7927b6840829633
|
7
|
+
data.tar.gz: 4c0034304beda74a99126b4dfd1cd35b2f0ac00b78c200dea9f6bfd64a19b0c39407a4e24afcd0914764e9899058a328e4a1c18130efc83421eb7202b2543e1c
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,15 @@
|
|
1
|
+
## [0.3.1] - 2022-10-07
|
2
|
+
* レイヤーを変更しているときにコントローラーを振動できるようになりました
|
3
|
+
* setting.yml で `enable(:rumble_on_layer_change)` と記述してください
|
4
|
+
* イカロールをするマクロを追加しました
|
5
|
+
* 詳しい設定方法については docs/setting/splatoon2_macro_forward_ikarole.md を参照してください
|
6
|
+
* スプラ用マクロ、惰性キャンセルを削除しました
|
7
|
+
|
8
|
+
## [0.3.0] - 2022-9-9
|
9
|
+
* 表示入力機能を一時的に削除しました #185
|
10
|
+
* バイパス処理中の小さなラグがほぼなくなりました #185
|
11
|
+
* バイパス処理をマルチプロセスで行うようにしたのでGCによる停止時間がほぼなくなったため
|
12
|
+
|
1
13
|
## [0.2.3] - 2022-8-27
|
2
14
|
* プロコンのラグ具合をpbm-cloudに送信し、グラフで見れるようになりました #158
|
3
15
|
* 非同期ジョブをmasterプロセス経由で実行するようになりました #191
|
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.1)
|
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)
|
@@ -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,9 +3,7 @@
|
|
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
|
|
@@ -14,44 +12,17 @@
|
|
14
12
|
|
15
13
|
https://user-images.githubusercontent.com/1664497/171327108-f12f56a5-fc36-48da-95a5-65e976553a20.mov
|
16
14
|
|
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
|
-
-->
|
26
|
-
|
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
23
|
* ruby 2.5 以上
|
37
24
|
|
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
|
25
|
+
## プラグイン
|
55
26
|
* https://github.com/splaplapla/procon_bypass_man-splatoon2
|
56
27
|
|
57
28
|
## FAQ
|
@@ -109,6 +80,13 @@ sudo kill -USR2 `cat ./pbm_pid`
|
|
109
80
|
* githubのreleaseを作成する
|
110
81
|
-->
|
111
82
|
|
83
|
+
## Raspberry Pi4のセットアップを代行します
|
84
|
+
* Raspberry Pi4を開発者である私の家に配送してくれれば、セットアップを代行します。セットアップが終わり次第送り返します
|
85
|
+
* 使い方に関しては、https://pbm-cloud.herokuapp.com ですべて完結するので、Linuxの知識は不要です
|
86
|
+
* 何か問題が起きた時はリモートログインでサポート可能です
|
87
|
+
* 希望者はDiscordの `kawagu#7684` にDMを送ってください
|
88
|
+
* お金はかかりません
|
89
|
+
|
112
90
|
## 開発を支援してくれる人を募集しています
|
113
91
|
* https://jiikko.fanbox.cc/
|
114
92
|
* procon_bypassの運営・開発・サーバー費用に充てさせていただきます。また、問い合わせに優先して対応します。
|
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のインストール)
|
@@ -45,6 +46,13 @@
|
|
45
46
|
* 入力表示
|
46
47
|
* https://github.com/splaplapla/switch-procon-input-viewer
|
47
48
|
|
49
|
+
## セットアップを代行できます
|
50
|
+
* Raspberry Pi4を開発者である私の家に配送してくれれば、セットアップを代行します。セットアップが終わり次第送り返します
|
51
|
+
* 使い方に関しては、https://pbm-cloud.herokuapp.com ですべて完結するので、Linuxの知識は不要です
|
52
|
+
* 何か問題が起きた時はリモートログインでサポート可能です
|
53
|
+
* 希望者はDiscordの `kawagu#7684` にDMを送ってください
|
54
|
+
* お金はかかりません
|
55
|
+
|
48
56
|
## セットアップ
|
49
57
|
### ラズベリーパイのセットアップ
|
50
58
|
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# スプラトゥーン2: イカロール マクロの設定方法
|
2
|
+
|
3
|
+
* procon_bypass_man: 0.3.1以上が必要です
|
4
|
+
* このマクロは、右から上へ高速にスティックを入れることでイカロールを行います
|
5
|
+
* 後述する設定例では、左スティックを押し込むことでイカロールを発動してます
|
6
|
+
|
7
|
+
https://user-images.githubusercontent.com/1664497/193837089-1c56af8d-2c1b-436a-b2a7-89c083a408d7.mov
|
8
|
+
|
9
|
+
|
10
|
+
## 設定例1
|
11
|
+
```yaml
|
12
|
+
version: 1.0
|
13
|
+
setting: |-
|
14
|
+
prefix_keys_for_changing_layer [:zr, :zl, :l]
|
15
|
+
|
16
|
+
layer :up do
|
17
|
+
open_macro :forward_ikarole, steps: [:forward_ikarole1], if_pressed: [:thumbl], force_neutral: []
|
18
|
+
end
|
19
|
+
```
|
20
|
+
|
21
|
+
## 設定例2
|
22
|
+
pluginとして登録してあるので、 `macro` を使っても同じことができます。
|
23
|
+
|
24
|
+
```yaml
|
25
|
+
version: 1.0
|
26
|
+
setting: |-
|
27
|
+
prefix_keys_for_changing_layer [:zr, :zl, :l]
|
28
|
+
|
29
|
+
install_macro_plugin(ProconBypassMan::Plugin::Splatoon2::Macro::ForwardIkarole)
|
30
|
+
|
31
|
+
layer :up do
|
32
|
+
macro ProconBypassMan::Plugin::Splatoon2::Macro::ForwardIkarole, if_pressed: [:thumbl], force_neutral: []
|
33
|
+
end
|
34
|
+
```
|
data/docs/setup_raspi.md
CHANGED
@@ -1,41 +1,38 @@
|
|
1
1
|
https://github.com/splaplapla/procon_bypass_man/blob/master/docs/setup_raspi_by_mitamae.md に半自動化した手順があります
|
2
2
|
|
3
3
|
# Raspberry Pi4のセットアップ手順
|
4
|
-
* SDカードにRaspberry Pi OS (32-bit)を焼く
|
4
|
+
* SDカードにRaspberry Pi OS (32 or 64-bit)を焼く
|
5
5
|
* SDカードをRaspberry Pi4本体に挿して起動する
|
6
6
|
* ラズパイGUI
|
7
7
|
* 無線LANに接続する
|
8
8
|
* sshdを許可する
|
9
9
|
* macからsshする
|
10
|
+
* sudo apt-get update
|
10
11
|
* sudo apt-get dist-upgrade
|
11
|
-
* hostnameを変える
|
12
|
-
* sudo hostnamectl set-hostname raspizero
|
13
|
-
* /etc/hosts に追記する
|
14
|
-
* 仮想メモリを増やす(optional)
|
15
|
-
* /etc/dphys-swapfile を CONF_SWAPSIZE=1024 にする
|
16
|
-
* sudo /etc/init.d/dphys-swapfile restart && swapon -s
|
17
|
-
* tailscale をインストールする(optional)
|
18
12
|
* sudo apt-get install vim rbenv git -y
|
19
13
|
* rbenvでrubyを入れる
|
20
14
|
* git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
|
21
15
|
* rbenv install 3.0.1
|
22
16
|
* rbenv local 3.0.1
|
23
17
|
* gem i bundler
|
24
|
-
* sshkeyを作成する
|
25
|
-
* github に鍵を登録する
|
26
|
-
* ~/.ssh/authorized_keys に鍵を登録する
|
27
18
|
* ガジェットモードで起動する
|
28
19
|
* /boot/config.txtに、dtoverlay=dwc2を追記
|
29
20
|
* echo "dwc2" | sudo tee -a /etc/modules
|
30
21
|
* echo "libcomposite" | sudo tee -a /etc/modules
|
31
22
|
* sudo cat /etc/modules
|
32
|
-
* cd ~ && wget https://gist.githubusercontent.com/jiikko/3f9fb3194c0cc7685e31fbfcb5b5f9ff/raw/23ddee29d94350be80b79d290ac3c8ce8400bd88/add_procon_gadget.sh
|
33
|
-
* chmod 755 ~/add_procon_gadget.sh
|
34
23
|
* sudo reboot
|
35
|
-
* sudo sh ~/add_procon_gadget.sh の実行に成功させる
|
36
24
|
* cd ~ && mkdir -p src && cd ~/src && git clone https://github.com/jiikko/procon_bypass_man_sample && cd procon_bypass_man_sample
|
37
25
|
|
38
|
-
|
26
|
+
おわりです.
|
27
|
+
|
28
|
+
起動する時は下記を確認の上、`sudo /home/pi/.rbenv/versions/3.0.1/bin/ruby app.rb` を実行してください。
|
29
|
+
|
30
|
+
* 「ラズパイとSwitch」と「ラズパイとプロコン」を **データ通信可能なケーブル** で接続する
|
31
|
+
* **Proコントローラーの有線通信** をONにする
|
32
|
+
|
33
|
+
|
34
|
+
![image](https://user-images.githubusercontent.com/1664497/193258615-1da27049-6d1f-4bfc-af1d-2f894f9c610e.png)
|
35
|
+
|
39
36
|
|
40
37
|
## 参考
|
41
38
|
* https://mtosak-tech.hatenablog.jp/entry/2020/08/22/114622
|
@@ -53,6 +53,7 @@ module ProconBypassMan
|
|
53
53
|
end
|
54
54
|
|
55
55
|
# @param [String, Class] プラグインのclass
|
56
|
+
# @param [Hash, NilClass] if_tilted_left_stick 非推奨
|
56
57
|
def macro(name, if_pressed: nil, if_tilted_left_stick: nil, force_neutral: nil)
|
57
58
|
case if_tilted_left_stick
|
58
59
|
when Integer, String, Symbol, Array
|
@@ -21,7 +21,7 @@ module ProconBypassMan
|
|
21
21
|
rescue SyntaxError
|
22
22
|
fallback_setting_if_has_backup(current_setting_path: setting_path)
|
23
23
|
raise ProconBypassMan::CouldNotLoadConfigError, "Rubyスクリプトのシンタックスエラーです"
|
24
|
-
rescue
|
24
|
+
rescue NameError
|
25
25
|
fallback_setting_if_has_backup(current_setting_path: setting_path)
|
26
26
|
raise ProconBypassMan::CouldNotLoadConfigError, "Rubyスクリプトに未定義の定数・変数があります"
|
27
27
|
rescue Psych::SyntaxError
|
@@ -52,6 +52,7 @@ module ProconBypassMan
|
|
52
52
|
end
|
53
53
|
|
54
54
|
def self.reload_setting
|
55
|
+
ProconBypassMan.ephemeral_config.reset!
|
55
56
|
self.load(setting_path: ProconBypassMan::ButtonsSettingConfiguration.instance.setting_path)
|
56
57
|
end
|
57
58
|
|
@@ -98,6 +98,17 @@ module ProconBypassMan
|
|
98
98
|
@prefix_keys_for_changing_layer
|
99
99
|
end
|
100
100
|
|
101
|
+
# @param [Symbol, String] setting_name
|
102
|
+
# @return [void]
|
103
|
+
def enable(setting_name)
|
104
|
+
case setting_name.to_sym
|
105
|
+
when :rumble_on_layer_change
|
106
|
+
ProconBypassMan.ephemeral_config.enable_rumble_on_layer_change = true
|
107
|
+
else
|
108
|
+
warn "存在しないenable(#{setting_name.to_sym})が呼び出されました。"
|
109
|
+
end
|
110
|
+
end
|
111
|
+
|
101
112
|
def reset!
|
102
113
|
@prefix_keys_for_changing_layer = []
|
103
114
|
self.mode_plugins = {}
|
@@ -30,11 +30,6 @@ class ProconBypassMan::BypassCommand
|
|
30
30
|
cycle_sleep = ProconBypassMan::CycleSleep.new(cycle_interval: 1, execution_cycle: ProconBypassMan.config.bypass_mode.gadget_to_procon_interval)
|
31
31
|
|
32
32
|
t1 = Thread.new do
|
33
|
-
if ProconBypassMan.config.bypass_mode.mode == ProconBypassMan::BypassMode::TYPE_AGGRESSIVE
|
34
|
-
ProconBypassMan.logger.info "TYPE_AGGRESSIVEなのでThread1を終了します"
|
35
|
-
next
|
36
|
-
end
|
37
|
-
|
38
33
|
bypass = ProconBypassMan::Bypass::SwitchToProcon.new(gadget: @gadget, procon: @procon)
|
39
34
|
loop do
|
40
35
|
break if $will_terminate_token
|
@@ -58,22 +53,32 @@ class ProconBypassMan::BypassCommand
|
|
58
53
|
# シビア
|
59
54
|
t2 = Thread.new do
|
60
55
|
bypass = ProconBypassMan::Bypass::ProconToSwitch.new(gadget: @gadget, procon: @procon)
|
56
|
+
process = BlueGreenProcess.new(worker_instance: bypass, max_work: 200)
|
61
57
|
loop do
|
62
58
|
if $will_terminate_token
|
63
59
|
if $will_terminate_token == WILL_TERMINATE_TOKEN::TERMINATE
|
64
60
|
bypass.direct_connect_switch_via_bluetooth
|
65
61
|
end
|
62
|
+
process.shutdown
|
66
63
|
break
|
67
64
|
end
|
68
65
|
|
69
|
-
|
66
|
+
process.work
|
67
|
+
|
68
|
+
process_switching_time_before_work = BlueGreenProcess.performance.process_switching_time_before_work
|
69
|
+
if process_switching_time_before_work > 0.1
|
70
|
+
ProconBypassMan.logger.info("slow process_switching_time_before_work: #{process_switching_time_before_work}")
|
71
|
+
end
|
72
|
+
|
70
73
|
rescue EOFError => e
|
71
74
|
ProconBypassMan::SendErrorCommand.execute(error: "Proconが切断されました。終了処理を開始します. #{e.full_message}")
|
72
75
|
Process.kill "TERM", Process.ppid
|
76
|
+
process.shutdown
|
73
77
|
break
|
74
78
|
rescue Errno::EIO, Errno::ENODEV, Errno::EPROTO, IOError, Errno::ESHUTDOWN => e
|
75
79
|
ProconBypassMan::SendErrorCommand.execute(error: "Proconが切断されました。終了処理を開始します2. #{e.full_message}")
|
76
80
|
Process.kill "TERM", Process.ppid
|
81
|
+
process.shutdown
|
77
82
|
break
|
78
83
|
end
|
79
84
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require "procon_bypass_man/bypass/bypass_command"
|
2
4
|
|
3
5
|
class ProconBypassMan::Bypass::ProconToSwitch
|
@@ -7,12 +9,13 @@ class ProconBypassMan::Bypass::ProconToSwitch
|
|
7
9
|
class CouldNotReadFromProconError < StandardError; end
|
8
10
|
class CouldNotWriteToSwitchError < StandardError; end
|
9
11
|
|
10
|
-
define_callbacks :
|
11
|
-
set_callback :
|
12
|
+
define_callbacks :work
|
13
|
+
set_callback :work, :after, :log_after_run
|
12
14
|
|
13
|
-
|
15
|
+
# マルチプロセス化したので一旦無効にする
|
16
|
+
# register_callback_module(ProconBypassMan::ProconDisplay::BypassHook)
|
14
17
|
|
15
|
-
attr_accessor :gadget, :procon, :bypass_value
|
18
|
+
attr_accessor :gadget, :procon, :bypass_value
|
16
19
|
|
17
20
|
def initialize(gadget: , procon: )
|
18
21
|
self.gadget = gadget
|
@@ -21,20 +24,18 @@ class ProconBypassMan::Bypass::ProconToSwitch
|
|
21
24
|
|
22
25
|
# @raise [Errno::EIO, Errno::ENODEV, Errno::EPROTO, IOError, Errno::ESHUTDOWN, Errno::ETIMEDOUT]
|
23
26
|
# @return [void]
|
24
|
-
def
|
27
|
+
def work(*)
|
25
28
|
ProconBypassMan::Procon::PerformanceMeasurement.measure do |measurement|
|
26
29
|
self.bypass_value = ProconBypassMan::Bypass::BypassValue.new(nil)
|
27
30
|
|
28
|
-
next(run_callbacks(:
|
31
|
+
next(run_callbacks(:work) {
|
29
32
|
next(false) if $will_terminate_token
|
30
33
|
|
31
34
|
raw_output = nil
|
32
35
|
measurement.record_read_time do
|
33
36
|
begin
|
34
|
-
|
35
|
-
|
36
|
-
raw_output = self.procon.read_nonblock(64)
|
37
|
-
end
|
37
|
+
return(false) if $will_terminate_token
|
38
|
+
raw_output = self.procon.read_nonblock(64)
|
38
39
|
rescue IO::EAGAINWaitReadable
|
39
40
|
sleep(0.002)
|
40
41
|
retry
|
@@ -42,36 +43,43 @@ class ProconBypassMan::Bypass::ProconToSwitch
|
|
42
43
|
return(false) if $will_terminate_token
|
43
44
|
raise
|
44
45
|
end
|
46
|
+
|
47
|
+
self.bypass_value.binary = ProconBypassMan::Domains::InboundProconBinary.new(binary: raw_output)
|
45
48
|
end
|
46
49
|
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
return(false) if $will_terminate_token # rubocop:disable Lint/NoReturnInBeginEndBlocks
|
56
|
-
self.gadget.write_nonblock(
|
57
|
-
ProconBypassMan::Processor.new(bypass_value.binary).process
|
58
|
-
)
|
59
|
-
next(true)
|
60
|
-
rescue IO::EAGAINWaitReadable
|
61
|
-
return(false) if $will_terminate_token # rubocop:disable Lint/NoReturnInBeginEndBlocks
|
62
|
-
measurement.record_write_error
|
63
|
-
raise CouldNotWriteToSwitchError
|
64
|
-
rescue Errno::EIO, Errno::ENODEV, Errno::EPROTO, IOError, Errno::ESHUTDOWN, Errno::ETIMEDOUT => e
|
65
|
-
return(false) if $will_terminate_token # rubocop:disable Lint/NoReturnInBeginEndBlocks
|
66
|
-
raise
|
50
|
+
result = measurement.record_write_time do
|
51
|
+
begin
|
52
|
+
ProconBypassMan::Retryable.retryable(tries: 5, on_no_retry: [Errno::EIO, Errno::ENODEV, Errno::EPROTO, IOError, Errno::ESHUTDOWN, Errno::ETIMEDOUT]) do
|
53
|
+
begin
|
54
|
+
# 終了処理を希望されているのでブロックを無視してメソッドを抜けてOK
|
55
|
+
return(false) if $will_terminate_token # rubocop:disable Lint/NoReturnInBeginEndBlocks
|
56
|
+
binary = ::ProconBypassMan::Procon::Rumbler.monitor do
|
57
|
+
ProconBypassMan::Processor.new(bypass_value.binary).process
|
67
58
|
end
|
59
|
+
self.gadget.write_nonblock(binary)
|
60
|
+
|
61
|
+
if ProconBypassMan.ephemeral_config.enable_rumble_on_layer_change && ProconBypassMan::Procon::Rumbler.must_rumble?
|
62
|
+
begin
|
63
|
+
self.procon.write_nonblock(ProconBypassMan::Procon::Rumbler.binary)
|
64
|
+
ProconBypassMan.logger.debug { ProconBypassMan::Procon::Rumbler.binary.unpack('H*').first }
|
65
|
+
rescue => e
|
66
|
+
ProconBypassMan::SendErrorCommand.execute(error: e)
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
next(true)
|
71
|
+
rescue IO::EAGAINWaitReadable
|
72
|
+
return(false) if $will_terminate_token # rubocop:disable Lint/NoReturnInBeginEndBlocks
|
73
|
+
measurement.record_write_error
|
74
|
+
raise CouldNotWriteToSwitchError
|
75
|
+
rescue Errno::EIO, Errno::ENODEV, Errno::EPROTO, IOError, Errno::ESHUTDOWN, Errno::ETIMEDOUT => e
|
76
|
+
return(false) if $will_terminate_token # rubocop:disable Lint/NoReturnInBeginEndBlocks
|
77
|
+
raise
|
68
78
|
end
|
69
|
-
rescue CouldNotWriteToSwitchError
|
70
|
-
next(false)
|
71
79
|
end
|
80
|
+
rescue CouldNotWriteToSwitchError
|
81
|
+
next(false)
|
72
82
|
end
|
73
|
-
|
74
|
-
next(result)
|
75
83
|
end
|
76
84
|
|
77
85
|
next(result)
|
@@ -94,14 +102,9 @@ class ProconBypassMan::Bypass::ProconToSwitch
|
|
94
102
|
private
|
95
103
|
|
96
104
|
def log_after_run
|
105
|
+
return unless ProconBypassMan.config.verbose_bypass_log
|
97
106
|
return unless bypass_value.to_text
|
98
107
|
|
99
|
-
|
100
|
-
ProconBypassMan.logger.debug { "<<< #{bypass_value.to_text}" }
|
101
|
-
else
|
102
|
-
ProconBypassMan.cache.fetch key: 'bypass_log', expires_in: 1 do
|
103
|
-
ProconBypassMan.logger.debug { "<<< #{bypass_value.to_text}" }
|
104
|
-
end
|
105
|
-
end
|
108
|
+
ProconBypassMan.logger.debug { "<<< #{bypass_value.to_text}" }
|
106
109
|
end
|
107
110
|
end
|
@@ -13,7 +13,6 @@ class ProconBypassMan::PrintBootMessageCommand
|
|
13
13
|
@table[:use_pbmenv] = !(!!`which pbmenv`.empty?)
|
14
14
|
@table[:session_id] = ProconBypassMan.session_id
|
15
15
|
@table[:device_id] = ProconBypassMan.device_id
|
16
|
-
@table[:bypass_mode] = ProconBypassMan.config.bypass_mode.to_s
|
17
16
|
@table[:never_exit_accidentally] = ProconBypassMan.config.never_exit_accidentally
|
18
17
|
@table[:uname] = `uname -a`.chomp
|
19
18
|
|
@@ -43,7 +42,6 @@ class ProconBypassMan::PrintBootMessageCommand
|
|
43
42
|
use_pbmenv: #{@table[:use_pbmenv]}
|
44
43
|
session_id: #{ProconBypassMan.session_id}
|
45
44
|
device_id: #{ProconBypassMan.device_id.gsub(/.{25}$/, "*"*25)}
|
46
|
-
bypass_mode: #{ProconBypassMan.config.bypass_mode}
|
47
45
|
----
|
48
46
|
EOF
|
49
47
|
end
|
@@ -1,3 +1,6 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
# app.rbから設定される値。プロセスを起動してから不変
|
1
4
|
class ProconBypassMan::Configuration
|
2
5
|
module ClassMethods
|
3
6
|
def root
|
@@ -70,6 +73,7 @@ class ProconBypassMan::Configuration
|
|
70
73
|
end
|
71
74
|
end
|
72
75
|
|
76
|
+
# NOTE 不具合の原因は修正済みなので可変である必要は無くなった。削除したいが各端末内の設定ファイルに存在している場合があるのでしばらく残す
|
73
77
|
def bypass_mode=(value)
|
74
78
|
@bypass_mode = ProconBypassMan::BypassMode.new(
|
75
79
|
mode: value[:mode],
|
@@ -5,17 +5,14 @@ class ProconBypassMan::DeviceConnection::ProconSettingOverrider
|
|
5
5
|
SUB_COMMAND_VIBRATION = "48"
|
6
6
|
|
7
7
|
SUB_COMMAND_ARG_HOME_LED_ON = "1FF0FF"
|
8
|
-
SUB_COMMAND_ARG_VIBRATION_OFF = "00"
|
9
8
|
|
10
9
|
ALL_SETTINGS = {
|
11
10
|
home_led_on: [SUB_COMMAND_HOME_LED_ON, SUB_COMMAND_ARG_HOME_LED_ON],
|
12
|
-
vibration_off: [SUB_COMMAND_VIBRATION, SUB_COMMAND_ARG_VIBRATION_OFF],
|
13
11
|
}
|
14
12
|
|
15
13
|
# TODO 自動生成する
|
16
14
|
SPECIAL_SUB_COMMAND_ARGS = {
|
17
15
|
SUB_COMMAND_HOME_LED_ON => SUB_COMMAND_ARG_HOME_LED_ON,
|
18
|
-
SUB_COMMAND_VIBRATION => SUB_COMMAND_ARG_VIBRATION_OFF,
|
19
16
|
}
|
20
17
|
|
21
18
|
def initialize(procon: )
|
@@ -2,17 +2,17 @@ module ProconBypassMan
|
|
2
2
|
module Plugin
|
3
3
|
module Splatoon2
|
4
4
|
module Macro
|
5
|
-
module
|
5
|
+
module ForwardIkarole
|
6
6
|
def self.display_name
|
7
|
-
:
|
7
|
+
:forward_ikarole
|
8
8
|
end
|
9
9
|
|
10
10
|
def self.steps
|
11
|
-
[:
|
11
|
+
[:forward_ikarole1].freeze
|
12
12
|
end
|
13
13
|
|
14
14
|
def self.description
|
15
|
-
'
|
15
|
+
'前方にイカロールをします'
|
16
16
|
end
|
17
17
|
end
|
18
18
|
end
|
@@ -4,7 +4,7 @@ require_relative "plugin/splatoon2/macro/jump_to_right_key"
|
|
4
4
|
require_relative "plugin/splatoon2/macro/jump_to_up_key"
|
5
5
|
require_relative "plugin/splatoon2/macro/jump_to_left_key"
|
6
6
|
require_relative "plugin/splatoon2/macro/sokuwari_for_splash_bomb"
|
7
|
-
require_relative "plugin/splatoon2/macro/
|
7
|
+
require_relative "plugin/splatoon2/macro/forward_ikarole"
|
8
8
|
require_relative "plugin/splatoon2/macro/charge_tansan_bomb"
|
9
9
|
require_relative "plugin/splatoon2/mode/guruguru"
|
10
10
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class ProconBypassMan::Procon::AnalogStickManipulator
|
2
4
|
attr_accessor :manipulated_abs_x, :manipulated_abs_y
|
3
5
|
|
@@ -18,11 +20,23 @@ class ProconBypassMan::Procon::AnalogStickManipulator
|
|
18
20
|
self.manipulated_abs_x = 3400
|
19
21
|
self.manipulated_abs_y = 1808
|
20
22
|
end
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
23
|
+
|
24
|
+
return
|
25
|
+
end
|
26
|
+
|
27
|
+
if method =~ /tilt_left_stick_(completely)_to_(\d+)deg/
|
28
|
+
power_level = $1
|
29
|
+
arc_degree = $2.to_i
|
30
|
+
syahen = 1800 # 最大まで傾けた状態
|
31
|
+
neutral_position = ProconBypassMan::ButtonsSettingConfiguration.instance.neutral_position
|
32
|
+
self.manipulated_abs_x = (syahen * Math.cos(arc_degree * Math::PI / 180)).to_i - neutral_position.x
|
33
|
+
self.manipulated_abs_y = (syahen * Math.sin(arc_degree * Math::PI / 180)).to_i - neutral_position.y
|
34
|
+
return
|
25
35
|
end
|
36
|
+
|
37
|
+
warn "error stick manipulator"
|
38
|
+
self.manipulated_abs_x = analog_stick.abs_x
|
39
|
+
self.manipulated_abs_y = analog_stick.abs_y
|
26
40
|
end
|
27
41
|
|
28
42
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
class ProconBypassMan::Procon::MacroBuilder
|
2
4
|
class SubjectMerger
|
3
5
|
def self.merge(subjects)
|
@@ -92,6 +94,17 @@ class ProconBypassMan::Procon::MacroBuilder
|
|
92
94
|
]
|
93
95
|
end
|
94
96
|
|
97
|
+
# NOTE: マクロ構文で生成したいけど、スティックとボタン同時押しの構文が思いつかないので、ハードコードする
|
98
|
+
if /forward_ikarole1/ =~ step
|
99
|
+
# NOTE: 0degはx: 1, y: 0, 90degはx: 0, y: 1, 180degはx: -1, y: 0.
|
100
|
+
# NOTE: スティックを前方に倒している状態で270度回転させる
|
101
|
+
for_forward_ikarole_steps = [
|
102
|
+
[:tilt_left_stick_completely_to_0deg, :b],
|
103
|
+
[:tilt_left_stick_completely_to_90deg],
|
104
|
+
]
|
105
|
+
return { steps: for_forward_ikarole_steps }
|
106
|
+
end
|
107
|
+
|
95
108
|
if %r!^(pressing_|toggle_|shake_left_stick_)! =~ step && (subjects = step.scan(%r!pressing_[^_]+|shake_left_stick|toggle_[^_]+!)) && (match = step.match(%r!_for_([\d_]+)(sec)?\z!))
|
96
109
|
if sec = match[1]
|
97
110
|
return {
|