module ComunikaGsm::Device

Public Class Methods

add(device) click to toggle source
# File lib/comunika_gsm/modem.rb, line 42
def self.add(device)
  @@devices << device
end
all() click to toggle source

Get all devices intances

# File lib/comunika_gsm/modem.rb, line 10
def self.all
  @@devices
end
clear() click to toggle source
# File lib/comunika_gsm/modem.rb, line 14
def self.clear
  @devices = []
end
load(params={}) click to toggle source

Initialize devices

# File lib/comunika_gsm/modem.rb, line 19
def self.load(params={})
  self.clear
  threads = []
  self.ports.each do |port|
    threads << Thread.new {
      ## Check port and add in to devices ##
      modem = self.load_modem(port, params[:debug])
      if modem
        self.add(modem)
      end

      Thread.current.kill
    }
  end

  while threads.count > 0
    threads.delete_if {|t| !t.alive? }
  end

  @@devices
  #@@devices.collect! {|d| Device.new(d) }#.uniq {|d| d[:imei] }#.find_all{|dev| dev.status == true }.uniq!{|d| d.imei }
end
load_modem(port, debug=false) click to toggle source
# File lib/comunika_gsm/modem.rb, line 46
def self.load_modem(port, debug=false)
  gsm = GSM2.new(:port => port, :debug => debug)
  if gsm.status
    result = gsm.cmd("AT\r\n")
    if result.to_s.length > 0
      imei = gsm.cmd("AT+CGSN\r\n")
      iccid = gsm.cmd("AT+CRSM=176,12258,0,0,10\r\n")
      provider = gsm.cmd("AT+COPS?\r\n")
      signal = gsm.cmd("AT+CSQ\r\n")
      unless @@devices.find {|m| m[:imei] == imei}
        return Device.new(:port => port,:gsm => gsm, :imei => imei, :iccid => iccid, :provider => provider, :signal => signal)
      end
    else
      gsm.close
      return nil
    end
  end
end
ports() click to toggle source
# File lib/comunika_gsm/modem.rb, line 5
def self.ports
  ports = %x{ls /dev | grep ttyUSB*}.split(/\n/)
end