Class: Device::Network

Inherits:
Object
  • Object
show all
Includes:
DaFunk::Helper
Defined in:
lib/device/network.rb

Constant Summary collapse

MEDIA_GPRS =
"gprs"
MEDIA_WIFI =
"wifi"
MEDIA_ETHERNET =
"ethernet"
AUTH_NONE_OPEN =
"open"
AUTH_NONE_WEP =
"wep"
AUTH_NONE_WEP_SHARED =
"wepshared"
AUTH_IEEE8021X =
"IEEE8021X"
AUTH_WPA_PSK =
"wpapsk"
AUTH_WPA_WPA2_PSK =
"wpawpa2psk"
AUTH_WPA2_PSK =
"wpa2psk"
PARE_CIPHERS_NONE =
"none"
PARE_CIPHERS_WEP64 =
"wep64"
PARE_CIPHERS_WEP128 =
"wep128"
PARE_CIPHERS_WEPX =
"wepx"
PARE_CIPHERS_CCMP =
"ccmp"
PARE_CIPHERS_TKIP =
"tkip"
MODE_IBSS =
"ibss"
MODE_STATION =
"station"
ERR_USER_CANCEL =
-1010
TIMEOUT =
-3320
NO_CONNECTION =
-1012
SUCCESS =
0
PROCESSING =
1
POWER_OFF =
0
POWER_ON =
1

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.apnObject

Returns the value of attribute apn.



43
44
45
# File 'lib/device/network.rb', line 43

def apn
  @apn
end

.codeObject

Returns the value of attribute code.



43
44
45
# File 'lib/device/network.rb', line 43

def code
  @code
end

.passwordObject

Returns the value of attribute password.



43
44
45
# File 'lib/device/network.rb', line 43

def password
  @password
end

.socketObject

Returns the value of attribute socket.



43
44
45
# File 'lib/device/network.rb', line 43

def socket
  @socket
end

.typeObject

Returns the value of attribute type.



43
44
45
# File 'lib/device/network.rb', line 43

def type
  @type
end

.userObject

Returns the value of attribute user.



43
44
45
# File 'lib/device/network.rb', line 43

def user
  @user
end

Class Method Details

.adapterObject



53
54
55
# File 'lib/device/network.rb', line 53

def self.adapter
  Device.adapter::Network
end

.attach(options = nil) ⇒ Object



192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
# File 'lib/device/network.rb', line 192

def self.attach(options = nil)
  Device::Network.connected?
  Context::ThreadPubSub.publish('communication_update')
  if self.code != SUCCESS
    ThreadScheduler.pausing_communication do
      self.code = Device::Network.init(*self.config)
      self.code = Device::Network.connect
      Device::Network.connected? if self.code != SUCCESS

      hash = try_user(self.attach_timeout, options) do |process|
        Device::Network.connected?
        process[:ret] = self.code
        # TODO develop an interface to keep waiting communication module dial
        # based on platform returns
        process[:ret] == PROCESSING || process[:ret] == 2 || process[:ret] == -3307 # if true keep trying
      end
      self.code = hash[:ret]

      if self.code == SUCCESS
        self.
        self.code = Device::Network.dhcp_client(20000) if (wifi? || ethernet?)
      else
        self.code = ERR_USER_CANCEL if hash[:key] == Device::IO::CANCEL
        Device::Network.shutdown
      end
    end
  end
  Context::ThreadPubSub.publish('communication_update')
  self.code
end

.attach_timeoutObject



184
185
186
187
188
189
190
# File 'lib/device/network.rb', line 184

def self.attach_timeout
  if self.gprs?
    Device::Setting.attach_gprs_timeout || Device::IO.timeout
  else
    Device::IO.timeout
  end
end

.configObject



236
237
238
239
# File 'lib/device/network.rb', line 236

def self.config
  # TODO raise some error if media was not set
  [Device::Setting.media, self.config_media]
end

.config_mediaObject

TODO should check if WIFI, ETHERNET and etc



246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
# File 'lib/device/network.rb', line 246

def self.config_media
  if gprs?
    {
      apn:      Device::Setting.apn,
      user:     Device::Setting.user,
      password: Device::Setting.apn_password
    }
  elsif wifi?
    {
      authentication: Device::Setting.authentication,
      password:       Device::Setting.wifi_password,
      essid:          Device::Setting.essid,
      channel:        Device::Setting.channel,
      cipher:         Device::Setting.cipher,
      mode:           Device::Setting.mode
    }
  elsif ethernet?
    Hash.new # TODO
  end
end

.configure(type, options) ⇒ Object



61
62
63
# File 'lib/device/network.rb', line 61

def self.configure(type, options)
  adapter.configure(type, options)
end

.configured?Boolean

Returns:

  • (Boolean)


82
83
84
# File 'lib/device/network.rb', line 82

def self.configured?
  Device::Setting.network_configured == "1" && ! Device::Setting.media.to_s.empty?
end

.connectObject



69
70
71
# File 'lib/device/network.rb', line 69

def self.connect
  adapter.connect
end

.connected?Boolean

Returns:

  • (Boolean)


73
74
75
76
77
78
79
80
# File 'lib/device/network.rb', line 73

def self.connected?
  if self.adapter.started? || self.setup
    self.code = adapter.connected?
    return self.code == Device::Network::SUCCESS
  end
  self.code = NO_CONNECTION
  false
end

.dhcp_client(timeout) ⇒ Object



168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
# File 'lib/device/network.rb', line 168

def self.dhcp_client(timeout)
  ret = adapter.dhcp_client_start
  if (ret == SUCCESS)
    hash = try_user(timeout) do |processing|
      processing[:ret] = adapter.dhcp_client_check
      processing[:ret] == PROCESSING
    end
    ret = hash[:ret]

    unless ret == SUCCESS
      ret = ERR_USER_CANCEL if hash[:key] == Device::IO::CANCEL
    end
  end
  ret
end

.disconnectObject



90
91
92
# File 'lib/device/network.rb', line 90

def self.disconnect
  adapter.disconnect
end

.ethernet?Boolean

Returns:

  • (Boolean)


275
276
277
# File 'lib/device/network.rb', line 275

def self.ethernet?
  Device::Setting.media == "ethernet"
end

.gprs?Boolean

Returns:

  • (Boolean)


267
268
269
# File 'lib/device/network.rb', line 267

def self.gprs?
  Device::Setting.media == "gprs"
end

.init(type, options) ⇒ Object



57
58
59
# File 'lib/device/network.rb', line 57

def self.init(type, options)
  adapter.init(type, options)
end

.load_metadataObject



223
224
225
226
227
# File 'lib/device/network.rb', line 223

def self.
  if Object.const_defined?(:CwMetadata)
    CwMetadata.load_variable if CwMetadata.respond_to?(:load_variable)
  end
end

.mac_address(media = nil) ⇒ String

Get mac address of the current connection or from the parameters sent

Examples:

Device::Network.mac_address(Device::Network::MEDIA_GPRS)
# => "AA:BB:CC:DD:EE:FF"

Parameters:

  • media (String) (defaults to: nil)

    From Network class, MEDIA_GPRS (“gprs”), MEDIA_WIFI (“wifi”), MEDIA_ETHERNET (“ethernet”)

Returns:

  • (String)

    Return mac address based on the example “AA:BB:CC:DD:EE:FF”



118
119
120
121
122
123
124
# File 'lib/device/network.rb', line 118

def self.mac_address(media = nil)
  unless media
    self.adapter.mac_address(media2klass(Device::Setting.media))
  else
    self.adapter.mac_address(media2klass(media))
  end
end

.media2klass(media) ⇒ Object

Convert string media configuration to a class



127
128
129
130
131
132
133
134
135
136
137
138
# File 'lib/device/network.rb', line 127

def self.media2klass(media)
  case media
  when MEDIA_GPRS
    Network::Gprs
  when MEDIA_WIFI
    Network::Wifi
  when MEDIA_ETHERNET
    Network::Ethernet
  else
    Network::Wifi
  end
end

.ping(host, port) ⇒ Object



86
87
88
# File 'lib/device/network.rb', line 86

def self.ping(host, port)
  adapter.ping(host, port)
end

.power(command) ⇒ Object



65
66
67
# File 'lib/device/network.rb', line 65

def self.power(command)
  adapter.power(command)
end

.scanArray

Scan for wifi aps available

Examples:

aps = Device::Network.scan
# create a selection to menu method
selection = aps.inject({}) do |selection, hash|
  selection[hash[:essid]] = hash; selection
end
selected = menu("Select SSID:", selection)

Device::Setting.wifi_password  = form("Password",
  :min => 0, :max => 127, :default => Device::Setting.wifi_password)
Device::Setting.authentication = selected[:authentication]
Device::Setting.essid          = selected[:essid]
Device::Setting.channel        = selected[:channel]
Device::Setting.cipher         = selected[:cipher]
Device::Setting.mode           = selected[:mode]

Returns:

  • (Array)

    Return an array of hash values containing the values necessary to configure connection



160
161
162
163
164
165
166
# File 'lib/device/network.rb', line 160

def self.scan
  if wifi?
    ThreadScheduler.pausing_communication do
      adapter.scan if Device::Network.init(*self.config)
    end
  end
end

.setupObject



241
242
243
# File 'lib/device/network.rb', line 241

def self.setup
  self.configured? && (Device::Network.configure(*self.config) == SUCCESS)
end

.shutdownObject



229
230
231
232
233
234
# File 'lib/device/network.rb', line 229

def self.shutdown
  if self.adapter.started?
    Device::Network.disconnect
    Device::Network.power(0)
  end
end

.signalFixnum

Check signal value

Returns:

  • (Fixnum)

    Signal value between 0 and 5.



103
104
105
106
107
# File 'lib/device/network.rb', line 103

def self.signal
  if self.connected?
    adapter.signal
  end
end

.sim_idObject



94
95
96
97
98
# File 'lib/device/network.rb', line 94

def self.sim_id
  if self.adapter.started?
    adapter.sim_id
  end
end

.wifi?Boolean

Returns:

  • (Boolean)


271
272
273
# File 'lib/device/network.rb', line 271

def self.wifi?
  Device::Setting.media == "wifi"
end