我们正在尝试一系列新平板电脑,我们尝试的每一款平板电脑都存在 RN4678 板传输速率慢的问题。我们目前使用的是联想 M10 FHD Plus。我们尝试了一些,例如台电 M40S、诺基亚 T20 和三星 Galaxy Tab A8。前两者的传输率很糟糕,而后者还可以,但并不理想。我们无法使用 Lenovo M10 Plus 第三代,因为按钮太靠近角落,无法与我们的平板电脑支架一起使用。
这是我的代码:
public void SendMessage(BluetoothSocket socket, String msg) {
OutputStream outStream;
try {
outStream = BluetoothConnectionService.outputStream;
outStream.write("S".getBytes());
Thread.sleep(4000);
processThread = true;
mApp.running = true;
BluetoothSocketListener bsl = new BluetoothSocketListener(socket,
CollectingDetail.this);
Thread messageListener = new Thread(bsl);
messageListener.start();
timer = new CounterClass(remaingTime, 1000);
timer.start();
bt_stop.setText("Stop");
IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_ACL_DISCONNECT_REQUESTED);
filter.addAction(BluetoothDevice.ACTION_ACL_DISCONNECTED);
registerReceiver(bluetoothReceiver, filter);
bluetoothReceiver.setRegistered(true);
} catch (IOException | InterruptedException e) {
Log.e("BLUETOOTH_COMMS", e.getMessage());
connectSocket();
}
}
public static class BluetoothSocketListener implements Runnable {
private final WeakReference<CollectingDetail> wrActivity;
private BluetoothSocket socket;
public BluetoothSocketListener(BluetoothSocket socket, CollectingDetail collectingDetail) {
this.socket = socket;
wrActivity = new WeakReference<CollectingDetail>(collectingDetail);
}
@Override
public void run() {
final CollectingDetail activity = wrActivity.get();
if (activity != null) {
activity.inStream = null;
if (!Thread.currentThread().isInterrupted()) {
int bufferSize = 512;
byte[] buffer = new byte[bufferSize];
Log.i("Bluetooth bytes", new String(buffer));
activity.inStream = BluetoothConnectionService.inputStream;
int availableBytes;
int bytesRead = -1;
String message = "";
while (activity.processThread) {
message = "";
try {
availableBytes = activity.inStream.available();
if (availableBytes > 0) {
bytesRead = activity.inStream.read(buffer);
if (bytesRead != -1 && bytesRead < bufferSize) {
message = new String(buffer, 0, bytesRead);
if (activity.mainHandler != null) {
activity.mainHandler.post(new MessagePoster(message, activity));
}
}
}
} catch (IOException e) {
Log.e("BLUETOOTH_COMMS", "Error reading bytes");
try {
socket.close();
} catch (IOException e1) {
Log.e("BLUETOOTH_COMMS", "Could not close socket");
}
activity.processThread = false;
}
}
}
}
}
}
public void seprateData(String message) {
try {
message = message.replaceAll("(\\r\\n|\\n|\\r)", ",");
String[] a = message.split(",");
boolean goodData = false;
for (int i = 0; i < a.length; i++) {
final String data = a[i];
if (data.length() > 0 && !data.equals(" ")) {
if (data.length() >= 10 && data.startsWith("5A")) {
al_sepratedMessageList.add(data);
goodData = true;
}
}
}
if (goodData) {
calculation();
if (ConnectThrough.equalsIgnoreCase("usb")) {
UsbConnectionSerivce.sendMessage("K");
} else {
BluetoothConnectionService.sendMessage(socket, "K");
}
}
} catch (Exception e) {
Log.e("BiSym", "Error Parsing BiSym Data");
}
}
有什么方法可以在不改变固件的情况下提高传输速率?似乎其他人也面临着类似的问题,但没有一个答案有真正的解决方案。你能帮我一下吗?谢谢。
我担心这可能无法通过软件解决,并且可能是 BT 硬件或固件的问题。我该如何与老板沟通这件事?
我担心这可能无法通过软件解决,并且可能是 BT 硬件或固件的问题。我该如何与老板沟通此事?
区别在于信号过滤的质量,更好的过滤器,更窄的带宽,意味着更低的信噪比。较低的信噪比意味着更快的传输。
更好的模拟滤波器,意味着更多的组件以及稍微更高的成本和损耗,但是,由于蓝牙的宽带特性,大多数模拟滤波器只能过滤带外信号(AM/FM/电视广播公司附近)。
除了模拟滤波器之外,还对信号应用数字滤波器来缩小频带内的带宽,这种技术损失很小,但需要芯片中包含更多的处理能力,更多的晶体管,更高的成本。
滤波器的阶数和类型FIR或IIR决定了滤波器的特性。
大多数设计师会最大限度地降低成本以满足最低规格,有些设计师会平衡成本与性能并走得更远,你永远不知道。
你告诉你的老板,更好的平台执行的数字过滤远远超出了蓝牙规范的要求。
我刚刚测试了台电M40 Plus,没有这个问题。
有些事情让我相信这是紫光展锐蓝牙堆栈的问题。台电M40 Plus有联发科,没有这个问题。
编辑:还在搭载 MediaTek Helio G80 的 Lenovo M10 Plus 第三代上进行了测试,没有问题。如果我们必须使用它,我们可能需要一个新的平板电脑支架。
作为更新,我将我们的应用程序更新为针对 Android 13,看来延迟问题已经消失。我使用配备 Unisoc Tiger T606 处理器的台电 T40HD 平板电脑对其进行了测试,它似乎运行完美。我与之前针对 Android 12 的软件版本进行了比较,旧版本中存在延迟,但新版本中没有。显然,Android 13 中的新蓝牙堆栈对 Unisoc 处理器有更好的支持。