comunika_gsm 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -0,0 +1 @@
1
+ function binToInt(t){for(var e=0,r=parseInt(t.length)-1,n=0;n<t.length;n++)"1"==t.charAt(n)&&(e+=Math.pow(2,r)),r--;return e}function intToBin(t,e){for(var r=parseInt(t).toString(2),n=r.length;n<e;n++)r="0"+r;return r}function HexToNum(t){var e=MakeNum(t.substring(0,1)),r=0;return t.length>1&&(r=MakeNum(t.substring(1,2))),"X"==r?"00":16*e+1*r}function MakeNum(t){if(t>="0"&&t<="9")return t;switch(t.toUpperCase()){case"A":return 10;case"B":return 11;case"C":return 12;case"D":return 13;case"E":return 14;case"F":return 15;default:return 16}return 16}function intToHex(t){var e="0123456789ABCDEF";for(h="",t=parseInt(t),j=0;j<=3;j++)h+=e.charAt(t>>8*j+4&15)+e.charAt(t>>8*j&15);return h.substring(0,2)}function ToHex(t){var e="0123456789ABCDEF",r="";return r=e.charAt(15&t),t>>=4,r=e.charAt(15&t)+r}function getSevenBit(t){for(var e=0;e<sevenbitdefault.length;e++)if(sevenbitdefault[e]==t)return e;return 0}function getEightBit(t){return t}function get16Bit(t){return t}function phoneNumberMap(t){if(t>="0"&&t<="9")return t;switch(t.toUpperCase()){case"*":return"A";case"#":return"B";case"A":return"C";case"B":return"D";case"C":return"E";default:return"F"}return"F"}function phoneNumberUnMap(t){if(t>="0"&&t<="9")return t;switch(t){case 10:return"*";case 11:return"#";case 12:return"A";case 13:return"B";case 14:return"C";default:return"F"}return"F"}function semiOctetToString(t){for(var e="",r=0;r<t.length;r+=2){var n=t.substring(r,r+2);e=e+phoneNumberMap(n.charAt(1))+phoneNumberMap(n.charAt(0))}return e}function getUserMessage(t,e){var r="";octetArray=new Array,restArray=new Array,septetsArray=new Array;var n=1,s=0,a=0,i="",u="<table border=1 ><tr><td align=center width=75><b>Hex</b></td>",o="<tr><td align=center width=75> <b>&nbsp;&nbsp;&nbsp;Octets&nbsp;&nbsp;&nbsp;</b></td>",b="<table border=1 ><tr><td align=center width=75><b>septets</b></td>",g="<tr><td align=center width=75><b>Character</b></td>";calculation="";for(l=0;l<t.length;l+=2){var c=t.substring(l,l+2);r+=intToBin(HexToNum(c),8),l%14==0&&0!=l&&(u+="<td align=center width=75>+++++++</td>"),u=u+"<td align=center width=75>"+c+"</td>"}u+="<td align=center width=75>+++++++</td>";for(l=0;l<r.length;l+=8)octetArray[s]=r.substring(l,l+8),restArray[s]=octetArray[s].substring(0,n%8),septetsArray[s]=octetArray[s].substring(n%8,8),l%56==0&&0!=l&&(o+="<td align=center width=75>&nbsp;</td>"),o=o+"<td align=center width=75><span style='background-color: #FFFF00'>"+restArray[s]+"</span>"+septetsArray[s]+"</td>",s++,8==++n&&(n=1);o+="<td align=center width=75>&nbsp;</td>";for(var l=0;l<restArray.length;l++)l%7==0?(0!=l&&(i+=sevenbitdefault[binToInt(restArray[l-1])],b=b+"<td align=center width=75><span style='background-color: #FFFF00'>&nbsp;"+restArray[l-1]+"</span>&nbsp;</td>",g=g+"<td align=center width=75>&nbsp;"+sevenbitdefault[binToInt(restArray[l-1])]+"&nbsp;</td>",a++),i+=sevenbitdefault[binToInt(septetsArray[l])],b=b+"<td align=center width=75>&nbsp;"+septetsArray[l]+"&nbsp;</td>",g=g+"<td align=center width=75>&nbsp;"+sevenbitdefault[binToInt(septetsArray[l])]+"&nbsp;</td>",a++):(i+=sevenbitdefault[binToInt(septetsArray[l]+restArray[l-1])],b=b+"<td align=center width=75>&nbsp;"+septetsArray[l]+"<span style='background-color: #FFFF00'>"+restArray[l-1]+"&nbsp;</span></td>",g=g+"<td align=center width=75>&nbsp;"+sevenbitdefault[binToInt(septetsArray[l]+restArray[l-1])]+"&nbsp;</td>",a++);return a!=e?(i+=sevenbitdefault[binToInt(restArray[l-1])],b=b+"<td align=center width=75><span style='background-color: #FFFF00'>&nbsp;"+restArray[l-1]+"</span>&nbsp;</td>",g=g+"<td align=center width=75>&nbsp;"+sevenbitdefault[binToInt(restArray[l-1])]+"&nbsp;</td>"):(b+="<td align=center width=75>+++++++</td>",g+="<td align=center width=75>&nbsp;</td>"),calculation="Conversion of 8-bit octets to 7-bit default alphabet<br><br>"+u+"</tr>"+o+"</tr></table>"+b+"</tr>"+g+"</tr></table>",i}function getUserMessage16(t,e){var r="";calculation="Not implemented";for(var n=0;n<t.length;n+=4){var s=t.substring(n,n+2),a=t.substring(n+2,n+4);r+=""+String.fromCharCode(256*HexToNum(s)+HexToNum(a))}return r}function getUserMessage8(t,e){var r="";calculation="Not implemented";for(var n=0;n<t.length;n+=2){var s=t.substring(n,n+2);r+=""+String.fromCharCode(HexToNum(s))}return r}function getPDUMetaInfo(t){var e=t,r=0,n="";if("AT"==e.substr(0,2))for(a=0;a<e.length;a++)if(10==e.charCodeAt(a)){e=e.substr(a+1);break}for(var s="",a=0;a<e.length;a++)16!=MakeNum(e.substr(a,1))&&(s+=e.substr(a,1));var i=HexToNum((e=s).substring(0,2)),u=e.substring(2,2+2*i),o=u.substring(0,2),b=u.substring(2,2+2*i);0!=i&&("F"!=(b=semiOctetToString(b)).substr(b.length-1,1)&&"f"!=b.substr(b.length-1,1)||(b=b.substring(0,b.length-1)),91==o&&(b="+"+b)),r=2*i+2;var g=e.substr(r,2);r+=2,32==(32&HexToNum(g))&&(n+="Type::::Receipt requested\n");if(64==(64&HexToNum(g))&&(1,n+="Type::::Data Header\n"),1==(3&HexToNum(g))||3==(3&HexToNum(g))){3==(3&HexToNum(g))&&(n="Type::::Unknown Message\nTreat as Deliver\n");S=HexToNum(e.substr(r,2));r+=2,(l=HexToNum(e.substr(r,2)))%2!=0&&(l+=1),r+=2;x=e.substr(r,2);r+=2,"F"!=(d=semiOctetToString(e.substring(r,r+l))).substr(d.length-1,1)&&"f"!=d.substr(d.length-1,1)||(d=d.substring(0,d.length-1)),91==x&&(d="+"+d),r+=l;h=e.substr(r,2);r+=2;T=tpDCSMeaning(p=e.substr(r,2));r+=2;var c;switch(24&HexToNum(g)){case 0:c="Not Present";break;case 16:c="Rel "+cValid(HexToNum(e.substr(r,2))),r+=2;break;case 8:c="Enhanced - Not Decoded",r+=14;break;case 24:c="Absolute - Not Decoded",r+=14}m=HexToNum(e.substr(r,2));r+=2;y="Undefined format";7==(A=DCS_Bits(p))?y=getUserMessage(e.substr(r,e.length-r),m):8==A?y=getUserMessage8(e.substr(r,e.length-r),m):16==A&&(y=getUserMessage16(e.substr(r,e.length-r),m)),y=y.substr(0,m),16==A&&(m/=2),0==n.length&&(n="Type::::Message:\n"),n+="SMSC::::"+b+"\nReceipient::::"+d+"\nValidity::::"+c+"\nTP_PID::::"+h+"\nTP_DCS::::"+p+"\nTP_DCS-popis::::"+T+"Message::::"+y+"\nLength::::"+m}else if(0==(3&HexToNum(g))){var l=HexToNum(e.substr(r,2));r+=2;x=e.substr(r,2);r+=2;var d;"D0"==x?(_sl=l,l%2!=0&&(l+=1),d=getUserMessage(e.substring(r,r+l),parseInt(_sl/2*8/7))):(l%2!=0&&(l+=1),"F"!=(d=semiOctetToString(e.substring(r,r+l))).substr(d.length-1,1)&&"f"!=d.substr(d.length-1,1)||(d=d.substring(0,d.length-1)),91==x&&(d="+"+d)),r+=l;var h=e.substr(r,2);r+=2;var p=e.substr(r,2),T=tpDCSMeaning(p);r+=2;var f=(w=semiOctetToString(e.substr(r,14))).substring(0,2),v=w.substring(2,4);w=(M=w.substring(4,6))+"/"+v+"/"+f+" "+(H=w.substring(6,8))+":"+(N=w.substring(8,10))+":"+(k=w.substring(10,12))+" GMT ?",r+=14;var m=HexToNum(e.substr(r,2));r+=2;var A=DCS_Bits(p),y="Undefined format";7==A?y=getUserMessage(e.substr(r,e.length-r),m):8==A?y=getUserMessage8(e.substr(r,e.length-r),m):16==A&&(y=getUserMessage16(e.substr(r,e.length-r),m)),y=(y=(y=y.substr(0,m)).replace(/\n/g,"")).replace("::::",""),16==A&&(m/=2),n+="SMSC::::"+b+"\nSender::::"+d+"\nTimeStamp::::"+w+"\nTP_PID::::"+h+"\nTP_DCS::::"+p+"\nTP_DCS-popis::::"+T+"Message::::"+y+"\nLength::::"+m}else{n="Type::::Status Report\n";var S=HexToNum(e.substr(r,2));r+=2,(l=HexToNum(e.substr(r,2)))%2!=0&&(l+=1),r+=2;var x=e.substr(r,2);r+=2,"F"!=(d=semiOctetToString(e.substring(r,r+l))).substr(d.length-1,1)&&"f"!=d.substr(d.length-1,1)||(d=d.substring(0,d.length-1)),91==x&&(d="+"+d),r+=l;var w=semiOctetToString(e.substr(r,14)),f=w.substring(0,2),v=w.substring(2,4),M=w.substring(4,6),H=w.substring(6,8),N=w.substring(8,10),k=w.substring(10,12);w=M+"/"+v+"/"+f+" "+H+":"+N+":"+k+" GMT +"+w.substring(12,14)/4,r+=14;var C=semiOctetToString(e.substr(r,14)),F=C.substring(0,2),I=C.substring(2,4);r+=14,n+="SMSC::::"+b+"\nSender::::"+d+"\nMessageRef::::"+S+"\nTimeStamp::::"+w+"\nTimeStamp2::::"+(C=C.substring(4,6)+"/"+I+"/"+F+" "+C.substring(6,8)+":"+C.substring(8,10)+":"+C.substring(10,12)+" GMT +"+w.substring(12,14)/4)+"\nStatus Byte::::"+e.substr(r,2)}return n}function change(t){var e=t.value.length;e>maxkeys&&(t.value=t.value.substring(0,maxkeys),alerted=!0,e=maxkeys),window.status="Characters left : "+(maxkeys-e)}function DCS_Bits(t){var e=7,r=HexToNum(t);switch(192&r){case 0:switch(12&r){case 4:e=8;break;case 8:e=16}break;case 192:switch(48&r){case 32:e=16;break;case 48:4&r||(e=8)}}return e}function tpDCSMeaning(t){var e=t,r=HexToNum(t);switch(192&r){case 0:if(e=32&r?"Compressed Text\n":"Uncompressed Text\n",16&r)switch(e+="MClass::",3&r){case 0:e+="0\n";break;case 1:e+="1\n";break;case 2:e+="2\n";break;case 3:e+="3\n"}else e+="MClass::No class\n";switch(e+="Alphabet::::",12&r){case 0:e+="Default\n";break;case 4:e+="8bit\n";break;case 8:e+="UCS2(16)bit\n";break;case 12:e+="Reserved\n"}break;case 64:case 128:e="Reserved coding group\n";break;case 192:switch(48&r){case 0:e="Message waiting group\n",e+="Discard\n";break;case 16:e="Message waiting group\n",e+="Store Message. Default Alphabet\n";break;case 32:e="Message waiting group\n",e+="Store Message. UCS2 Alphabet\n";break;case 48:e="Data coding message class\n",e+=4&r?"Default Alphabet\n":"8 bit Alphabet\n"}}return e}function checkFlag(t){t.checked?(document.pduToStringForm.valid.disabled=!1,document.pduToStringForm.valid.value="170",document.getElementById("validy").innerHTML=cValid("170")):(document.pduToStringForm.valid.disabled=!0,document.pduToStringForm.valid.value="",document.getElementById("validy").innerHTML="")}function Validity(t){return isNaN(parseInt(t))?(t=0,document.pduToStringForm.valid.value=t):((t=parseInt(t))<0&&(t=0,document.pduToStringForm.valid.value=t),t>255&&(t=255,document.pduToStringForm.valid.value=t)),cValid(t)}function cValid(t){var e,r="";(t=parseInt(t))<=143?e=5*(t+1):t<=167?(e=(t-143)/2+12,e*=60):t<=196?(e=t-166,e*=1440):(e=t-192,e*=10080);var n,s,a,i;return n=e%60,s=e/60,a=s/24,i=a/7,s%=24,a%=7,0!=parseInt(i)&&(r+=parseInt(i)+"w "),0!=parseInt(a)&&(r+=parseInt(a)+"d "),0!=parseInt(s)&&(r+=parseInt(s)+"h "),0!=n&&(r+=n+"m "),r}function binToInt(t){for(var e=0,r=parseInt(t.length)-1,n=0;n<t.length;n++)"1"==t.charAt(n)&&(e+=Math.pow(2,r)),r--;return e}function intToBin(t,e){for(var r=parseInt(t).toString(2),n=r.length;n<e;n++)r="0"+r;return r}function HexToNum(t){var e=MakeNum(t.substring(0,1)),r=0;return t.length>1&&(r=MakeNum(t.substring(1,2))),"X"==r?"00":16*e+1*r}function MakeNum(t){if(t>="0"&&t<="9")return t;switch(t.toUpperCase()){case"A":return 10;case"B":return 11;case"C":return 12;case"D":return 13;case"E":return 14;case"F":return 15;default:return 16}return 16}function intToHex(t){var e="0123456789ABCDEF";for(h="",t=parseInt(t),j=0;j<=3;j++)h+=e.charAt(t>>8*j+4&15)+e.charAt(t>>8*j&15);return h.substring(0,2)}function ToHex(t){var e="0123456789ABCDEF",r="";return r=e.charAt(15&t),t>>=4,r=e.charAt(15&t)+r}function stringToPDU(t,e,r,n,s,a,i,u){var o=n,b="",g="",c="",l=0,d=0,h="",p="";0!=r&&(h="81","+"==r.substr(0,1)?(h="91",r=r.substr(1)):"0"!=r.substr(0,1)&&(h="91"),r.length%2!=0&&(r+="F"),d=l=(h+""+(p=semiOctetToString(r))).length/2),l<10&&(l="0"+l);var T;T=i?u?"3100":"2100":u?"1100":"0100";var f="81";"+"==e.substr(0,1)?(f="91",e=e.substr(1)):"0"!=e.substr(0,1)&&(f="91");var v=intToHex(e.length);e.length%2!=0&&(e+="F");var m=semiOctetToString(e),A=0;switch(-1!=s&&(A=16|s),o){case 7:break;case 8:A|=4;break;case 16:A|=8}var y=intToHex(A),S="";u&&(S=intToHex(a));var x;if(7==o){x=intToHex(t.length);for(H=0;H<=t.length;H++){if(H==t.length){""!=g&&(c=c+""+intToHex(binToInt(g)));break}var w=intToBin(getSevenBit(t.charAt(H)),7);0!=H&&H%8!=0?(b=w.substring(7-H%8),c=c+""+intToHex(binToInt(b+g)),g=w.substring(0,7-H%8)):g=w.substring(0,7-H%8)}}else if(8==o){x=intToHex(t.length);for(var M=0,H=0;H<t.length;H++)M=getEightBit(t.charCodeAt(H)),c=c+""+ToHex(M)}else if(16==o){x=intToHex(2*t.length);for(var N=0,H=0;H<t.length;H++)N=get16Bit(t.charCodeAt(H)),c=c+""+ToHex((65280&N)>>8)+ToHex(255&N)}var k=l+h+p+T+v+f+m+"00"+y+S+x+c;return k.length/2-d-1+"\n"+k}sevenbitdefault=new Array("@","£","$","¥","è","é","ù","ì","ò","Ç","\n","Ø","ø","\r","Å","å","Δ","_","Φ","Γ","Λ","Ω","Π","Ψ","Σ","Θ","Ξ","€","Æ","æ","ß","É"," ","!",'"',"#","¤","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","¡","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","Ä","Ö","Ñ","Ü","§","¿","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","ä","ö","ñ","ü","à","á");var calculation="",maxkeys=160,alerted=!1;sevenbitdefault=new Array("@","£","$","¥","è","é","ù","ì","ò","Ç","\n","Ø","ø","\r","Å","å","Δ","_","Φ","Γ","Λ","Ω","Π","Ψ","Σ","Θ","Ξ","€","Æ","æ","ß","É"," ","!",'"',"#","¤","%","&","'","(",")","*","+",",","-",".","/","0","1","2","3","4","5","6","7","8","9",":",";","<","=",">","?","¡","A","B","C","D","E","F","G","H","I","J","K","L","M","N","O","P","Q","R","S","T","U","V","W","X","Y","Z","Ä","Ö","Ñ","Ü","§","¿","a","b","c","d","e","f","g","h","i","j","k","l","m","n","o","p","q","r","s","t","u","v","w","x","y","z","ä","ö","ñ","ü","à");var calculation="",maxkeys=160,alerted=!1;
@@ -0,0 +1,110 @@
1
+ module ComunikaGsm
2
+ module PDU
3
+ include ComunikaGsm
4
+ def self.encode(params)
5
+ return unless params[:message]
6
+ return unless params[:number]
7
+ result = @@pdu_converter.call("stringToPDU",params[:message],params[:number],params[:smsc] || '',params[:ecoding] || 7,params[:sms_class] || 1,params[:valid],params[:deliver] || true,params[:valid_flag] || false)
8
+ PDU::PDUEncode.new(result)
9
+ end
10
+
11
+ def self.decode(pdu)
12
+ @@pdu_converter.call("getPDUMetaInfo", pdu)
13
+ end
14
+
15
+ class PDUEncode
16
+ attr_reader :size, :body
17
+ def initialize(pdu)
18
+ pdu = pdu.split(/\n/)
19
+ @size = pdu[0]; @body = pdu[1]
20
+ end
21
+ end
22
+
23
+ class PDUDecode
24
+ attr_accessor :id, :size, :pdu, :smsc, :number, :messageref, :status, :mtype,
25
+ :tp_pid, :tp_dcs_popis, :mclass, :alphabet, :message, :length, :validity, :connection, :mlenght
26
+ attr_writer :send_at, :discharge_at
27
+ def initialize(params)
28
+ @id = params[:id]; @size = params[:size]; @pdu = params[:pdu]; @mtype = params[:mtype]; @smsc = params[:smsc]
29
+ @number = params[:number]; @messageref = params[:messageref]; @send_at = params[:send_at]; @discharge_at = params[:discharge_at]
30
+ @status = params[:status]; @tp_pid = params[:tp_pid]; @tp_dcs_popis = params[:tp_dcs_popis]; @mclass = params[:mclass]
31
+ @alphabet = params[:alphabet]; @message = params[:message]; @length = params[:length]; @validity = params[:validity]
32
+ @connection = params[:connection]
33
+ end
34
+
35
+ def decode
36
+ msg = PDU.decode(self.pdu)
37
+ msg.downcase.split(/\n/).each do |m|
38
+ data = m.split(/\::::/)
39
+ case data[0].strip
40
+ when 'type'
41
+ set_mtype(data[1].strip)
42
+ when 'smsc'
43
+ @smsc = data[1].strip
44
+ when 'sender'
45
+ @number = data[1].strip
46
+ when 'messageref'
47
+ @messageref = data[1].strip
48
+ when 'timestamp'
49
+ @send_at = data[1].strip
50
+ when 'timestamp2'
51
+ @discharge_at = data[1].strip
52
+ when 'status byte'
53
+ @status = "0x#{data[1].strip}".to_i(16)
54
+ when 'tp_pid'
55
+ @tp_pid = data[1].strip
56
+ when 'tp_pid'
57
+ @tp_pid = data[1].strip
58
+ when 'tp_dcs'
59
+ @tp_dcs = data[1].strip
60
+ when 'tp_dcs-popis'
61
+ @tp_dcs_popis = data[1].strip
62
+ when 'mclass'
63
+ @mclass = data[1].strip
64
+ when 'alphabet'
65
+ @alphabet = data[1].strip
66
+ when 'message'
67
+ @message = data[1].strip
68
+ when 'length'
69
+ @length = data[1].strip
70
+ end
71
+ end
72
+ return self
73
+ end
74
+
75
+ def send_at
76
+ return @send_at.nil?
77
+ Time.parse(@send_at.sub(/(\d+)\D+(\d+)\D+(\d+)/, '\1/\2/20\3')).strftime('%Y/%m/%d %H:%M:%S')
78
+ end
79
+
80
+ def discharge_at
81
+ return if @discharge_at.nil?
82
+ Time.parse(@discharge_at.sub(/(\d+)\D+(\d+)\D+(\d+)/, '\1/\2/20\3')).strftime('%Y/%m/%d %H:%M:%S')
83
+ end
84
+
85
+ def delete
86
+ @connection.cmd("AT+CMGD=#{@id}\r\n")
87
+ end
88
+
89
+ private
90
+ def set_mtype(tp)
91
+ case tp
92
+ when 'receive message'
93
+ @mtype = "INCOMING"
94
+ when 'status report'
95
+ @mtype = 'REPORT'
96
+ when 'unknown message'
97
+ @mtype = 'UNKNOWN'
98
+ when 'receipt requested'
99
+ if @status.nil?
100
+ @mtype = 'INCOMING'
101
+ else
102
+ @mtype = "REPORT"
103
+ end
104
+ when 'data header'
105
+ @mtype = 'MULTIPART'
106
+ end
107
+ end
108
+ end
109
+ end
110
+ end
@@ -0,0 +1,54 @@
1
+ module ComunikaGsm
2
+ module SMS
3
+ class Provider
4
+ attr_reader :gsm, :total
5
+ def initialize(port,debug=false)
6
+ @gsm = GSM.new(:port => port, :debug => debug)
7
+ @total = 0
8
+ end
9
+
10
+ def send_sms(msg)
11
+ return {id: nil, status: "ERROR", code: "304"} if msg[:number].length == 0
12
+ return {id: nil, status: "ERROR", code: "304"} if msg[:number].length < 11
13
+ return {id: nil, status: "ERROR", code: "503"} if msg[:message].length == 0
14
+
15
+ ## GENERATE PDU TO MESSAGE ##
16
+ pdu = PDU.encode(:number => msg[:number].prepend("+55"), :smsc => msg[:smsc], :message => msg[:message])
17
+
18
+ # cmd("AT+CMGS=\"#{options[:number]}\"\r")
19
+ # res = cmd("#{options[:message][0..160]}#{26.chr}")
20
+ @gsm.cmd("AT+CMGS=#{pdu.size}\r")
21
+ res = @gsm.cmd("#{pdu.body}#{26.chr}")
22
+
23
+ sleep 3
24
+ while res.empty?
25
+ res = @gsm.wait
26
+ end
27
+
28
+ if res.include?('+CMGS')
29
+ res = res.scan(/\+(\S+)\: (\d+)\r\n/)
30
+ status = 'OK'
31
+ code = "-1"
32
+ id = res.first[1]
33
+ elsif res.include?('+CMS')
34
+ res = res.scan(/\+CMS (\S+)\: (\d+)/).first
35
+ status = 'ERROR'
36
+ code = res[1]
37
+ id = nil
38
+ end
39
+ {:id => id, :code => code, :status => status}
40
+ end
41
+
42
+ def messages
43
+ sms = @gsm.cmd("AT+CMGL=4\r\n")
44
+ msgs = sms.scan(/\+CMGL\:\s*?(\d+),\s*?(\d+),.*?\,s*?(\d+)\r\n(.*)/)
45
+
46
+ ## IDS: 0 - ID, 1 -- ,2 - size, 3 - PDU
47
+ msgs.collect!{ |m| PDU::PDUDecode.new(connection: @gsm, id: m[0], size: m[2], pdu: m[3].chomp).decode }# rescue nil
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ ## TODO create method reader sms and remove
54
+ ## .sub(/(\d+)\D+(\d+)\D+(\d+)/, '\1/\2/20\3')
@@ -0,0 +1,3 @@
1
+ module ComunikaGsm
2
+ VERSION = "0.1.0"
3
+ end
metadata ADDED
@@ -0,0 +1,107 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: comunika_gsm
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Jefferson Silva
8
+ autorequire:
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 2017-09-16 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: bundler
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '1.15'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '1.15'
27
+ - !ruby/object:Gem::Dependency
28
+ name: rake
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '10.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '10.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: serialport
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '1.3'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '1.3'
55
+ - !ruby/object:Gem::Dependency
56
+ name: execjs
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.7'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.7'
69
+ description: Comunication of with GSM modem
70
+ email:
71
+ - jefferson.silva@assertivasolucoes.com.br
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - lib/comunika_gsm.rb
77
+ - lib/comunika_gsm/gsm.rb
78
+ - lib/comunika_gsm/js/pdu.js
79
+ - lib/comunika_gsm/js/pdu.min.js
80
+ - lib/comunika_gsm/pdu.rb
81
+ - lib/comunika_gsm/sms.rb
82
+ - lib/comunika_gsm/version.rb
83
+ homepage: ''
84
+ licenses:
85
+ - MIT
86
+ metadata: {}
87
+ post_install_message:
88
+ rdoc_options: []
89
+ require_paths:
90
+ - lib
91
+ required_ruby_version: !ruby/object:Gem::Requirement
92
+ requirements:
93
+ - - ">="
94
+ - !ruby/object:Gem::Version
95
+ version: '0'
96
+ required_rubygems_version: !ruby/object:Gem::Requirement
97
+ requirements:
98
+ - - ">="
99
+ - !ruby/object:Gem::Version
100
+ version: '0'
101
+ requirements: []
102
+ rubyforge_project:
103
+ rubygems_version: 2.6.12
104
+ signing_key:
105
+ specification_version: 4
106
+ summary: Gem of use internal
107
+ test_files: []