da_funk 3.30.0 → 3.34.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (46) hide show
  1. checksums.yaml +4 -4
  2. data/Gemfile +10 -1
  3. data/Gemfile.lock +12 -2
  4. data/README.md +0 -0
  5. data/README_GUIDE.md +0 -0
  6. data/RELEASE_NOTES.md +27 -0
  7. data/Rakefile +14 -0
  8. data/guides/sample_input_output.rb +0 -0
  9. data/guides/sample_message_iso8583.rb +0 -0
  10. data/guides/sample_network_gprs.rb +0 -0
  11. data/guides/sample_read_magnect_card.rb +0 -0
  12. data/guides/sample_socket.rb +0 -0
  13. data/guides/sample_transaction.rb +0 -0
  14. data/guides/sample_transaction_download_application.rb +0 -0
  15. data/guides/sample_transaction_download_file.rb +0 -0
  16. data/guides/sample_transaction_download_parameter_file.rb +0 -0
  17. data/lib/da_funk/connection_management.rb +25 -10
  18. data/lib/da_funk/event_handler.rb +1 -1
  19. data/lib/da_funk/helper.rb +55 -16
  20. data/lib/da_funk/helper/status_bar.rb +158 -105
  21. data/lib/da_funk/params_dat.rb +65 -25
  22. data/lib/da_funk/rake_task.rb +13 -6
  23. data/lib/da_funk/transaction/download.rb +0 -0
  24. data/lib/da_funk/transaction/iso.rb +0 -0
  25. data/lib/da_funk/version.rb +1 -1
  26. data/lib/device.rb +0 -0
  27. data/lib/device/crypto.rb +0 -0
  28. data/lib/device/display.rb +2 -1
  29. data/lib/device/io.rb +53 -0
  30. data/lib/device/network.rb +19 -33
  31. data/lib/device/printer.rb +0 -0
  32. data/lib/device/setting.rb +0 -0
  33. data/lib/device/system.rb +9 -0
  34. data/lib/device/version.rb +0 -0
  35. data/lib/device/virtual_keyboard.rb +81 -34
  36. data/lib/file_db.rb +0 -0
  37. data/lib/iso8583/bitmap.rb +94 -54
  38. data/lib/iso8583/codec.rb +3 -3
  39. data/lib/iso8583/field.rb +38 -3
  40. data/lib/iso8583/fields.rb +3 -1
  41. data/lib/iso8583/message.rb +25 -12
  42. data/lib/iso8583/util.rb +1 -1
  43. data/test/iso8583/bitmap_test.rb +277 -0
  44. data/test/iso8583/message_test.rb +111 -0
  45. data/test/iso8583/minitest_helper.rb +11 -0
  46. metadata +12 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 58cb59f7b97099d4e94b66bdf46f9cfc7e4f39893cf88b56b23b352476f3bb2f
4
- data.tar.gz: 2c81b4d5a3226c0c5d3cc25176625183f5a3766bea7a120b134604bfb030dc16
3
+ metadata.gz: b3a687d541cc683675f05e5ebcf8d28504a929c97a57606e9af3d5f238f04def
4
+ data.tar.gz: f3a1c52920ca5d00f3b43a3d9e513dad9ae883b7167c4b8c37509089bc489af6
5
5
  SHA512:
6
- metadata.gz: dcea670e59016cb7b6a6b297239130ee3a9ff372a94acc8edd4f31a623a6db842f9a43d3cf92ff8253eb77108055ad213d82f12645f572f40548968d435ec7ec
7
- data.tar.gz: bde518c1731e7ae15d864f87f423d518672ea856251263092f408875c8c6d8c4acc52f023015c90edbb9cc917b15243539e37c7f7f093684837718c8accac798
6
+ metadata.gz: 7c7d8b462ac97d930628a593a27bc5a7388d3543683f9950db9449d34d22159c68250dc6a8cd2aa24abbed62c5b0ddd09711d0ca0b040924e9337d4f85e1b1e0
7
+ data.tar.gz: 40d72d5925bfaf49d65bc54ccbfb2c231d8d2f548fd13f784a8bc1bf1b4c863418251e4a1b773ef44836a01dc3fe53321f5f736e33ae9666fd7783546676eac2
data/Gemfile CHANGED
@@ -4,4 +4,13 @@ gem 'cloudwalk'
4
4
  gem 'rubocop', require: false
5
5
  gem 'funky-mock'
6
6
 
7
- gemspec
7
+ group :test do
8
+ gem 'minitest', group: :test
9
+ gem 'simplecov', group: :test
10
+ end
11
+
12
+ group :development, :test do
13
+ gem 'byebug'
14
+ end
15
+
16
+ gemspec
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- da_funk (3.30.0)
4
+ da_funk (3.34.0)
5
5
  archive-zip (~> 0.5)
6
6
  bundler
7
7
  cloudwalk_handshake
@@ -15,17 +15,20 @@ 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
22
  cloudwalk_handshake (1.21.3)
22
23
  funky-simplehttp (~> 0.6)
24
+ docile (1.3.5)
23
25
  funky-emv (1.4.1)
24
26
  funky-tlv (~> 0.2)
25
27
  funky-mock (0.1.0)
26
28
  funky-simplehttp (0.6.0)
27
29
  funky-tlv (0.2.3)
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)
@@ -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.1.4
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,32 @@
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
+
25
+ ### 3.31.0 - 2020-11-27
26
+
27
+ - Added support to new battery view (Exact percentage);
28
+ - Added support to new main screen when there's a pending sale.
29
+
3
30
  ### 3.30.0 - 2020-11-16
4
31
 
5
32
  - Replace GPRS icon to 3G;
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
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 Device::Network.connected?
11
- if primary_try?
12
- :primary_communication
13
- end
14
- else
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
- :attach_registration_fail
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["interval"])
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])
@@ -61,38 +61,77 @@ module DaFunk
61
61
  end
62
62
  end
63
63
 
64
- def check_download_error(ret, enable_txt_ui = true)
65
- value = true
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 ret
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
- value = false
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
- value = false
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
- value = false
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
- value = false
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
- value = false
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
- value = false
128
+ ContextLog.info "[I] Download error, connection problem"
91
129
  end
92
130
 
93
- I18n.pt(ui[:i18n], :args => [ret]) if enable_txt_ui
94
-
95
- value
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)
@@ -1,31 +1,75 @@
1
+ #
2
+ # @file status_bar.rb
3
+ # @brief DaFunk status bar helper script.
4
+ # @platform N/A
5
+ #
6
+ # @copyright Copyright (c) 2016 CloudWalk, Inc.
7
+ #
8
+
1
9
  module DaFunk
2
10
  module Helper
11
+ # Status bar class definition.
3
12
  class StatusBar
4
- STATUS_TIMEOUT = 60
5
- SLOT_MEDIA = 0
6
- SLOT_SIGNAL_LEVEL = 1
7
- SLOT_UPDATE = 2
13
+ # Class macros and constants
14
+ STATUS_TIMEOUT = 60
15
+ SLOT_MEDIA = 0
16
+ SLOT_SIGNAL_LEVEL = 1
17
+ SLOT_UPDATE = 2
8
18
  SLOT_BATTERY_PERCENTUAL = 6
9
- SLOT_BATTERY_LEVEL = 7
10
- SLOT_MESSAGE_CONNECTION = {
11
- true => {
12
- :slot1 => 2,
13
- :slot2 => 3,
14
- :message1 => './shared/conectado_01.png',
15
- :message2 => './shared/conectado_02.png'
16
- },
17
- false => {
18
- :slot1 => 2,
19
- :slot2 => 3,
20
- :message1 => './shared/buscando_01.png',
21
- :message2 => './shared/buscando_02.png'
22
- }
19
+ SLOT_BATTERY_LEVEL = 7
20
+
21
+ # TODO: review the 'print_status_bar' API to reduce the number of files
22
+ # to eleven?
23
+ BATTERY_PERCENTAGE_IMAGES = [
24
+ './shared/1%.png', './shared/1%.png', './shared/2%.png',
25
+ './shared/3%.png', './shared/4%.png', './shared/5%.png',
26
+ './shared/6%.png', './shared/7%.png', './shared/8%.png',
27
+ './shared/9%.png', './shared/10%.png', './shared/11%.png',
28
+ './shared/12%.png', './shared/13%.png', './shared/14%.png',
29
+ './shared/15%.png', './shared/16%.png', './shared/17%.png',
30
+ './shared/18%.png', './shared/19%.png', './shared/20%.png',
31
+ './shared/21%.png', './shared/22%.png', './shared/23%.png',
32
+ './shared/24%.png', './shared/25%.png', './shared/26%.png',
33
+ './shared/27%.png', './shared/28%.png', './shared/29%.png',
34
+ './shared/30%.png', './shared/31%.png', './shared/32%.png',
35
+ './shared/33%.png', './shared/34%.png', './shared/35%.png',
36
+ './shared/36%.png', './shared/37%.png', './shared/38%.png',
37
+ './shared/39%.png', './shared/40%.png', './shared/41%.png',
38
+ './shared/42%.png', './shared/43%.png', './shared/44%.png',
39
+ './shared/45%.png', './shared/46%.png', './shared/47%.png',
40
+ './shared/48%.png', './shared/49%.png', './shared/50%.png',
41
+ './shared/51%.png', './shared/52%.png', './shared/53%.png',
42
+ './shared/54%.png', './shared/55%.png', './shared/56%.png',
43
+ './shared/57%.png', './shared/58%.png', './shared/59%.png',
44
+ './shared/60%.png', './shared/61%.png', './shared/62%.png',
45
+ './shared/63%.png', './shared/64%.png', './shared/65%.png',
46
+ './shared/66%.png', './shared/67%.png', './shared/68%.png',
47
+ './shared/69%.png', './shared/70%.png', './shared/71%.png',
48
+ './shared/72%.png', './shared/73%.png', './shared/74%.png',
49
+ './shared/75%.png', './shared/76%.png', './shared/77%.png',
50
+ './shared/78%.png', './shared/79%.png', './shared/80%.png',
51
+ './shared/81%.png', './shared/82%.png', './shared/83%.png',
52
+ './shared/84%.png', './shared/85%.png', './shared/86%.png',
53
+ './shared/87%.png', './shared/88%.png', './shared/89%.png',
54
+ './shared/90%.png', './shared/91%.png', './shared/92%.png',
55
+ './shared/93%.png', './shared/94%.png', './shared/95%.png',
56
+ './shared/96%.png', './shared/97%.png', './shared/98%.png',
57
+ './shared/99%.png', './shared/100%.png'
58
+ ].freeze
59
+
60
+ MEDIA_PATH = {
61
+ :gprs => './shared/3G.png',
62
+ :wifi => './shared/WIFI.png'
23
63
  }
24
64
 
65
+ BATTERY_CHARGING = [
66
+ "./shared/battery_charging.png",
67
+ "./shared/battery_charged.png"
68
+ ].freeze
69
+
25
70
  BATTERY_IMAGES = {
26
71
  0..4 => "./shared/battery0.png",
27
- 5..9 => "./shared/baterry5.png",
28
- 10..19 => "./shared/battery10.png",
72
+ 5..19 => "./shared/battery10.png",
29
73
  20..29 => "./shared/battery20.png",
30
74
  30..39 => "./shared/battery30.png",
31
75
  40..49 => "./shared/battery40.png",
@@ -34,48 +78,29 @@ module DaFunk
34
78
  70..79 => "./shared/battery70.png",
35
79
  80..89 => "./shared/battery80.png",
36
80
  90..99 => "./shared/battery90.png",
37
- 100..100 => "./shared/battery100.png",
38
- }
39
-
40
- BATTERY_CHARGE_IMAGES = {
41
- 50 => "./shared/battery0c.png",
42
- 100 => "./shared/battery100c.png"
43
- }
44
-
45
- BATTERY_PERCENTAGE_IMAGES = {
46
- 0..4 => "./shared/battery1_percent.png",
47
- 5..9 => "./shared/battery5_percent.png",
48
- 10..19 => "./shared/battery10_percent.png",
49
- 20..29 => "./shared/battery20_percent.png",
50
- 30..39 => "./shared/battery30_percent.png",
51
- 40..49 => "./shared/battery40_percent.png",
52
- 50..59 => "./shared/battery50_percent.png",
53
- 60..69 => "./shared/battery60_percent.png",
54
- 70..79 => "./shared/battery70_percent.png",
55
- 80..89 => "./shared/battery80_percent.png",
56
- 90..99 => "./shared/battery90_percent.png",
57
- 100..100 => "./shared/battery100_percent.png",
81
+ 100..100 => "./shared/battery100.png"
58
82
  }
59
83
 
60
84
  WIFI_IMAGES = {
61
- 0..0 => "./shared/wifi0.png",
62
- 1..25 => "./shared/wifi25.png",
63
- 26..50 => "./shared/wifi50.png",
64
- 59..75 => "./shared/wifi75.png",
65
- 76..200 => "./shared/wifi100.png"
85
+ 0..0 => "./shared/wifi0.png",
86
+ 1..25 => "./shared/wifi25.png",
87
+ 26..50 => "./shared/wifi50.png",
88
+ 59..75 => "./shared/wifi75.png",
89
+ 76..200 => "./shared/wifi100.png"
66
90
  }
67
91
 
68
92
  MOBILE_IMAGES = {
69
- 0..0 => "./shared/mobile0.png",
70
- 1..20 => "./shared/mobile20.png",
71
- 21..40 => "./shared/mobile40.png",
72
- 41..60 => "./shared/mobile60.png",
73
- 61..80 => "./shared/mobile80.png",
74
- 81..200 => "./shared/mobile100.png"
93
+ 0..0 => "./shared/mobile0.png",
94
+ 1..20 => "./shared/mobile20.png",
95
+ 21..40 => "./shared/mobile40.png",
96
+ 41..60 => "./shared/mobile60.png",
97
+ 61..80 => "./shared/mobile80.png",
98
+ 81..200 => "./shared/mobile100.png"
75
99
  }
76
100
 
77
101
  class << self
78
- attr_accessor :signal, :battery, :power, :managment, :connected
102
+ attr_accessor :current_signal, :current_message, :battery, :power, :managment
103
+ attr_accessor :current_media
79
104
  end
80
105
 
81
106
  def self.check
@@ -90,98 +115,127 @@ module DaFunk
90
115
  if File.exists?('./shared/system_update')
91
116
  PAX::Display.print_status_bar(SLOT_UPDATE, "./shared/system_update_download.png")
92
117
  PAX::Display.print_status_bar(3, nil)
93
- self.connected = false
94
118
  else
95
- change_message
119
+ self.change_message
96
120
  end
97
121
  end
98
122
 
99
123
  def self.change_message
100
- unless File.exists?('./shared/system_update')
101
- connected = Device::Network.connected?
102
-
103
- if connected != self.connected
104
- self.connected = connected
105
-
106
- slot_message_1 = SLOT_MESSAGE_CONNECTION[self.connected][:slot1]
107
- slot_message_2 = SLOT_MESSAGE_CONNECTION[self.connected][:slot2]
108
-
109
- message_1 = SLOT_MESSAGE_CONNECTION[self.connected][:message1]
110
- message_2 = SLOT_MESSAGE_CONNECTION[self.connected][:message2]
111
-
112
- Device::Display.print_status_bar(slot_message_1, message_1)
113
- Device::Display.print_status_bar(slot_message_2, message_2)
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')
114
141
  end
115
142
  end
116
143
  end
117
144
 
118
145
  def self.change_connection
119
- if Device::Network.connected?
120
- sig = Device::Network.signal
121
-
122
- if self.signal != sig
123
- self.signal = sig
124
-
125
- if Device::Network.gprs?
126
- Device::Display.print_status_bar(SLOT_MEDIA, "./shared/3G.png")
127
- Device::Display.print_status_bar(SLOT_SIGNAL_LEVEL,
128
- get_image_path(:gprs, self.signal))
129
- elsif Device::Network.wifi?
130
- Device::Display.print_status_bar(SLOT_MEDIA, "./shared/WIFI.png")
131
- Device::Display.print_status_bar(SLOT_SIGNAL_LEVEL,
132
- get_image_path(:wifi, self.signal))
133
- end
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))
134
162
  end
135
163
  else
136
164
  Device::Display.print_status_bar(SLOT_MEDIA, nil)
137
165
  Device::Display.print_status_bar(SLOT_SIGNAL_LEVEL, "./shared/searching.png")
166
+ self.current_media = nil
167
+ self.current_signal = nil
138
168
  end
139
169
  end
140
170
 
171
+ # Updates the battery slot whenever a capacity or power supply change is
172
+ # detected.
141
173
  def self.change_battery
142
- bat = Device::System.battery
143
- dock = Device::System.power_supply
174
+ capacity_type = Device::System.battery_capacity_type
175
+
176
+ capacity = Device::System.battery
177
+ charging = Device::System.power_supply
144
178
 
145
- if self.battery != bat || self.power != dock
146
- self.battery = bat
147
- self.power = dock
179
+ if self.battery != capacity || self.power != charging
148
180
 
149
- if self.power && self.battery == 50
150
- Device::Display.print_status_bar(SLOT_BATTERY_PERCENTUAL, nil)
181
+ if self.battery.nil? # basic integrity check
182
+ self.battery = capacity
183
+ elsif charging
184
+ capacity >= self.battery && self.battery = capacity
151
185
  else
152
- percentual = get_image_path(:battery_percentual, self.battery)
153
- Device::Display.print_status_bar(SLOT_BATTERY_PERCENTUAL, percentual)
186
+ capacity <= self.battery && self.battery = capacity
187
+ end
188
+
189
+ if self.power == charging && capacity != self.battery
190
+ return nil
154
191
  end
155
192
 
156
- if self.power
157
- Device::Display.print_status_bar(
158
- SLOT_BATTERY_LEVEL, get_image_path(:battery_charge, self.battery))
193
+ self.power = charging
194
+
195
+ rsc = self.get_image_path(self.power ? :battery_charge : :battery, self.battery)
196
+
197
+ Device::Display.print_status_bar(SLOT_BATTERY_LEVEL, rsc)
198
+
199
+ if capacity_type == 'percentage' || !self.power
200
+ rsc = self.get_image_path(:battery_percentual, self.battery)
159
201
  else
160
- Device::Display.print_status_bar(SLOT_BATTERY_LEVEL,
161
- get_image_path(:battery, self.battery))
202
+ rsc = nil
162
203
  end
204
+
205
+ Device::Display.print_status_bar(SLOT_BATTERY_PERCENTUAL, rsc)
163
206
  end
164
207
  end
165
208
 
209
+ # Searches for the correspondent image to 'type' and 'signal strength'.
166
210
  def self.get_image_path(type, sig)
167
211
  return if sig.nil?
168
212
  case type
169
213
  when :gprs
170
- MOBILE_IMAGES.each {|k,v| return v if k.include? sig }
214
+ MOBILE_IMAGES.each do |k, v|
215
+ return v if k.include? sig
216
+ end
171
217
  when :wifi
172
- WIFI_IMAGES.each {|k,v| return v if k.include? sig }
218
+ WIFI_IMAGES.each do |k, v|
219
+ return v if k.include? sig
220
+ end
173
221
  when :battery
174
- BATTERY_IMAGES.each {|k,v| return v if k.include? sig }
222
+ BATTERY_IMAGES.each do |k, v|
223
+ return v if k.include? sig
224
+ end
175
225
  when :battery_charge
176
- BATTERY_CHARGE_IMAGES[sig]
226
+ if sig < 100
227
+ BATTERY_CHARGING[0]
228
+ else
229
+ BATTERY_CHARGING[1]
230
+ end
177
231
  when :battery_percentual
178
- BATTERY_PERCENTAGE_IMAGES.each {|k,v| return v if k.include? sig }
232
+ BATTERY_PERCENTAGE_IMAGES[sig]
179
233
  else
180
234
  nil
181
235
  end
182
236
  end
183
237
 
184
- self.managment ||= true
238
+ self.managment ||= true
185
239
  def self.valid?
186
240
  if self.managment
187
241
  true
@@ -190,4 +244,3 @@ module DaFunk
190
244
  end
191
245
  end
192
246
  end
193
-