matrixorbital-glk 0.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- 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
|
+
|