procon_bypass_man 0.1.6 → 0.1.10
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 +41 -16
- data/.github/workflows/ruby.yml +34 -0
- data/.gitignore +4 -0
- data/.rubocop.yml +2 -0
- data/.ruby-version +1 -1
- data/CHANGELOG.md +17 -0
- data/Gemfile +4 -0
- data/Gemfile.lock +57 -6
- data/README.md +18 -10
- data/Rakefile +10 -1
- data/Steepfile +39 -0
- data/bin/report_receive_server.rb +11 -0
- data/docs/setup_raspi.md +12 -7
- data/docs/setup_raspi.mitamae.rb +60 -0
- data/docs/setup_raspi_by_mitamae.md +14 -0
- data/lib/procon_bypass_man/analog_stick_position.rb +8 -0
- data/lib/procon_bypass_man/boot_message.rb +40 -0
- data/lib/procon_bypass_man/buttons_setting_configuration.rb +100 -0
- data/lib/procon_bypass_man/bypass/usb_hid_logger.rb +20 -0
- data/lib/procon_bypass_man/bypass.rb +61 -29
- data/lib/procon_bypass_man/callbacks.rb +70 -0
- data/lib/procon_bypass_man/configuration/layer.rb +50 -4
- data/lib/procon_bypass_man/configuration/loader.rb +8 -8
- data/lib/procon_bypass_man/configuration/validator.rb +1 -1
- data/lib/procon_bypass_man/configuration.rb +68 -64
- data/lib/procon_bypass_man/device_connector.rb +13 -30
- data/lib/procon_bypass_man/io_monitor.rb +7 -4
- data/lib/procon_bypass_man/on_memory_cache.rb +34 -0
- data/lib/procon_bypass_man/outbound/base.rb +40 -0
- data/lib/procon_bypass_man/outbound/error_reporter.rb +13 -0
- data/lib/procon_bypass_man/outbound/reporter.rb +12 -0
- data/lib/procon_bypass_man/outbound/usb_hid_data_reporter.rb +13 -0
- data/lib/procon_bypass_man/procon/analog_stick_cap.rb +88 -0
- data/lib/procon_bypass_man/procon/button_collection.rb +14 -6
- data/lib/procon_bypass_man/procon/debug_dumper.rb +17 -0
- data/lib/procon_bypass_man/procon/layer_changeable.rb +2 -2
- data/lib/procon_bypass_man/procon/macro_registry.rb +2 -2
- data/lib/procon_bypass_man/procon/mode_registry.rb +4 -4
- data/lib/procon_bypass_man/procon/press_button_aware.rb +13 -0
- data/lib/procon_bypass_man/procon/pressed_button_helper.rb +0 -10
- data/lib/procon_bypass_man/procon/user_operation.rb +14 -3
- data/lib/procon_bypass_man/procon.rb +23 -5
- data/lib/procon_bypass_man/runner.rb +36 -48
- data/lib/procon_bypass_man/uptime.rb +15 -0
- data/lib/procon_bypass_man/version.rb +1 -1
- data/lib/procon_bypass_man.rb +26 -33
- data/project_template/README.md +17 -0
- data/project_template/app.rb +20 -0
- data/project_template/setting.yml +35 -0
- data/project_template/systemd_units/pbm.service +13 -0
- data/project_template/systemd_units/pbm_web.service +11 -0
- data/project_template/web.rb +16 -0
- data/sig/README.rb +4 -0
- data/sig/main.rbs +507 -0
- metadata +30 -5
- data/examples/pbm.service +0 -27
- data/examples/simple.rb +0 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1a0674ff73c1ac25e311e304e7a3736e3feadb9f8d1221453202abbce8e00372
|
4
|
+
data.tar.gz: 29e63c8ee818a1ca3fe62de9152779cdbea38167db19824e0f402145dec36c04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2bbbce43d9ed8495f513b5cbd9688f0187f3fd64cdd932730c3938ba8d5e43d4c8e3b15118082742bb1692d95aa66537ccc501930cd778144d7639460d98c32e
|
7
|
+
data.tar.gz: 2a2276871754b37296e2dff2c4b0d3f1cc3822ecb4b5c55e61c2eba4996951072af69e990742463fa282cf57a5f956439a70304402cc4a208be8cd1a43309bb1
|
data/.circleci/config.yml
CHANGED
@@ -2,22 +2,47 @@ version: 2.1
|
|
2
2
|
orbs:
|
3
3
|
ruby: circleci/ruby@0.1.2
|
4
4
|
|
5
|
-
|
6
|
-
|
5
|
+
executors:
|
6
|
+
ruby:
|
7
|
+
parameters:
|
8
|
+
tag:
|
9
|
+
type: string
|
10
|
+
default: "latest"
|
7
11
|
docker:
|
8
|
-
- image:
|
9
|
-
|
12
|
+
- image: ruby:<< parameters.tag >>
|
13
|
+
environment:
|
14
|
+
BUNDLE_PATH: vendor/bundle
|
15
|
+
BUNDLE_JOBS: 4
|
16
|
+
working_directory: ~/app
|
17
|
+
|
18
|
+
jobs:
|
19
|
+
rspec:
|
20
|
+
parameters:
|
21
|
+
version:
|
22
|
+
type: string
|
23
|
+
executor:
|
24
|
+
name: ruby
|
25
|
+
tag: << parameters.version >>
|
10
26
|
steps:
|
11
27
|
- checkout
|
12
|
-
- run:
|
13
|
-
|
14
|
-
|
15
|
-
- run:
|
16
|
-
|
17
|
-
|
18
|
-
- run:
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
28
|
+
- run: ruby --version
|
29
|
+
- run: bundle --version
|
30
|
+
- run: gem --version
|
31
|
+
- run: gem install bundler
|
32
|
+
- run: bundle install --jobs 4
|
33
|
+
- run: bundle exec rubocop
|
34
|
+
- run: bundle exec rspec
|
35
|
+
- run: bundle exec steep check
|
36
|
+
|
37
|
+
build_jobs: &build_jobs
|
38
|
+
- rspec:
|
39
|
+
matrix:
|
40
|
+
parameters:
|
41
|
+
version:
|
42
|
+
- "2.7"
|
43
|
+
- "3.0.1"
|
44
|
+
- "3.0.2"
|
45
|
+
workflows:
|
46
|
+
version: 2
|
47
|
+
build:
|
48
|
+
jobs: *build_jobs
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# This workflow uses actions that are not certified by GitHub.
|
2
|
+
# They are provided by a third-party and are governed by
|
3
|
+
# separate terms of service, privacy policy, and support
|
4
|
+
# documentation.
|
5
|
+
# This workflow will download a prebuilt Ruby version, install dependencies and run tests with Rake
|
6
|
+
# For more information see: https://github.com/marketplace/actions/setup-ruby-jruby-and-truffleruby
|
7
|
+
|
8
|
+
name: Ruby
|
9
|
+
|
10
|
+
on:
|
11
|
+
[push]
|
12
|
+
|
13
|
+
jobs:
|
14
|
+
test:
|
15
|
+
|
16
|
+
runs-on: ubuntu-latest
|
17
|
+
strategy:
|
18
|
+
matrix:
|
19
|
+
ruby-version: ['2.7', '3.0.1']
|
20
|
+
|
21
|
+
steps:
|
22
|
+
- uses: actions/checkout@v2
|
23
|
+
- name: Set up Ruby
|
24
|
+
# To automatically get bug fixes and new Ruby versions for ruby/setup-ruby,
|
25
|
+
# change this to (see https://github.com/ruby/setup-ruby#versioning):
|
26
|
+
# uses: ruby/setup-ruby@v1
|
27
|
+
uses: ruby/setup-ruby@v1
|
28
|
+
with:
|
29
|
+
ruby-version: ${{ matrix.ruby-version }}
|
30
|
+
bundler-cache: true # runs 'bundle install' and caches installed gems automatically
|
31
|
+
- name: Run tests
|
32
|
+
run: |-
|
33
|
+
bundle exec rake
|
34
|
+
bundle exec steep check
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
3.0.
|
1
|
+
3.0.2
|
data/CHANGELOG.md
CHANGED
@@ -1,3 +1,20 @@
|
|
1
|
+
## [0.1.10] - 202
|
2
|
+
- ボタンを無効化するdisableを設定できるようになりました
|
3
|
+
- pvmenvで生成する初期ファイルにprocon_bypass_man-webを同梱しました
|
4
|
+
- PBM自体の設定の構文を変更しました
|
5
|
+
|
6
|
+
## [0.1.9] - 2021-10-20
|
7
|
+
- 左スティックを傾けた時に設定した最大値内に丸めることができるようになりました
|
8
|
+
- 関連メソッド: set_neutral_position, left_analog_stick_cap
|
9
|
+
- 数時間に一度起きる、数秒間入力が通らなくなる問題の改善
|
10
|
+
|
11
|
+
## [0.1.8] - 2021-09-19
|
12
|
+
- 使える場合、GC.auto_compactを有効にしました
|
13
|
+
- 起動ログにuptimeからの経過時間を表示しました
|
14
|
+
|
15
|
+
## [0.1.7] - 2021-09-11
|
16
|
+
- Support pbmenv
|
17
|
+
|
1
18
|
## [0.1.6] - 2021-08-19
|
2
19
|
- 設定ファイルを読み込むと内容のmd5を `pbm_root_dir/.setting_yaml_digest` へ出力するようにしました
|
3
20
|
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,23 +1,47 @@
|
|
1
1
|
PATH
|
2
2
|
remote: .
|
3
3
|
specs:
|
4
|
-
procon_bypass_man (0.1.
|
4
|
+
procon_bypass_man (0.1.10)
|
5
5
|
|
6
6
|
GEM
|
7
7
|
remote: https://rubygems.org/
|
8
8
|
specs:
|
9
|
+
activesupport (6.1.4.1)
|
10
|
+
concurrent-ruby (~> 1.0, >= 1.0.2)
|
11
|
+
i18n (>= 1.6, < 2)
|
12
|
+
minitest (>= 5.1)
|
13
|
+
tzinfo (~> 2.0)
|
14
|
+
zeitwerk (~> 2.3)
|
9
15
|
ast (2.4.2)
|
10
16
|
coderay (1.1.3)
|
17
|
+
concurrent-ruby (1.1.9)
|
11
18
|
diff-lcs (1.4.4)
|
19
|
+
ffi (1.15.4)
|
20
|
+
i18n (1.8.10)
|
21
|
+
concurrent-ruby (~> 1.0)
|
22
|
+
language_server-protocol (3.16.0.3)
|
23
|
+
listen (3.7.0)
|
24
|
+
rb-fsevent (~> 0.10, >= 0.10.3)
|
25
|
+
rb-inotify (~> 0.9, >= 0.9.10)
|
12
26
|
method_source (1.0.0)
|
27
|
+
minitest (5.14.4)
|
28
|
+
mustermann (1.1.1)
|
29
|
+
ruby2_keywords (~> 0.0.1)
|
13
30
|
parallel (1.20.1)
|
14
31
|
parser (3.0.2.0)
|
15
32
|
ast (~> 2.4.1)
|
16
33
|
pry (0.14.1)
|
17
34
|
coderay (~> 1.1)
|
18
35
|
method_source (~> 1.0)
|
36
|
+
rack (2.2.3)
|
37
|
+
rack-protection (2.1.0)
|
38
|
+
rack
|
19
39
|
rainbow (3.0.0)
|
20
|
-
rake (13.0.
|
40
|
+
rake (13.0.6)
|
41
|
+
rb-fsevent (0.11.0)
|
42
|
+
rb-inotify (0.10.1)
|
43
|
+
ffi (~> 1.0)
|
44
|
+
rbs (1.6.2)
|
21
45
|
regexp_parser (2.1.1)
|
22
46
|
rexml (3.2.5)
|
23
47
|
rspec (3.10.0)
|
@@ -33,33 +57,60 @@ GEM
|
|
33
57
|
diff-lcs (>= 1.2.0, < 2.0)
|
34
58
|
rspec-support (~> 3.10.0)
|
35
59
|
rspec-support (3.10.2)
|
36
|
-
rubocop (1.
|
60
|
+
rubocop (1.20.0)
|
37
61
|
parallel (~> 1.10)
|
38
62
|
parser (>= 3.0.0.0)
|
39
63
|
rainbow (>= 2.2.2, < 4.0)
|
40
64
|
regexp_parser (>= 1.8, < 3.0)
|
41
65
|
rexml
|
42
|
-
rubocop-ast (>= 1.
|
66
|
+
rubocop-ast (>= 1.9.1, < 2.0)
|
43
67
|
ruby-progressbar (~> 1.7)
|
44
68
|
unicode-display_width (>= 1.4.0, < 3.0)
|
45
|
-
rubocop-ast (1.
|
69
|
+
rubocop-ast (1.11.0)
|
46
70
|
parser (>= 3.0.1.1)
|
47
71
|
ruby-progressbar (1.11.0)
|
72
|
+
ruby2_keywords (0.0.5)
|
73
|
+
sinatra (2.1.0)
|
74
|
+
mustermann (~> 1.0)
|
75
|
+
rack (~> 2.2)
|
76
|
+
rack-protection (= 2.1.0)
|
77
|
+
tilt (~> 2.0)
|
78
|
+
steep (0.46.0)
|
79
|
+
activesupport (>= 5.1)
|
80
|
+
language_server-protocol (>= 3.15, < 4.0)
|
81
|
+
listen (~> 3.0)
|
82
|
+
parallel (>= 1.0.0)
|
83
|
+
parser (>= 3.0)
|
84
|
+
rainbow (>= 2.2.2, < 4.0)
|
85
|
+
rbs (>= 1.2.0)
|
86
|
+
terminal-table (>= 2, < 4)
|
87
|
+
terminal-table (3.0.2)
|
88
|
+
unicode-display_width (>= 1.1.1, < 3)
|
89
|
+
tilt (2.0.10)
|
48
90
|
timecop (0.9.4)
|
91
|
+
tzinfo (2.0.4)
|
92
|
+
concurrent-ruby (~> 1.0)
|
49
93
|
unicode-display_width (2.0.0)
|
94
|
+
webrick (1.7.0)
|
95
|
+
zeitwerk (2.4.2)
|
50
96
|
|
51
97
|
PLATFORMS
|
52
98
|
arm-linux
|
53
99
|
arm64-darwin-20
|
54
100
|
armv7l-linux
|
101
|
+
x86_64-linux
|
55
102
|
|
56
103
|
DEPENDENCIES
|
57
104
|
procon_bypass_man!
|
58
105
|
pry
|
59
106
|
rake (~> 13.0)
|
107
|
+
rbs
|
60
108
|
rspec
|
61
109
|
rubocop
|
110
|
+
sinatra
|
111
|
+
steep
|
62
112
|
timecop
|
113
|
+
webrick
|
63
114
|
|
64
115
|
BUNDLED WITH
|
65
|
-
2.2.
|
116
|
+
2.2.22
|
data/README.md
CHANGED
@@ -1,4 +1,6 @@
|
|
1
1
|
# ProconBypassMan
|
2
|
+
[](https://github.com/splaplapla/procon_bypass_man/actions/workflows/ruby.yml)
|
3
|
+
|
2
4
|
* Switchに繋いだプロコンを連射機にしたり、キーのリマップをしたり、マクロを実行できるツールです
|
3
5
|
* 設定ファイルはrubyスクリプトで記述します
|
4
6
|
* 特定のタイトルに特化した振る舞いにしたい時は各プラグインを使ってください
|
@@ -17,11 +19,11 @@ Switch <-- (PBM): ZR連打
|
|
17
19
|
* Switch本体とドック
|
18
20
|
* Raspberry Pi4 Model B/4GB(Raspberry Pi OS (32-bit))
|
19
21
|
* 他のシリーズは未確認です
|
22
|
+
* zeroは非対応
|
20
23
|
* データ通信が可能なUSBケーブル
|
21
24
|
|
22
25
|
## 使うソフトウェア
|
23
|
-
*
|
24
|
-
* ruby-3.0.x
|
26
|
+
* ruby-3.0.x
|
25
27
|
|
26
28
|
## Usage
|
27
29
|
* USBガジェットモードで起動するRaspberry Pi4を用意する
|
@@ -52,25 +54,31 @@ Switch <-- (PBM): ZR連打
|
|
52
54
|
* 操作するdeviceファイルの所有者がrootだから
|
53
55
|
|
54
56
|
## TODO
|
55
|
-
* ラズパイのプロビジョニングを楽にしたい
|
56
57
|
* レコーディング機能(プロコンの入力をマクロとして登録ができる)
|
57
58
|
* マクロにdelayを入れれるようにする
|
58
59
|
* 設定ファイル マクロの引数に、ボタンを取れるようにする
|
59
60
|
|
60
61
|
## 開発系
|
61
|
-
|
62
|
-
ProconBypassMan.tap do |pbm|
|
63
|
-
pbm.root = File.expand_path(__dir__)
|
64
|
-
pbm.logger = Logger.new("#{ProconBypassMan.root}/app.log", 5, 1024 * 1024 * 10)
|
65
|
-
pbm.logger.level = :debug
|
66
|
-
end
|
67
|
-
```
|
62
|
+
* pbmenvで生成するapp.rbに開発用ブランチを参照してください
|
68
63
|
|
69
64
|
### プロコンとの接続を維持したまま、現在の設定ファイルをPBMに反映する
|
70
65
|
```shell
|
71
66
|
sudo kill -USR2 `cat ./pbm_pid`
|
72
67
|
```
|
73
68
|
|
69
|
+
### 起動ログをサーバに送信する
|
70
|
+
* `ProconBypassMan.api_server = "http://.."` を設定すると、 `POST /api/reports` に対して起動ログを送信するようになります
|
71
|
+
|
72
|
+
### 開発環境でログの送信を確認する方法
|
73
|
+
* `bundle exec bin/report_receive_server.rb`
|
74
|
+
* `bin/console`
|
75
|
+
* `ProconBypassMan.api_server = "http://localhost:4567"`
|
76
|
+
* `message = ProconBypassMan::BootMessage.new; ProconBypassMan::Reporter.report(body: message.to_hash)"`
|
77
|
+
|
78
|
+
### リリース手順
|
79
|
+
* project_template/web.rb, project_template/app.rb, lib/procon_bypass_man/version.rb のバージョンをあげる
|
80
|
+
* be rake release
|
81
|
+
|
74
82
|
## License
|
75
83
|
|
76
84
|
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
data/Rakefile
CHANGED
data/Steepfile
ADDED
@@ -0,0 +1,39 @@
|
|
1
|
+
# D = Steep::Diagnostic
|
2
|
+
#
|
3
|
+
# target :lib do
|
4
|
+
# signature "sig"
|
5
|
+
#
|
6
|
+
# check "lib" # Directory name
|
7
|
+
# check "Gemfile" # File name
|
8
|
+
# check "app/models/**/*.rb" # Glob
|
9
|
+
# # ignore "lib/templates/*.rb"
|
10
|
+
#
|
11
|
+
# # library "pathname", "set" # Standard libraries
|
12
|
+
# # library "strong_json" # Gems
|
13
|
+
#
|
14
|
+
# # configure_code_diagnostics(D::Ruby.strict) # `strict` diagnostics setting
|
15
|
+
# # configure_code_diagnostics(D::Ruby.lenient) # `lenient` diagnostics setting
|
16
|
+
# # configure_code_diagnostics do |hash| # You can setup everything yourself
|
17
|
+
# # hash[D::Ruby::NoMethod] = :information
|
18
|
+
# # end
|
19
|
+
# end
|
20
|
+
|
21
|
+
# target :test do
|
22
|
+
# signature "sig", "sig-private"
|
23
|
+
#
|
24
|
+
# check "test"
|
25
|
+
#
|
26
|
+
# # library "pathname", "set" # Standard libraries
|
27
|
+
# end
|
28
|
+
|
29
|
+
target :lib do
|
30
|
+
check "lib/procon_bypass_man/timer.rb"
|
31
|
+
check "lib/procon_bypass_man/uptime.rb"
|
32
|
+
check "lib/procon_bypass_man/configuration.rb"
|
33
|
+
|
34
|
+
signature "sig"
|
35
|
+
|
36
|
+
library "time"
|
37
|
+
library "logger"
|
38
|
+
library "monitor"
|
39
|
+
end
|
data/docs/setup_raspi.md
CHANGED
@@ -13,7 +13,7 @@
|
|
13
13
|
* /etc/dphys-swapfile を CONF_SWAPSIZE=1024 にする
|
14
14
|
* sudo /etc/init.d/dphys-swapfile restart && swapon -s
|
15
15
|
* tailscale をインストールする(optional)
|
16
|
-
* sudo apt-get install vim rbenv
|
16
|
+
* sudo apt-get install vim rbenv git -y
|
17
17
|
* rbenvでrubyを入れる
|
18
18
|
* git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build
|
19
19
|
* rbenv install 3.0.1
|
@@ -22,20 +22,25 @@
|
|
22
22
|
* sshkeyを作成する
|
23
23
|
* github に鍵を登録する
|
24
24
|
* ~/.ssh/authorized_keys に鍵を登録する
|
25
|
-
* sudo pip3 install fluent-logger pytz
|
26
25
|
* ガジェットモードで起動する
|
27
26
|
* /boot/config.txtに、dtoverlay=dwc2を追記
|
28
|
-
|
29
|
-
|
30
|
-
|
27
|
+
* echo "dwc2" | sudo tee -a /etc/modules
|
28
|
+
* echo "libcomposite" | sudo tee -a /etc/modules
|
29
|
+
* sudo cat /etc/modules
|
31
30
|
* cd ~ && wget https://gist.githubusercontent.com/jiikko/3f9fb3194c0cc7685e31fbfcb5b5f9ff/raw/23ddee29d94350be80b79d290ac3c8ce8400bd88/add_procon_gadget.sh
|
32
31
|
* chmod 755 ~/add_procon_gadget.sh
|
33
32
|
* sudo reboot
|
34
33
|
* sudo sh ~/add_procon_gadget.sh の実行に成功させる
|
35
34
|
* /etc/rc.local に sh /home/pi/add_procon_gadget.sh って書く
|
36
|
-
* cd ~ && mkdir -p src && cd ~/src && git clone https://github.com/jiikko/procon_bypass_man_sample && cd
|
35
|
+
* cd ~ && mkdir -p src && cd ~/src && git clone https://github.com/jiikko/procon_bypass_man_sample && cd procon_bypass_man_sample
|
37
36
|
|
38
|
-
おわり. 起動する時は都度sudo ruby app.rb を実行する
|
37
|
+
おわり. 起動する時は都度 sudo ruby app.rb を実行する
|
39
38
|
|
40
39
|
## 参考
|
41
40
|
* https://mtosak-tech.hatenablog.jp/entry/2020/08/22/114622
|
41
|
+
|
42
|
+
# TIPS
|
43
|
+
* SDカードにイメージを焼くときは、ImagerのAdvanced Optionsを使うとセットアップが楽になる
|
44
|
+
* raspios_liteにした方が起動が早くなりそう
|
45
|
+
* https://qiita.com/Liesegang/items/dcdc669f80d1bf721c21
|
46
|
+
* http://ftp.jaist.ac.jp/pub/raspberrypi/raspios_lite_armhf
|
@@ -0,0 +1,60 @@
|
|
1
|
+
run_command "apt-get update"
|
2
|
+
|
3
|
+
package 'ruby' do
|
4
|
+
action :install
|
5
|
+
end
|
6
|
+
|
7
|
+
package 'vim' do
|
8
|
+
action :install
|
9
|
+
end
|
10
|
+
|
11
|
+
package 'git' do
|
12
|
+
action :install
|
13
|
+
end
|
14
|
+
|
15
|
+
gem_package 'bundler' do
|
16
|
+
action :install
|
17
|
+
end
|
18
|
+
|
19
|
+
# OTG
|
20
|
+
execute "append dtoverlay=dwc2 to /boot/config.txt" do
|
21
|
+
not_if "grep dtoverlay=dwc2 /boot/config.txt"
|
22
|
+
command "echo 'dtoverlay=dwc2' >> /boot/config.txt"
|
23
|
+
end
|
24
|
+
|
25
|
+
execute "append dwc2 to /etc/modules" do
|
26
|
+
not_if "grep dwc2 /etc/modules"
|
27
|
+
command "echo dwc2 >> /etc/modules"
|
28
|
+
end
|
29
|
+
|
30
|
+
execute "append libcomposite to /etc/modules" do
|
31
|
+
not_if "grep libcomposite /etc/modules"
|
32
|
+
command "echo libcomposite >> /etc/modules"
|
33
|
+
end
|
34
|
+
|
35
|
+
# PBM
|
36
|
+
execute "Initialize PBM" do
|
37
|
+
command <<~SHELL
|
38
|
+
sudo mkdir -p /usr/share/pbm/shared
|
39
|
+
wget https://gist.githubusercontent.com/jiikko/3f9fb3194c0cc7685e31fbfcb5b5f9ff/raw/23ddee29d94350be80b79d290ac3c8ce8400bd88/add_procon_gadget.sh -O /usr/share/pbm/shared/add_procon_gadget.sh
|
40
|
+
chmod +x /usr/share/pbm/shared/add_procon_gadget.sh
|
41
|
+
SHELL
|
42
|
+
end
|
43
|
+
|
44
|
+
# rbenv
|
45
|
+
execute "Install rbenv" do
|
46
|
+
not_if "which rbenv"
|
47
|
+
command "git clone https://github.com/rbenv/ruby-build.git "$(rbenv root)"/plugins/ruby-build"
|
48
|
+
end
|
49
|
+
|
50
|
+
# ruby
|
51
|
+
execute "Install ruby" do
|
52
|
+
not_if "rbenv versions | grep 3.0.1"
|
53
|
+
command "rbenv install 3.0.1"
|
54
|
+
end
|
55
|
+
|
56
|
+
run_command 'sudo systemctl disable triggerhappy.socket'
|
57
|
+
run_command 'sudo systemctl disable triggerhappy.service'
|
58
|
+
run_command 'sudo systemctl disable bluetooth'
|
59
|
+
run_command 'sudo systemctl disable apt-daily-upgrade.timer'
|
60
|
+
run_command 'sudo systemctl disable apt-daily.timer'
|
@@ -0,0 +1,14 @@
|
|
1
|
+
# Raspberry Pi4のセットアップ手順 With mitamae
|
2
|
+
* SDカードにRaspberry Pi OS lite (32-bit)を焼く
|
3
|
+
* sshをできる状態で焼いておく
|
4
|
+
* SDカードをRaspberry Pi4本体に挿して起動する
|
5
|
+
* sshする
|
6
|
+
* curl -L https://github.com/itamae-kitchen/mitamae/releases/latest/download/mitamae-armhf-linux.tar.gz | tar xvz
|
7
|
+
* wget https://raw.githubusercontent.com/splaplapla/procon_bypass_man/master/docs/setup_raspi.mitamae.rb -O setup_raspi.mitamae.rb
|
8
|
+
* sudo ./mitamae-armhf-linux local setup_raspi.mitamae.rb -l debug
|
9
|
+
* sudo reboot
|
10
|
+
* sudo sh /usr/share/pbm/shared/add_procon_gadget.sh の実行に成功させる
|
11
|
+
* /etc/rc.local に sh /usr/share/pbm/shared/add_procon_gadget.sh って書く
|
12
|
+
* PCとRaspberry Pi4を接続し、プロコンとして認識していることを確認する
|
13
|
+
* sudo gem i pbmenv
|
14
|
+
* sudo pbmenv install latest
|
@@ -0,0 +1,40 @@
|
|
1
|
+
class ProconBypassMan::BootMessage
|
2
|
+
def initialize
|
3
|
+
@table = {}
|
4
|
+
@table[:ruby_version] = RUBY_VERSION
|
5
|
+
@table[:pbm_version] = ProconBypassMan::VERSION
|
6
|
+
@table[:pid] = $$
|
7
|
+
@table[:root_path] = ProconBypassMan.root
|
8
|
+
@table[:pid_path] = ProconBypassMan.pid_path
|
9
|
+
@table[:setting_path] = ProconBypassMan::ButtonsSettingConfiguration.instance.setting_path
|
10
|
+
@table[:uptime_from_boot] = ProconBypassMan::Uptime.from_boot
|
11
|
+
|
12
|
+
build_version = `git rev-parse --short HEAD`.chomp
|
13
|
+
if build_version.empty?
|
14
|
+
@table[:build_version] = 'release version'
|
15
|
+
else
|
16
|
+
@table[:build_version] = build_version
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
# @return [String]
|
21
|
+
def to_s
|
22
|
+
booted_message = <<~EOF
|
23
|
+
----
|
24
|
+
RUBY_VERSION: #{@table[:ruby_version]}
|
25
|
+
ProconBypassMan: #{@table[:pbm_version]}
|
26
|
+
pid: #{@table[:pid]}
|
27
|
+
root: #{@table[:root_path]}
|
28
|
+
pid_path: #{@table[:pid_path]}
|
29
|
+
setting_path: #{@table[:setting_path]}
|
30
|
+
uptime from boot: #{@table[:uptime_from_boot]} sec
|
31
|
+
build version: #{@table[:build_version]}
|
32
|
+
----
|
33
|
+
EOF
|
34
|
+
end
|
35
|
+
|
36
|
+
# @return [Hash]
|
37
|
+
def to_hash
|
38
|
+
@table
|
39
|
+
end
|
40
|
+
end
|
@@ -0,0 +1,100 @@
|
|
1
|
+
require "procon_bypass_man/configuration/validator"
|
2
|
+
require "procon_bypass_man/configuration/loader"
|
3
|
+
require "procon_bypass_man/configuration/layer"
|
4
|
+
|
5
|
+
module ProconBypassMan
|
6
|
+
class ButtonsSettingConfiguration
|
7
|
+
attr_accessor :layers,
|
8
|
+
:setting_path,
|
9
|
+
:mode_plugins,
|
10
|
+
:macro_plugins,
|
11
|
+
:context,
|
12
|
+
:current_context_key,
|
13
|
+
:neutral_position
|
14
|
+
|
15
|
+
def self.instance
|
16
|
+
@@current_context_key ||= :main
|
17
|
+
@@context ||= {}
|
18
|
+
@@context[@@current_context_key] ||= new
|
19
|
+
end
|
20
|
+
|
21
|
+
def self.switch_new_context(key)
|
22
|
+
@@context[key] = new
|
23
|
+
previous_key = @@current_context_key
|
24
|
+
if block_given?
|
25
|
+
@@current_context_key = key
|
26
|
+
value = yield(@@context[key])
|
27
|
+
@@current_context_key = previous_key
|
28
|
+
return value
|
29
|
+
else
|
30
|
+
@@current_context_key = key
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def initialize
|
35
|
+
reset!
|
36
|
+
end
|
37
|
+
|
38
|
+
module ManualMode
|
39
|
+
def self.name
|
40
|
+
'manual'
|
41
|
+
end
|
42
|
+
end
|
43
|
+
MODES = [:manual]
|
44
|
+
def layer(direction, mode: ManualMode, &block)
|
45
|
+
mode_name = case mode
|
46
|
+
when String
|
47
|
+
mode.to_sym
|
48
|
+
when Symbol
|
49
|
+
mode
|
50
|
+
else
|
51
|
+
mode.name.to_sym
|
52
|
+
end
|
53
|
+
unless (MODES + ProconBypassMan::Procon::ModeRegistry.plugins.keys).include?(mode_name)
|
54
|
+
raise("#{mode_name} mode is unknown")
|
55
|
+
end
|
56
|
+
|
57
|
+
layer = Layer.new(mode: mode_name)
|
58
|
+
layer.instance_eval(&block) if block_given?
|
59
|
+
self.layers[direction] = layer
|
60
|
+
self
|
61
|
+
end
|
62
|
+
|
63
|
+
def install_mode_plugin(klass)
|
64
|
+
ProconBypassMan::Procon::ModeRegistry.install_plugin(klass)
|
65
|
+
self
|
66
|
+
end
|
67
|
+
|
68
|
+
def install_macro_plugin(klass)
|
69
|
+
ProconBypassMan::Procon::MacroRegistry.install_plugin(klass)
|
70
|
+
self
|
71
|
+
end
|
72
|
+
|
73
|
+
def prefix_keys_for_changing_layer(buttons)
|
74
|
+
@prefix_keys_for_changing_layer = buttons
|
75
|
+
self
|
76
|
+
end
|
77
|
+
|
78
|
+
def set_neutral_position(x, y)
|
79
|
+
self.neutral_position = AnalogStickPosition.new(x: x, y: y)
|
80
|
+
self
|
81
|
+
end
|
82
|
+
|
83
|
+
def prefix_keys
|
84
|
+
@prefix_keys_for_changing_layer
|
85
|
+
end
|
86
|
+
|
87
|
+
def reset!
|
88
|
+
@prefix_keys_for_changing_layer = []
|
89
|
+
self.mode_plugins = {}
|
90
|
+
self.macro_plugins = {}
|
91
|
+
self.layers = {
|
92
|
+
up: Layer.new,
|
93
|
+
down: Layer.new,
|
94
|
+
left: Layer.new,
|
95
|
+
right: Layer.new,
|
96
|
+
}
|
97
|
+
@neutral_position = AnalogStickPosition.new(x: 2124, y: 1808)
|
98
|
+
end
|
99
|
+
end
|
100
|
+
end
|