Программисты JAVA общаются здесь
Anonymous
FelHR85/Usb Serial как мне ответить на запрос?
Сообщение
Anonymous » 29 окт 2024, 14:00
Я использую терминал Galileosky. Терминал отправляет данные на планшет Android через RS-485. Данные с терминала доходят до планшета, но как отправить ответ я не понимаю. Они используют метод записи для отправки сообщения, но оно не доходит до терминала. Вот мой код:
Код: Выделить всё
package usb;
import android.app.PendingIntent;
import android.content.Intent;
import android.content.Context;
import android.hardware.usb.UsbDevice;
import android.hardware.usb.UsbDeviceConnection;
import android.hardware.usb.UsbManager;
import com.felhr.usbserial.UsbSerialDevice;
import com.felhr.usbserial.UsbSerialInterface;
import org.json.JSONArray;
import org.json.JSONException;
import org.json.JSONObject;
import java.util.HashMap;
import android.widget.Toast;
public class UsbSerialManager {
private UsbManager usbManager;
private UsbSerialDevice serialPort;
private PendingIntent permissionIntent;
private Context context;
private UsbDevice device;
private boolean isTransmitting = false;
private UsbReadCallback callbackFunction;
public UsbSerialManager(Context context) {
this.context = context;
usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE);
setPermissionIntent();
}
private void setPermissionIntent() {
Intent intent = new Intent("usb.USB_PERMISSION");
permissionIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_MUTABLE);
}
public void requestPermission() {
usbManager.requestPermission(device, permissionIntent);
}
public void getDevicesJson(Context context, UsbDevicesCallback callback) {
HashMap deviceList = usbManager.getDeviceList();
if (deviceList.isEmpty()) {
callback.onResult("");
return;
}
JSONArray jsonArray = new JSONArray();
try {
for (UsbDevice device : deviceList.values()) {
JSONObject jsonObject = new JSONObject();
jsonObject.put("deviceName", device.getDeviceName());
jsonObject.put("vendorId", device.getVendorId());
jsonObject.put("productId", device.getProductId());
jsonObject.put("version", device.getVersion());
jsonObject.put("manufacturerName", device.getManufacturerName());
jsonObject.put("productName", device.getProductName());
jsonArray.put(jsonObject);
}
callback.onResult(jsonArray.toString());
} catch (JSONException e) {
e.printStackTrace();
callback.onResult("");
}
}
public void chooseDevice(int vendorId, int productId) {
HashMap deviceList = usbManager.getDeviceList();
for (UsbDevice d : deviceList.values()) {
if (d.getVendorId() == vendorId && d.getProductId() == productId) {
device = d;
break;
}
}
}
public void setupUsbConnection() {
if (device != null) {
UsbDeviceConnection connection = usbManager.openDevice(device);
serialPort = UsbSerialDevice.createUsbSerialDevice(device, connection);
if (serialPort != null) {
serialPort.open();
serialPort.setBaudRate(19200);
serialPort.setDataBits(UsbSerialInterface.DATA_BITS_8);
serialPort.setStopBits(UsbSerialInterface.STOP_BITS_1);
serialPort.setParity(UsbSerialInterface.PARITY_NONE);
}
} else {
System.err.println("Device not found");
}
}
public void readSerialPort(UsbReadCallback callbackFunction) {
// Привязываем переданный callback
this.callbackFunction = callbackFunction;
if (serialPort != null) {
// Читаем данные с порта
serialPort.read(mCallback);
}
}
public final UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() {
@Override
public void onReceivedData(byte[] data) {
String receivedDataHex = bytesToHex(data);
if (callbackFunction != null) {
callbackFunction.onReceived(receivedDataHex);
}
}
};
private String bytesToHex(byte[] bytes) {
StringBuilder hexString = new StringBuilder();
for (byte b : bytes) {
String hex = Integer.toHexString(b & 0xFF);
if (hex.length() == 1) {
hexString.append('0');
}
hexString.append(hex);
}
return hexString.toString();
}
public void close() {
if (serialPort != null) {
try {
if (isTransmitting()) {
waitForTransmissionToComplete();
}
serialPort.close();
} catch (InterruptedException e) {
System.err.println("close() " + e);
} finally {
serialPort = null;
}
}
}
private boolean isTransmitting() {
return isTransmitting;
}
private void waitForTransmissionToComplete() throws InterruptedException {
while (isTransmitting()) {
Thread.sleep(50);
}
}
public void sendMessage(String message) {
if (serialPort != null && message != null) {
byte[] data = message.getBytes();
isTransmitting = true;
serialPort.write(data);
isTransmitting = false;
} else {
System.err.println("Serial port is not initialized or message is null");
}
}
public interface UsbDevicesCallback {
void onResult(String devicesJson);
}
public interface UsbReadCallback {
void onReceived(String data);
}
}
Именно в функции onReceivedData я хочу отправить ответ при поступлении сообщения.
Подробнее здесь:
https://stackoverflow.com/questions/791 ... -a-request
1730199617
Anonymous
Я использую терминал Galileosky. Терминал отправляет данные на планшет Android через RS-485. Данные с терминала доходят до планшета, но как отправить ответ я не понимаю. Они используют метод записи для отправки сообщения, но оно не доходит до терминала. Вот мой код: [code]package usb; import android.app.PendingIntent; import android.content.Intent; import android.content.Context; import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbDeviceConnection; import android.hardware.usb.UsbManager; import com.felhr.usbserial.UsbSerialDevice; import com.felhr.usbserial.UsbSerialInterface; import org.json.JSONArray; import org.json.JSONException; import org.json.JSONObject; import java.util.HashMap; import android.widget.Toast; public class UsbSerialManager { private UsbManager usbManager; private UsbSerialDevice serialPort; private PendingIntent permissionIntent; private Context context; private UsbDevice device; private boolean isTransmitting = false; private UsbReadCallback callbackFunction; public UsbSerialManager(Context context) { this.context = context; usbManager = (UsbManager) context.getSystemService(Context.USB_SERVICE); setPermissionIntent(); } private void setPermissionIntent() { Intent intent = new Intent("usb.USB_PERMISSION"); permissionIntent = PendingIntent.getBroadcast(context, 0, intent, PendingIntent.FLAG_MUTABLE); } public void requestPermission() { usbManager.requestPermission(device, permissionIntent); } public void getDevicesJson(Context context, UsbDevicesCallback callback) { HashMap deviceList = usbManager.getDeviceList(); if (deviceList.isEmpty()) { callback.onResult(""); return; } JSONArray jsonArray = new JSONArray(); try { for (UsbDevice device : deviceList.values()) { JSONObject jsonObject = new JSONObject(); jsonObject.put("deviceName", device.getDeviceName()); jsonObject.put("vendorId", device.getVendorId()); jsonObject.put("productId", device.getProductId()); jsonObject.put("version", device.getVersion()); jsonObject.put("manufacturerName", device.getManufacturerName()); jsonObject.put("productName", device.getProductName()); jsonArray.put(jsonObject); } callback.onResult(jsonArray.toString()); } catch (JSONException e) { e.printStackTrace(); callback.onResult(""); } } public void chooseDevice(int vendorId, int productId) { HashMap deviceList = usbManager.getDeviceList(); for (UsbDevice d : deviceList.values()) { if (d.getVendorId() == vendorId && d.getProductId() == productId) { device = d; break; } } } public void setupUsbConnection() { if (device != null) { UsbDeviceConnection connection = usbManager.openDevice(device); serialPort = UsbSerialDevice.createUsbSerialDevice(device, connection); if (serialPort != null) { serialPort.open(); serialPort.setBaudRate(19200); serialPort.setDataBits(UsbSerialInterface.DATA_BITS_8); serialPort.setStopBits(UsbSerialInterface.STOP_BITS_1); serialPort.setParity(UsbSerialInterface.PARITY_NONE); } } else { System.err.println("Device not found"); } } public void readSerialPort(UsbReadCallback callbackFunction) { // Привязываем переданный callback this.callbackFunction = callbackFunction; if (serialPort != null) { // Читаем данные с порта serialPort.read(mCallback); } } public final UsbSerialInterface.UsbReadCallback mCallback = new UsbSerialInterface.UsbReadCallback() { @Override public void onReceivedData(byte[] data) { String receivedDataHex = bytesToHex(data); if (callbackFunction != null) { callbackFunction.onReceived(receivedDataHex); } } }; private String bytesToHex(byte[] bytes) { StringBuilder hexString = new StringBuilder(); for (byte b : bytes) { String hex = Integer.toHexString(b & 0xFF); if (hex.length() == 1) { hexString.append('0'); } hexString.append(hex); } return hexString.toString(); } public void close() { if (serialPort != null) { try { if (isTransmitting()) { waitForTransmissionToComplete(); } serialPort.close(); } catch (InterruptedException e) { System.err.println("close() " + e); } finally { serialPort = null; } } } private boolean isTransmitting() { return isTransmitting; } private void waitForTransmissionToComplete() throws InterruptedException { while (isTransmitting()) { Thread.sleep(50); } } public void sendMessage(String message) { if (serialPort != null && message != null) { byte[] data = message.getBytes(); isTransmitting = true; serialPort.write(data); isTransmitting = false; } else { System.err.println("Serial port is not initialized or message is null"); } } public interface UsbDevicesCallback { void onResult(String devicesJson); } public interface UsbReadCallback { void onReceived(String data); } } [/code] Именно в функции onReceivedData я хочу отправить ответ при поступлении сообщения. Подробнее здесь: [url]https://stackoverflow.com/questions/79122011/felhr85-usb-serial-how-do-i-respond-to-a-request[/url]
FelHR85/Usb Serial как мне ответить на запрос?
Anonymous »
24 окт 2024, 16:00 » в форуме
JAVA
Я использую терминал Galileosky. Терминал отправляет данные на планшет Android через RS-485. Данные с терминала доходят до планшета, но как отправить ответ я не понимаю. Они используют метод записи для отправки сообщения, но оно не доходит до...
0 Ответы
11 Просмотры
Последнее сообщение Anonymous
24 окт 2024, 16:00
FelHR85/Usb Serial как мне ответить на запрос?
Anonymous »
29 окт 2024, 16:13 » в форуме
JAVA
Я использую терминал Galileosky. Терминал отправляет данные на планшет Android через RS-485. Данные с терминала доходят до планшета, но как отправить ответ я не понимаю. Они используют метод записи для отправки сообщения, но оно не доходит до...
0 Ответы
11 Просмотры
Последнее сообщение Anonymous
29 окт 2024, 16:13
0 Ответы
29 Просмотры
Последнее сообщение Anonymous
16 ноя 2024, 17:59
0 Ответы
27 Просмотры
Последнее сообщение Anonymous
16 май 2024, 08:23
Чип USB-Serial FTDI не работает должным образом
Anonymous »
29 июн 2024, 18:02 » в форуме
Linux
Недавно я купил чип FTDI на AliExpress. Однако каждый раз, когда я пытаюсь использовать его в Linux с помощью команды picocom, мне выдается много неизвестных символов. Я пытался изменить скорость передачи данных, пытался исправить проводку:...
0 Ответы
20 Просмотры
Последнее сообщение Anonymous
29 июн 2024, 18:02