class Apiotics::Hardware

Public Class Methods

bits() click to toggle source
# File lib/apiotics/hardware.rb, line 6
def self.bits
  OS.bits
end
install_firmware(config_script, firmware_path, starting_address) click to toggle source
# File lib/apiotics/hardware.rb, line 62
def self.install_firmware(config_script, firmware_path, starting_address)
  directory = Rails.root.join('lib', 'openocd', 'gnuarmeclipse')
  unless Dir.exist?(directory)
    self.save_openocd
    self.unpack_openocd
  end
  directory = Rails.root.join('lib', 'openocd', 'gnuarmeclipse', 'openocd')
  Dir.chdir directory
  version_folder = Dir['*/'].first[0..-2]
  directory = Rails.root.join('lib', 'openocd', 'gnuarmeclipse', 'openocd', version_folder)
  Dir.chdir directory
  string = "bin/openocd -f \"scripts/board/" + config_script + "\"" + " -c \"program " + firmware_path.to_s + " exit " + starting_address.to_s + "\""
  msg = system(string)
end
linux() click to toggle source
# File lib/apiotics/hardware.rb, line 10
def self.linux
  OS.linux?
end
mac() click to toggle source
# File lib/apiotics/hardware.rb, line 14
def self.mac
  OS.mac?
end
openocd(worker_name, name) click to toggle source
# File lib/apiotics/hardware.rb, line 77
def self.openocd(worker_name, name)
  download_directory = Rails.root.join('lib', 'openocd')
  Dir.mkdir download_directory unless Dir.exist?(download_directory)
  download_directory = Rails.root.join('lib', 'openocd', 'downloads')
  Dir.mkdir download_directory unless Dir.exist?(download_directory)
  Dir.chdir download_directory
  config = Apiotics::Portal.openocd_worker_config(worker_name)
  config = JSON.parse(config)
  unless config["openocd_config_file_name"] == nil || config["openocd_config_file_name"] == ""
    path = Rails.root.join('lib', 'openocd', 'downloads', config["openocd_config_file_name"])
    if File.exist?(path)
    else
      firmware_data = Apiotics::Portal.download_firmware(worker_name)
      file = File.new(path, 'w')
      file.write firmware_data.force_encoding(Encoding::UTF_8)
      file.close
    end
    clean_string = "1" * 68 * 8
    clean = Array.new
    clean[0] = clean_string
    clean_bits = clean.pack("B*")
    if name != nil
      if name.length > 64
        name = name[0..63]
      end
      data = File.open(path, 'r+')
      version_offset = 2048
      offset = version_offset + 4 + 68 + 68 + 68
      IO.write(data, clean_bits.force_encoding(Encoding::UTF_8), offset)
      name = name + "\0"
      IO.write(data, name, offset)
      data.close
    else
      data = File.open(path, 'r+')
      version_offset = 2048
      offset = version_offset + 4 + 68 + 68 + 68
      IO.write(data, clean_bits.force_encoding(Encoding::UTF_8), offset)
      data.close
    end
    msg = self.install_firmware(config["openocd_config_file_name"], path, config["openocd_start_address"])
  end
  return msg
end
save_openocd() click to toggle source
# File lib/apiotics/hardware.rb, line 18
def self.save_openocd
  os = nil
  if self.linux == true 
    if self.bits == 64
      os = "debian64"
    elsif self.bits == 32
      os = "debian32"
    end
  elsif self.mac == true
    os = "mac"
  end
  if os == "debian64" || os == "debian32"
    group = Etc.getgrnam('plugdev')
    login = Etc.getlogin
    info = Etc.getpwnam(login)
    username = info.gecos.split(/,/).first
    unless group.mem.include?(username)
      puts "Please enter your password: \n"
      password = system "stty -echo"
      `usermod -a -G plugdev #{username} -p #{password}`
      `exec $SHELL`
    end
  end
  unless os == nil
    data = Apiotics::Portal.openocd(os)
    directory = Rails.root.join('lib', 'openocd')
    Dir.mkdir directory unless Dir.exist?(directory)
    path = Rails.root.join('lib', 'openocd', 'openocd.tgz')
    file = File.new(path, 'w')
    file.write data.force_encoding(Encoding::UTF_8)
    file.close
  end
end
unpack_openocd() click to toggle source
# File lib/apiotics/hardware.rb, line 52
def self.unpack_openocd
  directory = Rails.root.join('lib', 'openocd')
  Dir.chdir directory
  path = Rails.root.join('lib', 'openocd', 'openocd.tgz')
  msg = system("tar -xvzf #{path}")
  if msg == true
    File.delete(path) if File.exist?(path)
  end
end