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



190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
# File 'lib/device/network.rb', line 190

def self.attach(options = nil)
  Device::Network.connected?
  if self.code != SUCCESS
    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.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
  self.code
end

.attach_timeoutObject



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

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

.configObject



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

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



232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
# File 'lib/device/network.rb', line 232

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



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

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)


261
262
263
# File 'lib/device/network.rb', line 261

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

.gprs?Boolean

Returns:

  • (Boolean)


253
254
255
# File 'lib/device/network.rb', line 253

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

.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
# File 'lib/device/network.rb', line 160

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

.setupObject



227
228
229
# File 'lib/device/network.rb', line 227

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

.shutdownObject



215
216
217
218
219
220
# File 'lib/device/network.rb', line 215

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)


257
258
259
# File 'lib/device/network.rb', line 257

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