Class: Fusuma::Plugin::Inputs::RemapTouchpadInput

Inherits:
Input
  • Object
show all
Includes:
CustomProcess
Defined in:
lib/fusuma/plugin/inputs/remap_touchpad_input.rb

Overview

Get touchpad events from remapper

Defined Under Namespace

Classes: TouchpadSelector

Instance Method Summary collapse

Constructor Details

#initializeRemapTouchpadInput

Returns a new instance of RemapTouchpadInput.



20
21
22
23
# File 'lib/fusuma/plugin/inputs/remap_touchpad_input.rb', line 20

def initialize
  super
  setup_remapper
end

Instance Method Details

#config_param_typesObject



14
15
16
17
18
# File 'lib/fusuma/plugin/inputs/remap_touchpad_input.rb', line 14

def config_param_types
  {
    touchpad_name_patterns: [Array, String]
  }
end

#ioObject



25
26
27
# File 'lib/fusuma/plugin/inputs/remap_touchpad_input.rb', line 25

def io
  @fusuma_reader
end

#read_from_ioRecord

override Input#read_from_io

Returns:

  • (Record)


31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/fusuma/plugin/inputs/remap_touchpad_input.rb', line 31

def read_from_io
  @unpacker ||= MessagePack::Unpacker.new(io)
  data = @unpacker.unpack

  raise "data is not Hash : #{data}" unless data.is_a? Hash

  gesture = "touch"
  finger = data["finger"]

  # @touch_state ||= {}
  # @mt_slot ||= 0
  # @touch_state[@mt_slot] ||= {
  #   MT_TRACKING_ID: nil,
  #   X: nil,
  #   Y: nil,
  #   valid_touch_point: false
  # }
  # TODO: implement update touch_state
  status =
    if data["touch_state"].any? { |_, v| v["valid_touch_point"] }
      "begin"
    else
      "end"
    end

  Events::Records::GestureRecord.new(gesture: gesture, status: status, finger: finger, delta: nil)
rescue EOFError => e
  MultiLogger.error "#{self.class.name}: #{e}"
  MultiLogger.error "Shutdown fusuma process..."
  Process.kill("TERM", Process.pid)
end