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