procon_bypass_man 0.1.17 → 0.1.20

Sign up to get free protection for your applications and to get access to all the features.
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: []