rubdev 0.0.1a → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/lib/rubdev/c.rb CHANGED
@@ -19,6 +19,18 @@
19
19
 
20
20
  require 'ffi'
21
21
 
22
+ module FFI
23
+ module Library
24
+ def attach_function! (*args, &block)
25
+ begin
26
+ attach_function(*args, &block)
27
+ rescue Exception => e
28
+ false
29
+ end
30
+ end
31
+ end
32
+ end
33
+
22
34
  module RubDev
23
35
  module C
24
36
  extend FFI::Library
@@ -27,39 +39,110 @@ module RubDev
27
39
 
28
40
  FFI.typedef(:ulong, :dev_t)
29
41
 
42
+ callback :logger, [:pointer, :int, :string, :int, :string, :string, :pointer], :void
43
+
30
44
  # context {{{
45
+ attach_function :udev_ref, [:pointer], :pointer
46
+ attach_function :udev_unref, [:pointer], :void
31
47
  attach_function :udev_new, [], :pointer
48
+ attach_function :udev_set_log_fn, [:pointer, :logger], :void
49
+ attach_function :udev_get_log_priority, [:pointer], :int
50
+ attach_function :udev_set_log_priority, [:pointer, :int], :void
51
+ attach_function :udev_get_sys_path, [:pointer], :string
52
+ attach_function :udev_get_dev_path, [:pointer], :string
53
+ attach_function!:udev_get_run_path, [:pointer], :string
54
+ attach_function :udev_get_userdata, [:pointer], :pointer
55
+ attach_function :udev_set_userdata, [:pointer, :pointer], :void
32
56
  # }}}
33
57
 
34
- # monitor {{{
35
- attach_function :udev_monitor_new_from_socket, [:pointer, :string], :pointer
36
- attach_function :udev_monitor_new_from_netlink, [:pointer, :string], :pointer
37
- attach_function :udev_monitor_filter_add_match_subsystem_devtype, [:pointer, :string, :string], :int
38
- attach_function :udev_monitor_filter_add_match_tag, [:pointer, :string], :int
39
- attach_function :udev_monitor_filter_remove, [:pointer], :int
40
- attach_function :udev_monitor_enable_receiving, [:pointer], :int
41
- attach_function :udev_monitor_get_fd, [:pointer], :int
42
- attach_function :udev_monitor_receive_device, [:pointer], :pointer
43
- attach_function :udev_monitor_get_udev, [:pointer], :pointer
44
- attach_function :udev_monitor_ref, [:pointer], :void
45
- attach_function :udev_monitor_unref, [:pointer], :void
58
+ # list {{{
59
+ attach_function :udev_list_entry_get_next, [:pointer], :pointer
60
+ attach_function :udev_list_entry_get_by_name, [:pointer, :string], :pointer
61
+ attach_function :udev_list_entry_get_name, [:pointer], :string
62
+ attach_function :udev_list_entry_get_value, [:pointer], :string
46
63
  # }}}
47
64
 
48
65
  # device {{{
49
- attach_function :udev_device_get_devnode, [:pointer], :string
50
- attach_function :udev_device_get_subsystem, [:pointer], :string
51
- attach_function :udev_device_get_devtype, [:pointer], :string
52
- attach_function :udev_device_get_action, [:pointer], :string
66
+ attach_function :udev_device_ref, [:pointer], :void
67
+ attach_function :udev_device_unref, [:pointer], :void
68
+ attach_function :udev_device_get_udev, [:pointer], :pointer
69
+ attach_function :udev_device_new_from_syspath, [:pointer, :string], :pointer
70
+ attach_function :udev_device_new_from_devnum, [:pointer, :char, :dev_t], :pointer
71
+ attach_function :udev_device_new_from_subsystem_sysname, [:pointer, :string, :string], :pointer
72
+ attach_function :udev_device_new_from_environment, [:pointer], :pointer
53
73
  attach_function :udev_device_get_parent, [:pointer], :pointer
74
+ attach_function :udev_device_get_parent_with_subsystem_devtype, [:pointer, :string, :string], :pointer
54
75
  attach_function :udev_device_get_devpath, [:pointer], :string
76
+ attach_function :udev_device_get_subsystem, [:pointer], :string
77
+ attach_function :udev_device_get_devtype, [:pointer], :string
55
78
  attach_function :udev_device_get_syspath, [:pointer], :string
56
79
  attach_function :udev_device_get_sysname, [:pointer], :string
57
80
  attach_function :udev_device_get_sysnum, [:pointer], :string
81
+ attach_function :udev_device_get_devnode, [:pointer], :string
82
+ attach_function!:udev_device_get_is_initialized, [:pointer], :int
83
+ attach_function :udev_device_get_devlinks_list_entry, [:pointer], :pointer
84
+ attach_function :udev_device_get_properties_list_entry, [:pointer], :pointer
85
+ attach_function :udev_device_get_tags_list_entry, [:pointer], :pointer
86
+ attach_function :udev_device_get_property_value, [:pointer, :string], :string
58
87
  attach_function :udev_device_get_driver, [:pointer], :string
59
88
  attach_function :udev_device_get_devnum, [:pointer], :dev_t
60
- attach_function :udev_device_get_property_value, [:pointer, :string], :string
61
- attach_function :udev_device_ref, [:pointer], :void
62
- attach_function :udev_device_unref, [:pointer], :void
89
+ attach_function :udev_device_get_action, [:pointer], :string
90
+ attach_function :udev_device_get_sysattr_value, [:pointer, :string], :string
91
+ attach_function!:udev_device_get_sysattr_list_entry, [:pointer], :pointer
92
+ attach_function :udev_device_get_seqnum, [:pointer], :long_long
93
+ attach_function!:udev_device_get_usec_since_initialized, [:pointer], :long_long
94
+ attach_function!:udev_device_has_tag, [:pointer, :string], :int
95
+ # }}}
96
+
97
+ # monitor {{{
98
+ attach_function :udev_monitor_ref, [:pointer], :pointer
99
+ attach_function :udev_monitor_unref, [:pointer], :void
100
+ attach_function :udev_monitor_get_udev, [:pointer], :pointer
101
+ attach_function :udev_monitor_new_from_netlink, [:pointer, :string], :pointer
102
+ attach_function :udev_monitor_new_from_socket, [:pointer, :string], :pointer
103
+ attach_function :udev_monitor_enable_receiving, [:pointer], :int
104
+ attach_function :udev_monitor_set_receive_buffer_size, [:pointer, :int], :int
105
+ attach_function :udev_monitor_get_fd, [:pointer], :int
106
+ attach_function :udev_monitor_receive_device, [:pointer], :pointer
107
+ attach_function :udev_monitor_filter_add_match_subsystem_devtype, [:pointer, :string, :string], :int
108
+ attach_function :udev_monitor_filter_add_match_tag, [:pointer, :string], :int
109
+ attach_function :udev_monitor_filter_update, [:pointer], :int
110
+ attach_function :udev_monitor_filter_remove, [:pointer], :int
111
+ # }}}
112
+
113
+ # enumerate {{{
114
+ attach_function :udev_enumerate_ref, [:pointer], :pointer
115
+ attach_function :udev_enumerate_unref, [:pointer], :void
116
+ attach_function :udev_enumerate_get_udev, [:pointer], :pointer
117
+ attach_function :udev_enumerate_new, [:pointer], :pointer
118
+ attach_function :udev_enumerate_add_match_subsystem, [:pointer, :string], :int
119
+ attach_function :udev_enumerate_add_nomatch_subsystem, [:pointer, :string], :int
120
+ attach_function :udev_enumerate_add_match_sysattr, [:pointer, :string, :string], :int
121
+ attach_function :udev_enumerate_add_nomatch_sysattr, [:pointer, :string, :string], :int
122
+ attach_function :udev_enumerate_add_match_property, [:pointer, :string, :string], :int
123
+ attach_function :udev_enumerate_add_match_tag, [:pointer, :string], :int
124
+ attach_function!:udev_enumerate_add_match_parent, [:pointer, :pointer], :int
125
+ attach_function!:udev_enumerate_add_match_is_initialized, [:pointer], :int
126
+ attach_function :udev_enumerate_add_match_sysname, [:pointer, :string], :int
127
+ attach_function :udev_enumerate_add_syspath, [:pointer, :string], :int
128
+ attach_function :udev_enumerate_scan_devices, [:pointer], :int
129
+ attach_function :udev_enumerate_scan_subsystems, [:pointer], :int
130
+ attach_function :udev_enumerate_get_list_entry, [:pointer], :pointer
131
+ # }}}
132
+
133
+ # queue {{{
134
+ attach_function :udev_queue_ref, [:pointer], :pointer
135
+ attach_function :udev_queue_unref, [:pointer], :void
136
+ attach_function :udev_queue_get_udev, [:pointer], :pointer
137
+ attach_function :udev_queue_new, [:pointer], :pointer
138
+ attach_function :udev_queue_get_udev_is_active, [:pointer], :int
139
+ attach_function :udev_queue_get_queue_is_empty, [:pointer], :int
140
+ attach_function :udev_queue_get_seqnum_is_finished, [:pointer, :ulong_long], :int
141
+ attach_function :udev_queue_get_seqnum_sequence_is_finished, [:pointer, :ulong_long, :ulong_long], :int
142
+ attach_function :udev_queue_get_queued_list_entry, [:pointer], :pointer
143
+ attach_function :udev_queue_get_failed_list_entry, [:pointer], :pointer
144
+ attach_function :udev_queue_get_kernel_seqnum, [:pointer], :ulong_long
145
+ attach_function :udev_queue_get_udev_seqnum, [:pointer], :ulong_long
63
146
  # }}}
64
147
  end
65
148
  end
@@ -25,6 +25,52 @@ module RubDev
25
25
  @pointer = RubDev::C.udev_new
26
26
  end
27
27
 
28
+ def ref
29
+ RubDev::C.udev_ref(@pointer)
30
+ self
31
+ end
32
+
33
+ def unref
34
+ RubDev::C.udev_unref(@pointer)
35
+ self
36
+ end
37
+
38
+ def log_fn= (fn)
39
+ return false unless fn.is_a?(Proc)
40
+ RubDev::C.udev_set_log_fn(@pointer, fn)
41
+ end
42
+
43
+ def log_priority
44
+ RubDev::C.udev_get_log_priority(@pointer)
45
+ end
46
+
47
+ def log_priority= (p)
48
+ return false unless p.is_a?(Integer)
49
+ RubDev::C.udev_set_log_priority(@pointer, p)
50
+ end
51
+
52
+ def sys_path
53
+ RubDev::C.udev_get_sys_path(@pointer)
54
+ end
55
+
56
+ def dev_path
57
+ RubDev::C.udev_get_dev_path(@pointer)
58
+ end
59
+
60
+ if RubDev::C.respond_to?(:udev_get_run_path)
61
+ def run_path
62
+ RubDev::C.udev_get_run_path(@pointer)
63
+ end
64
+ end
65
+
66
+ def userdata
67
+ RubDev::C.udev_get_userdata(@pointer)
68
+ end
69
+
70
+ def userdata= (data)
71
+ RubDev::C.udev_get_userdata(@pointer, data)
72
+ end
73
+
28
74
  def to_c
29
75
  @pointer
30
76
  end
data/lib/rubdev/device.rb CHANGED
@@ -18,33 +18,89 @@
18
18
  #++
19
19
 
20
20
  require 'rubdev/c'
21
+ require 'rubdev/context'
22
+ require 'rubdev/device'
23
+ require 'rubdev/list'
21
24
 
22
25
  module RubDev
23
26
  class Device
24
- class << self
25
- private :new
27
+ def ref
28
+ RubDev::C.udev_device_ref(@pointer)
29
+ self
26
30
  end
27
31
 
28
- def devnode
29
- RubDev::C.udev_device_get_devnode(@pointer)
32
+ def unref
33
+ RubDev::C.udev_device_unref(@pointer)
34
+ self
30
35
  end
31
36
 
32
- def subsystem
33
- RubDev::C.udev_device_get_subsystem(@pointer)
37
+ def context
38
+ Context.allocate.tap {|c|
39
+ c.instance_variable_set(:@pointer, RubDev::C.udev_device_get_udev(@pointer))
40
+ }
34
41
  end
35
42
 
36
- def devtype
37
- RubDev::C.udev_device_get_devtype(@pointer)
43
+ class << self
44
+ private :new
45
+
46
+ def from_syspath (context, syspath)
47
+ return nil unless context.is_a?(Context) and syspath.is_a?(String)
48
+
49
+ self.allocate.tap {|d|
50
+ d.instance_variable_set(:@pointer, RubDev::C.udev_device_new_from_syspath(context.to_c, syspath))
51
+ }
52
+ end
53
+
54
+ def from_devnum (context, type, devnum)
55
+ return nil unless context.is_a?(Context) and type.is_a?(String) and
56
+ type.bytesize == 1 and devnum.is_a?(Integer)
57
+
58
+ self.allocate.tap {|d|
59
+ d.instance_variable_set(:@pointer, RubDev::C.udev_device_new_from_devnum(context.to_c, type, devnum))
60
+ }
61
+ end
62
+
63
+ def from_subsystem_sysname (context, subsystem, sysname)
64
+ return nil unless context.is_a?(Context) and subsystem.is_a?(String) and sysname.is_a?(String)
65
+
66
+ self.allocate.tap {|d|
67
+ d.instance_variable_set(:@pointer, RubDev::C.udev_device_new_from_subsystem_sysname(context.to_c, subsystem, sysname))
68
+ }
69
+ end
70
+
71
+ def from_environment (context)
72
+ return nil unless context.is_a?(Context)
73
+
74
+ self.allocate.tap {|d|
75
+ d.instance_variable_set(:@pointer, RubDev::C.udev_device_new_from_environment(context.to_c))
76
+ }
77
+ end
38
78
  end
39
79
 
40
- def action
41
- RubDev::C.udev_device_get_action(@pointer)
80
+ def parent
81
+ Device.allocate.tap {|i|
82
+ i.instance_variable_set(:@pointer, RubDev::C.udev_device_get_parent(@pointer))
83
+ }
84
+ end
85
+
86
+ def parent_with_subsystem_devtype (subsystem, devtype)
87
+ Device.allocate.tap {|i|
88
+ i.instance_variable_set(:@pointer, RubDev::C.udev_device_get_parent_with_subsytem_devtype(@pointer, subsystem, devtype))
89
+ }
42
90
  end
43
91
 
44
92
  def devpath
45
93
  RubDev::C.udev_device_get_devpath(@pointer)
46
94
  end
47
95
 
96
+ def subsystem
97
+ RubDev::C.udev_device_get_subsystem(@pointer)
98
+ end
99
+
100
+ def devtype
101
+ RubDev::C.udev_device_get_devtype(@pointer)
102
+ end
103
+
48
104
  def syspath
49
105
  RubDev::C.udev_device_get_syspath(@pointer)
50
106
  end
@@ -57,6 +113,33 @@ module RubDev
57
113
  RubDev::C.udev_device_get_sysnum(@pointer)
58
114
  end
59
115
 
116
+ def devnode
117
+ RubDev::C.udev_device_get_devnode(@pointer)
118
+ end
119
+
120
+ if RubDev::C.respond_to?(:udev_device_get_is_initialized)
121
+ def initialized?
122
+ !RubDev::C.udev_device_get_is_initialized(@pointer).zero?
123
+ end
124
+ end
125
+
126
+ def devlinks
127
+ List.new(RubDev::C.udev_device_get_devlinks_list_entry(@pointer))
128
+ end
129
+
130
+ def properties
131
+ List.new(RubDev::C.udev_device_get_properties_list_entry(@pointer))
132
+ end
133
+
134
+ def tags
135
+ List.new(RubDev::C.udev_device_get_tags_list_entry(@pointer))
136
+ end
137
+
138
+ def property (what)
139
+ RubDev::C.udev_device_get_property_value(@pointer, what.to_s)
140
+ end
141
+ alias [] property
142
+
60
143
  def driver
61
144
  RubDev::C.udev_device_get_driver(@pointer)
62
145
  end
@@ -65,24 +148,34 @@ module RubDev
65
148
  RubDev::C.udev_device_get_devnum(@pointer)
66
149
  end
67
150
 
68
- def [] (what)
69
- RubDev::C.udev_device_get_property_value(@pointer, what.to_s)
151
+ def action
152
+ RubDev::C.udev_device_get_action(@pointer)
70
153
  end
71
154
 
72
- def ref
73
- RubDev::C.udev_device_ref(@pointer)
74
- self
155
+ def sysattr (what)
156
+ RubDev::C.udev_device_get_sysattr_value(@pointer, what)
75
157
  end
76
158
 
77
- def unref
78
- RubDev::C.udev_device_unref(@pointer)
79
- self
159
+ if RubDev::C.respond_to?(:udev_device_get_sysattr_list_entry)
160
+ def sysattrs
161
+ List.new(RubDev::C.udev_device_get_sysattr_list_entry(@pointer))
162
+ end
80
163
  end
81
164
 
82
- def parent
83
- Device.allocate.tap {|i|
84
- i.instance_variable_set(:@pointer, RubDev::C.udev_device_get_parent(@pointer))
85
- }
165
+ def seqnum
166
+ RubDev::C.udev_device_get_seqnum(@pointer)
167
+ end
168
+
169
+ if RubDev::C.respond_to?(:udev_device_get_usec_since_initialized)
170
+ def usec
171
+ RubDev::C.udev_device_get_usec_since_initialized(@pointer)
172
+ end
173
+ end
174
+
175
+ if RubDev::C.respond_to?(:udev_device_has_tag)
176
+ def tag? (tag)
177
+ !RubDev::C.udev_device_has_tag(tag).zero?
178
+ end
86
179
  end
87
180
  end
88
181
  end
@@ -0,0 +1,104 @@
1
+ #--
2
+ # Copyleft shura. [ shura1991@gmail.com ]
3
+ #
4
+ # This file is part of rubdev.
5
+ #
6
+ # rubdev is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # rubdev is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General Public License
17
+ # along with rubdev. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ require 'rubdev/c'
21
+ require 'rubdev/context'
22
+ require 'rubdev/list'
23
+
24
+ module RubDev
25
+ class Enumerate
26
+ def ref
27
+ RubDev::C.udev_enumerate_ref(@pointer)
28
+ self
29
+ end
30
+
31
+ def unref
32
+ RubDev::C.udev_enumerate_unref(@pointer)
33
+ self
34
+ end
35
+
36
+ def context
37
+ Context.allocate.tap {|i|
38
+ i.instance_variable_set(:@pointer, RubDev::C.udev_enumerate_get_udev(@pointer))
39
+ }
40
+ end
41
+
42
+ def initialize (context)
43
+ raise ArgumentError, "argument is NOT a RubDev::Context" unless context.is_a?(Context)
44
+
45
+ @pointer = RubDev::C.udev_enumerate_new(context.to_c)
46
+ end
47
+
48
+ def match_subsystem (subsystem)
49
+ !RubDev::C.udev_enumerate_add_match_subsystem(@pointer, subsystem).zero?
50
+ end
51
+
52
+ def nomatch_subsystem (subsystem)
53
+ !RubDev::C.udev_enumerate_add_nomatch_subsystem(@pointer, subsystem).zero?
54
+ end
55
+
56
+ def match_sysattr (sysattr, value)
57
+ !RubDev::C.udev_enumerate_add_match_sysattr(@pointer, sysattr, value).zero?
58
+ end
59
+
60
+ def nomatch_sysattr (sysattr, value)
61
+ !RubDev::C.udev_enumerate_add_nomatch_sysattr(@pointer, sysattr, value).zero?
62
+ end
63
+
64
+ def match_property (property, value)
65
+ !RubDev::C.udev_enumerate_add_match_property(@pointer, property, value).zero?
66
+ end
67
+
68
+ def match_tag (tag)
69
+ !RubDev::C.udev_enumerate_add_match_tag(@pointer, tag).zero?
70
+ end
71
+
72
+ if RubDev::C.respond_to?(:udev_enumerate_add_match_parent)
73
+ def match_parent (parent)
74
+ !RubDev::C.udev_enumerate_add_match_parent(@pointer, parent).zero?
75
+ end
76
+ end
77
+
78
+ if RubDev::C.respond_to?(:udev_enumerate_add_match_is_initialized)
79
+ def match_initialized
80
+ !RubDev::C.udev_enumerate_add_match_is_initialized(@pointer).zero?
81
+ end
82
+ end
83
+
84
+ def match_sysname (sysname)
85
+ !RubDev::C.udev_enumerate_add_match_sysname(@pointer, sysname).zero?
86
+ end
87
+
88
+ def syspath= (syspath)
89
+ !RubDev::C.udev_enumerate_add_syspath(syspath).zero?
90
+ end
91
+
92
+ def scan_devices
93
+ !RubDev::C.udev_enumerate_scan_devices(@pointer).zero?
94
+ end
95
+
96
+ def scan_subsystems
97
+ !RubDev::C.udev_enumerate_scan_subsystems(@pointer).zero?
98
+ end
99
+
100
+ def to_list
101
+ List.new(RubDev::C.udev_enumerate_get_list_entry(@pointer))
102
+ end
103
+ end
104
+ end
@@ -0,0 +1,71 @@
1
+ #--
2
+ # Copyleft shura. [ shura1991@gmail.com ]
3
+ #
4
+ # This file is part of rubdev.
5
+ #
6
+ # rubdev is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # rubdev is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General Public License
17
+ # along with rubdev. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ require 'rubdev/c'
21
+
22
+ module RubDev
23
+ class List
24
+ include Enumerable
25
+
26
+ def initialize (list)
27
+ @top = list
28
+ rewind
29
+ end
30
+
31
+ def rewind
32
+ @pointer = @top
33
+ self
34
+ end
35
+
36
+ def next
37
+ @pointer = RubDev::C.udev_list_entry_get_next(@pointer)
38
+ self
39
+ end
40
+
41
+ def by_name (name)
42
+ RubDev::C.udev_list_entry_get_by_name(@pointer, name)
43
+ self
44
+ end
45
+
46
+ def name
47
+ RubDev::C.udev_list_entry_get_name(@pointer)
48
+ end
49
+
50
+ def value
51
+ RubDev::C.udev_list_entry_get_value(@pointer)
52
+ end
53
+
54
+ def [] (name)
55
+ by_name(name).value
56
+ end
57
+
58
+ def each(&blk)
59
+ array = []
60
+ pointer = @pointer
61
+ rewind
62
+ unless @pointer.null?
63
+ blk.call(name, value) if blk
64
+ array << [name, value]
65
+ self.next
66
+ end
67
+ @pointer = pointer
68
+ blk ? array : Enumerator.new(array)
69
+ end
70
+ end
71
+ end
@@ -23,6 +23,22 @@ require 'rubdev/device'
23
23
 
24
24
  module RubDev
25
25
  class Monitor
26
+ def ref
27
+ RubDev::C.udev_monitor_ref(@pointer)
28
+ self
29
+ end
30
+
31
+ def unref
32
+ RubDev::C.udev_monitor_unref(@pointer)
33
+ self
34
+ end
35
+
36
+ def context
37
+ Context.allocate.tap {|i|
38
+ i.instance_variable_set(:@pointer, RubDev::C.udev_monitor_get_udev(@pointer))
39
+ }
40
+ end
41
+
26
42
  class << self
27
43
  private :new
28
44
 
@@ -43,8 +59,13 @@ module RubDev
43
59
  RubDev::C.udev_monitor_enable_receiving(@pointer)
44
60
  end
45
61
 
46
- def filter_add_match_subsystem_devtype (subsystem, devtype=nil)
47
- RubDev::C.udev_monitor_filter_add_match_subsystem_devtype(@pointer, subsystem, devtype)
62
+ def buffer_size= (size)
63
+ return false unless size.is_a?(Integer)
64
+ RubDev::C.udev_monitor_set_receive_buffer_size(@pointer, size)
65
+ end
66
+
67
+ def fd
68
+ RubDev::C.udev_monitor_get_fd(@pointer)
48
69
  end
49
70
 
50
71
  def receive_device
@@ -53,24 +74,24 @@ module RubDev
53
74
  }
54
75
  end
55
76
 
56
- def context
57
- Context.allocate.tap {|i|
58
- i.instance_variable_set(:@pointer, RubDev::C.udev_monitor_get_udev(@pointer))
59
- }
77
+ def filter_add_match_subsystem_devtype (subsystem, devtype=nil)
78
+ RubDev::C.udev_monitor_filter_add_match_subsystem_devtype(@pointer, subsystem, devtype)
60
79
  end
61
80
 
62
- def ref
63
- RubDev::C.udev_monitor_ref(@pointer)
64
- self
81
+ def filter_add_match_tag (tag)
82
+ RubDev::C.udev_monitor_filter_add_match_tag(@pointer, tag)
65
83
  end
66
84
 
67
- def unref
68
- RubDev::C.udev_monitor_unref(@pointer)
69
- self
85
+ def filter_update
86
+ RubDev::C.udev_monitor_filter_update(@pointer)
87
+ end
88
+
89
+ def filter_remove
90
+ RubDev::C.udev_monitor_filter_remove(@pointer)
70
91
  end
71
92
 
72
93
  def to_io
73
- IO.for_fd(RubDev::C.udev_monitor_get_fd(@pointer))
94
+ IO.for_fd(fd)
74
95
  end
75
96
  end
76
97
  end
@@ -0,0 +1,80 @@
1
+ #--
2
+ # Copyleft shura. [ shura1991@gmail.com ]
3
+ #
4
+ # This file is part of rubdev.
5
+ #
6
+ # rubdev is free software: you can redistribute it and/or modify
7
+ # it under the terms of the GNU Affero General Public License as published
8
+ # by the Free Software Foundation, either version 3 of the License, or
9
+ # (at your option) any later version.
10
+ #
11
+ # rubdev is distributed in the hope that it will be useful,
12
+ # but WITHOUT ANY WARRANTY; without even the implied warranty of
13
+ # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14
+ # GNU Affero General Public License for more details.
15
+ #
16
+ # You should have received a copy of the GNU Affero General Public License
17
+ # along with rubdev. If not, see <http://www.gnu.org/licenses/>.
18
+ #++
19
+
20
+ require 'rubdev/c'
21
+ require 'rubdev/context'
22
+ require 'rubdev/list'
23
+
24
+ module RubDev
25
+ class Queue
26
+ def ref
27
+ RubDev::C.udev_queue_ref(@pointer)
28
+ self
29
+ end
30
+
31
+ def unref
32
+ RubDev::C.udev_queue_unref(@pointer)
33
+ self
34
+ end
35
+
36
+ def context
37
+ Context.allocate.tap {|i|
38
+ i.instance_variable_set(:@pointer, RubDev::C.udev_queue_get_udev(@pointer))
39
+ }
40
+ end
41
+
42
+ def initialize (context)
43
+ raise ArgumentError, "argument is NOT a RubDev::Context" unless context.is_a?(Context)
44
+
45
+ @pointer = RubDev::C.udev_queue_new(context.to_c)
46
+ end
47
+
48
+ def active?
49
+ !RubDev::C.udev_queue_get_udev_is_active(@pointer).zero?
50
+ end
51
+
52
+ def empty?
53
+ !RubDev::C.udev_queue_get_queue_is_empty(@pointer).zero?
54
+ end
55
+
56
+ def seqnum_finished? (seqnum)
57
+ !RubDev::C.udev_queue_get_seqnum_is_finished(@pointer, seqnum).zero?
58
+ end
59
+
60
+ def seqnum_sequence_finished? (start, stop)
61
+ !RubDev::C.udev_queue_get_seqnum_sequence_is_finished(@pointer, start, stop).zero?
62
+ end
63
+
64
+ def queued
65
+ List.new(RubDev::C.udev_queue_get_queued_list_entry(@pointer))
66
+ end
67
+
68
+ def failed
69
+ List.new(RubDev::C.udev_queue_get_failed_list_entry(@pointer))
70
+ end
71
+
72
+ def kernel_seqnum
73
+ RubDev::C.udev_queue_get_kernel_seqnum(@pointer)
74
+ end
75
+
76
+ def udev_seqnum
77
+ RubDev::C.udev_queue_get_udev_seqnum(@pointer)
78
+ end
79
+ end
80
+ end
data/lib/rubdev.rb CHANGED
@@ -18,5 +18,8 @@
18
18
  #++
19
19
 
20
20
  require 'rubdev/context'
21
- require 'rubdev/monitor'
21
+ require 'rubdev/list'
22
22
  require 'rubdev/device'
23
+ require 'rubdev/monitor'
24
+ require 'rubdev/enumerate'
25
+ require 'rubdev/queue'
metadata CHANGED
@@ -1,12 +1,12 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rubdev
3
3
  version: !ruby/object:Gem::Version
4
- prerelease: true
4
+ prerelease: false
5
5
  segments:
6
6
  - 0
7
7
  - 0
8
- - 1a
9
- version: 0.0.1a
8
+ - 1
9
+ version: 0.0.1
10
10
  platform: ruby
11
11
  authors:
12
12
  - shura
@@ -14,7 +14,7 @@ autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
16
 
17
- date: 2011-07-24 00:00:00 +02:00
17
+ date: 2011-07-29 00:00:00 +02:00
18
18
  default_executable:
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
@@ -40,8 +40,11 @@ extra_rdoc_files: []
40
40
 
41
41
  files:
42
42
  - lib/rubdev/c.rb
43
+ - lib/rubdev/list.rb
43
44
  - lib/rubdev/monitor.rb
44
45
  - lib/rubdev/context.rb
46
+ - lib/rubdev/enumerate.rb
47
+ - lib/rubdev/queue.rb
45
48
  - lib/rubdev/device.rb
46
49
  - lib/rubdev.rb
47
50
  has_rdoc: true
@@ -64,13 +67,11 @@ required_ruby_version: !ruby/object:Gem::Requirement
64
67
  required_rubygems_version: !ruby/object:Gem::Requirement
65
68
  none: false
66
69
  requirements:
67
- - - ">"
70
+ - - ">="
68
71
  - !ruby/object:Gem::Version
69
72
  segments:
70
- - 1
71
- - 3
72
- - 1
73
- version: 1.3.1
73
+ - 0
74
+ version: "0"
74
75
  requirements: []
75
76
 
76
77
  rubyforge_project: