Привет, я пытаюсь сделать программу для отправки кода 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", "");
}
}