Class: Oschii::Device

Inherits:
Object
  • Object
show all
Includes:
ConfigFile, Helpers::Prompt, Logging
Defined in:
lib/oschii/device.rb

Direct Known Subclasses

HttpDevice, SerialDevice

Instance Attribute Summary collapse

Instance Method Summary collapse

Methods included from Helpers::Prompt

#prompt

Methods included from Logging

#logger, #tail

Methods included from ConfigFile

#save_config, #upload_config

Constructor Details

#initializeDevice

Returns a new instance of Device.



27
28
29
30
# File 'lib/oschii/device.rb', line 27

def initialize
  @log_lines = []
  refresh
end

Instance Attribute Details

#log_linesObject (readonly)

Returns the value of attribute log_lines.



32
33
34
# File 'lib/oschii/device.rb', line 32

def log_lines
  @log_lines
end

Instance Method Details

#clear!Object



139
140
141
# File 'lib/oschii/device.rb', line 139

def clear!
  self.config = {}
end

#clear_logObject

Raises:



215
216
217
# File 'lib/oschii/device.rb', line 215

def clear_log
  raise NoConnection
end

#configObject



127
128
129
# File 'lib/oschii/device.rb', line 127

def config
  @config ||= Oschii::Config.new(raw_config)
end

#config=(hash) ⇒ Object



131
132
133
# File 'lib/oschii/device.rb', line 131

def config=(hash)
  self.raw_config = hash.to_json
end

#config_descriptionObject



115
116
117
# File 'lib/oschii/device.rb', line 115

def config_description
  device_details['configDescription']
end

#config_nameObject

— Configuration —



111
112
113
# File 'lib/oschii/device.rb', line 111

def config_name
  device_details['configName']
end

#config_valid?Boolean

Returns:

  • (Boolean)


119
120
121
# File 'lib/oschii/device.rb', line 119

def config_valid?
  device_details['configValid']
end

#cycle_time_microsObject



99
100
101
# File 'lib/oschii/device.rb', line 99

def cycle_time_micros
  status['cycleTime']
end

#descriptionObject



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

def description
  device_details['description']
end

#device_detailsObject

— Device details —



44
45
46
# File 'lib/oschii/device.rb', line 44

def device_details
  @device_details ||= JSON.parse(raw_device_details)
end

#failsafe_mode?Boolean

Returns:

  • (Boolean)


123
124
125
# File 'lib/oschii/device.rb', line 123

def failsafe_mode?
  device_details['failsafeMode']
end

#files_usedObject



91
92
93
# File 'lib/oschii/device.rb', line 91

def files_used
  total_files - status['freeSPIFFS']
end

#files_used_percentObject



95
96
97
# File 'lib/oschii/device.rb', line 95

def files_used_percent
  ((files_used.to_f / total_files.to_f) * 100.0).to_i
end

#inspectObject



34
35
36
# File 'lib/oschii/device.rb', line 34

def inspect
  "<#{self.class.name}[#{name}] (v#{version})>"
end

#ipObject

Raises:



183
184
185
# File 'lib/oschii/device.rb', line 183

def ip
  raise NoConnection
end

#logObject

Raises:



211
212
213
# File 'lib/oschii/device.rb', line 211

def log
  raise NoConnection
end

#mem_usedObject



79
80
81
# File 'lib/oschii/device.rb', line 79

def mem_used
  total_mem - status['freeHeap']
end

#mem_used_percentObject



83
84
85
# File 'lib/oschii/device.rb', line 83

def mem_used_percent
  ((mem_used.to_f / total_mem.to_f) * 100.0).to_i
end

#monitorObject



38
39
40
# File 'lib/oschii/device.rb', line 38

def monitor
  DeviceMonitor.new(self).start
end

#nameObject



52
53
54
# File 'lib/oschii/device.rb', line 52

def name
  device_details['name']
end

#name=(new_name) ⇒ Object



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

def name=(new_name)
  self.settings = ({ name: new_name })
  refresh
end

#pokeObject

— Connection-specific commands —

Raises:



175
176
177
# File 'lib/oschii/device.rb', line 175

def poke
  raise NoConnection
end

#poke!Object

Raises:



153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
# File 'lib/oschii/device.rb', line 153

def poke!
  remaining_attempts = 3

  while remaining_attempts > 0
    begin
      if poke
        # device_details
        return true
      end
      return false

    rescue RubySerial::Error, RestClient::Exception => e
      raise DeviceUnavailable, e.message
    end

    remaining_attempts -= 1
  end
  raise DeviceUnavailable, '(no response)'
end

#raw_configObject

Raises:



203
204
205
# File 'lib/oschii/device.rb', line 203

def raw_config
  raise NoConnection
end

#raw_config=(json) ⇒ Object

Raises:



207
208
209
# File 'lib/oschii/device.rb', line 207

def raw_config=(json)
  raise NoConnection
end

#raw_device_detailsObject

Raises:



187
188
189
# File 'lib/oschii/device.rb', line 187

def raw_device_details
  raise NoConnection
end

#raw_settingsObject

Raises:



195
196
197
# File 'lib/oschii/device.rb', line 195

def raw_settings
  raise NoConnection
end

#raw_statusObject

Raises:



191
192
193
# File 'lib/oschii/device.rb', line 191

def raw_status
  raise NoConnection
end

#refreshObject

— Connection —



145
146
147
148
149
150
151
# File 'lib/oschii/device.rb', line 145

def refresh
  @device_details = nil
  @status = nil
  @settings = nil
  @config = nil
  poke!
end

#restartObject

Raises:



179
180
181
# File 'lib/oschii/device.rb', line 179

def restart
  raise NoConnection
end

#settingsObject

— Settings —



105
106
107
# File 'lib/oschii/device.rb', line 105

def settings
  @settings ||= JSON.parse(raw_settings)
end

#settings=(new_settings) ⇒ Object

Raises:



199
200
201
# File 'lib/oschii/device.rb', line 199

def settings=(new_settings)
  raise NoConnection
end

#statusObject

— Status —



67
68
69
# File 'lib/oschii/device.rb', line 67

def status
  @status ||= JSON.parse(raw_status)
end

#total_filesObject



87
88
89
# File 'lib/oschii/device.rb', line 87

def total_files
  status['totalSPIFFS']
end

#total_memObject



75
76
77
# File 'lib/oschii/device.rb', line 75

def total_mem
  status['totalHeap']
end

#update!Object



135
136
137
# File 'lib/oschii/device.rb', line 135

def update!
  self.config = config.compacted
end

#uptimeObject



71
72
73
# File 'lib/oschii/device.rb', line 71

def uptime
  status['uptime']
end

#versionObject



48
49
50
# File 'lib/oschii/device.rb', line 48

def version
  device_details['version']
end