hayes begins
parent
898d8d73a9
commit
c087eb3973
|
@ -0,0 +1,73 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
#encoding: utf-8
|
||||||
|
|
||||||
|
$: << 'lib'
|
||||||
|
|
||||||
|
require 'biju'
|
||||||
|
require 'pp'
|
||||||
|
|
||||||
|
str = 'www.ruby-lang.org and bonjour www.rubygarden.org coucou'
|
||||||
|
#re = /
|
||||||
|
# ( # capture the hostname in $1
|
||||||
|
# (?: # these parens for grouping only
|
||||||
|
# (?! [-_] ) # lookahead for neither underscore nor dash
|
||||||
|
# [\w-] + # hostname component
|
||||||
|
# \. # and the domain dot
|
||||||
|
# ) + # now repeat that whole thing a bunch of times
|
||||||
|
# [A-Za-z] # next must be a letter
|
||||||
|
# [\w-] + # now trailing domain part
|
||||||
|
# ) # end of $1 capture
|
||||||
|
# /x # /x for nice formatting
|
||||||
|
re = /
|
||||||
|
( # capture the hostname in $1
|
||||||
|
(?: # these parens for grouping only
|
||||||
|
(?! [-_] ) # lookahead for neither underscore nor dash
|
||||||
|
[\w-] + # hostname component
|
||||||
|
\. # and the domain dot
|
||||||
|
) + # now repeat that whole thing a bunch of times
|
||||||
|
[A-Za-z] # next must be a letter
|
||||||
|
[\w-] + # now trailing domain part
|
||||||
|
) # end of $1 capture
|
||||||
|
/x # /x for nice formatting
|
||||||
|
|
||||||
|
str.gsub! re do # pass a block to execute replacement
|
||||||
|
pp $1
|
||||||
|
end
|
||||||
|
|
||||||
|
#exit
|
||||||
|
|
||||||
|
puts "here"
|
||||||
|
hayes = Biju::HayesSms.new
|
||||||
|
pp hayes.attention
|
||||||
|
pp hayes.answer = 'OK'
|
||||||
|
pp hayes.ok?
|
||||||
|
pp hayes.init_modem
|
||||||
|
pp hayes.answer = 'OK'
|
||||||
|
pp hayes.ok?
|
||||||
|
pp hayes.text_mode
|
||||||
|
pp (hayes.answer = 'OK')
|
||||||
|
pp hayes.ok?
|
||||||
|
pp hayes.prefered_storage?
|
||||||
|
pp hayes.answer = '+CPMS: ("ME","MT","SM","SR"),("ME","MT","SM","SR"),("ME","MT","SM","SR")'
|
||||||
|
# ((),(),())
|
||||||
|
# (),(),()
|
||||||
|
# 1,2
|
||||||
|
|
||||||
|
pp hayes.ok?
|
||||||
|
|
||||||
|
exit
|
||||||
|
|
||||||
|
@modem = Biju::Modem.new(:port => "/dev/ttyUSB0", :pin => '2382')
|
||||||
|
|
||||||
|
# method to list all messages
|
||||||
|
@modem.messages.each do |sms|
|
||||||
|
puts sms
|
||||||
|
end
|
||||||
|
|
||||||
|
# method to send sms
|
||||||
|
sms = Biju::Sms.new(:phone_number => "0668486469", :message => 'hello world3')
|
||||||
|
puts @modem.send(sms)
|
||||||
|
|
||||||
|
@modem.close
|
||||||
|
|
||||||
|
|
|
@ -17,5 +17,5 @@ Gem::Specification.new do |gem|
|
||||||
|
|
||||||
gem.add_development_dependency "minitest", "3.0.0"
|
gem.add_development_dependency "minitest", "3.0.0"
|
||||||
|
|
||||||
gem.add_dependency "serialport", "1.0.4"
|
gem.add_dependency "serialport", ">=1.0.4"
|
||||||
end
|
end
|
||||||
|
|
|
@ -1,3 +1,4 @@
|
||||||
require 'biju/version'
|
require 'biju/version'
|
||||||
require "biju/modem"
|
require "biju/modem"
|
||||||
require "biju/sms"
|
require "biju/sms"
|
||||||
|
require "biju/hayes"
|
||||||
|
|
|
@ -0,0 +1,72 @@
|
||||||
|
module Biju
|
||||||
|
class Hayes
|
||||||
|
attr_accessor :command, :attributes, :ok
|
||||||
|
attr_reader :answer
|
||||||
|
|
||||||
|
#def method_missing(m, *args, &block)
|
||||||
|
#end
|
||||||
|
|
||||||
|
def attention
|
||||||
|
basic_command { |response| response =~ /OK/ }
|
||||||
|
#basic_command { |response| true }
|
||||||
|
end
|
||||||
|
|
||||||
|
def init_modem
|
||||||
|
basic_command('Z') { |response| response =~ /OK/ }
|
||||||
|
end
|
||||||
|
|
||||||
|
def text_mode(enabled = true)
|
||||||
|
extended_command('CMGF', enabled) { |response| response =~ /OK/ }
|
||||||
|
end
|
||||||
|
|
||||||
|
def prefered_storage?
|
||||||
|
extended_command('CPMS') { |response| response =~ /OK/ }
|
||||||
|
end
|
||||||
|
|
||||||
|
def answer=(ret)
|
||||||
|
@answer = ret
|
||||||
|
ok?
|
||||||
|
end
|
||||||
|
|
||||||
|
def ok?
|
||||||
|
ok.nil? ? true : !ok.call(answer).nil?
|
||||||
|
end
|
||||||
|
|
||||||
|
private
|
||||||
|
|
||||||
|
def basic_command(cmd = nil, options = {}, *args, &block)
|
||||||
|
option_prefix = options[:prefix] || nil
|
||||||
|
cmd_root = ['AT', cmd].compact.join(option_prefix)
|
||||||
|
cmd_args = args.compact.map { |arg| to_hayes_string(arg) } unless args.empty?
|
||||||
|
self.command = [cmd_root, cmd_args].compact.join('=')
|
||||||
|
self.ok = block if block_given?
|
||||||
|
command
|
||||||
|
end
|
||||||
|
|
||||||
|
def extended_command(cmd = nil, *args, &block)
|
||||||
|
basic_command(cmd, {:prefix => '+'}, *args, &block)
|
||||||
|
end
|
||||||
|
|
||||||
|
def hayes_to_obj(str)
|
||||||
|
end
|
||||||
|
|
||||||
|
def to_hayes_string(arg)
|
||||||
|
case arg
|
||||||
|
when String
|
||||||
|
"\"#{arg}\""
|
||||||
|
when Array
|
||||||
|
arg.join(',')
|
||||||
|
when TrueClass, FalseClass
|
||||||
|
!!arg ? 1 : 0
|
||||||
|
else
|
||||||
|
"?"
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class HayesSms < Hayes
|
||||||
|
def unlock_pin(pin)
|
||||||
|
send_command("AT+CPIN=#{to_hayes_string(pin)}") { |response| response =~ /OK/ }
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -3,6 +3,7 @@ require_relative 'sms'
|
||||||
|
|
||||||
module Biju
|
module Biju
|
||||||
class Modem
|
class Modem
|
||||||
|
attr_reader :connection
|
||||||
|
|
||||||
# @param [Hash] Options to serial connection.
|
# @param [Hash] Options to serial connection.
|
||||||
# @option options [String] :port The modem port to connect
|
# @option options [String] :port The modem port to connect
|
||||||
|
@ -11,23 +12,30 @@ module Biju
|
||||||
#
|
#
|
||||||
def initialize(options={}, &block)
|
def initialize(options={}, &block)
|
||||||
raise Exception.new("Port is required") unless options[:port]
|
raise Exception.new("Port is required") unless options[:port]
|
||||||
pin = options.delete(:pin)
|
pin = options[:pin] || '0000'
|
||||||
@connection = connection(options)
|
@connection = connect(options)
|
||||||
cmd("AT")
|
cmd("AT")
|
||||||
# initialize modem
|
# initialize modem
|
||||||
cmd("ATZ")
|
cmd("ATZ")
|
||||||
# unlock pin code
|
# unlock pin code
|
||||||
cmd("AT+CPIN=\"#{pin}\"") if pin
|
cmd("AT+CPIN=\"#{pin}\"") if pin
|
||||||
|
|
||||||
|
cmd("AT+CPMS=?")
|
||||||
|
|
||||||
# set SMS text mode
|
# set SMS text mode
|
||||||
cmd("AT+CMGF=1")
|
cmd("AT+CMGF=1")
|
||||||
# set extended error reports
|
# set extended error reports
|
||||||
cmd('AT+CMEE=1')
|
cmd('AT+CMEE=1')
|
||||||
#instance_eval &block if block_given?
|
#instance_eval &block if block_given?
|
||||||
|
if block_given?
|
||||||
|
yield connection
|
||||||
|
close
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
# Close the serial connection.
|
# Close the serial connection.
|
||||||
def close
|
def close
|
||||||
@connection.close
|
connection.close
|
||||||
end
|
end
|
||||||
|
|
||||||
# Return an Array of Sms if there is messages nad return nil if not.
|
# Return an Array of Sms if there is messages nad return nil if not.
|
||||||
|
@ -60,7 +68,7 @@ module Biju
|
||||||
end
|
end
|
||||||
|
|
||||||
private
|
private
|
||||||
def connection(options)
|
def connect(options)
|
||||||
port = options.delete(:port)
|
port = options.delete(:port)
|
||||||
SerialPort.new(port, default_options.merge!(options))
|
SerialPort.new(port, default_options.merge!(options))
|
||||||
end
|
end
|
||||||
|
@ -70,17 +78,19 @@ module Biju
|
||||||
end
|
end
|
||||||
|
|
||||||
def cmd(cmd)
|
def cmd(cmd)
|
||||||
@connection.write(cmd + "\r")
|
puts "SENDING : #{cmd}"
|
||||||
|
connection.write(cmd + "\r")
|
||||||
wait_str = wait
|
wait_str = wait
|
||||||
#p "#{cmd} --> #{wait_str}"
|
#p "#{cmd} --> #{wait_str}"
|
||||||
end
|
end
|
||||||
|
|
||||||
def wait
|
def wait
|
||||||
buffer = ''
|
buffer = ''
|
||||||
while IO.select([@connection], [], [], 0.25)
|
while IO.select([connection], [], [], 0.25)
|
||||||
chr = @connection.getc.chr;
|
chr = connection.getc.chr;
|
||||||
buffer += chr
|
buffer += chr
|
||||||
end
|
end
|
||||||
|
puts "RECEIVING : #{buffer}"
|
||||||
buffer
|
buffer
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue