smartware 0.4.4 → 0.4.5
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/config/smartware.yml.sample +3 -0
- data/lib/smartware.rb +5 -0
- data/lib/smartware/drivers/pin_pad/zt588.rb +20 -8
- data/lib/smartware/drivers/user_interface/dummy.rb +28 -0
- data/lib/smartware/drivers/user_interface/x11.rb +94 -0
- data/lib/smartware/interfaces/user_interface.rb +46 -0
- data/lib/smartware/version.rb +1 -1
- data/smartware.gemspec +2 -0
- metadata +37 -2
data/config/smartware.yml.sample
CHANGED
data/lib/smartware.rb
CHANGED
@@ -23,6 +23,7 @@ require 'smartware/interfaces/printer'
|
|
23
23
|
require 'smartware/interfaces/watchdog'
|
24
24
|
require 'smartware/interfaces/card_reader'
|
25
25
|
require 'smartware/interfaces/pin_pad'
|
26
|
+
require 'smartware/interfaces/user_interface'
|
26
27
|
require 'smartware/connection_monitor'
|
27
28
|
require 'smartware/pub_sub_server'
|
28
29
|
require 'smartware/pub_sub_client'
|
@@ -57,6 +58,10 @@ module Smartware
|
|
57
58
|
Smartware::Client.instance('druby://localhost:6006')
|
58
59
|
end
|
59
60
|
|
61
|
+
def self.user_interface
|
62
|
+
Smartware::Client.instance('druby://localhost:6007')
|
63
|
+
end
|
64
|
+
|
60
65
|
def self.subscribe(&block)
|
61
66
|
Smartware::PubSubClient.destroy_static_client
|
62
67
|
client = Smartware::PubSubClient.create_static_client
|
@@ -170,11 +170,13 @@ module Smartware
|
|
170
170
|
@user_data = info[:user_info]
|
171
171
|
end
|
172
172
|
|
173
|
+
=begin unsafe - enable at your own risk
|
173
174
|
def wipe
|
174
175
|
control MISC, WIPE
|
175
176
|
sleep 3
|
176
177
|
initialize_device true
|
177
178
|
end
|
179
|
+
=end
|
178
180
|
|
179
181
|
def restart
|
180
182
|
control MISC, RESET
|
@@ -382,7 +384,7 @@ module Smartware
|
|
382
384
|
if !reload
|
383
385
|
if info[:settings][:blank]
|
384
386
|
Logging.logger.warn "ZT588: IMK not loaded, pinpad unoperational"
|
385
|
-
|
387
|
+
=begin unsafe - enable at your own risk
|
386
388
|
imk, tmk = @imk_source.call
|
387
389
|
|
388
390
|
return if imk.nil?
|
@@ -402,14 +404,24 @@ module Smartware
|
|
402
404
|
@post_configuration.call
|
403
405
|
|
404
406
|
restart
|
407
|
+
=end
|
405
408
|
else
|
406
|
-
|
407
|
-
|
408
|
-
|
409
|
-
|
410
|
-
|
411
|
-
|
412
|
-
|
409
|
+
[0x10, 0x20, 0x30].each do |key|
|
410
|
+
p key
|
411
|
+
begin
|
412
|
+
random = auth AUTH_GET_CHALLENGE, "0000000000000000"
|
413
|
+
challenge = auth key, random
|
414
|
+
response = calculate_response challenge, UID
|
415
|
+
check = calculate_response response, UID
|
416
|
+
verify = auth AUTH_WITH_TMK, response
|
417
|
+
raise ZT588Error, "verification failed" if check != verify
|
418
|
+
Logging.logger.debug "ZT588: authenticated"
|
419
|
+
|
420
|
+
break
|
421
|
+
rescue => e
|
422
|
+
p e
|
423
|
+
end
|
424
|
+
end
|
413
425
|
|
414
426
|
@device_ready.call
|
415
427
|
end
|
@@ -0,0 +1,28 @@
|
|
1
|
+
require "base64"
|
2
|
+
|
3
|
+
module Smartware
|
4
|
+
module Driver
|
5
|
+
module UserInterface
|
6
|
+
class Dummy
|
7
|
+
|
8
|
+
SCREENSHOT = Base64.decode64("R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7")
|
9
|
+
|
10
|
+
def initialize(config)
|
11
|
+
|
12
|
+
end
|
13
|
+
|
14
|
+
def delete_calibration
|
15
|
+
|
16
|
+
end
|
17
|
+
|
18
|
+
def restart_ui
|
19
|
+
|
20
|
+
end
|
21
|
+
|
22
|
+
def screenshot
|
23
|
+
SCREENSHOT
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,94 @@
|
|
1
|
+
require "chunky_png"
|
2
|
+
require "oily_png"
|
3
|
+
|
4
|
+
module Smartware
|
5
|
+
module Driver
|
6
|
+
module UserInterface
|
7
|
+
class X11
|
8
|
+
def initialize(config)
|
9
|
+
@user = config["user"]
|
10
|
+
@display = config["display"]
|
11
|
+
end
|
12
|
+
|
13
|
+
def delete_calibration
|
14
|
+
File.delete "/home/#{@user}/.calibration_data" rescue nil
|
15
|
+
File.delete "/home/#{@user}/.monitors" rescue nil
|
16
|
+
end
|
17
|
+
|
18
|
+
def restart_ui
|
19
|
+
system "pkill", "-U", @user, "xinit"
|
20
|
+
end
|
21
|
+
|
22
|
+
def screenshot
|
23
|
+
mine_pipe, xwd_pipe = IO.pipe
|
24
|
+
png = nil
|
25
|
+
|
26
|
+
begin
|
27
|
+
pid = Process.spawn({
|
28
|
+
"DISPLAY" => @display,
|
29
|
+
"XAUTHORITY" => "/home/#{@user}/.Xauthority"
|
30
|
+
}, "xwd", "-root", in: :close, out: xwd_pipe)
|
31
|
+
|
32
|
+
xwd_pipe.close
|
33
|
+
xwd_pipe = nil
|
34
|
+
|
35
|
+
|
36
|
+
header_size, file_version,
|
37
|
+
pixmap_format, pixmap_depth, pixmap_width, pixmap_height,
|
38
|
+
xoffset, byteorder, bitmap_unit, bitmap_bit_order, bitmap_pad,
|
39
|
+
bits_per_pixel, bytes_per_line, visual_class,
|
40
|
+
red_mask, green_mask, blue_mask, bits_per_rgb,
|
41
|
+
number_of_colors, color_map_entires,
|
42
|
+
window_width, window_height, window_x, window_y, window_border_width =
|
43
|
+
mine_pipe.read(4 * 25).unpack("N*")
|
44
|
+
|
45
|
+
raise "Only direct color images are supported" if (visual_class != 5 && visual_class != 4)
|
46
|
+
|
47
|
+
mine_pipe.read((header_size + number_of_colors * 12) - 4 * 25)
|
48
|
+
|
49
|
+
initial = Array.new pixmap_width, pixmap_height
|
50
|
+
|
51
|
+
case bits_per_pixel
|
52
|
+
when 24
|
53
|
+
0.upto(pixmap_height - 1) do |y|
|
54
|
+
line = mine_pipe.read(bytes_per_line)
|
55
|
+
.slice(0, bits_per_pixel / 8 * pixmap_width)
|
56
|
+
|
57
|
+
0.upto(pixmap_width - 1) do |x|
|
58
|
+
initial[y * pixmap_width + x] =
|
59
|
+
(line.getbyte(x * 3 + 2) << 24) |
|
60
|
+
(line.getbyte(x * 3 + 1) << 16) |
|
61
|
+
(line.getbyte(x * 3 + 0) << 8) |
|
62
|
+
0xFF
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
when 32
|
67
|
+
0.upto(pixmap_height - 1) do |y|
|
68
|
+
line = mine_pipe.read(bytes_per_line)
|
69
|
+
.slice(0, bits_per_pixel / 8 * pixmap_width)
|
70
|
+
|
71
|
+
0.upto(pixmap_width - 1) do |x|
|
72
|
+
pix, = line.slice(x * 4, 4).unpack("V")
|
73
|
+
initial[y * pixmap_width + x] = ((pix & 0xFFFFFF) << 8) | 0xFF
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
else
|
78
|
+
raise "Unsupported bpp: #{bits_per_pixel}"
|
79
|
+
end
|
80
|
+
|
81
|
+
png = ChunkyPNG::Image.new pixmap_width, pixmap_height, initial
|
82
|
+
|
83
|
+
png.to_datastream.to_blob
|
84
|
+
rescue => e
|
85
|
+
"!error: #{e}"
|
86
|
+
ensure
|
87
|
+
mine_pipe.close
|
88
|
+
xwd_pipe.close unless xwd_pipe.nil?
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
end
|
93
|
+
end
|
94
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
module Smartware
|
2
|
+
module Interface
|
3
|
+
class UserInterface < Interface
|
4
|
+
|
5
|
+
def initialize(config, service)
|
6
|
+
super
|
7
|
+
|
8
|
+
update_status :error, nil
|
9
|
+
update_status :model, ''
|
10
|
+
update_status :version, ''
|
11
|
+
update_status :screenshot_pending, false
|
12
|
+
|
13
|
+
@screenshot_data = nil
|
14
|
+
end
|
15
|
+
|
16
|
+
def delete_calibration
|
17
|
+
Logging.logger.info "Deleting calibration data"
|
18
|
+
@device.delete_calibration
|
19
|
+
end
|
20
|
+
|
21
|
+
def restart_ui
|
22
|
+
Logging.logger.info "Restarting user interface"
|
23
|
+
@device.restart_ui
|
24
|
+
end
|
25
|
+
|
26
|
+
def request_screenshot
|
27
|
+
Logging.logger.info "Requested screenshot"
|
28
|
+
|
29
|
+
EventMachine.defer @device.method(:screenshot), ->(data) do
|
30
|
+
@screenshot_data = data
|
31
|
+
update_status :screenshot_pending, true
|
32
|
+
end
|
33
|
+
|
34
|
+
nil
|
35
|
+
end
|
36
|
+
|
37
|
+
def retrieve_screenshot
|
38
|
+
data = @screenshot_data
|
39
|
+
@screenshot_data = nil
|
40
|
+
update_status :screenshot_pending, false
|
41
|
+
|
42
|
+
data
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
data/lib/smartware/version.rb
CHANGED
data/smartware.gemspec
CHANGED
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: smartware
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.4.
|
4
|
+
version: 0.4.5
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -11,7 +11,7 @@ authors:
|
|
11
11
|
autorequire:
|
12
12
|
bindir: bin
|
13
13
|
cert_chain: []
|
14
|
-
date: 2013-02-
|
14
|
+
date: 2013-02-15 00:00:00.000000000 Z
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
17
17
|
name: smartkiosk-common
|
@@ -141,6 +141,38 @@ dependencies:
|
|
141
141
|
- - ! '>='
|
142
142
|
- !ruby/object:Gem::Version
|
143
143
|
version: '0'
|
144
|
+
- !ruby/object:Gem::Dependency
|
145
|
+
name: chunky_png
|
146
|
+
requirement: !ruby/object:Gem::Requirement
|
147
|
+
none: false
|
148
|
+
requirements:
|
149
|
+
- - ! '>='
|
150
|
+
- !ruby/object:Gem::Version
|
151
|
+
version: '0'
|
152
|
+
type: :runtime
|
153
|
+
prerelease: false
|
154
|
+
version_requirements: !ruby/object:Gem::Requirement
|
155
|
+
none: false
|
156
|
+
requirements:
|
157
|
+
- - ! '>='
|
158
|
+
- !ruby/object:Gem::Version
|
159
|
+
version: '0'
|
160
|
+
- !ruby/object:Gem::Dependency
|
161
|
+
name: oily_png
|
162
|
+
requirement: !ruby/object:Gem::Requirement
|
163
|
+
none: false
|
164
|
+
requirements:
|
165
|
+
- - ! '>='
|
166
|
+
- !ruby/object:Gem::Version
|
167
|
+
version: '0'
|
168
|
+
type: :runtime
|
169
|
+
prerelease: false
|
170
|
+
version_requirements: !ruby/object:Gem::Requirement
|
171
|
+
none: false
|
172
|
+
requirements:
|
173
|
+
- - ! '>='
|
174
|
+
- !ruby/object:Gem::Version
|
175
|
+
version: '0'
|
144
176
|
description: Smartware is the Smartkiosk hardware control daemon
|
145
177
|
email:
|
146
178
|
- e.sudarchikov@roundlake.ru
|
@@ -180,6 +212,8 @@ files:
|
|
180
212
|
- lib/smartware/drivers/pin_pad/zt588.rb
|
181
213
|
- lib/smartware/drivers/printer/dummy.rb
|
182
214
|
- lib/smartware/drivers/printer/esc_pos.rb
|
215
|
+
- lib/smartware/drivers/user_interface/dummy.rb
|
216
|
+
- lib/smartware/drivers/user_interface/x11.rb
|
183
217
|
- lib/smartware/drivers/watchdog/dummy.rb
|
184
218
|
- lib/smartware/drivers/watchdog/watchdog_daemon.rb
|
185
219
|
- lib/smartware/interfaces/card_reader.rb
|
@@ -188,6 +222,7 @@ files:
|
|
188
222
|
- lib/smartware/interfaces/modem.rb
|
189
223
|
- lib/smartware/interfaces/pin_pad.rb
|
190
224
|
- lib/smartware/interfaces/printer.rb
|
225
|
+
- lib/smartware/interfaces/user_interface.rb
|
191
226
|
- lib/smartware/interfaces/watchdog.rb
|
192
227
|
- lib/smartware/logging.rb
|
193
228
|
- lib/smartware/process_manager.rb
|