Inca un episod din seria “Impartasirea cunostintelor”.
Mi-a venit initial ideea de a scrie un SMSBomber care, dupa cum ii sugereaza si numele, trimite mai multe mesaje text unui numar de telefon. Pentru a ajunge acolo trebuia sa ma ocup de o problema putin mai generala si anume comunicarea cu modemul unui telefon.
Momentan dispun de un Nokia N70 care il conectez la laptop cu un cablu USB pentru transferul datelor. Modemul GSM imi este accesibil pe un port serial ( la mine COM4 ), iar comunicarea cu el se poate face printr-un terminal (de ex: Linux: Minicom iar Windows: HyperTerminal ) si folosind comenzi AT.
Exemplu de comenzi AT:
AT+GMM - model identification
AT+CGMR - software version
Mai multe comenzi pentru unele modele de telefoane Nokia gasiti aici.
Pe Internet se gasesc destule informatii pentru conectarea la un port serial cu diferite utilitare de aceea voi detalia conectarea dintr-un limbaj de programare, Java. Suportul pentru interfetele seriale nu este implicit, asadar este necesara libraria Java Communications (http://java.sun.com/products/javacomm/ ) care pentru sistemele Windows o gasiti pe http://www.rxtx.org/ .
Trecem la detalii de implementare. Urmatoarea portiune de cod obtine portul serial specificat prin numele lui.
portID = CommPortIdentifier.getPortIdentifier("COM4");
serialPort = (SerialPort) portID.open("Java Application", 2000);
serialPort.setSerialPortParams(460800, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_NONE);
serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_NONE);
Liniile 1 – 2 obtin si deschid portul serial, iar liniile 3 – 4 configureaza comunicarea cu portul. Avand portul serial putem comunica cu el folosindu-ne de cele doua stream-uri:
OutputStream serialOutput = serialPort.getOutputStream();
InputStream serialInput = serialPort.getInputStream();
Pentru implementarea unui terminal care sa permita utilizatorului comunicarea directa cu modemul aveti ca punct de pornire interfata SerialPortEventListener si functia membra a obiectului SerialPort:
abstract void addEventListener(SerialPortEventListener lsnr)
Comenzile AT pentru trimiterea unui mesaj SMS:
AT+CMGF=1
AT+CMGS="5555555555"
> textul mesajului (CTRL+Z Enter)
Observatie: comenzile se proceseaza doar dupa trimiterea caracterului ce specifica sfarsitul de linie (LineFeed si Carriage Return), mai exact, dupa fiecare comanda trimisa trebuie trimise suplimentar si cele doua caractere si caracterul de sfarsit de rand:
String setTextMessage = "AT+CMGF=1";
modemOutput.write(setTextMessage.getBytes());
modemOutput.write(13);
modemOutput.flush();
Bafta
Implementarea pentru Windows