отправить USSD с AT-командами в Java - PullRequest
1 голос
/ 06 августа 2020

Привет, я пытаюсь сделать программу для отправки кода ussd в модемный пул, и я надеюсь, что есть ответ от модема. Я использую AT-команды для отправки кода ussd, я пытался написать, но могу, но не для ussd, я искал его, но безрезультатно ..

Я искал, но не многие используют java, и это трудно понять, вы можете помочь мне с моей проблемой, извините, мой язык не очень хорош в английском sh

// library
import com.fazecast.jSerialComm.SerialPort;
import com.fazecast.jSerialComm.SerialPortDataListener;
import com.fazecast.jSerialComm.SerialPortEvent;
import com.google.common.base.Splitter;
import java.util.logging.Logger;


public class Gsm {
    private SerialPort serialPort;
    private Logger logger;
    private String result;

    public boolean initialize(String port) {
        logger = Logger.getLogger("SP1");
        logger.info("Application start");
        serialPort = SerialPort.getCommPort(port);

        if (serialPort.openPort()) {
            logger.info("Port \"" + serialPort.getSystemPortName() + "\" was opened");
            serialPort.addDataListener(new SerialPortDataListener() {
                @Override
                public int getListeningEvents() {
                    return SerialPort.LISTENING_EVENT_DATA_AVAILABLE;
                }
                @Override
                public void serialEvent(SerialPortEvent event) {
                    logger.info("receiving data");
                    byte[] msg = new byte[serialPort.bytesAvailable()];
                    serialPort.readBytes(msg, msg.length);
                    String res = new String(msg);
                    result = res;
                }
            });
            return true;
        } else {
            logger.warning("Failed to open port \"" + serialPort.getSystemPortName() + "\", application stopped.");
            return false;
        }
    }

    /**
     * Execute USSD command
     *
     * @param ussd : the USSD command
     * @return String contains the response
     */
    public String executeUSSD(String ussd) {
        String cmd = "AT+CUSD=1,\"" + ussd + "\",15\r\n";
        result = "";
        serialPort.writeBytes((cmd).getBytes(), cmd.getBytes().length);
        while (result.equals("")) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        if (result.contains("ERROR")) {
            return result;
        }
        while (result.contains("OK")) {
            try {
                Thread.sleep(100);
            } catch (InterruptedException e) {
                e.printStackTrace();
            }
        }
        String str = "";
        if (result.contains("CUSD")) {
            str = result.substring(12, result.length() - 6);
            //String[] arr = str.split("(?<=\\G....)");
            Iterable<String> arr = Splitter.fixedLength(4).split(str);
            str = "";
            for (String s : arr) {
                int hexVal = Integer.parseInt(s, 16);
                str += (char) hexVal;
            }
        }
        return str;
    }
}



import gnu.io.CommPortIdentifier;
import gnu.io.NRSerialPort;
import gnu.io.PortInUseException;
import gnu.io.SerialPort;

import java.util.Enumeration;

public class Main {

    static Enumeration portList;
    static CommPortIdentifier portId;
    static SerialPort serialPort;

    public static void main(String args[]) throws Exception {
        // Check Available ports
        String port = "";
        for(String s:NRSerialPort.getAvailableSerialPorts()){
            System.out.println("Availible port: "+s);
            port=s;
        }
        int baudRate = 115200;
        NRSerialPort serial = new NRSerialPort(port, baudRate);
        System.out.println("Serial Connect : " + serial.connect());
        System.out.println("Serial is Connected : " + serial.isConnected());
        System.out.println("=============================================");

        // send USSD
        Gsm gsmUSSD = new Gsm();
        System.out.println(gsmUSSD.initialize("COM14"));
        System.out.println(gsmUSSD.executeUSSD("*363#"));
        // send SMS
        //USBModem gsmSMS = new USBModem("COM14", 115200);
        //gsmSMS.sendSMS("+xxxxxx", "");

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...