title: How to write on serial port to get caller id from modem in java?
body: <p>am working on caller id using java language. I have usb robotic modem, and this modem is connected with the telephone line. I want to get caller id from this modem when phone is ringing.</p>
  
  <p>i am using RXTX library in my sample project for caller id, now am communicating with the serial ports of the system, am successfully read and write the data from the port.</p>
  
  <p>When phone is ringing, java program give output: ring, but when i pass command to modem for caller id that time output is : ERROR</p>
  
  <p>Below is the sample code, please help me to display caller id.</p>
  
  <p>And my modem is usb robotic modem</p>
  
  <pre><code>package rxtx.demo;
  
  import gnu.io.CommPort;
  import gnu.io.CommPortIdentifier;
  import gnu.io.SerialPort;
  
  import java.io.IOException;
  import java.io.InputStream;
  import java.io.OutputStream;
  
  public class Command {
  
      SerialPort serialPort;
  
      public Command() {
          super();
      }
  
      void connect(String portName) throws Exception {
          CommPortIdentifier portIdentifier = CommPortIdentifier.getPortIdentifier(portName);
          if (portIdentifier.isCurrentlyOwned()) {
              System.out.println("Error: Port is currently in use");
          } else {
              System.out.println("Connect 1/2");
              CommPort commPort = portIdentifier.open(this.getClass().getName(), 6000);
  
              if (commPort instanceof SerialPort) {
                  System.out.println("Connect 2/2");
                   serialPort = (SerialPort) commPort;
                  System.out.println("BaudRate: " + serialPort.getBaudRate());
                  System.out.println("DataBIts: " + serialPort.getDataBits());
                  System.out.println("StopBits: " + serialPort.getStopBits());
                  System.out.println("Parity: " + serialPort.getParity());
                  System.out.println("FlowControl: " + serialPort.getFlowControlMode());
                  serialPort.setSerialPortParams(4800, SerialPort.DATABITS_8, SerialPort.STOPBITS_1, SerialPort.PARITY_ODD);
                  //serialPort.setFlowControlMode(SerialPort.FLOWCONTROL_RTSCTS_IN);
                  System.out.println("BaudRate: " + serialPort.getBaudRate());
                  System.out.println("DataBIts: " + serialPort.getDataBits());
                  System.out.println("StopBits: " + serialPort.getStopBits());
                  System.out.println("Parity: " + serialPort.getParity());
                  System.out.println("FlowControl: " + serialPort.getFlowControlMode());
                  InputStream in = serialPort.getInputStream();
                  OutputStream out = serialPort.getOutputStream();
  
                  (new Thread(new SerialReader(in))).start();
                  (new Thread(new SerialWriter(out, in))).start();
  
                  //out.write("AT&amp;Zn?".getBytes());
                  //out.flush();
              } else {
                  System.out.println("Error: Only serial ports are handled by this example.");
              }
          }
      }
  
      /**
       *
       */
      public static class SerialReader implements Runnable {
  
          InputStream in;
  
          public SerialReader(InputStream in) {
              this.in = in;
          }
  
          public void run() {
              byte[] buffer = new byte[1024];
              int len = -1;
              try {
                  while ((len = this.in.read(buffer)) &gt; -1) {
                      //System.out.println("Received a signal.");
                      System.out.print(new String(buffer, 0, len));
                  }
              } catch (IOException e) {
                  e.printStackTrace();
              }
          }
      }
  
      /**
       *
       */
      public static class SerialWriter implements Runnable {
  
          OutputStream out;
          InputStream in;
  
          public SerialWriter(OutputStream out, InputStream in) {
              this.out = out;
              this.in = in;
          }
  
          public void run() {
              try {
  
  
                  byte[] array = {0x1B, 0x50, 0x0D, 0x0A};
                  while (true) {
                      //this.out.write("AT#CID=1".getBytes());
                      this.out.write("AT+GCI=B5".getBytes());
                      //this.out.write("AT+VCID=2".getBytes());
                      this.out.write("AT+VCID=1".getBytes());
  
                      this.out.write(new byte[]{0x1B, 0x50, 0x0D, 0x0A});
                      this.out.flush();
                      Thread.sleep(1000);
  
                      byte mBytesIn[] = new byte[1024];
                      //this.in.read(mBytesIn);
                      this.in.read(mBytesIn);
                      String value = new String(mBytesIn);
                      System.out.println("Response from Serial Device: " + value);
                  }
              } catch (IOException | InterruptedException e) {
                  e.printStackTrace();
              }
          }
      }
  
      public static void main(String[] args) {
          try {
              (new Command()).connect("COM6");
          } catch (Exception e) {
              // TODO Auto-generated catch block
              e.printStackTrace();
          }
      }
  }
  </code></pre>