procon_bypass_man 0.1.17 → 0.1.20

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.
Files changed (43) hide show
  1. checksums.yaml +4 -4
  2. data/.circleci/config.yml +85 -11
  3. data/.rubocop.yml +2 -0
  4. data/CHANGELOG.md +22 -1
  5. data/Gemfile.lock +4 -3
  6. data/README.md +19 -20
  7. data/docs/getting_started.md +88 -0
  8. data/docs/setting/splatoon2_macro_sokuwari_bubble.md +52 -0
  9. data/docs/setting/splatoon2_recommended_setting.md +127 -0
  10. data/docs/upgrade_pbm.md +56 -0
  11. data/lib/ext/module.rb +16 -0
  12. data/lib/procon_bypass_man/background/jobs/report_error_reload_config_job.rb +11 -0
  13. data/lib/procon_bypass_man/background/jobs/report_start_reboot_job.rb +10 -0
  14. data/lib/procon_bypass_man/background.rb +2 -0
  15. data/lib/procon_bypass_man/buttons_setting_configuration/loader.rb +24 -3
  16. data/lib/procon_bypass_man/buttons_setting_configuration/validator.rb +12 -2
  17. data/lib/procon_bypass_man/buttons_setting_configuration.rb +9 -9
  18. data/lib/procon_bypass_man/bypass.rb +9 -8
  19. data/lib/procon_bypass_man/commands/bypass_command.rb +4 -11
  20. data/lib/procon_bypass_man/commands/connect_device_command.rb +23 -11
  21. data/lib/procon_bypass_man/configuration.rb +15 -1
  22. data/lib/procon_bypass_man/device_connector.rb +6 -33
  23. data/lib/procon_bypass_man/device_procon_finder.rb +65 -0
  24. data/lib/procon_bypass_man/never_exit_accidentally.rb +12 -0
  25. data/lib/procon_bypass_man/plugin/splatoon2/macro/sokuwari_for_splash_bomb.rb +22 -0
  26. data/lib/procon_bypass_man/plugins.rb +1 -0
  27. data/lib/procon_bypass_man/procon/button.rb +1 -1
  28. data/lib/procon_bypass_man/procon/macro.rb +89 -0
  29. data/lib/procon_bypass_man/procon/macro_builder.rb +123 -0
  30. data/lib/procon_bypass_man/procon/macro_registry.rb +2 -23
  31. data/lib/procon_bypass_man/procon/user_operation.rb +16 -2
  32. data/lib/procon_bypass_man/procon.rb +2 -0
  33. data/lib/procon_bypass_man/remote_pbm_action/reboot_os_action.rb +1 -0
  34. data/lib/procon_bypass_man/remote_pbm_action/restore_pbm_setting.rb +9 -2
  35. data/lib/procon_bypass_man/runner.rb +7 -7
  36. data/lib/procon_bypass_man/support/yaml_writer.rb +16 -0
  37. data/lib/procon_bypass_man/version.rb +1 -1
  38. data/lib/procon_bypass_man.rb +25 -24
  39. data/procon_bypass_man.gemspec +1 -1
  40. data/project_template/app.rb +5 -2
  41. data/project_template/setting.yml +6 -22
  42. data/sig/main.rbs +5 -0
  43. metadata +17 -4
@@ -1,25 +1,4 @@
1
1
  class ProconBypassMan::Procon::MacroRegistry
2
- class Macro
3
- attr_accessor :name, :steps
4
-
5
- def initialize(name: , steps: )
6
- self.name = name
7
- self.steps = steps
8
- end
9
-
10
- def next_step
11
- steps.shift
12
- end
13
-
14
- def finished?
15
- steps.empty?
16
- end
17
-
18
- def ongoing?
19
- !finished?
20
- end
21
- end
22
-
23
2
  PRESETS = {
24
3
  null: [],
25
4
  }
@@ -30,13 +9,13 @@ class ProconBypassMan::Procon::MacroRegistry
30
9
  end
31
10
 
32
11
  plugins[klass.to_s.to_sym] = ->{
33
- ProconBypassMan::Procon::ButtonCollection.normalize(steps || klass.steps)
12
+ ProconBypassMan::Procon::MacroBuilder.new(steps || klass.steps).build
34
13
  }
35
14
  end
36
15
 
37
16
  def self.load(name)
38
17
  steps = PRESETS[name] || plugins[name].call || raise("unknown macro")
39
- Macro.new(name: name, steps: steps.dup)
18
+ ProconBypassMan::Procon::Macro.new(name: name, steps: steps.dup)
40
19
  end
41
20
 
42
21
  def self.reset!
@@ -33,9 +33,23 @@ class ProconBypassMan::Procon::UserOperation
33
33
  binary.write_as_press_button(button)
34
34
  end
35
35
 
36
- # @param [Symbol] button
36
+ # @param [Symbol, Array<Symbol>] button
37
37
  def press_button_only(button)
38
- binary.write_as_press_button_only(button)
38
+ if button.is_a?(Array)
39
+ binary.set_no_action!
40
+ button.uniq.each do |b|
41
+ unless ProconBypassMan::Procon::MacroBuilder::RESERVED_WORD_NONE == b
42
+ binary.write_as_press_button(b)
43
+ end
44
+ end
45
+ return
46
+ end
47
+
48
+ if ProconBypassMan::Procon::MacroBuilder::RESERVED_WORD_NONE == button
49
+ binary.set_no_action!
50
+ else
51
+ binary.write_as_press_button_only(button)
52
+ end
39
53
  end
40
54
 
41
55
  # @return [void]
@@ -1,7 +1,9 @@
1
1
  class ProconBypassMan::Procon
2
2
  require "procon_bypass_man/procon/consts"
3
3
  require "procon_bypass_man/procon/mode_registry"
4
+ require "procon_bypass_man/procon/macro"
4
5
  require "procon_bypass_man/procon/macro_registry"
6
+ require "procon_bypass_man/procon/macro_builder"
5
7
  require "procon_bypass_man/procon/layer_changer"
6
8
  require "procon_bypass_man/procon/button_collection"
7
9
  require "procon_bypass_man/procon/user_operation"
@@ -10,6 +10,7 @@ module ProconBypassMan
10
10
  private
11
11
 
12
12
  def before_action_callback
13
+ ProconBypassMan::ReportStartRebootJob.perform
13
14
  be_processed
14
15
  end
15
16
 
@@ -6,9 +6,16 @@ module ProconBypassMan
6
6
  require "pbmenv"
7
7
  ProconBypassMan.logger.info "execute RestorePbmSettingAction!"
8
8
  setting = args.dig("setting") or raise(ProconBypassMan::RemotePbmAction::NeedPbmVersionError, "settingが必要です, #{args.inspect}")
9
- File.write(
9
+
10
+ # 復元に失敗したら戻せるように退避する
11
+ FileUtils.copy(
10
12
  ProconBypassMan::ButtonsSettingConfiguration.instance.setting_path,
11
- setting.to_yaml,
13
+ ProconBypassMan.fallback_setting_path,
14
+ )
15
+
16
+ ProconBypassMan::YamlWriter.write(
17
+ path: ProconBypassMan::ButtonsSettingConfiguration.instance.setting_path,
18
+ content: setting,
12
19
  )
13
20
  ProconBypassMan.hot_reload!
14
21
  end
@@ -27,7 +27,7 @@ class ProconBypassMan::Runner
27
27
  loop do
28
28
  $will_terminate_token = false
29
29
  # NOTE メインプロセスではThreadをいくつか起動しているので念のためパフォーマンスを優先するためにforkしていく
30
- main_loop_pid = Kernel.fork { ProconBypassMan::BypassCommand.new(gadget: @gadget, procon: @procon).execute }
30
+ child_pid = Kernel.fork { ProconBypassMan::BypassCommand.new(gadget: @gadget, procon: @procon).execute }
31
31
 
32
32
  begin
33
33
  # TODO 小プロセスが消滅した時に、メインプロセスは生き続けてしまい、何もできなくなる問題がある
@@ -37,25 +37,25 @@ class ProconBypassMan::Runner
37
37
  end
38
38
  rescue InterruptForRestart
39
39
  $will_terminate_token = true
40
- Process.kill("TERM", main_loop_pid)
40
+ Process.kill("TERM", child_pid)
41
41
  Process.wait
42
42
  ProconBypassMan::PrintMessageCommand.execute(text: "Reloading config file")
43
43
  begin
44
44
  ProconBypassMan::ButtonsSettingConfiguration::Loader.reload_setting
45
45
  ProconBypassMan::SendReloadConfigEventCommand.execute
46
- rescue ProconBypassMan::CouldNotLoadConfigError
46
+ rescue ProconBypassMan::CouldNotLoadConfigError => error
47
47
  ProconBypassMan::SendErrorCommand.execute(error: "設定ファイルが不正です。再読み込みができませんでした")
48
+ ProconBypassMan::ReportErrorReloadConfigJob.perform_async(error.message)
48
49
  end
49
50
  ProconBypassMan::PrintMessageCommand.execute(text: "バイパス処理を再開します")
50
51
  rescue Interrupt
51
52
  $will_terminate_token = true
52
- Process.kill("TERM", main_loop_pid)
53
+ Process.kill("TERM", child_pid)
53
54
  Process.wait
55
+ ProconBypassMan::PrintMessageCommand.execute(text: "処理を終了します")
54
56
  @gadget&.close
55
57
  @procon&.close
56
- FileUtils.rm_rf(ProconBypassMan.pid_path)
57
- FileUtils.rm_rf(ProconBypassMan.digest_path)
58
- exit 1
58
+ break
59
59
  end
60
60
  end
61
61
  end
@@ -0,0 +1,16 @@
1
+ class ProconBypassMan::YamlWriter
2
+ # @return [void]
3
+ def self.write(path: , content: )
4
+ File.write(
5
+ path,
6
+ content.transform_values { |x|
7
+ case x
8
+ when String
9
+ x.gsub("\r\n", "\n")
10
+ else
11
+ x
12
+ end
13
+ }.to_yaml
14
+ )
15
+ end
16
+ end
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module ProconBypassMan
4
- VERSION = "0.1.17"
4
+ VERSION = "0.1.20"
5
5
  end
@@ -7,11 +7,13 @@ require "securerandom"
7
7
  require 'em/pure_ruby'
8
8
  require "action_cable_client"
9
9
  require "ext/em_pure_ruby"
10
+ require "ext/module"
10
11
 
11
12
  require_relative "procon_bypass_man/version"
12
13
  require_relative "procon_bypass_man/remote_pbm_action"
13
14
  require_relative "procon_bypass_man/support/signal_handler"
14
15
  require_relative "procon_bypass_man/support/callbacks"
16
+ require_relative "procon_bypass_man/support/yaml_writer"
15
17
  require_relative "procon_bypass_man/support/safe_timeout"
16
18
  require_relative "procon_bypass_man/support/compress_array"
17
19
  require_relative "procon_bypass_man/support/uptime"
@@ -25,7 +27,9 @@ require_relative "procon_bypass_man/background"
25
27
  require_relative "procon_bypass_man/commands"
26
28
  require_relative "procon_bypass_man/bypass"
27
29
  require_relative "procon_bypass_man/domains"
30
+ require_relative "procon_bypass_man/never_exit_accidentally"
28
31
  require_relative "procon_bypass_man/device_connector"
32
+ require_relative "procon_bypass_man/device_procon_finder"
29
33
  require_relative "procon_bypass_man/device_status"
30
34
  require_relative "procon_bypass_man/runner"
31
35
  require_relative "procon_bypass_man/processor"
@@ -44,25 +48,13 @@ require_relative "procon_bypass_man/websocket/pbm_job_client"
44
48
  STDOUT.sync = true
45
49
  Thread.abort_on_exception = true
46
50
 
47
- # pluginの定数を握りつぶす
48
- class Module
49
- def const_missing(id)
50
- if self.name =~ /^ProconBypassMan::Plugin/
51
- parent_const = Object.const_get("#{self.name}")
52
- parent_const.const_set(id, Module.new)
53
- Object.const_get("#{self.name}::#{id}")
54
- else
55
- super
56
- end
57
- end
58
- end
59
-
60
51
  module ProconBypassMan
61
52
  extend ProconBypassMan::Configuration::ClassMethods
53
+ extend ProconBypassMan::NeverExitAccidentally
62
54
 
63
55
  class CouldNotLoadConfigError < StandardError; end
64
- class NotFoundProconError < StandardError; end
65
56
  class ConnectionError < StandardError; end
57
+ class NotFoundRequiredFilesError < StandardError; end
66
58
  class FirstConnectionError < ConnectionError; end
67
59
  class EternalConnectionError < ConnectionError; end
68
60
 
@@ -73,22 +65,31 @@ module ProconBypassMan
73
65
  ProconBypassMan::Websocket::PbmJobClient.start!
74
66
 
75
67
  ProconBypassMan::PrintMessageCommand.execute(text: "PBMを起動しています")
76
- ProconBypassMan::ButtonsSettingConfiguration::Loader.load(setting_path: setting_path)
77
68
  initialize_pbm
69
+ ProconBypassMan::ButtonsSettingConfiguration::Loader.load(setting_path: setting_path)
78
70
  gadget, procon = ProconBypassMan::ConnectDeviceCommand.execute!
79
- Runner.new(gadget: gadget, procon: procon).run
80
- rescue ProconBypassMan::CouldNotLoadConfigError
81
- ProconBypassMan::SendErrorCommand.execute(error: "設定ファイルが不正です。設定ファイルの読み込みに失敗しました")
82
- ProconBypassMan::DeviceStatus.change_to_setting_syntax_error_and_shutdown!
71
+ Runner.new(gadget: gadget, procon: procon).run # ここでblockingする
83
72
  FileUtils.rm_rf(ProconBypassMan.pid_path)
84
73
  FileUtils.rm_rf(ProconBypassMan.digest_path)
85
- exit 1
86
- rescue ProconBypassMan::NotFoundProconError
87
- ProconBypassMan::SendErrorCommand.execute(error: "プロコンが見つかりませんでした。終了します。")
88
- ProconBypassMan::DeviceStatus.change_to_procon_not_found_error!
74
+ rescue ProconBypassMan::NotFoundRequiredFilesError
75
+ ProconBypassMan::SendErrorCommand.execute(error: "/sys/kernel/config/usb_gadget/proconディレクトリがありませんでした。処理を終了します。")
89
76
  FileUtils.rm_rf(ProconBypassMan.pid_path)
90
77
  FileUtils.rm_rf(ProconBypassMan.digest_path)
91
- exit 1
78
+ exit 1 # 前提条件を満たしていないので絶対に落とす
79
+ rescue ProconBypassMan::CouldNotLoadConfigError
80
+ ProconBypassMan::SendErrorCommand.execute(error: "設定ファイルが不正です。設定ファイルの読み込みに失敗しました")
81
+ ProconBypassMan::DeviceStatus.change_to_setting_syntax_error_and_shutdown!
82
+ ProconBypassMan.exit_if_allow(1) do
83
+ FileUtils.rm_rf(ProconBypassMan.pid_path)
84
+ FileUtils.rm_rf(ProconBypassMan.digest_path)
85
+ end
86
+ rescue ProconBypassMan::ConnectDeviceCommand::NotFoundProconError
87
+ ProconBypassMan::SendErrorCommand.execute(error: "プロコンが見つかりませんでした。")
88
+ ProconBypassMan::DeviceStatus.change_to_procon_not_found_error!
89
+ ProconBypassMan.exit_if_allow(1) do
90
+ FileUtils.rm_rf(ProconBypassMan.pid_path)
91
+ FileUtils.rm_rf(ProconBypassMan.digest_path)
92
+ end
92
93
  rescue ProconBypassMan::ConnectionError
93
94
  begin
94
95
  raise
@@ -8,7 +8,7 @@ Gem::Specification.new do |spec|
8
8
  spec.authors = ["jiikko"]
9
9
  spec.email = ["n905i.1214@gmail.com"]
10
10
 
11
- spec.summary = "An extension for Nintendo Switch Pro Controller"
11
+ spec.summary = "A programmable converter for Nintendo Switch Pro Controller"
12
12
  spec.description = spec.summary
13
13
  spec.homepage = "https://github.com/splaplapla/procon_bypass_man"
14
14
  spec.license = "MIT"
@@ -5,15 +5,18 @@ require 'bundler/inline'
5
5
  gemfile do
6
6
  source 'https://rubygems.org'
7
7
  git_source(:github) {|repo_name| "https://github.com/#{repo_name}" }
8
- gem 'procon_bypass_man', '0.1.17'
8
+ gem 'procon_bypass_man', '0.1.20'
9
9
  end
10
10
 
11
11
  ProconBypassMan.configure do |config|
12
12
  config.root = File.expand_path(__dir__)
13
13
  config.logger = Logger.new("#{ProconBypassMan.root}/app.log", 5, 1024 * 1024 * 10)
14
14
  config.logger.level = :debug
15
- # config.api_servers = ['https://...']
15
+ # webからProconBypassManを操作できるwebサービス
16
+ # config.api_servers = ['https://pbm-cloud.herokuapp.com']
16
17
  config.enable_critical_error_logging = true
18
+ # pbm-cloudで使う場合はnever_exitにtrueをセットしてください. trueがセットされている場合、不慮の事故が発生してもプロセスが終了しなくなります
19
+ config.never_exit_accidentally = true
17
20
  end
18
21
 
19
22
  ProconBypassMan.run(setting_path: "/usr/share/pbm/current/setting.yml")
@@ -1,35 +1,19 @@
1
1
  version: 1.0
2
2
  setting: |-
3
- fast_return = ProconBypassMan::Plugin::Splatoon2::Macro::FastReturn
4
- guruguru = ProconBypassMan::Plugin::Splatoon2::Mode::Guruguru
5
-
6
- install_macro_plugin fast_return
7
- install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToUpKey
8
- install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToRightKey
9
- install_macro_plugin ProconBypassMan::Plugin::Splatoon2::Macro::JumpToLeftKey
10
- install_mode_plugin guruguru
11
-
12
3
  prefix_keys_for_changing_layer [:zr, :zl, :l]
13
4
 
14
- layer :up, mode: :manual do
15
- # flip :zr, if_pressed: :zr, force_neutral: :zl
5
+ layer :up do
16
6
  flip :zr, if_pressed: :zr, force_neutral: :zl
17
- flip :zl, if_pressed: [:y, :b, :zl]
18
7
  flip :a, if_pressed: [:a]
19
8
  flip :down, if_pressed: :down
20
- macro fast_return.name, if_pressed: [:y, :b, :down]
21
- macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToUpKey, if_pressed: [:y, :b, :up]
22
- macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToRightKey, if_pressed: [:y, :b, :right]
23
- macro ProconBypassMan::Plugin::Splatoon2::Macro::JumpToLeftKey, if_pressed: [:y, :b, :left]
24
9
  remap :l, to: :zr
25
10
  end
26
- layer :right, mode: guruguru.name
11
+
12
+ layer :right do
13
+ end
14
+
27
15
  layer :left do
28
- # flip :zr, if_pressed: :zr, force_neutral: :zl
29
- remap :l, to: :zr
30
16
  end
17
+
31
18
  layer :down do
32
- # flip :zl
33
- # flip :zr, if_pressed: :zr, force_neutral: :zl, flip_interval: "1F"
34
- remap :l, to: :zr
35
19
  end
data/sig/main.rbs CHANGED
@@ -185,10 +185,13 @@ class ProconBypassMan::Configuration
185
185
  def cache: () -> ProconBypassMan::OnMemoryCache
186
186
 
187
187
  def config: () -> ProconBypassMan::Configuration
188
+
189
+ def never_exit_accidentally: () -> bool
188
190
  end
189
191
 
190
192
  attr_reader api_server: untyped
191
193
  attr_reader api_servers: untyped
194
+ attr_writer never_exit_accidentally: bool
192
195
 
193
196
  attr_accessor enable_critical_error_logging: bool
194
197
 
@@ -226,6 +229,8 @@ class ProconBypassMan::Configuration
226
229
  def raw_setting: () -> untyped
227
230
 
228
231
  def verbose_bypass_log: () -> bool
232
+
233
+ def never_exit_accidentally: () -> bool
229
234
  end
230
235
 
231
236
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: procon_bypass_man
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.17
4
+ version: 0.1.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - jiikko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2022-01-26 00:00:00.000000000 Z
11
+ date: 2022-02-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pbmenv
@@ -52,7 +52,7 @@ dependencies:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
54
  version: '0'
55
- description: An extension for Nintendo Switch Pro Controller
55
+ description: A programmable converter for Nintendo Switch Pro Controller
56
56
  email:
57
57
  - n905i.1214@gmail.com
58
58
  executables: []
@@ -76,12 +76,17 @@ files:
76
76
  - bin/console
77
77
  - bin/dev_api_server.rb
78
78
  - bin/setup
79
+ - docs/getting_started.md
79
80
  - docs/how_to_connect_procon.md
80
81
  - docs/setting/left-analogstick-cap.md
82
+ - docs/setting/splatoon2_macro_sokuwari_bubble.md
83
+ - docs/setting/splatoon2_recommended_setting.md
81
84
  - docs/setup_raspi.md
82
85
  - docs/setup_raspi.mitamae.rb
83
86
  - docs/setup_raspi_by_mitamae.md
87
+ - docs/upgrade_pbm.md
84
88
  - lib/ext/em_pure_ruby.rb
89
+ - lib/ext/module.rb
85
90
  - lib/procon_bypass_man.rb
86
91
  - lib/procon_bypass_man/background.rb
87
92
  - lib/procon_bypass_man/background/job_performer.rb
@@ -92,10 +97,12 @@ files:
92
97
  - lib/procon_bypass_man/background/jobs/concerns/job_runnable.rb
93
98
  - lib/procon_bypass_man/background/jobs/report_boot_job.rb
94
99
  - lib/procon_bypass_man/background/jobs/report_error_job.rb
100
+ - lib/procon_bypass_man/background/jobs/report_error_reload_config_job.rb
95
101
  - lib/procon_bypass_man/background/jobs/report_event_base_job.rb
96
102
  - lib/procon_bypass_man/background/jobs/report_load_config_job.rb
97
103
  - lib/procon_bypass_man/background/jobs/report_pressed_buttons_job.rb
98
104
  - lib/procon_bypass_man/background/jobs/report_reload_config_job.rb
105
+ - lib/procon_bypass_man/background/jobs/report_start_reboot_job.rb
99
106
  - lib/procon_bypass_man/background/jobs/sync_device_stats_job.rb
100
107
  - lib/procon_bypass_man/buttons_setting_configuration.rb
101
108
  - lib/procon_bypass_man/buttons_setting_configuration/layer.rb
@@ -115,6 +122,7 @@ files:
115
122
  - lib/procon_bypass_man/commands/write_session_id_command.rb
116
123
  - lib/procon_bypass_man/configuration.rb
117
124
  - lib/procon_bypass_man/device_connector.rb
125
+ - lib/procon_bypass_man/device_procon_finder.rb
118
126
  - lib/procon_bypass_man/device_status.rb
119
127
  - lib/procon_bypass_man/domains.rb
120
128
  - lib/procon_bypass_man/domains/binary/base.rb
@@ -123,10 +131,12 @@ files:
123
131
  - lib/procon_bypass_man/domains/binary/inbound_procon_binary.rb
124
132
  - lib/procon_bypass_man/domains/binary/processing_procon_binary.rb
125
133
  - lib/procon_bypass_man/io_monitor.rb
134
+ - lib/procon_bypass_man/never_exit_accidentally.rb
126
135
  - lib/procon_bypass_man/plugin/splatoon2/macro/fast_return.rb
127
136
  - lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_left_key.rb
128
137
  - lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_right_key.rb
129
138
  - lib/procon_bypass_man/plugin/splatoon2/macro/jump_to_up_key.rb
139
+ - lib/procon_bypass_man/plugin/splatoon2/macro/sokuwari_for_splash_bomb.rb
130
140
  - lib/procon_bypass_man/plugin/splatoon2/mode/guruguru.rb
131
141
  - lib/procon_bypass_man/plugin/splatoon2/version.rb
132
142
  - lib/procon_bypass_man/plugins.rb
@@ -138,6 +148,8 @@ files:
138
148
  - lib/procon_bypass_man/procon/consts.rb
139
149
  - lib/procon_bypass_man/procon/flip_cache.rb
140
150
  - lib/procon_bypass_man/procon/layer_changer.rb
151
+ - lib/procon_bypass_man/procon/macro.rb
152
+ - lib/procon_bypass_man/procon/macro_builder.rb
141
153
  - lib/procon_bypass_man/procon/macro_registry.rb
142
154
  - lib/procon_bypass_man/procon/mode_registry.rb
143
155
  - lib/procon_bypass_man/procon/press_button_aware.rb
@@ -165,6 +177,7 @@ files:
165
177
  - lib/procon_bypass_man/support/signal_handler.rb
166
178
  - lib/procon_bypass_man/support/update_remote_pbm_action_status_http_client.rb
167
179
  - lib/procon_bypass_man/support/uptime.rb
180
+ - lib/procon_bypass_man/support/yaml_writer.rb
168
181
  - lib/procon_bypass_man/version.rb
169
182
  - lib/procon_bypass_man/websocket/pbm_job_client.rb
170
183
  - procon_bypass_man.gemspec
@@ -202,5 +215,5 @@ requirements: []
202
215
  rubygems_version: 3.2.15
203
216
  signing_key:
204
217
  specification_version: 4
205
- summary: An extension for Nintendo Switch Pro Controller
218
+ summary: A programmable converter for Nintendo Switch Pro Controller
206
219
  test_files: []