package com.dev.bybb;
|
import gnu.io.SerialPort;
|
import gnu.io.UnsupportedCommOperationException;
|
|
import java.nio.ByteBuffer;
|
import java.nio.ByteOrder;
|
import java.util.Date;
|
|
import javax.swing.JOptionPane;
|
import javax.swing.JTextArea;
|
|
import org.apache.logging.log4j.Logger;
|
|
import sp_comm.CommSerialPort;
|
import sp_comm.SP_COMM;
|
import main.page_debug_inf;
|
|
import com.Com;
|
import com.Ecb_Aes;
|
import com.PlaySound;
|
import com.dev.bts.data.FBS9100_ComBase;
|
import com.dev.bts.data.FBS9100_DeviceInf;
|
import com.dev.fbs9600_mon.SPCommMon;
|
import com.dev.fbs9600_mon.SPCommMon_DFU;
|
|
public class CommBYBB implements Runnable/*, SerialPortEventListener*/ {
|
|
public static final int DAT_BUF_EthCpt1 = 20;
|
public static final int DAT_BUF_EthCpt2 = 21;
|
public static final int DAT_BUF_EthLcu1 = 22;
|
public static final int DAT_BUF_EthLcu2 = 23;
|
|
public static final int DAT_BUF_CanCpt1 = 24;
|
public static final int DAT_BUF_CanCpt2 = 25;
|
public static final int DAT_BUF_CanLcu1 = 26;
|
public static final int DAT_BUF_CanLcu2 = 27;
|
|
public static final int DAT_BUF_DEthLcu11 = 28;
|
public static final int DAT_BUF_DEthLcu12 = 29;
|
public static final int DAT_BUF_DEthLcu21 = 30;
|
public static final int DAT_BUF_DEthLcu22 = 31;
|
|
public static final int DAT_BUF_DCanLcu11 = 32;
|
public static final int DAT_BUF_DCanLcu12 = 33;
|
public static final int DAT_BUF_DCanLcu21 = 34;
|
public static final int DAT_BUF_DCanLcu22 = 35;
|
|
public static final int DAT_CAL_DATAS = 36;
|
public static final int DAT_CAL_ALARM = 37;
|
public static final int DAT_BUF_STATES = 38;
|
public static final int DAT_CAL_LED_STATE = 39;
|
|
public static final int CMD_ResetSystem = 0xA1;
|
public static final int CMD_SystemUpdate = 0xA2;
|
|
public static final int CMD_DeviceInf = 0xA5;
|
public static final int CMD_DeviceTaskInf = 0xA7;
|
public static final int CMD_SetSysParam = 0xA8;
|
public static final int CMD_GetSysParam = 0xA9;
|
/*********************************************************************/
|
|
private boolean CommThreadRunning = false;
|
private boolean dt_dfu_en = false;
|
Ecb_Aes my_aes = new Ecb_Aes();
|
private ByteBuffer CommRxBuffer = ByteBuffer.allocate(1500);
|
private ByteBuffer CommTxBuffer = ByteBuffer.allocate(1048);
|
|
public int comm_tx_cnt = 0;
|
public int comm_rx_cnt = 0;
|
|
private int comm_bautrate = 9600;
|
public int dt_target_addr = 0;
|
//--------------------------------------------------------//
|
//--------------------------------------------------------//
|
public int dev_stat_version = 0;
|
//--------------------------------------------------------//
|
private JTextArea dt_show_dfu_inf = new JTextArea();
|
private int dt_cmd = DAT_BUF_EthCpt1;
|
private int dt_usr_cmd = FBS9100_ComBase.CMD_NULL;
|
private ByteBuffer dt_datatobybb = ByteBuffer.allocate(0);
|
private int dt_cmd_cnt = DAT_BUF_EthCpt1;
|
//--------------------------------------------------------//
|
//--------------------------------------------------------//
|
public BYBB_Cmd m_BYBB_Cmd = new BYBB_Cmd();
|
public byte[] EthRevDataCpt1 = new byte[200];
|
public byte[] EthRevDataCpt2 = new byte[200];
|
public byte[] EthRevDataLCU1 = new byte[200];
|
public byte[] EthRevDataLCU2 = new byte[200];
|
public byte[] CANRevDataCpt1 = new byte[200];
|
public byte[] CANRevDataCpt2 = new byte[200];
|
public byte[] CANRevDataLCU1 = new byte[200];
|
public byte[] CANRevDataLCU2 = new byte[200];
|
public byte[] D_EthRevDataLCU11 = new byte[60];
|
public byte[] D_EthRevDataLCU12 = new byte[60];
|
public byte[] D_EthRevDataLCU21 = new byte[60];
|
public byte[] D_EthRevDataLCU22 = new byte[60];
|
public byte[] D_CANRevDataLCU11 = new byte[60];
|
public byte[] D_CANRevDataLCU12 = new byte[60];
|
public byte[] D_CANRevDataLCU21 = new byte[60];
|
public byte[] D_CANRevDataLCU22 = new byte[60];
|
|
public byte[] S_calRevData = new byte[200];
|
public byte[] S_calAlarmData = new byte[41];
|
|
public short[] S_DatCommState = new short[16];
|
public short[] S_LedStat = new short[2]; //0:red, 1:green;
|
|
public Bybb_Param m_bybb_param = new Bybb_Param();
|
public ByteBuffer m_TaskList = ByteBuffer.allocate(1024);
|
//--------------------------------------------------------//
|
private page_debug_inf dt_debug_inf;
|
private String dt_dfu_file = "";
|
public String dev_stat_version_Str = "";
|
private SP_COMM m_SP_COMM = null;
|
private SPCommMon_DFU m_SPCommDFU = null;
|
private Logger m_Log = null;
|
//--------------------------------------------------------//
|
|
public CommBYBB(int comm_type, int addr_t, int bitrate, page_debug_inf debug, Logger log) {
|
m_Log = log;
|
m_SP_COMM = new SP_COMM(comm_type, 12345, m_Log);
|
dt_target_addr = addr_t & 0x00FF;
|
comm_bautrate = bitrate;
|
dt_debug_inf = debug;
|
}
|
|
public void setCommBautrate(int bt_rate) {
|
if(SP_COMM.COMM_TYPE_Serial != m_SP_COMM.m_CommType) {
|
return;
|
}
|
|
try {
|
comm_bautrate = bt_rate;
|
m_SP_COMM.m_SP_Comm.serialPort.setSerialPortParams(comm_bautrate, SerialPort.DATABITS_8, SerialPort.STOPBITS_1,SerialPort.PARITY_NONE);
|
} catch (UnsupportedCommOperationException e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
}
|
}
|
|
public boolean OpenCommPort(String comm_name_or_ip, int bitrate_or_comm_port) {
|
boolean res = m_SP_COMM.openCommPort(comm_name_or_ip, bitrate_or_comm_port);
|
if(true == res) {
|
CommTxBuffer.order(ByteOrder.BIG_ENDIAN);
|
CommRxBuffer.order(ByteOrder.BIG_ENDIAN);
|
|
comm_tx_cnt = 0;
|
comm_rx_cnt = 0;
|
CommThreadRunning = true;
|
}
|
|
return res;
|
}
|
|
public byte[] getByteData(int dat_type) {
|
byte[] res = new byte[0];
|
switch(dat_type) {
|
case DAT_BUF_EthCpt1 : res = EthRevDataCpt1; break;
|
case DAT_BUF_EthCpt2 : res = EthRevDataCpt2; break;
|
case DAT_BUF_EthLcu1 : res = EthRevDataLCU1; break;
|
case DAT_BUF_EthLcu2 : res = EthRevDataLCU2; break;
|
|
case DAT_BUF_CanCpt1 : res = CANRevDataCpt1; break;
|
case DAT_BUF_CanCpt2 : res = CANRevDataCpt2; break;
|
case DAT_BUF_CanLcu1 : res = CANRevDataLCU1; break;
|
case DAT_BUF_CanLcu2 : res = CANRevDataLCU2; break;
|
|
case DAT_BUF_DEthLcu11 : res = D_EthRevDataLCU11; break;
|
case DAT_BUF_DEthLcu12 : res = D_EthRevDataLCU12; break;
|
case DAT_BUF_DEthLcu21 : res = D_EthRevDataLCU21; break;
|
case DAT_BUF_DEthLcu22 : res = D_EthRevDataLCU22; break;
|
|
case DAT_BUF_DCanLcu11 : res = D_CANRevDataLCU11; break;
|
case DAT_BUF_DCanLcu12 : res = D_CANRevDataLCU12; break;
|
case DAT_BUF_DCanLcu21 : res = D_CANRevDataLCU21; break;
|
case DAT_BUF_DCanLcu22 : res = D_CANRevDataLCU22; break;
|
|
case DAT_CAL_DATAS : res = S_calRevData; break;
|
case DAT_CAL_ALARM : res = S_calAlarmData; break;
|
}
|
|
return res;
|
}
|
|
public short[] getShortData(int dat_type) {
|
short[] res = new short[0];
|
switch(dat_type) {
|
case DAT_BUF_STATES : res = S_DatCommState; break;
|
case DAT_CAL_LED_STATE : res = S_LedStat; break;
|
default: break;
|
}
|
|
return res;
|
}
|
|
private byte[] makeCommTxData() {
|
if(FBS9100_ComBase.CMD_NULL == dt_usr_cmd) {
|
if(0 == dev_stat_version) {
|
dt_cmd = CMD_DeviceInf;
|
} else {
|
dt_cmd = dt_cmd_cnt;
|
}
|
dt_datatobybb = ByteBuffer.allocate(0);
|
} else {
|
dt_cmd = dt_usr_cmd;
|
dt_usr_cmd = FBS9100_ComBase.CMD_NULL;
|
}
|
|
ByteBuffer buf_t = BYBB_ComBuf.makeCommBuf(255, dt_cmd, dt_datatobybb, false);
|
|
//byte[] plain_tx_t = new byte[buf_t.limit()];
|
byte[] cipher_tx_t = new byte[buf_t.limit()];
|
buf_t.get(cipher_tx_t);
|
|
//my_aes.ecb_encrypt(plain_tx_t, cipher_tx_t, plain_tx_t.length);
|
|
//System.out.println(ComFn.bytesToHexString(plain_tx_t, plain_tx_t.length));
|
//System.out.println("TX:" + ComFn.bytesToHexString(cipher_tx_t, cipher_tx_t.length));
|
|
return cipher_tx_t;
|
}
|
|
public boolean tr_Msg(ByteBuffer bbf_tx, ByteBuffer bbf_rx, boolean showdat) {
|
if(++comm_tx_cnt > Com.CNT_MAX) {
|
comm_tx_cnt = 0;
|
}
|
return m_SP_COMM.tr_Msg(bbf_tx, bbf_rx, CommSerialPort.mutycomm_Type_Samd09, dt_debug_inf, showdat);
|
}
|
|
public void exitCommPortThread() {
|
CommThreadRunning = false;
|
if(null != m_SPCommDFU) {
|
m_SPCommDFU.setDFUCommState(false, false);
|
}
|
}
|
|
private void closeCommPort() {
|
m_SP_COMM.closeCommPort();
|
}
|
|
public void setReadDataCmd_Num(int cmd_num) {
|
dt_cmd_cnt = cmd_num;
|
}
|
|
public void setCommCmd(int cmd, ByteBuffer data_buf) {
|
dt_usr_cmd = cmd;
|
dt_datatobybb = data_buf;
|
}
|
|
public void setCommCmd_DFU(boolean dfu_en, String dfu_file, JTextArea show_area) {
|
dt_dfu_en = dfu_en;
|
dt_dfu_file = dfu_file;
|
dt_show_dfu_inf = show_area;
|
if(true == dt_dfu_en) {
|
dt_usr_cmd = CommBYBB.CMD_SystemUpdate;
|
dt_datatobybb = ByteBuffer.allocate(0);
|
} else {
|
if(null != m_SPCommDFU) {
|
m_SPCommDFU.setDFUCommState(false, false);
|
}
|
}
|
}
|
|
public void setCommCmdAck(int ack_t) {
|
String wav_f = "6133.wav";
|
if(ack_t%2 == 0) {
|
wav_f = "4577.wav";
|
}
|
if(ack_t > 0) {
|
new PlaySound(wav_f);
|
}
|
}
|
|
public void run() {
|
while(true == CommThreadRunning) {
|
try {
|
if(false == dt_dfu_en) {
|
//sendMsg(makeCommTxData());
|
//readMsg(CommRxBuffer);
|
CommTxBuffer.clear();
|
CommTxBuffer.put(makeCommTxData());
|
CommTxBuffer.flip();
|
if(true == tr_Msg(CommTxBuffer, CommRxBuffer, true)) {
|
byte[] cipher_buf = new byte[CommRxBuffer.limit()];
|
//byte[] plain_buf = new byte[CommRxBuffer.limit()];
|
CommRxBuffer.get(cipher_buf);
|
//my_aes.ecb_decrypt(cipher_buf, plain_buf, cipher_buf.length);
|
//System.out.println("RX:" + ComFn.bytesToHexString(cipher_buf, cipher_buf.length));
|
//System.out.println(ComFn.bytesToHexString(plain_buf, plain_buf.length));
|
getDataFromCommBuf(cipher_buf);
|
}
|
|
Thread.sleep(200);
|
} else {
|
try {
|
setCommCmd(CommBYBB.CMD_SystemUpdate, ByteBuffer.allocate(0));
|
CommTxBuffer.clear();
|
CommTxBuffer.put(makeCommTxData());
|
CommTxBuffer.flip();
|
tr_Msg(CommTxBuffer, CommRxBuffer, true);
|
Thread.sleep(100);
|
} catch (InterruptedException e2) {
|
// TODO Auto-generated catch block
|
e2.printStackTrace();
|
}
|
|
String dfu_text_inf = "";
|
m_SPCommDFU = new SPCommMon_DFU(m_SP_COMM,
|
SPCommMon.DEV_TYPE_MON_SAMD09,
|
dt_target_addr,
|
true,
|
dt_show_dfu_inf,
|
dt_debug_inf);
|
m_SPCommDFU.runDFU(dt_dfu_file, dfu_text_inf);
|
|
dt_dfu_en = false;
|
setCommCmd(FBS9100_ComBase.CMD_NULL, ByteBuffer.allocate(0));
|
//-----------------------------------------------------------------------------//
|
dfu_text_inf = dt_show_dfu_inf.getText();
|
dt_show_dfu_inf.setText(dfu_text_inf + "DFU Process Stopped!\n");
|
//-----------------------------------------------------------------------------//
|
//-----------------------------------------------------------------------------//
|
}
|
} catch (Exception e) {
|
// TODO Auto-generated catch block
|
e.printStackTrace();
|
exitCommPortThread();
|
JOptionPane.showMessageDialog(null, "BYBB ÉÏλ»úͨÐÅ¿ÚÒì³£: " + e.getMessage());
|
}
|
}
|
/******************************************/
|
closeCommPort();
|
/******************************************/
|
dt_debug_inf.addDebugInf(Com.get_DTF(new Date(), Com.DTF_YMDhms_S)
|
+ " CommPort is quit, Dev Id: BYBB\n");
|
/******************************************/
|
}
|
/*********************************************************************************************/
|
/*********************************************************************************************/
|
/*********************************************************************************************/
|
/*********************************************************************************************/
|
public String getDataFromCommBuf(final byte[] bytes)
|
{
|
ByteBuffer bf = ByteBuffer.allocate(bytes.length);
|
bf.order(ByteOrder.LITTLE_ENDIAN);
|
bf.put(bytes);
|
bf.flip();
|
|
String msg = "--";
|
if(true == m_BYBB_Cmd.putByteBuffer(bf)) {
|
switch(m_BYBB_Cmd.CMD) {
|
case DAT_BUF_EthCpt1 : bf.get(EthRevDataCpt1); break;
|
case DAT_BUF_EthCpt2 : bf.get(EthRevDataCpt2); break;
|
case DAT_BUF_EthLcu1 : bf.get(EthRevDataLCU1); break;
|
case DAT_BUF_EthLcu2 : bf.get(EthRevDataLCU2); break;
|
|
case DAT_BUF_CanCpt1 : bf.get(CANRevDataCpt1); break;
|
case DAT_BUF_CanCpt2 : bf.get(CANRevDataCpt2); break;
|
case DAT_BUF_CanLcu1 : bf.get(CANRevDataLCU1); break;
|
case DAT_BUF_CanLcu2 : bf.get(CANRevDataLCU2); break;
|
|
case DAT_BUF_DEthLcu11 : bf.get(D_EthRevDataLCU11); break;
|
case DAT_BUF_DEthLcu12 : bf.get(D_EthRevDataLCU12); break;
|
case DAT_BUF_DEthLcu21 : bf.get(D_EthRevDataLCU21); break;
|
case DAT_BUF_DEthLcu22 : bf.get(D_EthRevDataLCU22); break;
|
|
case DAT_BUF_DCanLcu11 : bf.get(D_CANRevDataLCU11); break;
|
case DAT_BUF_DCanLcu12 : bf.get(D_CANRevDataLCU12); break;
|
case DAT_BUF_DCanLcu21 : bf.get(D_CANRevDataLCU21); break;
|
case DAT_BUF_DCanLcu22 : bf.get(D_CANRevDataLCU22); break;
|
|
case DAT_CAL_DATAS : bf.get(S_calRevData); break;
|
case DAT_CAL_ALARM : bf.get(S_calAlarmData); break;
|
|
case DAT_BUF_STATES : {
|
for(int n=0; n<S_DatCommState.length; n++) {
|
S_DatCommState[n] = bf.getShort();
|
}
|
}
|
break;
|
|
case DAT_CAL_LED_STATE : {
|
for(int n=0; n<S_LedStat.length; n++) {
|
S_LedStat[n] = bf.getShort();
|
}
|
}
|
break;
|
|
case CMD_DeviceInf : {
|
FBS9100_DeviceInf deviceinf = new FBS9100_DeviceInf();
|
if(true == deviceinf.putByteBuffer(bf)) {
|
//int m_BTSDevSoftType = deviceinf.DeviceType;
|
dev_stat_version = deviceinf.SoftwareVersion;
|
dev_stat_version_Str = String.format("V%d.%02d.%02d",
|
deviceinf.DeviceVersion,
|
deviceinf.HardwareVersion,
|
deviceinf.SoftwareVersion);
|
//System.out.println(dev_stat_version_Str);
|
msg = "Get CMD_GetDeviceInf From bybb OK: " + dev_stat_version_Str;
|
}
|
}
|
break;
|
|
case CMD_DeviceTaskInf : {
|
m_TaskList = (bf);
|
msg = "Get CMD_GetDeviceTaskInf From bybb OK!!!";
|
}
|
break;
|
|
case CMD_GetSysParam : {
|
m_bybb_param.putByteBuffer(bf);
|
m_bybb_param.update_page_show_en = true;
|
msg = "Get CMD_GetSysParam From bybb OK!!!";
|
}
|
break;
|
|
case CMD_SetSysParam : {
|
if(0 == m_BYBB_Cmd.RES_Index) {
|
m_bybb_param.write_parm_res = true;
|
}
|
setCommCmd(CommBYBB.CMD_GetSysParam, ByteBuffer.allocate(0));
|
msg = "Get CMD_SetSysParam From bybb OK!!!";
|
}
|
break;
|
|
case CMD_ResetSystem : {
|
m_bybb_param.resboot_op_res = true;
|
msg = "Get CMD_ResetSystem From bybb OK!!!";
|
}
|
break;
|
|
default : break;
|
}
|
|
if(++comm_rx_cnt > Com.CNT_MAX) {
|
comm_rx_cnt = 0;
|
}
|
}
|
return msg;
|
}
|
/*********************************************************************************************/
|
}
|