da_funk 3.31.0 → 3.34.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.
- checksums.yaml +4 -4
- data/Gemfile +10 -1
- data/Gemfile.lock +18 -8
- data/README.md +0 -0
- data/README_GUIDE.md +0 -0
- data/RELEASE_NOTES.md +22 -0
- data/Rakefile +14 -0
- data/guides/sample_input_output.rb +0 -0
- data/guides/sample_message_iso8583.rb +0 -0
- data/guides/sample_network_gprs.rb +0 -0
- data/guides/sample_read_magnect_card.rb +0 -0
- data/guides/sample_socket.rb +0 -0
- data/guides/sample_transaction.rb +0 -0
- data/guides/sample_transaction_download_application.rb +0 -0
- data/guides/sample_transaction_download_file.rb +0 -0
- data/guides/sample_transaction_download_parameter_file.rb +0 -0
- data/lib/da_funk/connection_management.rb +25 -10
- data/lib/da_funk/event_handler.rb +1 -1
- data/lib/da_funk/helper.rb +55 -16
- data/lib/da_funk/helper/status_bar.rb +42 -46
- data/lib/da_funk/params_dat.rb +65 -25
- data/lib/da_funk/transaction/download.rb +0 -0
- data/lib/da_funk/transaction/iso.rb +0 -0
- data/lib/da_funk/version.rb +1 -1
- data/lib/device.rb +0 -0
- data/lib/device/crypto.rb +0 -0
- data/lib/device/display.rb +0 -0
- data/lib/device/io.rb +53 -0
- data/lib/device/network.rb +19 -33
- data/lib/device/printer.rb +0 -0
- data/lib/device/setting.rb +0 -0
- data/lib/device/version.rb +0 -0
- data/lib/device/virtual_keyboard.rb +81 -34
- data/lib/file_db.rb +0 -0
- data/lib/iso8583/bitmap.rb +94 -54
- data/lib/iso8583/codec.rb +3 -3
- data/lib/iso8583/field.rb +48 -4
- data/lib/iso8583/fields.rb +3 -1
- data/lib/iso8583/message.rb +25 -12
- data/lib/iso8583/util.rb +1 -1
- data/test/iso8583/bitmap_test.rb +277 -0
- data/test/iso8583/message_test.rb +111 -0
- data/test/iso8583/minitest_helper.rb +11 -0
- metadata +12 -6
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: ca17006779ad6c0d5b9bda06b03b39206539d23769be8e1eae50368dcc341195
|
|
4
|
+
data.tar.gz: 25df4cf6175cf3b04053b16a7a99f8f27e36864bef6afe380a3baf2e1bd9ba79
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: c19b050fec970e04fb6d681af3ae11d2eda01c42cde7ee8cc32cab784bda523f2967b4d175f6ceef84e35dc1376a26c7b063b2defac68c3a4711b41e02026331
|
|
7
|
+
data.tar.gz: 161f31d14b80fdaeeebe6120104471295ada25d06ae28940914169188ee01a64dde5b7d5c66c8cc91bcb3caa5332aaab8965056236faff1df28a17796eafd4c4
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
PATH
|
|
2
2
|
remote: .
|
|
3
3
|
specs:
|
|
4
|
-
da_funk (3.
|
|
4
|
+
da_funk (3.34.1)
|
|
5
5
|
archive-zip (~> 0.5)
|
|
6
6
|
bundler
|
|
7
7
|
cloudwalk_handshake
|
|
@@ -15,22 +15,25 @@ GEM
|
|
|
15
15
|
archive-zip (0.12.0)
|
|
16
16
|
io-like (~> 0.3.0)
|
|
17
17
|
ast (2.4.1)
|
|
18
|
+
byebug (11.1.3)
|
|
18
19
|
cloudwalk (1.15.0)
|
|
19
20
|
bundler
|
|
20
21
|
rake
|
|
21
|
-
cloudwalk_handshake (
|
|
22
|
+
cloudwalk_handshake (2.0.0)
|
|
22
23
|
funky-simplehttp (~> 0.6)
|
|
23
|
-
|
|
24
|
-
|
|
24
|
+
docile (1.3.5)
|
|
25
|
+
funky-emv (2.0.1)
|
|
26
|
+
funky-tlv (~> 1.0)
|
|
25
27
|
funky-mock (0.1.0)
|
|
26
28
|
funky-simplehttp (0.6.0)
|
|
27
|
-
funky-tlv (0.
|
|
29
|
+
funky-tlv (1.0.1)
|
|
28
30
|
io-like (0.3.1)
|
|
31
|
+
minitest (5.14.4)
|
|
29
32
|
parallel (1.19.2)
|
|
30
33
|
parser (2.7.2.0)
|
|
31
34
|
ast (~> 2.4.1)
|
|
32
|
-
posxml_parser (
|
|
33
|
-
funky-emv (~>
|
|
35
|
+
posxml_parser (3.0.1)
|
|
36
|
+
funky-emv (~> 2)
|
|
34
37
|
rainbow (3.0.0)
|
|
35
38
|
rake (13.0.1)
|
|
36
39
|
regexp_parser (1.8.2)
|
|
@@ -47,6 +50,10 @@ GEM
|
|
|
47
50
|
rubocop-ast (1.1.0)
|
|
48
51
|
parser (>= 2.7.1.5)
|
|
49
52
|
ruby-progressbar (1.10.1)
|
|
53
|
+
simplecov (0.18.5)
|
|
54
|
+
docile (~> 1.1)
|
|
55
|
+
simplecov-html (~> 0.11)
|
|
56
|
+
simplecov-html (0.12.3)
|
|
50
57
|
unicode-display_width (1.7.0)
|
|
51
58
|
yard (0.9.25)
|
|
52
59
|
|
|
@@ -56,12 +63,15 @@ PLATFORMS
|
|
|
56
63
|
x86-mingw32
|
|
57
64
|
|
|
58
65
|
DEPENDENCIES
|
|
66
|
+
byebug
|
|
59
67
|
cloudwalk
|
|
60
68
|
da_funk!
|
|
61
69
|
funky-mock
|
|
62
70
|
funky-simplehttp
|
|
71
|
+
minitest
|
|
63
72
|
rubocop
|
|
73
|
+
simplecov
|
|
64
74
|
yard
|
|
65
75
|
|
|
66
76
|
BUNDLED WITH
|
|
67
|
-
2.
|
|
77
|
+
2.2.7
|
data/README.md
CHANGED
|
File without changes
|
data/README_GUIDE.md
CHANGED
|
File without changes
|
data/RELEASE_NOTES.md
CHANGED
|
@@ -1,5 +1,27 @@
|
|
|
1
1
|
# DaFunk
|
|
2
2
|
|
|
3
|
+
### 3.33.1 - 2021-02-19
|
|
4
|
+
|
|
5
|
+
- Fixed argument being passed to hours2seconds method which was nil;
|
|
6
|
+
|
|
7
|
+
### 3.33.0 - 2021-02-08
|
|
8
|
+
|
|
9
|
+
- Added method Device::IO#get_format_or_touchscreen_action;
|
|
10
|
+
- Added support to images on ParamsDat#download, ParamsDat#update_app and ParamsDat#update_file;
|
|
11
|
+
- Return result of ParamsDat#update_apps call to the caller.
|
|
12
|
+
|
|
13
|
+
### 3.32.0 - 2021-01-04
|
|
14
|
+
|
|
15
|
+
- Remapped virtual keyboard to add support to new layout;
|
|
16
|
+
- Make timeout of virtual keyboard parametrized;
|
|
17
|
+
- Limit size of string to 20 on virtual keyboard;
|
|
18
|
+
- Refactoring status bar:
|
|
19
|
+
- Check if thread is paused which means communication it's being configured. In this case 'sem sinal' message should be displayed;
|
|
20
|
+
- Do not show media type an media icon if thread is paused;
|
|
21
|
+
- Removed thread pause from attach and scan calls, let the application that is doing the configuration take care of that;
|
|
22
|
+
- Move reload of metadata to communication thread;
|
|
23
|
+
- Added support to check network conn status from time to time, default is each 5 minutes.
|
|
24
|
+
|
|
3
25
|
### 3.31.0 - 2020-11-27
|
|
4
26
|
|
|
5
27
|
- Added support to new battery view (Exact percentage);
|
data/Rakefile
CHANGED
|
@@ -90,3 +90,17 @@ end
|
|
|
90
90
|
task "test:all" => :build
|
|
91
91
|
task "test:unit" => :build
|
|
92
92
|
task "test:integration" => :build
|
|
93
|
+
|
|
94
|
+
Rake::TestTask.new('test:iso8583') do |t|
|
|
95
|
+
Bundler.require(:default, :test)
|
|
96
|
+
t.libs << File.join("lib", "da_funk", "helper")
|
|
97
|
+
t.libs << File.join("lib","iso8583")
|
|
98
|
+
t.libs << File.join("test", "iso8583")
|
|
99
|
+
t.test_files = FileList['test/iso8583/**/*_test.rb']
|
|
100
|
+
end
|
|
101
|
+
|
|
102
|
+
task "test:iso8583:cov" do
|
|
103
|
+
ENV.store('COV', '1')
|
|
104
|
+
Bundler.require(:default, :test)
|
|
105
|
+
Rake::Task["test:iso8583"].execute
|
|
106
|
+
end
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
data/guides/sample_socket.rb
CHANGED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
@@ -1,21 +1,23 @@
|
|
|
1
1
|
module DaFunk
|
|
2
2
|
class ConnectionManagement
|
|
3
3
|
class << self
|
|
4
|
-
attr_accessor :drops, :primary_timeout
|
|
4
|
+
attr_accessor :drops, :primary_timeout, :last_time_check
|
|
5
5
|
end
|
|
6
6
|
self.drops = 0
|
|
7
7
|
DEFAULT_DROP_LIMIT = 2
|
|
8
8
|
|
|
9
9
|
def self.check
|
|
10
|
-
if
|
|
11
|
-
if
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
if fallback?
|
|
16
|
-
:fallback_communication
|
|
10
|
+
if must_check?
|
|
11
|
+
if Device::Network.connected?
|
|
12
|
+
if primary_try?
|
|
13
|
+
:primary_communication
|
|
14
|
+
end
|
|
17
15
|
else
|
|
18
|
-
|
|
16
|
+
if fallback?
|
|
17
|
+
:fallback_communication
|
|
18
|
+
else
|
|
19
|
+
:attach_registration_fail
|
|
20
|
+
end
|
|
19
21
|
end
|
|
20
22
|
end
|
|
21
23
|
end
|
|
@@ -125,6 +127,19 @@ module DaFunk
|
|
|
125
127
|
def self.schedule_primary_timeout
|
|
126
128
|
self.primary_timeout = (Time.now + self.conn_fallback_timer)
|
|
127
129
|
end
|
|
130
|
+
|
|
131
|
+
def self.must_check?
|
|
132
|
+
if self.last_time_check
|
|
133
|
+
if self.last_time_check < Time.now
|
|
134
|
+
self.last_time_check = Time.now + @value
|
|
135
|
+
true
|
|
136
|
+
end
|
|
137
|
+
else
|
|
138
|
+
@value = DaFunk::ParamsDat.file['conn_check_timer']
|
|
139
|
+
@value = @value.nil? ? 300 : @value * 60
|
|
140
|
+
self.last_time_check = Time.now + @value
|
|
141
|
+
true
|
|
142
|
+
end
|
|
143
|
+
end
|
|
128
144
|
end
|
|
129
145
|
end
|
|
130
|
-
|
|
@@ -52,7 +52,7 @@ module DaFunk
|
|
|
52
52
|
end
|
|
53
53
|
|
|
54
54
|
unless config["timestamp"]
|
|
55
|
-
config["timestamp"] = hours2seconds(option[
|
|
55
|
+
config["timestamp"] = hours2seconds(option[:hours])
|
|
56
56
|
else
|
|
57
57
|
if config["interval"]["hours"].to_s != option[:hours].to_s
|
|
58
58
|
config["timestamp"] = hours2seconds(option[:hours])
|
data/lib/da_funk/helper.rb
CHANGED
|
@@ -61,38 +61,77 @@ module DaFunk
|
|
|
61
61
|
end
|
|
62
62
|
end
|
|
63
63
|
|
|
64
|
-
def check_download_error(
|
|
65
|
-
value =
|
|
64
|
+
def check_download_error(download_ret, enable_txt_ui = true)
|
|
65
|
+
value = false
|
|
66
|
+
|
|
67
|
+
if download_ret == DaFunk::Transaction::Download::FILE_NOT_CHANGE
|
|
68
|
+
if enable_txt_ui
|
|
69
|
+
I18n.pt(:download_file_is_the_same, :args => [download_ret])
|
|
70
|
+
getc(1000)
|
|
71
|
+
end
|
|
72
|
+
value = true
|
|
73
|
+
elsif download_ret == DaFunk::Transaction::Download::SUCCESS
|
|
74
|
+
if enable_txt_ui
|
|
75
|
+
I18n.pt(:download_success, :args => [download_ret])
|
|
76
|
+
getc(1000)
|
|
77
|
+
end
|
|
78
|
+
value = true
|
|
79
|
+
end
|
|
80
|
+
value
|
|
81
|
+
end
|
|
82
|
+
|
|
83
|
+
def show_download_error(download_ret, enable_txt_ui = true)
|
|
66
84
|
ui = {}
|
|
67
85
|
|
|
68
|
-
case
|
|
86
|
+
case download_ret
|
|
69
87
|
when DaFunk::Transaction::Download::SERIAL_NUMBER_NOT_FOUND
|
|
88
|
+
unless enable_txt_ui
|
|
89
|
+
Device::Display.print_bitmap('./shared/config_fail.bmp')
|
|
90
|
+
getc(5000)
|
|
91
|
+
end
|
|
70
92
|
ui[:i18n] = :download_serial_number_not_found
|
|
71
|
-
|
|
93
|
+
ContextLog.info "[I] Download error, serial number not registered"
|
|
72
94
|
when DaFunk::Transaction::Download::FILE_NOT_FOUND
|
|
95
|
+
unless enable_txt_ui
|
|
96
|
+
Device::Display.print_bitmap('./shared/config_fail.bmp')
|
|
97
|
+
getc(5000)
|
|
98
|
+
end
|
|
73
99
|
ui[:i18n] = :download_file_not_found
|
|
74
|
-
|
|
75
|
-
when DaFunk::Transaction::Download::FILE_NOT_CHANGE
|
|
76
|
-
ui[:i18n] = :download_file_is_the_same
|
|
77
|
-
when DaFunk::Transaction::Download::SUCCESS
|
|
78
|
-
ui[:i18n] = :download_success
|
|
100
|
+
ContextLog.info "[I] Download error, file not found"
|
|
79
101
|
when DaFunk::Transaction::Download::COMMUNICATION_ERROR
|
|
102
|
+
unless enable_txt_ui
|
|
103
|
+
Device::Display.print_bitmap('./shared/network_system_error.bmp')
|
|
104
|
+
getc(5000)
|
|
105
|
+
end
|
|
80
106
|
ui[:i18n] = :download_communication_failure
|
|
81
|
-
|
|
107
|
+
ContextLog.info "[I] Download error, connection problem"
|
|
82
108
|
when DaFunk::Transaction::Download::MAPREDUCE_RESPONSE_ERROR
|
|
109
|
+
unless enable_txt_ui
|
|
110
|
+
Device::Display.print_bitmap('./shared/config_fail.bmp')
|
|
111
|
+
getc(5000)
|
|
112
|
+
end
|
|
83
113
|
ui[:i18n] = :download_encoding_error
|
|
84
|
-
|
|
114
|
+
ContextLog.info "[I] Download error, encoding problem"
|
|
85
115
|
when DaFunk::Transaction::Download::IO_ERROR
|
|
116
|
+
unless enable_txt_ui
|
|
117
|
+
Device::Display.print_bitmap('./shared/config_fail.bmp')
|
|
118
|
+
getc(5000)
|
|
119
|
+
end
|
|
86
120
|
ui[:i18n] = :download_io_error
|
|
87
|
-
|
|
121
|
+
ContextLog.info "[I] Download error, IO error"
|
|
88
122
|
else
|
|
123
|
+
unless enable_txt_ui
|
|
124
|
+
Device::Display.print_bitmap('./shared/network_system_error.bmp')
|
|
125
|
+
getc(5000)
|
|
126
|
+
end
|
|
89
127
|
ui[:i18n] = :download_communication_failure
|
|
90
|
-
|
|
128
|
+
ContextLog.info "[I] Download error, connection problem"
|
|
91
129
|
end
|
|
92
130
|
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
131
|
+
if enable_txt_ui
|
|
132
|
+
I18n.pt(ui[:i18n], :args => [download_ret])
|
|
133
|
+
getc(5000)
|
|
134
|
+
end
|
|
96
135
|
end
|
|
97
136
|
|
|
98
137
|
def try(tries, &block)
|
|
@@ -18,21 +18,6 @@ module DaFunk
|
|
|
18
18
|
SLOT_BATTERY_PERCENTUAL = 6
|
|
19
19
|
SLOT_BATTERY_LEVEL = 7
|
|
20
20
|
|
|
21
|
-
SLOT_MESSAGE_CONNECTION = {
|
|
22
|
-
true => {
|
|
23
|
-
:slot1 => 2,
|
|
24
|
-
:slot2 => 3,
|
|
25
|
-
:message1 => './shared/conectado_01.png',
|
|
26
|
-
:message2 => './shared/conectado_02.png'
|
|
27
|
-
},
|
|
28
|
-
false => {
|
|
29
|
-
:slot1 => 2,
|
|
30
|
-
:slot2 => 3,
|
|
31
|
-
:message1 => './shared/buscando_01.png',
|
|
32
|
-
:message2 => './shared/buscando_02.png'
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
|
|
36
21
|
# TODO: review the 'print_status_bar' API to reduce the number of files
|
|
37
22
|
# to eleven?
|
|
38
23
|
BATTERY_PERCENTAGE_IMAGES = [
|
|
@@ -72,6 +57,11 @@ module DaFunk
|
|
|
72
57
|
'./shared/99%.png', './shared/100%.png'
|
|
73
58
|
].freeze
|
|
74
59
|
|
|
60
|
+
MEDIA_PATH = {
|
|
61
|
+
:gprs => './shared/3G.png',
|
|
62
|
+
:wifi => './shared/WIFI.png'
|
|
63
|
+
}
|
|
64
|
+
|
|
75
65
|
BATTERY_CHARGING = [
|
|
76
66
|
"./shared/battery_charging.png",
|
|
77
67
|
"./shared/battery_charged.png"
|
|
@@ -109,7 +99,8 @@ module DaFunk
|
|
|
109
99
|
}
|
|
110
100
|
|
|
111
101
|
class << self
|
|
112
|
-
attr_accessor :
|
|
102
|
+
attr_accessor :current_signal, :current_message, :battery, :power, :managment
|
|
103
|
+
attr_accessor :current_media
|
|
113
104
|
end
|
|
114
105
|
|
|
115
106
|
def self.check
|
|
@@ -124,51 +115,56 @@ module DaFunk
|
|
|
124
115
|
if File.exists?('./shared/system_update')
|
|
125
116
|
PAX::Display.print_status_bar(SLOT_UPDATE, "./shared/system_update_download.png")
|
|
126
117
|
PAX::Display.print_status_bar(3, nil)
|
|
127
|
-
self.connected = false
|
|
128
118
|
else
|
|
129
119
|
self.change_message
|
|
130
120
|
end
|
|
131
121
|
end
|
|
132
122
|
|
|
133
123
|
def self.change_message
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
|
|
124
|
+
if ThreadScheduler.pause?(ThreadScheduler::THREAD_EXTERNAL_COMMUNICATION, 200)
|
|
125
|
+
if self.current_message != :pause
|
|
126
|
+
self.current_message = :pause
|
|
127
|
+
Device::Display.print_status_bar(2, './shared/semsinal_01.png')
|
|
128
|
+
Device::Display.print_status_bar(3, './shared/semsinal_02.png')
|
|
129
|
+
end
|
|
130
|
+
elsif Device::Network.connected?
|
|
131
|
+
if self.current_message != :connected
|
|
132
|
+
self.current_message = :connected
|
|
133
|
+
Device::Display.print_status_bar(2, './shared/conectado_01.png')
|
|
134
|
+
Device::Display.print_status_bar(3, './shared/conectado_02.png')
|
|
135
|
+
end
|
|
136
|
+
else
|
|
137
|
+
if self.current_message != :searching
|
|
138
|
+
self.current_message = :searching
|
|
139
|
+
Device::Display.print_status_bar(2, './shared/buscando_01.png')
|
|
140
|
+
Device::Display.print_status_bar(3, './shared/buscando_02.png')
|
|
148
141
|
end
|
|
149
142
|
end
|
|
150
143
|
end
|
|
151
144
|
|
|
152
145
|
def self.change_connection
|
|
153
|
-
if
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
165
|
-
|
|
166
|
-
|
|
167
|
-
|
|
146
|
+
if ThreadScheduler.pause?(ThreadScheduler::THREAD_EXTERNAL_COMMUNICATION, 200)
|
|
147
|
+
Device::Display.print_status_bar(SLOT_MEDIA, nil)
|
|
148
|
+
Device::Display.print_status_bar(SLOT_SIGNAL_LEVEL, nil)
|
|
149
|
+
self.current_media = nil
|
|
150
|
+
self.current_signal = nil
|
|
151
|
+
elsif Device::Network.connected?
|
|
152
|
+
media = Device::Network.gprs? ? :gprs : :wifi
|
|
153
|
+
signal = Device::Network.signal
|
|
154
|
+
if media != self.current_media
|
|
155
|
+
self.current_media = media
|
|
156
|
+
Device::Display.print_status_bar(SLOT_MEDIA, MEDIA_PATH[self.current_media])
|
|
157
|
+
end
|
|
158
|
+
if signal != self.current_signal
|
|
159
|
+
self.current_signal = signal
|
|
160
|
+
Device::Display.print_status_bar(SLOT_SIGNAL_LEVEL,
|
|
161
|
+
self.get_image_path(self.current_media, self.current_signal))
|
|
168
162
|
end
|
|
169
163
|
else
|
|
170
164
|
Device::Display.print_status_bar(SLOT_MEDIA, nil)
|
|
171
165
|
Device::Display.print_status_bar(SLOT_SIGNAL_LEVEL, "./shared/searching.png")
|
|
166
|
+
self.current_media = nil
|
|
167
|
+
self.current_signal = nil
|
|
172
168
|
end
|
|
173
169
|
end
|
|
174
170
|
|