matrixorbital-glk 0.0.1
Sign up to get free protection for your applications and to get access to all the features.
- data/COPYING +57 -0
- data/NEWS +5 -0
- data/README +36 -0
- data/Rakefile +83 -0
- data/examples/identify.rb +20 -0
- data/examples/load-usb-driver.sh +6 -0
- data/lib/matrixorbital/glk.rb +470 -0
- metadata +69 -0
data/COPYING
ADDED
@@ -0,0 +1,57 @@
|
|
1
|
+
The Matrix Orbital GLK Ruby Gem is copyrighted free software
|
2
|
+
by Nicholas J Humfrey <njh@aelius.com>.
|
3
|
+
You can redistribute it and/or modify it under either the terms of the GPL
|
4
|
+
version 2 (see the file GPL), or the conditions below:
|
5
|
+
|
6
|
+
1. You may make and give away verbatim copies of the source form of the
|
7
|
+
software without restriction, provided that you duplicate all of the
|
8
|
+
original copyright notices and associated disclaimers.
|
9
|
+
|
10
|
+
2. You may modify your copy of the software in any way, provided that
|
11
|
+
you do at least ONE of the following:
|
12
|
+
|
13
|
+
a) place your modifications in the Public Domain or otherwise
|
14
|
+
make them Freely Available, such as by posting said
|
15
|
+
modifications to Usenet or an equivalent medium, or by allowing
|
16
|
+
the author to include your modifications in the software.
|
17
|
+
|
18
|
+
b) use the modified software only within your corporation or
|
19
|
+
organization.
|
20
|
+
|
21
|
+
c) give non-standard binaries non-standard names, with
|
22
|
+
instructions on where to get the original software distribution.
|
23
|
+
|
24
|
+
d) make other distribution arrangements with the author.
|
25
|
+
|
26
|
+
3. You may distribute the software in object code or binary form,
|
27
|
+
provided that you do at least ONE of the following:
|
28
|
+
|
29
|
+
a) distribute the binaries and library files of the software,
|
30
|
+
together with instructions (in the manual page or equivalent)
|
31
|
+
on where to get the original distribution.
|
32
|
+
|
33
|
+
b) accompany the distribution with the machine-readable source of
|
34
|
+
the software.
|
35
|
+
|
36
|
+
c) give non-standard binaries non-standard names, with
|
37
|
+
instructions on where to get the original software distribution.
|
38
|
+
|
39
|
+
d) make other distribution arrangements with the author.
|
40
|
+
|
41
|
+
4. You may modify and include the part of the software into any other
|
42
|
+
software (possibly commercial). But some files in the distribution
|
43
|
+
are not written by the author, so that they are not under these terms.
|
44
|
+
|
45
|
+
For the list of those files and their copying conditions, see the
|
46
|
+
file LEGAL.
|
47
|
+
|
48
|
+
5. The scripts and library files supplied as input to or produced as
|
49
|
+
output from the software do not automatically fall under the
|
50
|
+
copyright of the software, but belong to whomever generated them,
|
51
|
+
and may be sold commercially, and may be aggregated with this
|
52
|
+
software.
|
53
|
+
|
54
|
+
6. THIS SOFTWARE IS PROVIDED "AS IS" AND WITHOUT ANY EXPRESS OR
|
55
|
+
IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
|
56
|
+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
|
57
|
+
PURPOSE.
|
data/NEWS
ADDED
data/README
ADDED
@@ -0,0 +1,36 @@
|
|
1
|
+
== MatrixOrbital::GLK
|
2
|
+
|
3
|
+
MatrixOrbital::GLK is a ruby gem for controlling
|
4
|
+
the GLK serial of LCD screens made by Matrix Orbital.
|
5
|
+
|
6
|
+
For more information about GLK series MatrixOrbital displays, please visit:
|
7
|
+
http://www.matrixorbital.ca/products/glk_Series/
|
8
|
+
|
9
|
+
Please note that I am not an employee and have nothing to do with MatrixOrbital,
|
10
|
+
other than being a happy customer.
|
11
|
+
|
12
|
+
RubyForge Project Page http://rubyforge.org/projects/matrixorbital/
|
13
|
+
|
14
|
+
|
15
|
+
== Installing
|
16
|
+
|
17
|
+
You may get the latest stable version from Rubyforge. Source gems are also available.
|
18
|
+
|
19
|
+
$ gem install matrixorbital-glk
|
20
|
+
|
21
|
+
|
22
|
+
=== Loading matrixorbital-glk gem Itself
|
23
|
+
|
24
|
+
You have installed the gem already, yeah?
|
25
|
+
|
26
|
+
require 'rubygems'
|
27
|
+
require 'matrixorbital/glk'
|
28
|
+
|
29
|
+
|
30
|
+
== Contact
|
31
|
+
|
32
|
+
Author:: Nicholas J Humfrey
|
33
|
+
Email:: njh@aelius.com
|
34
|
+
Home Page:: http://www.aelius.com/njh/
|
35
|
+
License:: Distributes under the same terms as Ruby
|
36
|
+
|
data/Rakefile
ADDED
@@ -0,0 +1,83 @@
|
|
1
|
+
require 'rubygems'
|
2
|
+
require 'rake'
|
3
|
+
require 'rake/clean'
|
4
|
+
require 'rake/gempackagetask'
|
5
|
+
require 'rake/rdoctask'
|
6
|
+
require 'rake/testtask'
|
7
|
+
|
8
|
+
NAME = "matrixorbital-glk"
|
9
|
+
VERS = "0.0.1"
|
10
|
+
CLEAN.include ['pkg', 'rdoc']
|
11
|
+
|
12
|
+
Gem::manage_gems
|
13
|
+
|
14
|
+
spec = Gem::Specification.new do |s|
|
15
|
+
s.name = NAME
|
16
|
+
s.version = VERS
|
17
|
+
s.author = "Nicholas J Humfrey"
|
18
|
+
s.email = "njh@aelius.com"
|
19
|
+
s.homepage = "http://matrixorbital.rubyforge.org"
|
20
|
+
s.platform = Gem::Platform::RUBY
|
21
|
+
s.summary = "A ruby gem to interface Matrix Orbital's GLK series of LCD Screens."
|
22
|
+
s.rubyforge_project = "matrixorbital"
|
23
|
+
s.files = FileList["Rakefile", "lib/matrixorbital/glk.rb", "examples/*"]
|
24
|
+
s.require_path = "lib"
|
25
|
+
|
26
|
+
# rdoc
|
27
|
+
s.has_rdoc = true
|
28
|
+
s.extra_rdoc_files = ["README", "NEWS", "COPYING"]
|
29
|
+
|
30
|
+
# Dependencies
|
31
|
+
s.add_dependency "rake"
|
32
|
+
end
|
33
|
+
|
34
|
+
desc "Default: package up the gem."
|
35
|
+
task :default => :package
|
36
|
+
|
37
|
+
task :build_package => [:repackage]
|
38
|
+
Rake::GemPackageTask.new(spec) do |pkg|
|
39
|
+
pkg.need_zip = false
|
40
|
+
pkg.need_tar = true
|
41
|
+
pkg.gem_spec = spec
|
42
|
+
end
|
43
|
+
|
44
|
+
desc "Run :package and install the resulting .gem"
|
45
|
+
task :install => :package do
|
46
|
+
sh %{sudo gem install --local pkg/#{NAME}-#{VERS}.gem}
|
47
|
+
end
|
48
|
+
|
49
|
+
desc "Run :clean and uninstall the .gem"
|
50
|
+
task :uninstall => :clean do
|
51
|
+
sh %{sudo gem uninstall #{NAME}}
|
52
|
+
end
|
53
|
+
|
54
|
+
|
55
|
+
|
56
|
+
## Testing
|
57
|
+
#desc "Run all the specification tests"
|
58
|
+
#Rake::TestTask.new(:spec) do |t|
|
59
|
+
# t.warning = true
|
60
|
+
# t.verbose = true
|
61
|
+
# t.pattern = 'spec/*_spec.rb'
|
62
|
+
#end
|
63
|
+
|
64
|
+
desc "Check the syntax of all ruby files"
|
65
|
+
task :check_syntax do
|
66
|
+
`find . -name "*.rb" |xargs -n1 ruby -c |grep -v "Syntax OK"`
|
67
|
+
puts "* Done"
|
68
|
+
end
|
69
|
+
|
70
|
+
## Documentation
|
71
|
+
desc "Generate documentation for the library"
|
72
|
+
Rake::RDocTask.new("rdoc") { |rdoc|
|
73
|
+
rdoc.rdoc_dir = 'rdoc'
|
74
|
+
rdoc.title = "Matrix Orbital GLK Documentation"
|
75
|
+
rdoc.options << '--line-numbers' << '--inline-source'
|
76
|
+
rdoc.main = "README"
|
77
|
+
rdoc.rdoc_files.include("README", "NEWS", "COPYING", "lib/matrixorbital/glk.rb")
|
78
|
+
}
|
79
|
+
|
80
|
+
desc "Upload rdoc to rubyforge"
|
81
|
+
task :upload_rdoc => [:rdoc] do
|
82
|
+
sh %{/usr/bin/scp -r -p rdoc/* matrixorbital.rubyforge.org:/var/www/gforge-projects/matrixorbital}
|
83
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# Script to display information about the connected LCD Module
|
4
|
+
#
|
5
|
+
# Author:: Nicholas J Humfrey (mailto:njh@aelius.com)
|
6
|
+
# Copyright:: Copyright (c) 2008 Nicholas J Humfrey
|
7
|
+
# License:: Distributes under the same terms as Ruby
|
8
|
+
#
|
9
|
+
|
10
|
+
$:.unshift File.dirname(__FILE__)+'/../lib'
|
11
|
+
|
12
|
+
require 'matrixorbital/glk'
|
13
|
+
|
14
|
+
|
15
|
+
glk = MatrixOrbital::GLK.new(ARGV[0]||'/dev/ttyUSB0')
|
16
|
+
puts "Serial Port: #{glk.serialport}"
|
17
|
+
puts "Baud Rate: #{glk.baudrate}"
|
18
|
+
puts "LCD Type: #{glk.lcd_type}"
|
19
|
+
puts "LCD Dimensions: #{glk.lcd_dimensions.join('x')}"
|
20
|
+
puts "LCD Firmware: #{glk.firmware_version}"
|
@@ -0,0 +1,470 @@
|
|
1
|
+
#!/usr/bin/ruby
|
2
|
+
#
|
3
|
+
# A ruby gem to interface Matrix Orbital's GLK series of LCD Screens.
|
4
|
+
#
|
5
|
+
# Author:: Nicholas J Humfrey (mailto:njh@aelius.com)
|
6
|
+
# Copyright:: Copyright (c) 2008 Nicholas J Humfrey
|
7
|
+
# License:: Distributes under the same terms as Ruby
|
8
|
+
#
|
9
|
+
|
10
|
+
module MatrixOrbital
|
11
|
+
|
12
|
+
class GLK < File
|
13
|
+
attr_reader :serialport, :baudrate
|
14
|
+
|
15
|
+
# Connect to an LCD screen.
|
16
|
+
# All of the parametes are optional.
|
17
|
+
# By default the LCD screen type will be detected automatically.
|
18
|
+
def initialize(serialport='/dev/ttyS0', baudrate=19200, manual_lcd_type=nil)
|
19
|
+
|
20
|
+
# Does the device exist?
|
21
|
+
@serialport = serialport
|
22
|
+
unless File.exists? serialport
|
23
|
+
raise "Serial port '#{serialport}' does not exist."
|
24
|
+
end
|
25
|
+
|
26
|
+
# Use the lcd_type given, or ask the module
|
27
|
+
unless manual_lcd_type.nil?
|
28
|
+
@lcd_type = manual_lcd_type
|
29
|
+
end
|
30
|
+
|
31
|
+
# Store the baudrate
|
32
|
+
|
33
|
+
# Configure the serial port
|
34
|
+
# FIXME: use pure ruby
|
35
|
+
@baudrate = baudrate
|
36
|
+
system("stty -F #{serialport} raw speed #{baudrate} cs8 -ixon -echo cbreak -isig -parenb > /dev/null") or
|
37
|
+
raise "Failed to set parameters on the serial port."
|
38
|
+
|
39
|
+
# Now, open the serial port
|
40
|
+
super(serialport, "rb+")
|
41
|
+
|
42
|
+
# Disable buffering
|
43
|
+
self.sync = true
|
44
|
+
|
45
|
+
# Flush the input buffer
|
46
|
+
|
47
|
+
end
|
48
|
+
|
49
|
+
# This command sets the I2C write address of the module between 0x00
|
50
|
+
# and 0xFF. The I2C write address must be an even number and the read
|
51
|
+
# address is automatically set to one higher. For example if the I2 C write
|
52
|
+
# address is set to 0x50, then the read address is 0x51.
|
53
|
+
def i2c_slave_address=(address)
|
54
|
+
raise "I2C slave address is out of range" if (value<0 or value>255)
|
55
|
+
send_command( 0x33, address )
|
56
|
+
end
|
57
|
+
|
58
|
+
# This command sets the lcd's RS-232 port to the specified <em>baudrate</em>.
|
59
|
+
# The change takes place immediately.
|
60
|
+
def lcd_baudrate=(lcd_baudrate)
|
61
|
+
case lcd_baudrate
|
62
|
+
when 9600 then
|
63
|
+
send_command( 0x39, 0xCF )
|
64
|
+
when 14400 then
|
65
|
+
send_command( 0x39, 0x8A )
|
66
|
+
when 19200 then
|
67
|
+
send_command( 0x39, 0x67 )
|
68
|
+
when 28800 then
|
69
|
+
send_command( 0x39, 0x44 )
|
70
|
+
when 38400 then
|
71
|
+
send_command( 0x39, 0x33 )
|
72
|
+
when 57600 then
|
73
|
+
send_command( 0x39, 0x22 )
|
74
|
+
when 76800 then
|
75
|
+
send_command( 0x39, 0x19 )
|
76
|
+
when 115200 then
|
77
|
+
send_command( 0x39, 0x10 )
|
78
|
+
else
|
79
|
+
raise "Invalid/unsupported baud rate: #{lcd_baudrate}"
|
80
|
+
end
|
81
|
+
end
|
82
|
+
|
83
|
+
|
84
|
+
# Turn flow control on or off.
|
85
|
+
def flow_control=(state)
|
86
|
+
if state
|
87
|
+
raise "Flow control is unsupported"
|
88
|
+
# send_command( 0x3A )
|
89
|
+
else
|
90
|
+
send_command( 0x3B )
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
|
95
|
+
# Turn the LCD backlight on/off immediately and stay on/off.
|
96
|
+
def backlight=(state)
|
97
|
+
if state
|
98
|
+
# FIXME: backlight hard coded to stay on permanently
|
99
|
+
send_command( 0x42, 0 )
|
100
|
+
else
|
101
|
+
send_command( 0x46 )
|
102
|
+
end
|
103
|
+
end
|
104
|
+
|
105
|
+
# This command moves the text insertion point to the top left of the
|
106
|
+
# display area, based on the current font metrics.
|
107
|
+
def cursor_home
|
108
|
+
send_command( 0x48 )
|
109
|
+
end
|
110
|
+
|
111
|
+
# This command sets the text insertion point to the [col] and [row]
|
112
|
+
# specified. The insertion point is positioned using the base size of
|
113
|
+
# the current font (this command does not position the insertion
|
114
|
+
# point at a specific pixel).
|
115
|
+
#
|
116
|
+
# Example:
|
117
|
+
#
|
118
|
+
# lcd.cursor_position = [10,4]
|
119
|
+
#
|
120
|
+
def cursor_position=(params)
|
121
|
+
col,row = params
|
122
|
+
send_command( 0x47, col, row )
|
123
|
+
end
|
124
|
+
|
125
|
+
# This command positions the insertion point at a specific pixel (X,Y),
|
126
|
+
# which references the top left corner of the font insertion point.
|
127
|
+
#
|
128
|
+
# Example:
|
129
|
+
#
|
130
|
+
# lcd.cursor_coordinate = [100,40]
|
131
|
+
#
|
132
|
+
def cursor_coordinate=(params)
|
133
|
+
x,y = params
|
134
|
+
send_command( 0x79, x, y )
|
135
|
+
end
|
136
|
+
|
137
|
+
# This command sets the display's contrast to <em>value</em>,
|
138
|
+
# where <em>value</em> is a value between 0 to 255.
|
139
|
+
# Lower values cause 'on' elements in the display area to appear
|
140
|
+
# lighter, while higher values cause 'on' elements to appear darker.
|
141
|
+
def contrast=(value)
|
142
|
+
raise "Contrast value is out of range" if (value<0 or value>255)
|
143
|
+
send_command( 0x50, value )
|
144
|
+
end
|
145
|
+
|
146
|
+
# Like the <em>contrast=</em> method, only this command saves the
|
147
|
+
# value so that it is not lost after power down.
|
148
|
+
def save_contrast(value)
|
149
|
+
raise "Contrast value is out of range" if (value<0 or value>255)
|
150
|
+
send_command( 0x91, value )
|
151
|
+
end
|
152
|
+
|
153
|
+
# This command sets the display's brightness to <em>value</em>,
|
154
|
+
# where <em>value</em> is a value between 0 to 255.
|
155
|
+
def brightness=(value)
|
156
|
+
raise "Brightness value is out of range" if (value<0 or value>255)
|
157
|
+
send_command( 0x99, value )
|
158
|
+
end
|
159
|
+
|
160
|
+
# Like the <em>brightness=</em> method, only this command saves the
|
161
|
+
# value so that it is not lost after power down.
|
162
|
+
def save_brightness(brightness)
|
163
|
+
raise "Brightness value is out of range" if (value<0 or value>255)
|
164
|
+
send_command( 0x98, brightness )
|
165
|
+
end
|
166
|
+
|
167
|
+
# This command enabled and disables autoscrolling.
|
168
|
+
# When auto scrolling is on, it causes the display to shift the entire
|
169
|
+
# display's contents up to make room for a new line of text when the text
|
170
|
+
# reaches the end of the scroll row defined in the font metrics (the bottom
|
171
|
+
# right character position)
|
172
|
+
def autoscroll=(state)
|
173
|
+
if state
|
174
|
+
send_command( 0x51 )
|
175
|
+
else
|
176
|
+
send_command( 0x52 )
|
177
|
+
end
|
178
|
+
end
|
179
|
+
|
180
|
+
# This command clears any unread key presses.
|
181
|
+
def clear_key_buffer
|
182
|
+
send_command( 0x45 )
|
183
|
+
end
|
184
|
+
|
185
|
+
# When auto transmit key presses is turned on all key presses are sent
|
186
|
+
# immediately to the host system without the use of the <em>poll_keypad</em>
|
187
|
+
# method. This is the default mode on power up.
|
188
|
+
#
|
189
|
+
# When auto transmit key presses is turned off up to 10 key presses are
|
190
|
+
# buffered until the unit is polled by the host system.
|
191
|
+
def auto_transmit_key_presses=(state)
|
192
|
+
if state
|
193
|
+
send_command( 0x41 )
|
194
|
+
else
|
195
|
+
send_command( 0x4F )
|
196
|
+
end
|
197
|
+
end
|
198
|
+
|
199
|
+
# This command sets the time (in miliseconds) between key press and key read.
|
200
|
+
# All key types with the exception of latched piezo switches will 'bounce'
|
201
|
+
# for a varying time, depending on their physical characteristics.
|
202
|
+
def debounce_time=(ms)
|
203
|
+
time = (ms.to_f / 6.554).to_i
|
204
|
+
raise "Debounce time is out of range" if (value<0 or value>255)
|
205
|
+
send_command( 0x63, value )
|
206
|
+
end
|
207
|
+
|
208
|
+
# This command sets the drawing color for subsequent graphic commands
|
209
|
+
# that do not have the drawing color passed as a parameter. The parameter
|
210
|
+
# <em>color</em> is the value of the color where white is <em>false<em>
|
211
|
+
# and black <em>true<em>.
|
212
|
+
def drawing_color=(color)
|
213
|
+
send_command( 0x63, color ? 0 : 1 )
|
214
|
+
end
|
215
|
+
|
216
|
+
# This command clears the display and resets the text insertion position to
|
217
|
+
# the top left position of the screen defined in the font metrics.
|
218
|
+
def clear_screen
|
219
|
+
send_command( 0x58 )
|
220
|
+
end
|
221
|
+
|
222
|
+
# This command will draw a bitmap that is located in the on board memory.
|
223
|
+
# The bitmap is referenced by the bitmaps reference identification number,
|
224
|
+
# which is established when the bitmap is uploaded to the display module.
|
225
|
+
# The bitmap will be drawn beginning at the top left,
|
226
|
+
# from the specified <em>x</em>,<em>y</em> coordinates.
|
227
|
+
def draw_bitmap(refid, x, y)
|
228
|
+
send_command( 0x62, refid, x, y )
|
229
|
+
end
|
230
|
+
|
231
|
+
# This command will draw a pixel at <em>x</em>, <em>y</em> using
|
232
|
+
# the current drawing color.
|
233
|
+
def draw_pixel(x, y)
|
234
|
+
send_command( 0x70, x, y )
|
235
|
+
end
|
236
|
+
|
237
|
+
# This command will draw a line from <em>x1</em>, <em>y1</em>
|
238
|
+
# to <em>x2</em>, <em>y2</em> using the current drawing color.
|
239
|
+
# Lines may be drawn from any part of the display to any other part.
|
240
|
+
# However, it may be important to note that the line may in-terpolate
|
241
|
+
# differently right to left, or left to right.
|
242
|
+
# This means that a line drawn in white from right to left may not
|
243
|
+
# fully erase the same line drawn in black from left to right.
|
244
|
+
def draw_line(x1, y1, x2, y2)
|
245
|
+
send_command( 0x6C, x1, y1, x2, y2 )
|
246
|
+
end
|
247
|
+
|
248
|
+
# This command will draw a line with the current drawing color from
|
249
|
+
# the last line end (x2,y2) to <em>x</em>, <em>y</em>.
|
250
|
+
# This command uses the global drawing color.
|
251
|
+
def draw_line_continue(x, y)
|
252
|
+
send_command( 0x65, x, y )
|
253
|
+
end
|
254
|
+
|
255
|
+
# This command draws a rectangular box in the specified <em>color</em>.
|
256
|
+
# The top left corner is specified by <em>x1</em>, <em>y1</em> and
|
257
|
+
# the bottom right corner by <em>x2</em>, <em>y2</em>.
|
258
|
+
def draw_rect(color, x1, y1, x2, y2)
|
259
|
+
send_command( 0x72, color, x1, y1, x2, y2 )
|
260
|
+
end
|
261
|
+
|
262
|
+
# This command erases a single bitmap file from the LCD's internal memory.
|
263
|
+
def delete_bitmap(refid)
|
264
|
+
send_command( 0xAD, 0x01, refid )
|
265
|
+
end
|
266
|
+
|
267
|
+
# This command erases a single font file from the LCD's internal memory.
|
268
|
+
def delete_font(refid)
|
269
|
+
send_command( 0xAD, 0x00, refid )
|
270
|
+
end
|
271
|
+
|
272
|
+
# Set the current font to the specified font refernce identifer.
|
273
|
+
# The font ID is es-tablished when the font is saved to the display.
|
274
|
+
def font=(refid)
|
275
|
+
send_command( 0x31, refid )
|
276
|
+
end
|
277
|
+
|
278
|
+
# This command completely erases the display's non-volatile memory. It
|
279
|
+
# removes all fonts, font metrics, bitmaps, and settings (current font,
|
280
|
+
# cursor position, communication speed, etc.).
|
281
|
+
def wipe_filesystem
|
282
|
+
send_command( 0x21, 0x59, 0x21 )
|
283
|
+
end
|
284
|
+
|
285
|
+
# This command will return the number of bytes that are
|
286
|
+
# remaining in the on board memory.
|
287
|
+
def filesystem_space
|
288
|
+
send_command( 0xAF )
|
289
|
+
|
290
|
+
#my count = getint()
|
291
|
+
|
292
|
+
#count |= ( & 0xFF) << 0;
|
293
|
+
#count |= (getchar() & 0xFF) << 8;
|
294
|
+
#count |= (getchar() & 0xFF) << 16;
|
295
|
+
#count |= (getchar() & 0xFF) << 24;
|
296
|
+
#
|
297
|
+
#return count;
|
298
|
+
end
|
299
|
+
|
300
|
+
# This command will return a directory of the contents of the file system.
|
301
|
+
# It returns an array of directory entires, where each entry is a hash.
|
302
|
+
def filesystem_directory
|
303
|
+
send_command( 0xB3 )
|
304
|
+
|
305
|
+
#my lsb = getchar()
|
306
|
+
|
307
|
+
#my @bytes = getbytes( 4 )
|
308
|
+
|
309
|
+
#my count = 0;
|
310
|
+
#count |= (@bytes[0] & 0xFF) << 0;
|
311
|
+
#count |= (@bytes[1] & 0xFF) << 8;
|
312
|
+
#count |= (@bytes[2] & 0xFF) << 16;
|
313
|
+
#count |= (@bytes[3] & 0xFF) << 24;
|
314
|
+
|
315
|
+
#return count;
|
316
|
+
|
317
|
+
#return lsb;
|
318
|
+
end
|
319
|
+
|
320
|
+
# This command draws a solid rectangle in the specified <em>color</em>.
|
321
|
+
# The top left corner is specified by <em>x1</em>, <em>y1</em> and the bottom
|
322
|
+
# right corner by <em>x2</em>, <em>y2</em>. Since this command involves
|
323
|
+
# considerable processing overhead, we strongly recommend the use of flow
|
324
|
+
# control, particularly if the command is to be repeated frequently.
|
325
|
+
def draw_solid_rect(color, x1, y1, x2, y2)
|
326
|
+
send_command( 0x78, color, x1, y1, x2, y2 )
|
327
|
+
end
|
328
|
+
|
329
|
+
# This command turns Off general purpose output <em>num</em>.
|
330
|
+
def gpo_off(num)
|
331
|
+
send_command( 0x56, num )
|
332
|
+
end
|
333
|
+
|
334
|
+
# This command turns On general purpose output <em>num</em>.
|
335
|
+
def gpo_on(num)
|
336
|
+
send_command( 0x57, num )
|
337
|
+
end
|
338
|
+
|
339
|
+
|
340
|
+
|
341
|
+
# Send a raw command to the display, where <em>args<em> is an
|
342
|
+
# array of integer bytes to be sent to the lcd module.
|
343
|
+
def send_command(command, *args)
|
344
|
+
args.unshift(0xFE, command)
|
345
|
+
self.print( args.pack('C*') )
|
346
|
+
end
|
347
|
+
|
348
|
+
# Send text string to display and STDOUT too
|
349
|
+
def puts_stdout(*args)
|
350
|
+
$stdout.puts(*args)
|
351
|
+
self.puts(*args)
|
352
|
+
end
|
353
|
+
|
354
|
+
|
355
|
+
# Turn LED number <em>num</em> off.
|
356
|
+
#
|
357
|
+
# The command is only supported on LCD modules with
|
358
|
+
# on-board LEDS (such as the GLK19264-7T-1U)
|
359
|
+
def led_off(num)
|
360
|
+
gpo_base = led_gpo_base(num)
|
361
|
+
gpo_on( gpo_base )
|
362
|
+
gpo_on( gpo_base+1 )
|
363
|
+
end
|
364
|
+
|
365
|
+
# Turn LED number <em>num</em> on - Red.
|
366
|
+
#
|
367
|
+
# The command is only supported on LCD modules with
|
368
|
+
# on-board LEDS (such as the GLK19264-7T-1U)
|
369
|
+
def led_red(num)
|
370
|
+
gpo_base = led_gpo_base(num)
|
371
|
+
gpo_off( gpo_base )
|
372
|
+
gpo_on( gpo_base+1 )
|
373
|
+
end
|
374
|
+
|
375
|
+
# Turn LED number <em>num</em> on - Green.
|
376
|
+
#
|
377
|
+
# The command is only supported on LCD modules with
|
378
|
+
# on-board LEDS (such as the GLK19264-7T-1U)
|
379
|
+
def led_green(num)
|
380
|
+
gpo_base = led_gpo_base(num)
|
381
|
+
gpo_on( gpo_base )
|
382
|
+
gpo_off( gpo_base+1 )
|
383
|
+
end
|
384
|
+
|
385
|
+
# Turn LED number <em>num</em> on - Yellow.
|
386
|
+
#
|
387
|
+
# The command is only supported on LCD modules with
|
388
|
+
# on-board LEDS (such as the GLK19264-7T-1U)
|
389
|
+
def led_yellow(num)
|
390
|
+
gpo_base = led_gpo_base(num)
|
391
|
+
gpo_off( gpo_base )
|
392
|
+
gpo_off( gpo_base+1 )
|
393
|
+
end
|
394
|
+
|
395
|
+
|
396
|
+
# Returns the firmware version of the LCD module that you are
|
397
|
+
# communicating with as a dotted integer (for example '5.4').
|
398
|
+
def firmware_version
|
399
|
+
return @firmware_version unless @firmware_version.nil?
|
400
|
+
|
401
|
+
# Request firmware version number
|
402
|
+
send_command( 0x36 )
|
403
|
+
|
404
|
+
# Read back one byte
|
405
|
+
value = getc
|
406
|
+
major = (value & 0xF0) >> 4
|
407
|
+
minor = value & 0x0F
|
408
|
+
return @firmware_version = "#{major}.#{minor}"
|
409
|
+
end
|
410
|
+
|
411
|
+
|
412
|
+
TYPEMAP = {
|
413
|
+
0x10 => 'GLC12232',
|
414
|
+
0x13 => 'GLC24064',
|
415
|
+
0x15 => 'GLK24064-25',
|
416
|
+
0x22 => 'GLK12232-25',
|
417
|
+
0x24 => 'GLK12232-25-SM',
|
418
|
+
0x26 => 'GLK24064-16-1U',
|
419
|
+
0x27 => 'GLK19264-7T-1U',
|
420
|
+
0x28 => 'GLK12232-16',
|
421
|
+
0x29 => 'GLK12232-16-SM',
|
422
|
+
0x72 => 'GLK240128-25'
|
423
|
+
}
|
424
|
+
|
425
|
+
# Return the Product Idenfier for the LCD module (for example 'GLK24064-25').
|
426
|
+
# This can be determined automatically or passed as a parameter to new().
|
427
|
+
def lcd_type
|
428
|
+
return @lcd_type unless @lcd_type.nil?
|
429
|
+
|
430
|
+
# Request LCD module type
|
431
|
+
send_command( 0x37 )
|
432
|
+
|
433
|
+
# Read back one byte
|
434
|
+
type = getc
|
435
|
+
if TYPEMAP.has_key?(type)
|
436
|
+
@lcd_type = TYPEMAP[type]
|
437
|
+
else
|
438
|
+
@lcd_type = "Unknown-#{type}"
|
439
|
+
end
|
440
|
+
end
|
441
|
+
|
442
|
+
# Returns the dimensions (in pixels) of the LCD module you are talking
|
443
|
+
# to as an array, width followed by height.
|
444
|
+
def lcd_dimensions
|
445
|
+
# Parse the LCD type to work out the dimensions
|
446
|
+
if (lcd_type =~ /^(GLC|GLK)(\d{3})(\d{2})-|$/)
|
447
|
+
return [$2,$3]
|
448
|
+
else
|
449
|
+
raise "Can't get screen dimensions: unknown LCD module"
|
450
|
+
end
|
451
|
+
end
|
452
|
+
|
453
|
+
private
|
454
|
+
|
455
|
+
# Private method to get the base GPO bit for specified LED number
|
456
|
+
def led_gpo_base(num)
|
457
|
+
case num.to_i
|
458
|
+
when 0
|
459
|
+
1
|
460
|
+
when 1
|
461
|
+
3
|
462
|
+
when 2
|
463
|
+
5
|
464
|
+
else
|
465
|
+
raise 'Invalid LED number'
|
466
|
+
end
|
467
|
+
end
|
468
|
+
|
469
|
+
end # GLK
|
470
|
+
end # MatrixOrbital
|
metadata
ADDED
@@ -0,0 +1,69 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: matrixorbital-glk
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.0.1
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Nicholas J Humfrey
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2008-07-20 00:00:00 +01:00
|
13
|
+
default_executable:
|
14
|
+
dependencies:
|
15
|
+
- !ruby/object:Gem::Dependency
|
16
|
+
name: rake
|
17
|
+
version_requirement:
|
18
|
+
version_requirements: !ruby/object:Gem::Requirement
|
19
|
+
requirements:
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: "0"
|
23
|
+
version:
|
24
|
+
description:
|
25
|
+
email: njh@aelius.com
|
26
|
+
executables: []
|
27
|
+
|
28
|
+
extensions: []
|
29
|
+
|
30
|
+
extra_rdoc_files:
|
31
|
+
- README
|
32
|
+
- NEWS
|
33
|
+
- COPYING
|
34
|
+
files:
|
35
|
+
- Rakefile
|
36
|
+
- lib/matrixorbital/glk.rb
|
37
|
+
- examples/identify.rb
|
38
|
+
- examples/load-usb-driver.sh
|
39
|
+
- README
|
40
|
+
- NEWS
|
41
|
+
- COPYING
|
42
|
+
has_rdoc: true
|
43
|
+
homepage: http://matrixorbital.rubyforge.org
|
44
|
+
post_install_message:
|
45
|
+
rdoc_options: []
|
46
|
+
|
47
|
+
require_paths:
|
48
|
+
- lib
|
49
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
50
|
+
requirements:
|
51
|
+
- - ">="
|
52
|
+
- !ruby/object:Gem::Version
|
53
|
+
version: "0"
|
54
|
+
version:
|
55
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - ">="
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: "0"
|
60
|
+
version:
|
61
|
+
requirements: []
|
62
|
+
|
63
|
+
rubyforge_project: matrixorbital
|
64
|
+
rubygems_version: 0.9.5
|
65
|
+
signing_key:
|
66
|
+
specification_version: 2
|
67
|
+
summary: A ruby gem to interface Matrix Orbital's GLK series of LCD Screens.
|
68
|
+
test_files: []
|
69
|
+
|