FT8CN/ft8cn/app/src/main/java/com/bg7yoz/ft8cn/rigs/Flex6000Rig.java

146 wiersze
4.3 KiB
Java
Czysty Wina Historia

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

package com.bg7yoz.ft8cn.rigs;
import static com.bg7yoz.ft8cn.GeneralVariables.QUERY_FREQ_TIMEOUT;
import static com.bg7yoz.ft8cn.GeneralVariables.START_QUERY_FREQ_DELAY;
import android.os.Handler;
import android.util.Log;
import com.bg7yoz.ft8cn.database.ControlMode;
import java.util.Timer;
import java.util.TimerTask;
/**
* KENWOOD TS590,与YAESU3代指令接近命令结构使用Yaesu3Command,指令在KenwoodTK90RigConstant中。
*/
public class Flex6000Rig extends BaseRig {
private static final String TAG = "KenwoodTS590Rig";
private final StringBuilder buffer = new StringBuilder();
private Timer readFreqTimer = new Timer();
private TimerTask readTask() {
return new TimerTask() {
@Override
public void run() {
try {
if (!isConnected()) {
readFreqTimer.cancel();
readFreqTimer.purge();
readFreqTimer = null;
return;
}
readFreqFromRig();
} catch (Exception e) {
Log.e(TAG, "readFreq error:" + e.getMessage());
}
}
};
}
/**
* 清空缓存数据
*/
private void clearBufferData() {
buffer.setLength(0);
}
@Override
public void setPTT(boolean on) {
super.setPTT(on);
if (getConnector() != null) {
switch (getControlMode()) {
case ControlMode.CAT://以CIV指令
getConnector().setPttOn(Flex6000RigConstant.setPTTState(on));
break;
case ControlMode.RTS:
case ControlMode.DTR:
getConnector().setPttOn(on);
break;
}
}
}
@Override
public boolean isConnected() {
if (getConnector() == null) {
return false;
}
return getConnector().isConnected();
}
@Override
public void setUsbModeToRig() {
if (getConnector() != null) {
getConnector().sendData(Flex6000RigConstant.setOperationUSB_DIGI_Mode());
}
}
@Override
public void setFreqToRig() {
if (getConnector() != null) {
getConnector().sendData(Flex6000RigConstant.setOperationFreq(getFreq()));
}
}
@Override
public void onReceiveData(byte[] data) {
String s = new String(data);
if (!s.contains(";"))
{
buffer.append(s);
if (buffer.length()>1000) clearBufferData();
return;//说明数据还没接收完。
}else {
if (s.indexOf(";")>0){//说明接到结束的数据了,并且不是第一个字符是;
buffer.append(s.substring(0,s.indexOf(";")));
}
//开始分析数据
Flex6000Command flex6000Command = Flex6000Command.getCommand(buffer.toString());
clearBufferData();//清一下缓存
//要把剩下的数据放到缓存里
buffer.append(s.substring(s.indexOf(";")+1));
if (flex6000Command == null) {
return;
}
if (flex6000Command.getCommandID().equalsIgnoreCase("ZZFA")) {
long tempFreq=Flex6000Command.getFrequency(flex6000Command);
if (tempFreq!=0) {//如果tempFreq==0说明频率不正常
setFreq(Flex6000Command.getFrequency(flex6000Command));
}
}
}
}
@Override
public void readFreqFromRig() {
if (getConnector() != null) {
clearBufferData();//清空一下缓存
getConnector().sendData(Flex6000RigConstant.setReadOperationFreq());
}
}
@Override
public String getName() {
return "FLEX 6000 series";
}
public Flex6000Rig() {
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
if (getConnector()!=null){//切换VFO A
//getConnector().sendData(Flex6000RigConstant.setVFOMode());
}
}
},START_QUERY_FREQ_DELAY-500);
readFreqTimer.schedule(readTask(), START_QUERY_FREQ_DELAY,QUERY_FREQ_TIMEOUT);
}
}