Comment écrire sur le port série pour obtenir l'identification de l'appelant du modem en java?


Je travaille sur l'identification de l'appelant en utilisant le langage java. J'ai un modem robotique USB, et ce modem est connecté à la ligne téléphonique. Je veux obtenir l'identification de l'appelant de ce modem lorsque le téléphone sonne.

J'utilise la bibliothèque RXTX dans mon exemple de projet pour l'identification de l'appelant, je communique maintenant avec les ports série du système, je lis et écris avec succès les données à partir du port.

Lorsque le téléphone sonne, le programme java donne output: ring, mais lorsque je passe la commande au modem pour l'identification de l'appelant, cela la sortie de temps est: ERREUR

Ci-dessous est l'exemple de code, veuillez m'aider à afficher l'identification de l'appelant.

Et mon modem est un modem robotique usb

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&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)) > -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();
        }
    }
}
Author: gurjeet singh, 2016-05-25

1 answers

Assurez-vous d'envoyer la commande AT pour initialiser le modem et également AT+VCID=1 (ou son équivalent) pour activer la fonction d'identification de l'appelant.

Il est également utile de confirmer l'existence d'un tel service auprès de votre compagnie de téléphone.

 0
Author: Amir No-Family, 2017-04-17 19:02:09