diff --git a/README.md b/README.md index 4c76c94..488d628 100644 --- a/README.md +++ b/README.md @@ -27,6 +27,10 @@ Or install it yourself as: puts sms end +# method to send sms +sms = Biju::Sms.new(:phone_number => '+3312345678', :message => 'hello world') +@modem.send(sms) + @modem.close ``` ## TODO diff --git a/lib/biju/modem.rb b/lib/biju/modem.rb index 03950fe..b9bf222 100644 --- a/lib/biju/modem.rb +++ b/lib/biju/modem.rb @@ -9,11 +9,20 @@ module Biju # # Biju::Modem.new(:port => '/dev/ttyUSB0') # - def initialize(options={}) + def initialize(options={}, &block) raise Exception.new("Port is required") unless options[:port] + pin = options.delete(:pin) @connection = connection(options) cmd("AT") + # initialize modem + cmd("ATZ") + # unlock pin code + cmd("AT+CPIN=\"#{pin}\"") if pin + # set SMS text mode cmd("AT+CMGF=1") + # set extended error reports + cmd('AT+CMEE=1') + #instance_eval &block if block_given? end # Close the serial connection. @@ -22,8 +31,12 @@ module Biju end # Return an Array of Sms if there is messages nad return nil if not. - def messages - sms = cmd("AT+CMGL=\"ALL\"") + def messages(which = "ALL") + # read message from all storage in the mobile phone (sim+mem) + cmd('AT+CPMS="MT"') + # get message list + sms = cmd('AT+CMGL="%s"' % which ) + # collect messages msgs = sms.scan(/\+CMGL\:\s*?(\d+)\,.*?\,\"(.+?)\"\,.*?\,\"(.+?)\".*?\n(.*)/) return nil unless msgs msgs.collect!{ |msg| Biju::Sms.new(:id => msg[0], :phone_number => msg[1], :datetime => msg[2], :message => msg[3].chomp) } @@ -35,6 +48,17 @@ module Biju cmd("AT+CMGD=#{id}") end + def send(sms, options = {}) + # initiate the sms, and wait for either + # the text prompt or an error message + cmd("AT+CMGS=\"#{sms.phone_number}\"") + + # send the sms, and wait until + # it is accepted or rejected + cmd("#{sms.message}#{26.chr}") + # ... check reception + end + private def connection(options) port = options.delete(:port) @@ -47,7 +71,8 @@ module Biju def cmd(cmd) @connection.write(cmd + "\r") - wait + wait_str = wait + #p "#{cmd} --> #{wait_str}" end def wait