lg-lcd 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
data/LICENSE ADDED
@@ -0,0 +1,22 @@
1
+ Copyright (c) 2012 theldoria
2
+
3
+ MIT License
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining
6
+ a copy of this software and associated documentation files (the
7
+ "Software"), to deal in the Software without restriction, including
8
+ without limitation the rights to use, copy, modify, merge, publish,
9
+ distribute, sublicense, and/or sell copies of the Software, and to
10
+ permit persons to whom the Software is furnished to do so, subject to
11
+ the following conditions:
12
+
13
+ The above copyright notice and this permission notice shall be
14
+ included in all copies or substantial portions of the Software.
15
+
16
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
17
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
18
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
19
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
20
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
21
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
22
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,33 @@
1
+ # LgLcd
2
+
3
+ Ruby binding to the 'Logitech LCD SDK Package'
4
+
5
+ ## Installation
6
+
7
+ Add this line to your application's Gemfile:
8
+
9
+ gem 'lg-lcd'
10
+
11
+ And then execute:
12
+
13
+ $ bundle
14
+
15
+ Or install it yourself as:
16
+
17
+ $ gem install lg-lcd
18
+
19
+ ## Usage
20
+
21
+
22
+
23
+ ## Contributing
24
+
25
+ 1. Fork it
26
+ 2. Create your feature branch (`git checkout -b my-new-feature`)
27
+ 3. Commit your changes (`git commit -am 'Added some feature'`)
28
+ 4. Push to the branch (`git push origin my-new-feature`)
29
+ 5. Create new Pull Request
30
+
31
+ ## Copyright
32
+
33
+ Copyright (c) 2012 theldoria. See LICENSE for further details.
@@ -0,0 +1,26 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ require 'lg-lcd/lglcd'
4
+
5
+ LgLcd::LgLcd.new do |lg_lcd|
6
+ puts "-" * 80
7
+
8
+ lg_lcd.connect("Ruby") do |ctx|
9
+ puts "Connection: #{ctx.connection}"
10
+ puts "-" * 40
11
+
12
+ dd = LgLcd::Lib::DeviceDesc.new
13
+ index = 0
14
+ while 0 == ret = LgLcd::Lib.enumerate(ctx.connection, index, dd)
15
+ puts "Index: #{index}"
16
+ puts "Family id: #{dd[:family_id]}"
17
+ puts "Display name: #{dd[:display_name]}"
18
+ puts "Width: #{dd[:width]}"
19
+ puts "Height: #{dd[:height]}"
20
+ puts "Bpp: #{dd[:bpp]}"
21
+ puts "Buttons: #{dd[:num_soft_buttons]}"
22
+ index = index + 1
23
+ end
24
+ STDOUT.flush
25
+ end
26
+ end
Binary file
@@ -0,0 +1,7 @@
1
+ Feature: lblcd
2
+ bundle exec cucumber features/
3
+
4
+ @announce
5
+ Scenario: Run
6
+ When I run `lglcd`
7
+ Then the output should contain "Display name: Logitech Monochrome LCD"
@@ -0,0 +1,4 @@
1
+ require 'aruba/cucumber'
2
+
3
+ PROJECT_ROOT = File.join(File.dirname(__FILE__),'..','..')
4
+ ENV['PATH'] = "#{File.join(PROJECT_ROOT,'bin')}#{File::PATH_SEPARATOR}#{ENV['PATH']}"
@@ -0,0 +1,5 @@
1
+ require "lg-lcd/version"
2
+
3
+ module LgLcd
4
+ # Your code goes here...
5
+ end
@@ -0,0 +1,39 @@
1
+ require 'ffi'
2
+ require_relative 'lib'
3
+ require_relative 'open'
4
+
5
+ module LgLcd
6
+ class Connection
7
+ def initialize name
8
+ @ctx = Lib::ConnectionContext.new
9
+ @ctx[:app_friendly_name] = string_pointer(name)
10
+ @ctx[:is_persistent] = false
11
+ @ctx[:is_autostartable] = false
12
+ @ctx[:connection] = Lib::LGLCD_INVALID_CONNECTION
13
+
14
+ raise "Connecting failed" unless Lib::LGLCD_RET_OK == Lib.connect(@ctx)
15
+
16
+ begin
17
+ yield(self)
18
+ ensure
19
+ Lib.disconnect(connection)
20
+ end
21
+ end
22
+
23
+ def connection
24
+ return @ctx[:connection]
25
+ end
26
+
27
+ def open &block
28
+ return Open.new(connection, &block)
29
+ end
30
+
31
+ private
32
+
33
+ def string_pointer string
34
+ mem_buf = FFI::MemoryPointer.new(:char, string.size)
35
+ mem_buf.put_bytes(0, string)
36
+ return mem_buf
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,20 @@
1
+ require_relative 'lib'
2
+ require_relative 'connection'
3
+
4
+ module LgLcd
5
+ class LgLcd
6
+ def initialize
7
+ raise "Initialization failed" unless Lib::LGLCD_RET_OK == Lib.init()
8
+
9
+ begin
10
+ yield(self)
11
+ ensure
12
+ Lib.deinit()
13
+ end
14
+ end
15
+
16
+ def connect name, &block
17
+ return Connection.new(name, &block)
18
+ end
19
+ end
20
+ end
@@ -0,0 +1,273 @@
1
+ require 'ffi'
2
+
3
+ module LgLcd
4
+ module Lib
5
+ extend FFI::Library
6
+
7
+ LGLCD_RET_OK = 0
8
+
9
+ # Invalid handle definitions
10
+ LGLCD_INVALID_CONNECTION = -1
11
+ LGLCD_INVALID_DEVICE = -1
12
+
13
+ # Common Soft-Buttons available through the SDK
14
+ LGLCDBUTTON_LEFT = 0x00000100
15
+ LGLCDBUTTON_RIGHT = 0x00000200
16
+ LGLCDBUTTON_OK = 0x00000400
17
+ LGLCDBUTTON_CANCEL = 0x00000800
18
+ LGLCDBUTTON_UP = 0x00001000
19
+ LGLCDBUTTON_DOWN = 0x00002000
20
+ LGLCDBUTTON_MENU = 0x00004000
21
+
22
+ # Soft-Button masks. Kept for backwards compatibility
23
+ LGLCDBUTTON_BUTTON0 = 0x00000001
24
+ LGLCDBUTTON_BUTTON1 = 0x00000002
25
+ LGLCDBUTTON_BUTTON2 = 0x00000004
26
+ LGLCDBUTTON_BUTTON3 = 0x00000008
27
+ LGLCDBUTTON_BUTTON4 = 0x00000010
28
+ LGLCDBUTTON_BUTTON5 = 0x00000020
29
+ LGLCDBUTTON_BUTTON6 = 0x00000040
30
+ LGLCDBUTTON_BUTTON7 = 0x00000080
31
+
32
+ # Bitmap
33
+ LGLCD_BMP_FORMAT_160x43x1 = 0x00000001
34
+ LGLCD_BMP_FORMAT_QVGAx32 = 0x00000003
35
+ LGLCD_BW_BMP_WIDTH = 160
36
+ LGLCD_BW_BMP_HEIGHT = 43
37
+ LGLCD_BW_BMP_BPP = 1
38
+ LGLCD_QVGA_BMP_WIDTH = 320
39
+ LGLCD_QVGA_BMP_HEIGHT = 240
40
+ LGLCD_QVGA_BMP_BPP = 4
41
+
42
+ # Priorities
43
+ LGLCD_PRIORITY_IDLE_NO_SHOW = 0
44
+ LGLCD_PRIORITY_BACKGROUND = 64
45
+ LGLCD_PRIORITY_NORMAL = 128
46
+ LGLCD_PRIORITY_ALERT = 255
47
+ LGLCD_SYNC_UPDATE = 0x80000000
48
+ LGLCD_SYNC_COMPLETE_WITHIN_FRAME = 0xC0000000
49
+ LGLCD_ASYNC_UPDATE = 0
50
+
51
+ # Foreground mode for client applications
52
+ LGLCD_LCD_FOREGROUND_APP_NO = 0
53
+ LGLCD_LCD_FOREGROUND_APP_YES = 1
54
+
55
+ # Device family definitions
56
+ LGLCD_DEVICE_FAMILY_BW_160x43_GAMING = 0x00000001
57
+ LGLCD_DEVICE_FAMILY_KEYBOARD_G15 = 0x00000001
58
+ LGLCD_DEVICE_FAMILY_BW_160x43_AUDIO = 0x00000002
59
+ LGLCD_DEVICE_FAMILY_SPEAKERS_Z10 = 0x00000002
60
+ LGLCD_DEVICE_FAMILY_JACKBOX = 0x00000004
61
+ LGLCD_DEVICE_FAMILY_BW_160x43_BASIC = 0x00000008
62
+ LGLCD_DEVICE_FAMILY_LCDEMULATOR_G15 = 0x00000008
63
+ LGLCD_DEVICE_FAMILY_RAINBOW = 0x00000010
64
+ LGLCD_DEVICE_FAMILY_QVGA_BASIC = 0x00000020
65
+ LGLCD_DEVICE_FAMILY_QVGA_GAMING = 0x00000040
66
+ LGLCD_DEVICE_FAMILY_GAMEBOARD_G13 = 0x00000080
67
+ LGLCD_DEVICE_FAMILY_KEYBOARD_G510 = 0x00000100
68
+ LGLCD_DEVICE_FAMILY_OTHER = 0x80000000
69
+
70
+ # Combinations of device families (device clans?)
71
+ LGLCD_DEVICE_FAMILY_ALL_BW_160x43 = (LGLCD_DEVICE_FAMILY_BW_160x43_GAMING |
72
+ LGLCD_DEVICE_FAMILY_BW_160x43_AUDIO |
73
+ LGLCD_DEVICE_FAMILY_JACKBOX |
74
+ LGLCD_DEVICE_FAMILY_BW_160x43_BASIC |
75
+ LGLCD_DEVICE_FAMILY_RAINBOW |
76
+ LGLCD_DEVICE_FAMILY_GAMEBOARD_G13 |
77
+ LGLCD_DEVICE_FAMILY_KEYBOARD_G510)
78
+
79
+ LGLCD_DEVICE_FAMILY_ALL_QVGA = (LGLCD_DEVICE_FAMILY_QVGA_BASIC |
80
+ LGLCD_DEVICE_FAMILY_QVGA_GAMING)
81
+
82
+ LGLCD_DEVICE_FAMILY_ALL = (LGLCD_DEVICE_FAMILY_ALL_BW_160x43 |
83
+ LGLCD_DEVICE_FAMILY_ALL_QVGA)
84
+
85
+ # Capabilities of applets connecting to LCD Manager.
86
+ LGLCD_APPLET_CAP_BASIC = 0x00000000
87
+ LGLCD_APPLET_CAP_BW = 0x00000001
88
+ LGLCD_APPLET_CAP_QVGA = 0x00000002
89
+
90
+ # Notifications sent by LCD Manager to applets connected to it.
91
+ LGLCD_NOTIFICATION_DEVICE_ARRIVAL = 0x00000001
92
+ LGLCD_NOTIFICATION_DEVICE_REMOVAL = 0x00000002
93
+ LGLCD_NOTIFICATION_CLOSE_CONNECTION = 0x00000003
94
+ LGLCD_NOTIFICATION_APPLET_DISABLED = 0x00000004
95
+ LGLCD_NOTIFICATION_APPLET_ENABLED = 0x00000005
96
+ LGLCD_NOTIFICATION_TERMINATE_APPLET = 0x00000006
97
+
98
+ # Device types used in notifications
99
+ LGLCD_DEVICE_BW = 0x00000001
100
+ LGLCD_DEVICE_QVGA = 0x00000002
101
+
102
+ # From WinDef.h
103
+ MAX_PATH = 260
104
+
105
+ # struct lgLcdConfigureContext
106
+ class ConfigureContext < FFI::Struct
107
+ layout config_callback: :pointer,
108
+ config_context: :pointer
109
+ end
110
+
111
+ # struct lgLcdNotificationContext
112
+ class NotificationContext < FFI::Struct
113
+ layout notification_callback: :pointer,
114
+ notification_context: :pointer
115
+ end
116
+
117
+ # struct lgLcdConnectContextExA
118
+ class ConnectionContext < FFI::Struct
119
+ # "Friendly name" display in the listing
120
+ # LPCSTR
121
+ layout app_friendly_name: :pointer,
122
+ # isPersistent determines whether this connection persists in the list
123
+ is_persistent: :bool,
124
+ # isAutostartable determines whether the client can be started by
125
+ # LCDMon
126
+ is_autostartable: :bool,
127
+ on_configure: ConfigureContext,
128
+ # Need this x, otherwise connection is not filled.
129
+ # Possibly a padding problem...
130
+ x: :int,
131
+ # --> Connection handle
132
+ connection: :int,
133
+ # Or'd combination of LGLCD_APPLET_CAP_... defines
134
+ applet_capabilities_supported: :long,
135
+ reserved: :long,
136
+ on_notify: NotificationContext
137
+ end
138
+
139
+ # struct lgLcdDeviceDescExA
140
+ class DeviceDesc < FFI::Struct
141
+ layout family_id: :long,
142
+ display_name: [:uint8, MAX_PATH],
143
+ width: :long,
144
+ height: :long,
145
+ bpp: :long,
146
+ num_soft_buttons: :long,
147
+ reserved1: :long,
148
+ reserved2: :long
149
+ end
150
+
151
+ class SoftbuttonsChangedContext < FFI::Struct
152
+ # Set to NULL if no softbutton notifications are needed
153
+ layout softbuttons_changed_callback: :pointer,
154
+ softbuttons_changed_context: :pointer
155
+ end
156
+
157
+ class OpenContext < FFI::Struct
158
+ layout connection: :int,
159
+ # Device type to open (either LGLCD_DEVICE_BW or LGLCD_DEVICE_QVGA)
160
+ index: :int,
161
+ on_softbuttons_changed: SoftbuttonsChangedContext,
162
+ # --> Device handle
163
+ device: :int
164
+ end
165
+
166
+ class OpenByTypeContext < FFI::Struct
167
+ layout connection: :int,
168
+ # Device type to open (either LGLCD_DEVICE_BW or LGLCD_DEVICE_QVGA)
169
+ device_type: :int,
170
+ on_softbuttons_changed: SoftbuttonsChangedContext,
171
+ # --> Device handle
172
+ device: :int
173
+ end
174
+
175
+ class BitmapHeader < FFI::Struct
176
+ layout format: :long
177
+ end
178
+
179
+ class Bitmap160x43x1 < FFI::Struct
180
+ layout hdr: BitmapHeader, # LGLCD_BMP_FORMAT_160x43x1
181
+ pixels: [:uint8, LGLCD_BW_BMP_WIDTH * LGLCD_BW_BMP_HEIGHT * LGLCD_BW_BMP_BPP]
182
+ end
183
+
184
+ ffi_lib File.join(File.dirname(__FILE__), '..\..\ext\LgLcdDll')
185
+ ffi_convention :stdcall
186
+
187
+ attach_function :init, :lgLcdInit, [], :long
188
+ attach_function :deinit, :lgLcdDeInit, [], :long
189
+
190
+ attach_function :connect, :lgLcdConnectExA, [:pointer], :long
191
+ attach_function :disconnect, :lgLcdDisconnect, [:int], :long
192
+
193
+ attach_function :open_by_type, :lgLcdOpenByType, [:pointer], :long
194
+ attach_function :close, :lgLcdClose, [:int], :long
195
+
196
+ attach_function :set_as_lcd_foreground_app, :lgLcdSetAsLCDForegroundApp, [:int, :int], :long
197
+ attach_function :update_bitmap, :lgLcdUpdateBitmap, [:int, :pointer, :long], :long
198
+
199
+ # Deprecated
200
+ attach_function :enumerate, :lgLcdEnumerateExA, [:int, :int, :pointer], :long
201
+ end
202
+
203
+ class Open
204
+ def initialize connection
205
+ @ctx = Lib::OpenByTypeContext.new
206
+ @ctx[:connection] = connection
207
+ @ctx[:device_type] = Lib::LGLCD_DEVICE_BW
208
+ @ctx[:device] = Lib::LGLCD_INVALID_DEVICE
209
+ raise "Open by type failes" unless Lib::LGLCD_RET_OK == Lib.open_by_type(@ctx)
210
+
211
+ begin
212
+ yield(self)
213
+ ensure
214
+ puts "Close"
215
+ Lib.close(@ctx[:device])
216
+ end
217
+ end
218
+
219
+ def device
220
+ return @ctx[:device]
221
+ end
222
+ end
223
+
224
+ class Connection
225
+ def initialize name
226
+ @ctx = Lib::ConnectionContext.new
227
+ @ctx[:app_friendly_name] = string_pointer(name)
228
+ @ctx[:is_persistent] = false
229
+ @ctx[:is_autostartable] = false
230
+ @ctx[:connection] = Lib::LGLCD_INVALID_CONNECTION
231
+
232
+ raise "Connecting failed" unless Lib::LGLCD_RET_OK == Lib.connect(@ctx)
233
+
234
+ begin
235
+ yield(self)
236
+ ensure
237
+ Lib.disconnect(connection)
238
+ end
239
+ end
240
+
241
+ def connection
242
+ return @ctx[:connection]
243
+ end
244
+
245
+ def open &block
246
+ return Open.new(connection, &block)
247
+ end
248
+
249
+ private
250
+
251
+ def string_pointer string
252
+ mem_buf = FFI::MemoryPointer.new(:char, string.size)
253
+ mem_buf.put_bytes(0, string)
254
+ return mem_buf
255
+ end
256
+ end
257
+
258
+ class LgLcd
259
+ def initialize
260
+ raise "Initialization failed" unless Lib::LGLCD_RET_OK == Lib.init()
261
+
262
+ begin
263
+ yield(self)
264
+ ensure
265
+ Lib.deinit()
266
+ end
267
+ end
268
+
269
+ def connect name, &block
270
+ return Connection.new(name, &block)
271
+ end
272
+ end
273
+ end
@@ -0,0 +1,24 @@
1
+ require_relative 'lib'
2
+
3
+ module LgLcd
4
+ class Open
5
+ def initialize connection
6
+ @ctx = Lib::OpenByTypeContext.new
7
+ @ctx[:connection] = connection
8
+ @ctx[:device_type] = Lib::LGLCD_DEVICE_BW
9
+ @ctx[:device] = Lib::LGLCD_INVALID_DEVICE
10
+ raise "Open by type failes" unless Lib::LGLCD_RET_OK == Lib.open_by_type(@ctx)
11
+
12
+ begin
13
+ yield(self)
14
+ ensure
15
+ puts "Close"
16
+ Lib.close(@ctx[:device])
17
+ end
18
+ end
19
+
20
+ def device
21
+ return @ctx[:device]
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,3 @@
1
+ module LgLcd
2
+ VERSION = "0.0.1"
3
+ end
@@ -0,0 +1,24 @@
1
+ require_relative '../lib/lg-lcd/lib'
2
+
3
+ LgLcd::LgLcd.new do |lg_lcd|
4
+ puts "-" * 80
5
+
6
+ lg_lcd.connect("Ruby") do |ctx|
7
+ puts "Connection: #{ctx.connection}"
8
+ puts "-" * 40
9
+
10
+ dd = LgLcd::Lib::DeviceDesc.new
11
+ index = 0
12
+ while 0 == ret = LgLcd::Lib.enumerate(ctx.connection, index, dd)
13
+ puts "Index: #{index}"
14
+ puts "Family id: #{dd[:family_id]}"
15
+ puts "Display name: #{dd[:display_name]}"
16
+ puts "Width: #{dd[:width]}"
17
+ puts "Height: #{dd[:height]}"
18
+ puts "Bpp: #{dd[:bpp]}"
19
+ puts "Buttons: #{dd[:num_soft_buttons]}"
20
+ index = index + 1
21
+ end
22
+ STDOUT.flush
23
+ end
24
+ end
metadata ADDED
@@ -0,0 +1,128 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: lg-lcd
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - theldoria
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2012-08-12 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: ffi
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: 1.1.5
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: 1.1.5
30
+ - !ruby/object:Gem::Dependency
31
+ name: methadone
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ~>
36
+ - !ruby/object:Gem::Version
37
+ version: 1.2.1
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.2.1
46
+ - !ruby/object:Gem::Dependency
47
+ name: cucumber
48
+ requirement: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0'
54
+ type: :development
55
+ prerelease: false
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
62
+ - !ruby/object:Gem::Dependency
63
+ name: aruba
64
+ requirement: !ruby/object:Gem::Requirement
65
+ none: false
66
+ requirements:
67
+ - - ! '>='
68
+ - !ruby/object:Gem::Version
69
+ version: '0'
70
+ type: :development
71
+ prerelease: false
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
78
+ description: Ruby binding to the 'Logitech LCD SDK Package'
79
+ email:
80
+ - theldoria@hotmail.com
81
+ executables:
82
+ - lglcd
83
+ extensions: []
84
+ extra_rdoc_files: []
85
+ files:
86
+ - lib/lg-lcd/connection.rb
87
+ - lib/lg-lcd/lglcd.rb
88
+ - lib/lg-lcd/lib.rb
89
+ - lib/lg-lcd/open.rb
90
+ - lib/lg-lcd/version.rb
91
+ - lib/lg-lcd.rb
92
+ - ext/LgLcdDll.dll
93
+ - bin/lglcd
94
+ - README.md
95
+ - LICENSE
96
+ - test/test.rb
97
+ - features/lglcd.feature
98
+ - features/support/env.rb
99
+ homepage: ''
100
+ licenses: []
101
+ post_install_message:
102
+ rdoc_options: []
103
+ require_paths:
104
+ - lib
105
+ required_ruby_version: !ruby/object:Gem::Requirement
106
+ none: false
107
+ requirements:
108
+ - - ! '>='
109
+ - !ruby/object:Gem::Version
110
+ version: 1.9.2
111
+ required_rubygems_version: !ruby/object:Gem::Requirement
112
+ none: false
113
+ requirements:
114
+ - - ! '>='
115
+ - !ruby/object:Gem::Version
116
+ version: 1.3.6
117
+ requirements: []
118
+ rubyforge_project:
119
+ rubygems_version: 1.8.24
120
+ signing_key:
121
+ specification_version: 3
122
+ summary: This binding provides low level access to the LCD of some Logitech products
123
+ like the G19, G15 or G510
124
+ test_files:
125
+ - test/test.rb
126
+ - features/lglcd.feature
127
+ - features/support/env.rb
128
+ has_rdoc: