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

141 wiersze
3.7 KiB
Java

package com.bg7yoz.ft8cn.rigs;
import androidx.lifecycle.MutableLiveData;
import com.bg7yoz.ft8cn.Ft8Message;
import com.bg7yoz.ft8cn.connector.BaseRigConnector;
/**
* 电台的抽象类。
* @author BGY70Z
* @date 2023-03-20
*/
public abstract class BaseRig {
private long freq;//当前频率值
public MutableLiveData<Long> mutableFrequency = new MutableLiveData<>();
private int controlMode;//控制模式
private OnRigStateChanged onRigStateChanged;//当电台的一些状态发生变化的回调
private int civAddress;//CIV地址
private int baudRate;//波特率
private boolean isPttOn=false;//ptt是否打开
private BaseRigConnector connector = null;//连接电台的对象
public abstract boolean isConnected();//确认电台是否连接
public abstract void setUsbModeToRig();//设置电台上边带方式
public abstract void setFreqToRig();//设置电台频率
public abstract void onReceiveData(byte[] data);//当电台发送回数据的动作
public abstract void readFreqFromRig();//从电台读取频率
public abstract String getName();//获取电台的名字
private final OnConnectReceiveData onConnectReceiveData = new OnConnectReceiveData() {
@Override
public void onData(byte[] data) {
onReceiveData(data);
}
};
public void setPTT(boolean on) {//设置PTT打开或关闭
isPttOn=on;
if (onRigStateChanged != null) {
onRigStateChanged.onPttChanged(on);
}
}
// public void sendWaveData(float[] data) {
// //留给ICOM电台使用
// }
public void sendWaveData(Ft8Message message) {
//留给ICOM电台使用
}
public long getFreq() {
return freq;
}
public void setFreq(long freq) {
if (freq == this.freq) return;
if (freq == 0) return;
if (freq == -1) return;
mutableFrequency.postValue(freq);
this.freq = freq;
if (onRigStateChanged != null) {
onRigStateChanged.onFreqChanged(freq);
}
}
public void setConnector(BaseRigConnector connector) {
this.connector = connector;
this.connector.setOnRigStateChanged(onRigStateChanged);
this.connector.setOnConnectReceiveData(new OnConnectReceiveData() {
@Override
public void onData(byte[] data) {
onReceiveData(data);
}
});
}
public void setControlMode(int mode) {
controlMode = mode;
if (connector != null) {
connector.setControlMode(mode);
}
}
public int getControlMode() {
return controlMode;
}
public static String byteToStr(byte[] data) {
StringBuilder s = new StringBuilder();
for (int i = 0; i < data.length; i++) {
s.append(String.format("%02x ", data[i] & 0xff));
}
return s.toString();
}
public BaseRigConnector getConnector() {
return connector;
}
public OnRigStateChanged getOnRigStateChanged() {
return onRigStateChanged;
}
public void setOnRigStateChanged(OnRigStateChanged onRigStateChanged) {
this.onRigStateChanged = onRigStateChanged;
}
public int getCivAddress() {
return civAddress;
}
public void setCivAddress(int civAddress) {
this.civAddress = civAddress;
}
public int getBaudRate() {
return baudRate;
}
public void setBaudRate(int baudRate) {
this.baudRate = baudRate;
}
public boolean isPttOn() {
return isPttOn;
}
public boolean supportWaveOverCAT() {
return false;
}
public void onDisconnecting() {
}
}