gpt4 book ai didi

java - 处理来自 BT 芯片的周期性心跳消息

转载 作者:行者123 更新时间:2023-12-03 13:09:19 26 4
gpt4 key购买 nike

我对java很陌生,我有一个任务来实现心跳机制来监控BT芯片的活跃度。

BT芯片每5秒通过uart接口(interface)不断发送一条空消息(只有消息ID,没有内容),必须由java模块读取。如果未收到消息,则假设芯片上的固件已失效,需要重置,java 模块可以通过切换 GPIO 来实现。

负责从 uart 读取的模块被实现为扩展线程的类。我尝试使用 android.os.CountdownTimer,但它不起作用。它抛出这个错误:

AndroidRuntime: java.lang.RuntimeException: Can't create handler inside the thread that has not called Looper.prepare()

java中用于实现此类要求的最佳机制是什么?

/*Start timer for 5s for receiving heartbeat*/
mTimer=new CountDownTimer(5000,1000) {
@Override
public void onTick ( long l){
}

@Override
public void onFinish () {
Log.e(TAG, "Nothing received for 5s, missed heartbeat, reset BT chip");
try {
resetBTChip(false);
} catch (InterruptedException e) {
Log.e(TAG, "Can't reset the chip");
return;
}
}
};

mTimer.start();

/*Check the message and deal with timer*/
if(HEART_BEAT.getCode()==opcode) {
mTimer.cancel(); /*Restart the timer on heart-beat event*/
mTimer.start();
Log.e(TAG, "Got HEART BEAT");
continue;
} else {
Log.e(TAG, "Got Something else, handle the message");
mTimer.cancel(); /*Restart the timer on any event*/
mTimer.start();
}

最佳答案

你可以做一个可运行的和一个处理程序。处理程序有一个 postdelay 函数,允许您指定在运行 runnable 之前等待多长时间。他们还可以删除/取消计时器。这就是我以前做心跳的方式。如果倒计时不起作用,您可以尝试这样做。

所以runnable将负责重置功能。你会使用你当前的计时器。如果您再次收到心跳,您只需取消当前的可运行,并使用 postdelay 函数将其重新添加以重新启动计时器。

关于java - 处理来自 BT 芯片的周期性心跳消息,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41656080/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com