0
import gnu.io.*;
import java.io.*;
import java.util.*;
import java.lang.*;

public class SerialWrite implements Runnable, SerialPortEventListener{

    static String output="";

    public void run(){
    }

    static Enumeration portList;
    static CommPortIdentifier portId;
    static String dest = "+923216159133";
    static String messageString = "Hello Testing";
    static InputStream inputStream;
    static SerialPort serialPort;
    static OutputStream outputStream;

    public void serialEvent(SerialPortEvent event){
        switch (event.getEventType()){
            case SerialPortEvent.BI:
            case SerialPortEvent.OE:
            case SerialPortEvent.FE:
            case SerialPortEvent.PE:
            case SerialPortEvent.CD:
            case SerialPortEvent.CTS:
            case SerialPortEvent.DSR:
            case SerialPortEvent.RI:
            case SerialPortEvent.OUTPUT_BUFFER_EMPTY:
                System.out.println("Error");
            break;
            case SerialPortEvent.DATA_AVAILABLE:{
                BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream));
                String line = "";
                try{
                    while ( (line = reader.readLine()) != null){
                        if(line.equalsIgnoreCase("OK") || (line.indexOf("+CMGS") != -1)){
                            output=line;
                        }
                    Thread.sleep(10);
                    }
                }
                catch (Exception e){
                    System.err.println("Error while reading Port " + e);
                }
            break;
        }
    } //switch
}

public SerialWrite(SerialPort serial){
    try{
        inputStream = serial.getInputStream();
        try{
            serial.addEventListener(this);
        }
        catch (TooManyListenersException e){
            System.out.println("Exception in Adding Listener" + e);
        }
        serial.notifyOnDataAvailable(true);
    }
    catch (Exception ex){
        System.out.println("Exception in getting InputStream" + ex);
    }
}

public static void main(String[] args) throws Exception{
    int i=0;
    String line1 = "AT+CMGF=1\r\n";
    String line2 = "AT+CMGS=" + "\"" + dest + "\""+"\r\n";
    System.out.println("This " + line2);
    String line3 = messageString;
    String line4 = "<ctrl+z>";
    portList = CommPortIdentifier.getPortIdentifiers();
    while (portList.hasMoreElements()){
        portId = (CommPortIdentifier) portList.nextElement();
        if (portId.getPortType() == CommPortIdentifier.PORT_SERIAL){
            System.out.println("SMS Sending........");
            if ( portId.getName().equals("COM3")){
                System.out.println("SMS Sending....Port Found");
                try{
                    serialPort = (SerialPort) portId.open("SerialTestApp", 2000);
                    SerialWrite wr = new SerialWrite(serialPort);
                }
                catch (PortInUseException e){
                    System.out.println("Port In Use " + e);
                }
                try{
                    outputStream = serialPort.getOutputStream();
                }
                catch (IOException e){
                    System.out.println("Error writing to output stream " + e);
                }
                try{
                    serialPort.setSerialPortParams(9600,SerialPort.DATABITS_8,SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
                }
                catch (UnsupportedCommOperationException e){
                    System.out.println("Error");
                }
                try{
                    System.out.println("It seems OK now");
                    outputStream.write(line1.getBytes());
                    byte buffer[] = new byte[10000];
                    // read the response from mobile phone
                    inputStream.read(buffer);
                    System.out.println("AT Comand response: "+buffer.toString());
                    /*System.out.println ("done");
                    outputStream.write(line2.getBytes());
                    System.out.println("It seems OK now");
                    outputStream.write(line3.getBytes());
                    outputStream.write(line4.getBytes());
                    System.out.println("This one is output "+output);
                    outputStream.flush();
                    System.out.println("Message Sent!");*/
                }
                catch (IOException e){
                    System.out.println("Error writing message " + e);
                }
            }
        }
    }
}


public static void showText(String Text){
    System.out.println("TEXT "+Text);
    }
}

I want to send a message using GSM PHONE (NOKIA 110) first I tried to send "AT" command but the response I am getting is unexpected it is shown below:

SMS Sending........
SMS Sending....Port Found
It seems OK now
**AT Comand response: [B@3820e**
SMS Sending........
SMS Sending........
SMS Sending........
SMS Sending........

Secondly when I run the whole program without COMMENTS my mobile restarts at the end. Can anyone help me out with this.

user2631892
  • 25
  • 1
  • 1
  • 7

1 Answers1

1

You need to change how you print the contents of the received byte array:

String str = new String(buffer);
System.out.println(str);

instead of: buffer.toString(), which will print the hashcode of the buffer array. Which is what you are seeing as the response from the device.

As for your second part, in the commented out code, try uncommenting: outputStream.flush();, maybe the device still is waiting for the AT command and the command has not been flushed to its input stream.

BatScream
  • 19,260
  • 4
  • 52
  • 68